mirror of
https://github.com/bitwarden/browser.git
synced 2024-10-18 07:25:15 +02:00
e767295c86
Refactor environment service to emit a single observable. This required significant changes to how the environment service behaves and tackles much of the tech debt planned for it.
81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
import { firstValueFrom } from "rxjs";
|
|
|
|
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
|
import { Region } from "@bitwarden/common/platform/abstractions/environment.service";
|
|
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
|
|
import { DefaultEnvironmentService } from "@bitwarden/common/platform/services/default-environment.service";
|
|
import { StateProvider } from "@bitwarden/common/platform/state";
|
|
|
|
import { GroupPolicyEnvironment } from "../../admin-console/types/group-policy-environment";
|
|
import { devFlagEnabled, devFlagValue } from "../flags";
|
|
|
|
export class BrowserEnvironmentService extends DefaultEnvironmentService {
|
|
constructor(
|
|
private logService: LogService,
|
|
stateProvider: StateProvider,
|
|
accountService: AccountService,
|
|
) {
|
|
super(stateProvider, accountService);
|
|
}
|
|
|
|
async hasManagedEnvironment(): Promise<boolean> {
|
|
try {
|
|
return (await this.getManagedEnvironment()) != null;
|
|
} catch (e) {
|
|
this.logService.error(e);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async settingsHaveChanged() {
|
|
if (!(await this.hasManagedEnvironment())) {
|
|
return false;
|
|
}
|
|
|
|
const managedEnv = await this.getManagedEnvironment();
|
|
const env = await firstValueFrom(this.environment$);
|
|
const urls = env.getUrls();
|
|
|
|
return (
|
|
managedEnv.base != urls.base ||
|
|
managedEnv.webVault != urls.webVault ||
|
|
managedEnv.api != urls.api ||
|
|
managedEnv.identity != urls.identity ||
|
|
managedEnv.icons != urls.icons ||
|
|
managedEnv.notifications != urls.notifications ||
|
|
managedEnv.events != urls.events
|
|
);
|
|
}
|
|
|
|
getManagedEnvironment(): Promise<GroupPolicyEnvironment> {
|
|
return devFlagEnabled("managedEnvironment")
|
|
? new Promise((resolve) => resolve(devFlagValue("managedEnvironment")))
|
|
: new Promise((resolve, reject) => {
|
|
if (chrome.storage.managed == null) {
|
|
return resolve(null);
|
|
}
|
|
|
|
chrome.storage.managed.get("environment", (result) => {
|
|
if (chrome.runtime.lastError) {
|
|
return reject(chrome.runtime.lastError);
|
|
}
|
|
|
|
resolve(result.environment);
|
|
});
|
|
});
|
|
}
|
|
|
|
async setUrlsToManagedEnvironment() {
|
|
const env = await this.getManagedEnvironment();
|
|
await this.setEnvironment(Region.SelfHosted, {
|
|
base: env.base,
|
|
webVault: env.webVault,
|
|
api: env.api,
|
|
identity: env.identity,
|
|
icons: env.icons,
|
|
notifications: env.notifications,
|
|
events: env.events,
|
|
});
|
|
}
|
|
}
|