mirror of
https://github.com/bitwarden/browser
synced 2025-12-10 21:33:27 +00:00
refactor(device-trust-toasts): [Auth/PM-11225] Refactor Toasts from Auth Services (#13665)
Refactor toast calls out of auth services. Toasts are now triggered by an observable emission that gets picked up by an observable pipeline in a new `DeviceTrustToastService` (libs/angular). That observable pipeline is then subscribed by by consuming the `AppComponent` for each client.
This commit is contained in:
@@ -12,6 +12,12 @@ export abstract class AuthRequestServiceAbstraction {
|
||||
/** Emits an auth request id when an auth request has been approved. */
|
||||
authRequestPushNotification$: Observable<string>;
|
||||
|
||||
/**
|
||||
* Emits when a login has been approved by an admin. This emission is specifically for the
|
||||
* purpose of notifying the consuming component to display a toast informing the user.
|
||||
*/
|
||||
adminLoginApproved$: Observable<void>;
|
||||
|
||||
/**
|
||||
* Returns an admin auth request for the given user if it exists.
|
||||
* @param userId The user id.
|
||||
@@ -106,4 +112,13 @@ export abstract class AuthRequestServiceAbstraction {
|
||||
* @returns The dash-delimited fingerprint phrase.
|
||||
*/
|
||||
abstract getFingerprintPhrase(email: string, publicKey: Uint8Array): Promise<string>;
|
||||
|
||||
/**
|
||||
* Passes a value to the adminLoginApprovedSubject via next(), which causes the
|
||||
* adminLoginApproved$ observable to emit.
|
||||
*
|
||||
* The purpose is to notify consuming components (of adminLoginApproved$) to display
|
||||
* a toast informing the user that a login has been approved by an admin.
|
||||
*/
|
||||
abstract emitAdminLoginApproved(): void;
|
||||
}
|
||||
|
||||
@@ -278,7 +278,8 @@ export class SsoLoginStrategy extends LoginStrategy {
|
||||
// TODO: eventually we post and clean up DB as well once consumed on client
|
||||
await this.authRequestService.clearAdminAuthRequest(userId);
|
||||
|
||||
this.platformUtilsService.showToast("success", null, this.i18nService.t("loginApproved"));
|
||||
// This notification will be picked up by the SsoComponent to handle displaying a toast to the user
|
||||
this.authRequestService.emitAdminLoginApproved();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,10 @@ export class AuthRequestService implements AuthRequestServiceAbstraction {
|
||||
private authRequestPushNotificationSubject = new Subject<string>();
|
||||
authRequestPushNotification$: Observable<string>;
|
||||
|
||||
// Observable emission is used to trigger a toast in consuming components
|
||||
private adminLoginApprovedSubject = new Subject<void>();
|
||||
adminLoginApproved$: Observable<void>;
|
||||
|
||||
constructor(
|
||||
private appIdService: AppIdService,
|
||||
private accountService: AccountService,
|
||||
@@ -53,6 +57,7 @@ export class AuthRequestService implements AuthRequestServiceAbstraction {
|
||||
private stateProvider: StateProvider,
|
||||
) {
|
||||
this.authRequestPushNotification$ = this.authRequestPushNotificationSubject.asObservable();
|
||||
this.adminLoginApproved$ = this.adminLoginApprovedSubject.asObservable();
|
||||
}
|
||||
|
||||
async getAdminAuthRequest(userId: UserId): Promise<AdminAuthRequestStorable | null> {
|
||||
@@ -207,4 +212,8 @@ export class AuthRequestService implements AuthRequestServiceAbstraction {
|
||||
async getFingerprintPhrase(email: string, publicKey: Uint8Array): Promise<string> {
|
||||
return (await this.keyService.getFingerprint(email.toLowerCase(), publicKey)).join("-");
|
||||
}
|
||||
|
||||
emitAdminLoginApproved(): void {
|
||||
this.adminLoginApprovedSubject.next();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user