From 66eec2b02260ce41227e83153020f561d105b1ba Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Thu, 15 Apr 2021 07:00:49 +1000 Subject: [PATCH] Use sync instead of token to manage emailVerified (#344) --- src/abstractions/user.service.ts | 2 ++ src/angular/components/send/add-edit.component.ts | 6 ++---- src/services/sync.service.ts | 1 + src/services/user.service.ts | 14 ++++++++++++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/abstractions/user.service.ts b/src/abstractions/user.service.ts index 29eae7b08c..ed7e43c38a 100644 --- a/src/abstractions/user.service.ts +++ b/src/abstractions/user.service.ts @@ -5,12 +5,14 @@ import { KdfType } from '../enums/kdfType'; export abstract class UserService { setInformation: (userId: string, email: string, kdf: KdfType, kdfIterations: number) => Promise; + setEmailVerified: (emailVerified: boolean) => Promise; setSecurityStamp: (stamp: string) => Promise; getUserId: () => Promise; getEmail: () => Promise; getSecurityStamp: () => Promise; getKdf: () => Promise; getKdfIterations: () => Promise; + getEmailVerified: () => Promise; clear: () => Promise; isAuthenticated: () => Promise; canAccessPremium: () => Promise; diff --git a/src/angular/components/send/add-edit.component.ts b/src/angular/components/send/add-edit.component.ts index 5d89e69604..d51aac4558 100644 --- a/src/angular/components/send/add-edit.component.ts +++ b/src/angular/components/send/add-edit.component.ts @@ -17,7 +17,6 @@ import { MessagingService } from '../../../abstractions/messaging.service'; import { PlatformUtilsService } from '../../../abstractions/platformUtils.service'; import { PolicyService } from '../../../abstractions/policy.service'; import { SendService } from '../../../abstractions/send.service'; -import { TokenService } from '../../../abstractions/token.service'; import { UserService } from '../../../abstractions/user.service'; import { SendFileView } from '../../../models/view/sendFileView'; @@ -83,8 +82,7 @@ export class AddEditComponent implements OnInit { constructor(protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService, protected environmentService: EnvironmentService, protected datePipe: DatePipe, protected sendService: SendService, protected userService: UserService, - protected messagingService: MessagingService, protected policyService: PolicyService, - protected tokenService: TokenService) { + protected messagingService: MessagingService, protected policyService: PolicyService) { this.typeOptions = [ { name: i18nService.t('sendTypeFile'), value: SendType.File }, { name: i18nService.t('sendTypeText'), value: SendType.Text }, @@ -174,7 +172,7 @@ export class AddEditComponent implements OnInit { }); this.canAccessPremium = await this.userService.canAccessPremium(); - this.emailVerified = this.tokenService.getEmailVerified(); + this.emailVerified = await this.userService.getEmailVerified(); if (!this.canAccessPremium || !this.emailVerified) { this.type = SendType.Text; } diff --git a/src/services/sync.service.ts b/src/services/sync.service.ts index 55cc58fa16..ce1b5b7598 100644 --- a/src/services/sync.service.ts +++ b/src/services/sync.service.ts @@ -288,6 +288,7 @@ export class SyncService implements SyncServiceAbstraction { await this.cryptoService.setEncPrivateKey(response.privateKey); await this.cryptoService.setOrgKeys(response.organizations); await this.userService.setSecurityStamp(response.securityStamp); + await this.userService.setEmailVerified(response.emailVerified); const organizations: { [id: string]: OrganizationData; } = {}; response.organizations.forEach(o => { diff --git a/src/services/user.service.ts b/src/services/user.service.ts index df8755d7f1..99a81428eb 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -14,6 +14,7 @@ const Keys = { kdf: 'kdf', kdfIterations: 'kdfIterations', organizationsPrefix: 'organizations_', + emailVerified: 'emailVerified', }; export class UserService implements UserServiceAbstraction { @@ -22,6 +23,7 @@ export class UserService implements UserServiceAbstraction { private stamp: string; private kdf: KdfType; private kdfIterations: number; + private emailVerified: boolean; constructor(private tokenService: TokenService, private storageService: StorageService) { } @@ -44,6 +46,11 @@ export class UserService implements UserServiceAbstraction { return this.storageService.save(Keys.stamp, stamp); } + setEmailVerified(emailVerified: boolean) { + this.emailVerified = emailVerified; + return this.storageService.save(Keys.emailVerified, emailVerified); + } + async getUserId(): Promise { if (this.userId == null) { this.userId = await this.storageService.get(Keys.userId); @@ -79,6 +86,13 @@ export class UserService implements UserServiceAbstraction { return this.kdfIterations; } + async getEmailVerified(): Promise { + if (this.emailVerified == null) { + this.emailVerified = await this.storageService.get(Keys.emailVerified); + } + return this.emailVerified; + } + async clear(): Promise { const userId = await this.getUserId();