mirror of
https://github.com/bitwarden/browser
synced 2026-01-03 17:13:47 +00:00
* Rename service-factory folder * Move cryptographic service factories * Move crypto models * Move crypto services * Move domain base class * Platform code owners * Move desktop log services * Move log files * Establish component library ownership * Move background listeners * Move background background * Move localization to Platform * Move browser alarms to Platform * Move browser state to Platform * Move CLI state to Platform * Move Desktop native concerns to Platform * Move flag and misc to Platform * Lint fixes * Move electron state to platform * Move web state to Platform * Move lib state to Platform * Fix broken tests * Rename interface to idiomatic TS * `npm run prettier` 🤖 * Resolve review feedback * Set platform as owners of web core and shared * Expand moved services * Fix test types --------- Co-authored-by: Hinton <hinton@users.noreply.github.com>
85 lines
2.5 KiB
TypeScript
85 lines
2.5 KiB
TypeScript
import { BehaviorSubject, concatMap } from "rxjs";
|
|
|
|
import { SettingsService as SettingsServiceAbstraction } from "../abstractions/settings.service";
|
|
import { StateService } from "../platform/abstractions/state.service";
|
|
import { Utils } from "../platform/misc/utils";
|
|
import { AccountSettingsSettings } from "../platform/models/domain/account";
|
|
|
|
export class SettingsService implements SettingsServiceAbstraction {
|
|
protected _settings: BehaviorSubject<AccountSettingsSettings> = new BehaviorSubject({});
|
|
protected _disableFavicon = new BehaviorSubject<boolean>(null);
|
|
|
|
settings$ = this._settings.asObservable();
|
|
disableFavicon$ = this._disableFavicon.asObservable();
|
|
|
|
constructor(private stateService: StateService) {
|
|
this.stateService.activeAccountUnlocked$
|
|
.pipe(
|
|
concatMap(async (unlocked) => {
|
|
if (Utils.global.bitwardenContainerService == null) {
|
|
return;
|
|
}
|
|
|
|
if (!unlocked) {
|
|
this._settings.next({});
|
|
return;
|
|
}
|
|
|
|
const data = await this.stateService.getSettings();
|
|
const disableFavicon = await this.stateService.getDisableFavicon();
|
|
|
|
this._settings.next(data);
|
|
this._disableFavicon.next(disableFavicon);
|
|
})
|
|
)
|
|
.subscribe();
|
|
}
|
|
|
|
async setEquivalentDomains(equivalentDomains: string[][]): Promise<void> {
|
|
const settings = this._settings.getValue() ?? {};
|
|
|
|
settings.equivalentDomains = equivalentDomains;
|
|
|
|
this._settings.next(settings);
|
|
await this.stateService.setSettings(settings);
|
|
}
|
|
|
|
getEquivalentDomains(url: string): Set<string> {
|
|
const domain = Utils.getDomain(url);
|
|
if (domain == null) {
|
|
return new Set();
|
|
}
|
|
|
|
const settings = this._settings.getValue();
|
|
|
|
let result: string[] = [];
|
|
|
|
if (settings?.equivalentDomains != null) {
|
|
settings.equivalentDomains
|
|
.filter((ed) => ed.length > 0 && ed.includes(domain))
|
|
.forEach((ed) => {
|
|
result = result.concat(ed);
|
|
});
|
|
}
|
|
|
|
return new Set(result);
|
|
}
|
|
|
|
async setDisableFavicon(value: boolean) {
|
|
this._disableFavicon.next(value);
|
|
await this.stateService.setDisableFavicon(value);
|
|
}
|
|
|
|
getDisableFavicon(): boolean {
|
|
return this._disableFavicon.getValue();
|
|
}
|
|
|
|
async clear(userId?: string): Promise<void> {
|
|
if (userId == null || userId == (await this.stateService.getUserId())) {
|
|
this._settings.next({});
|
|
}
|
|
|
|
await this.stateService.setSettings(null, { userId: userId });
|
|
}
|
|
}
|