From 54cc35e29a97c93f0f31ad92fe29f2fd4cb8a900 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 13 Sep 2024 18:11:05 +0200 Subject: [PATCH] [PM-6037] Fix process reload not triggering on inactive account lock/logout (#9805) * Send loggedOut/locked events on logout/lock event * Revert "Send loggedOut/locked events on logout/lock event" This reverts commit 293f2d613171ce9f9d52db11d18e511a16dd54e0. * Ensure loggedOut is sent for non-active user logouts too * Make loggedOut accept userIds * Add userBeingLoggedOut in desktop app component * Await updateconnection calls --- apps/desktop/src/app/app.component.ts | 10 ++++------ apps/web/src/app/app.component.ts | 11 +++++++---- libs/common/src/auth/abstractions/auth.service.ts | 2 +- libs/common/src/auth/services/auth.service.ts | 4 ++-- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/apps/desktop/src/app/app.component.ts b/apps/desktop/src/app/app.component.ts index 089eb1c027..b1f50a7b75 100644 --- a/apps/desktop/src/app/app.component.ts +++ b/apps/desktop/src/app/app.component.ts @@ -194,9 +194,9 @@ export class AppComponent implements OnInit, OnDestroy { break; case "loggedOut": this.modalService.closeAll(); - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.notificationsService.updateConnection(); + if (message.userId == null || message.userId === this.activeUserId) { + await this.notificationsService.updateConnection(); + } // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. // eslint-disable-next-line @typescript-eslint/no-floating-promises this.updateAppMenu(); @@ -694,9 +694,7 @@ export class AppComponent implements OnInit, OnDestroy { // This must come last otherwise the logout will prematurely trigger // a process reload before all the state service user data can be cleaned up - if (userBeingLoggedOut === activeUserId) { - this.authService.logOut(async () => {}); - } + this.authService.logOut(async () => {}, userBeingLoggedOut); } private async recordActivity() { diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index 828fe8ea3f..ef6cbd2804 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -119,9 +119,12 @@ export class AppComponent implements OnDestroy, OnInit { this.notificationsService.updateConnection(false); break; case "loggedOut": - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.notificationsService.updateConnection(false); + if ( + message.userId == null || + message.userId === (await firstValueFrom(this.accountService.activeAccount$)) + ) { + await this.notificationsService.updateConnection(false); + } break; case "unlocked": // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. @@ -311,7 +314,7 @@ export class AppComponent implements OnDestroy, OnInit { // eslint-disable-next-line @typescript-eslint/no-floating-promises this.router.navigate(["/"]); } - }); + }, userId); } private async recordActivity() { diff --git a/libs/common/src/auth/abstractions/auth.service.ts b/libs/common/src/auth/abstractions/auth.service.ts index 36d5d219b2..df408e76f8 100644 --- a/libs/common/src/auth/abstractions/auth.service.ts +++ b/libs/common/src/auth/abstractions/auth.service.ts @@ -16,5 +16,5 @@ export abstract class AuthService { abstract authStatusFor$(userId: UserId): Observable; /** @deprecated use {@link activeAccountStatus$} instead */ abstract getAuthStatus: (userId?: string) => Promise; - abstract logOut: (callback: () => void) => void; + abstract logOut: (callback: () => void, userId?: string) => void; } diff --git a/libs/common/src/auth/services/auth.service.ts b/libs/common/src/auth/services/auth.service.ts index 25e7b92edf..307da55a5e 100644 --- a/libs/common/src/auth/services/auth.service.ts +++ b/libs/common/src/auth/services/auth.service.ts @@ -93,8 +93,8 @@ export class AuthService implements AuthServiceAbstraction { return await firstValueFrom(this.authStatusFor$(userId as UserId)); } - logOut(callback: () => void) { + logOut(callback: () => void, userId?: string): void { callback(); - this.messageSender.send("loggedOut"); + this.messageSender.send("loggedOut", { userId }); } }