1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-13 23:03:32 +00:00

Auth/PM-6198 - Registration with Email Verification - Call email clicked endpoint (#10139)

* PM-6198 - Majority of client work done; WIP on registration finish comp

* PM-6198 - Registration Finish - Add registerVerificationEmailClicked logic

* PM-6198 - RegistrationLinkExpired component; added translations on other clients just in case we use the component on other clients in the future.

* PM-6198 - Clean up comment
This commit is contained in:
Jared Snider
2024-07-18 17:37:22 -04:00
committed by GitHub
parent 158da35008
commit 56f5dba444
12 changed files with 264 additions and 17 deletions

View File

@@ -1,5 +1,6 @@
import { RegisterFinishRequest } from "../models/request/registration/register-finish.request";
import { RegisterSendVerificationEmailRequest } from "../models/request/registration/register-send-verification-email.request";
import { RegisterVerificationEmailClickedRequest } from "../models/request/registration/register-verification-email-clicked.request";
import { Verification } from "../types/verification";
export abstract class AccountApiService {
@@ -26,6 +27,19 @@ export abstract class AccountApiService {
request: RegisterSendVerificationEmailRequest,
): Promise<null | string>;
/**
* Raises a server event to identify when users click the email verification link and land
* on the registration finish screen.
*
* @param request - The request object containing the email verification token and the
* user's email address (which is required to validate the token)
* @returns A promise that resolves when the event is logged on the server succcessfully or a bad
* request if the token is invalid for any reason.
*/
abstract registerVerificationEmailClicked(
request: RegisterVerificationEmailClickedRequest,
): Promise<void>;
/**
* Completes the registration process.
*

View File

@@ -0,0 +1,6 @@
export class RegisterVerificationEmailClickedRequest {
constructor(
public email: string,
public emailVerificationToken: string,
) {}
}

View File

@@ -9,6 +9,7 @@ import { InternalAccountService } from "../abstractions/account.service";
import { UserVerificationService } from "../abstractions/user-verification/user-verification.service.abstraction";
import { RegisterFinishRequest } from "../models/request/registration/register-finish.request";
import { RegisterSendVerificationEmailRequest } from "../models/request/registration/register-send-verification-email.request";
import { RegisterVerificationEmailClickedRequest } from "../models/request/registration/register-verification-email-clicked.request";
import { Verification } from "../types/verification";
export class AccountApiServiceImplementation implements AccountApiService {
@@ -60,6 +61,28 @@ export class AccountApiServiceImplementation implements AccountApiService {
}
}
async registerVerificationEmailClicked(
request: RegisterVerificationEmailClickedRequest,
): Promise<void> {
const env = await firstValueFrom(this.environmentService.environment$);
try {
const response = await this.apiService.send(
"POST",
"/accounts/register/verification-email-clicked",
request,
false,
false,
env.getIdentityUrl(),
);
return response;
} catch (e: unknown) {
this.logService.error(e);
throw e;
}
}
async registerFinish(request: RegisterFinishRequest): Promise<string> {
const env = await firstValueFrom(this.environmentService.environment$);