diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index 6be6706a6..9e1bec14e 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -11,6 +11,10 @@ import { Router } from '@angular/router'; import { LoginWithAccessTokenDialog } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.component'; import { DataService } from '@ghostfolio/client/services/data.service'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; +import { + STAY_SIGNED_IN, + SettingsStorageService +} from '@ghostfolio/client/services/settings-storage.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { WebAuthnService } from '@ghostfolio/client/services/web-authn.service'; import { InfoItem, User } from '@ghostfolio/common/interfaces'; @@ -43,8 +47,8 @@ export class HeaderComponent implements OnChanges { private dialog: MatDialog, private impersonationStorageService: ImpersonationStorageService, private router: Router, - private tokenStorageService: TokenStorageService, - private webAuthnService: WebAuthnService + private settingsStorageService: SettingsStorageService, + private tokenStorageService: TokenStorageService ) { this.impersonationStorageService .onChangeHasImpersonation() @@ -108,14 +112,17 @@ export class HeaderComponent implements OnChanges { takeUntil(this.unsubscribeSubject) ) .subscribe(({ authToken }) => { - this.setToken(authToken, data.staySignedIn); + this.setToken(authToken); }); } }); } - public setToken(aToken: string, staySignedIn: boolean) { - this.tokenStorageService.saveToken(aToken, staySignedIn); + public setToken(aToken: string) { + this.tokenStorageService.saveToken( + aToken, + this.settingsStorageService.getSetting(STAY_SIGNED_IN) === 'true' + ); this.router.navigate(['/']); } diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts index 0de670f92..a5579df7f 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts @@ -1,5 +1,10 @@ import { ChangeDetectionStrategy, Component, Inject } from '@angular/core'; +import { MatCheckboxChange } from '@angular/material/checkbox'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { + STAY_SIGNED_IN, + SettingsStorageService +} from '@ghostfolio/client/services/settings-storage.service'; @Component({ selector: 'gf-login-with-access-token-dialog', @@ -9,13 +14,21 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; }) export class LoginWithAccessTokenDialog { public constructor( + @Inject(MAT_DIALOG_DATA) public data: any, public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: any + private settingsStorageService: SettingsStorageService ) {} ngOnInit() {} - public onClose(): void { + public onChangeStaySignedIn(aValue: MatCheckboxChange) { + this.settingsStorageService.setSetting( + STAY_SIGNED_IN, + aValue.checked?.toString() + ); + } + + public onClose() { this.dialogRef.close(); } } diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html index 3040d5e08..614c28bfe 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -28,7 +28,7 @@
- Stay signed in
diff --git a/apps/client/src/app/pages/auth/auth-page.component.ts b/apps/client/src/app/pages/auth/auth-page.component.ts index 70f4f6563..e1a1877a4 100644 --- a/apps/client/src/app/pages/auth/auth-page.component.ts +++ b/apps/client/src/app/pages/auth/auth-page.component.ts @@ -1,5 +1,9 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; +import { + STAY_SIGNED_IN, + SettingsStorageService +} from '@ghostfolio/client/services/settings-storage.service'; import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; @Component({ @@ -14,6 +18,7 @@ export class AuthPageComponent implements OnInit { public constructor( private route: ActivatedRoute, private router: Router, + private settingsStorageService: SettingsStorageService, private tokenStorageService: TokenStorageService ) {} @@ -23,7 +28,10 @@ export class AuthPageComponent implements OnInit { public ngOnInit() { this.route.params.subscribe((params) => { const jwt = params['jwt']; - this.tokenStorageService.saveToken(jwt); + this.tokenStorageService.saveToken( + jwt, + this.settingsStorageService.getSetting(STAY_SIGNED_IN) === 'true' + ); this.router.navigate(['/']); }); diff --git a/apps/client/src/app/pages/landing/landing-page.component.ts b/apps/client/src/app/pages/landing/landing-page.component.ts index a8b1e3c6d..1ff3717ab 100644 --- a/apps/client/src/app/pages/landing/landing-page.component.ts +++ b/apps/client/src/app/pages/landing/landing-page.component.ts @@ -26,8 +26,7 @@ export class LandingPageComponent implements OnDestroy, OnInit { private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, private router: Router, - private tokenStorageService: TokenStorageService, - private webAuthnService: WebAuthnService + private tokenStorageService: TokenStorageService ) {} /** @@ -257,7 +256,7 @@ export class LandingPageComponent implements OnDestroy, OnInit { } public setToken(aToken: string) { - this.tokenStorageService.saveToken(aToken); + this.tokenStorageService.saveToken(aToken, true); this.router.navigate(['/']); } diff --git a/apps/client/src/app/pages/register/register-page.component.ts b/apps/client/src/app/pages/register/register-page.component.ts index c328f832d..16668b003 100644 --- a/apps/client/src/app/pages/register/register-page.component.ts +++ b/apps/client/src/app/pages/register/register-page.component.ts @@ -78,19 +78,13 @@ export class RegisterPageComponent implements OnDestroy, OnInit { dialogRef.afterClosed().subscribe((data) => { if (data?.authToken) { - this.tokenStorageService.saveToken(authToken); + this.tokenStorageService.saveToken(authToken, true); this.router.navigate(['/']); } }); } - public setToken(aToken: string) { - this.tokenStorageService.saveToken(aToken); - - this.router.navigate(['/']); - } - public ngOnDestroy() { this.unsubscribeSubject.next(); this.unsubscribeSubject.complete(); diff --git a/apps/client/src/app/services/settings-storage.service.ts b/apps/client/src/app/services/settings-storage.service.ts index f195ee38a..a340f89b7 100644 --- a/apps/client/src/app/services/settings-storage.service.ts +++ b/apps/client/src/app/services/settings-storage.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@angular/core'; export const RANGE = 'range'; +export const STAY_SIGNED_IN = 'staySignedIn'; @Injectable({ providedIn: 'root' diff --git a/apps/client/src/app/services/token-storage.service.ts b/apps/client/src/app/services/token-storage.service.ts index 1fd409926..5980f56e1 100644 --- a/apps/client/src/app/services/token-storage.service.ts +++ b/apps/client/src/app/services/token-storage.service.ts @@ -21,7 +21,7 @@ export class TokenStorageService { ); } - public saveToken(token: string, staySignedIn: boolean = false): void { + public saveToken(token: string, staySignedIn = false): void { if (staySignedIn) { window.localStorage.setItem(TOKEN_KEY, token); }