From e85eb143bf23aeb89c8994f8094582b5b31ba3ec Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 9 Jan 2018 22:47:58 -0500 Subject: [PATCH] move settings service to jslib --- src/abstractions/index.ts | 1 + src/abstractions/settings.service.ts | 6 +++ src/services/index.ts | 1 + src/services/settings.service.ts | 62 ++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 src/abstractions/settings.service.ts create mode 100644 src/services/settings.service.ts diff --git a/src/abstractions/index.ts b/src/abstractions/index.ts index 7a662f6db5..476411d3c1 100644 --- a/src/abstractions/index.ts +++ b/src/abstractions/index.ts @@ -6,6 +6,7 @@ export { FolderService } from './folder.service'; export { MessagingService } from './messaging.service'; export { PasswordGenerationService } from './passwordGeneration.service'; export { PlatformUtilsService } from './platformUtils.service'; +export { SettingsService } from './settings.service'; export { StorageService } from './storage.service'; export { TokenService } from './token.service'; export { TotpService } from './totp.service'; diff --git a/src/abstractions/settings.service.ts b/src/abstractions/settings.service.ts new file mode 100644 index 0000000000..97d2bca975 --- /dev/null +++ b/src/abstractions/settings.service.ts @@ -0,0 +1,6 @@ +export interface SettingsService { + clearCache(): void; + getEquivalentDomains(): Promise; + setEquivalentDomains(equivalentDomains: string[][]): Promise; + clear(userId: string): Promise; +} diff --git a/src/services/index.ts b/src/services/index.ts index 6fc897d773..4183aa784e 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -6,6 +6,7 @@ export { CryptoService } from './crypto.service'; export { EnvironmentService } from './environment.service'; export { FolderService } from './folder.service'; export { PasswordGenerationService } from './passwordGeneration.service'; +export { SettingsService } from './settings.service'; export { TokenService } from './token.service'; export { TotpService } from './totp.service'; export { UserService } from './user.service'; diff --git a/src/services/settings.service.ts b/src/services/settings.service.ts new file mode 100644 index 0000000000..0f1227c7a8 --- /dev/null +++ b/src/services/settings.service.ts @@ -0,0 +1,62 @@ +import { SettingsService as SettingsServiceInterface } from '../abstractions/settings.service'; +import { StorageService } from '../abstractions/storage.service'; +import { UserService } from '../abstractions/user.service'; + +const Keys = { + settingsPrefix: 'settings_', + equivalentDomains: 'equivalentDomains', +}; + +export class SettingsService { + private settingsCache: any; + + constructor(private userService: UserService, private storageService: StorageService) { + } + + clearCache(): void { + this.settingsCache = null; + } + + getEquivalentDomains(): Promise { + return this.getSettingsKey(Keys.equivalentDomains); + } + + async setEquivalentDomains(equivalentDomains: string[][]): Promise { + await this.setSettingsKey(Keys.equivalentDomains, equivalentDomains); + } + + async clear(userId: string): Promise { + await this.storageService.remove(Keys.settingsPrefix + userId); + this.settingsCache = null; + } + + // Helpers + + private async getSettings(): Promise { + if (this.settingsCache == null) { + const userId = await this.userService.getUserId(); + this.settingsCache = this.storageService.get(Keys.settingsPrefix + userId); + } + return this.settingsCache; + } + + private async getSettingsKey(key: string): Promise { + const settings = await this.getSettings(); + if (settings != null && settings[key]) { + return settings[key]; + } + return null; + } + + private async setSettingsKey(key: string, value: any): Promise { + const userId = await this.userService.getUserId(); + let settings = await this.getSettings(); + if (!settings) { + settings = {}; + } + + settings[key] = value; + await this.storageService.save(Keys.settingsPrefix + userId, settings); + this.settingsCache = settings; + } +}