1
0
mirror of https://github.com/bitwarden/web synced 2026-01-08 03:23:29 +00:00
Files
web/src/services/htmlStorage.service.ts
Vincent Salucci d58550c2b8 [Auto-Logout] Implement upstream changes (#506)
* Initial commit of auto logout functionality

* Update jslib 31a2574 -> 28e3fff

* Reverting prod URLs

* Set log out expired param to false

Co-authored-by: Vincent Salucci <vsalucci@bitwarden.com>
2020-03-30 09:59:47 -05:00

77 lines
2.7 KiB
TypeScript

import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { StorageService } from 'jslib/abstractions/storage.service';
import { ConstantsService } from 'jslib/services';
export class HtmlStorageService implements StorageService {
private localStorageKeys = new Set(['appId', 'anonymousAppId', 'rememberedEmail', 'passwordGenerationOptions',
ConstantsService.disableFaviconKey, 'rememberEmail', 'enableGravatars', ConstantsService.localeKey,
ConstantsService.autoConfirmFingerprints, ConstantsService.vaultTimeoutKey,
ConstantsService.vaultTimeoutActionKey]);
private localStorageStartsWithKeys = ['twoFactorToken_', ConstantsService.collapsedGroupingsKey + '_'];
constructor(private platformUtilsService: PlatformUtilsService) { }
async init() {
// LockOption -> VaultTimeout (uses the same legacy string value for backwards compat)
const vaultTimeout = await this.get<number>(ConstantsService.vaultTimeoutKey);
if (vaultTimeout == null && !this.platformUtilsService.isDev()) {
await this.save(ConstantsService.vaultTimeoutKey, 15);
}
// Default Action to lock
const vaultTimeoutAction = await this.get<string>(ConstantsService.vaultTimeoutActionKey);
if (vaultTimeoutAction == null) {
await this.save(ConstantsService.vaultTimeoutActionKey, 'lock');
}
}
get<T>(key: string): Promise<T> {
let json: string = null;
if (this.isLocalStorage(key)) {
json = window.localStorage.getItem(key);
} else {
json = window.sessionStorage.getItem(key);
}
if (json != null) {
const obj = JSON.parse(json);
return Promise.resolve(obj as T);
}
return Promise.resolve(null);
}
save(key: string, obj: any): Promise<any> {
if (obj == null) {
return this.remove(key);
}
const json = JSON.stringify(obj);
if (this.isLocalStorage(key)) {
window.localStorage.setItem(key, json);
} else {
window.sessionStorage.setItem(key, json);
}
return Promise.resolve();
}
remove(key: string): Promise<any> {
if (this.isLocalStorage(key)) {
window.localStorage.removeItem(key);
} else {
window.sessionStorage.removeItem(key);
}
return Promise.resolve();
}
private isLocalStorage(key: string): boolean {
if (this.localStorageKeys.has(key)) {
return true;
}
for (const swKey of this.localStorageStartsWithKeys) {
if (key.startsWith(swKey)) {
return true;
}
}
return false;
}
}