import { StorageService } from '../abstractions/storage.service'; import { TokenService } from '../abstractions/token.service'; import { UserService as UserServiceInterface } from '../abstractions/user.service'; const Keys = { userId: 'userId', userEmail: 'userEmail', stamp: 'securityStamp', }; export class UserService implements UserServiceInterface { userId: string; email: string; stamp: string; constructor(private tokenService: TokenService, private storageService: StorageService) { } setUserIdAndEmail(userId: string, email: string): Promise { this.email = email; this.userId = userId; return Promise.all([ this.storageService.save(Keys.userEmail, email), this.storageService.save(Keys.userId, userId), ]); } setSecurityStamp(stamp: string): Promise { this.stamp = stamp; return this.storageService.save(Keys.stamp, stamp); } async getUserId(): Promise { if (this.userId != null) { return this.userId; } this.userId = await this.storageService.get(Keys.userId); return this.userId; } async getEmail(): Promise { if (this.email != null) { return this.email; } this.email = await this.storageService.get(Keys.userEmail); return this.email; } async getSecurityStamp(): Promise { if (this.stamp != null) { return this.stamp; } this.stamp = await this.storageService.get(Keys.stamp); return this.stamp; } async clear(): Promise { await Promise.all([ this.storageService.remove(Keys.userId), this.storageService.remove(Keys.userEmail), this.storageService.remove(Keys.stamp), ]); this.userId = this.email = this.stamp = null; } async isAuthenticated(): Promise { const token = await this.tokenService.getToken(); if (token == null) { return false; } const userId = await this.getUserId(); return userId != null; } }