bitwarden-estensione-browser/apps/web/src/services/htmlStorage.service.ts

71 lines
2.1 KiB
TypeScript

import { Injectable } from "@angular/core";
import { AbstractStorageService } from "@bitwarden/common/abstractions/storage.service";
import { HtmlStorageLocation } from "@bitwarden/common/enums/htmlStorageLocation";
import { StorageOptions } from "@bitwarden/common/models/domain/storageOptions";
@Injectable()
export class HtmlStorageService implements AbstractStorageService {
get defaultOptions(): StorageOptions {
return { htmlStorageLocation: HtmlStorageLocation.Session };
}
get<T>(key: string, options: StorageOptions = this.defaultOptions): Promise<T> {
let json: string = null;
switch (options.htmlStorageLocation) {
case HtmlStorageLocation.Local:
json = window.localStorage.getItem(key);
break;
case HtmlStorageLocation.Session:
default:
json = window.sessionStorage.getItem(key);
break;
}
if (json != null) {
const obj = JSON.parse(json);
return Promise.resolve(obj as T);
}
return Promise.resolve(null);
}
async has(key: string, options: StorageOptions = this.defaultOptions): Promise<boolean> {
return (await this.get(key, options)) != null;
}
save(key: string, obj: any, options: StorageOptions = this.defaultOptions): Promise<any> {
if (obj == null) {
return this.remove(key, options);
}
if (obj instanceof Set) {
obj = Array.from(obj);
}
const json = JSON.stringify(obj);
switch (options.htmlStorageLocation) {
case HtmlStorageLocation.Local:
window.localStorage.setItem(key, json);
break;
case HtmlStorageLocation.Session:
default:
window.sessionStorage.setItem(key, json);
break;
}
return Promise.resolve();
}
remove(key: string, options: StorageOptions = this.defaultOptions): Promise<any> {
switch (options.htmlStorageLocation) {
case HtmlStorageLocation.Local:
window.localStorage.removeItem(key);
break;
case HtmlStorageLocation.Session:
default:
window.sessionStorage.removeItem(key);
break;
}
return Promise.resolve();
}
}