mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 00:03:56 +00:00
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.
58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import { OptionValues } from "commander";
|
|
import { firstValueFrom } from "rxjs";
|
|
|
|
import {
|
|
EnvironmentService,
|
|
Region,
|
|
} from "@bitwarden/common/platform/abstractions/environment.service";
|
|
|
|
import { Response } from "../models/response";
|
|
import { MessageResponse } from "../models/response/message.response";
|
|
import { StringResponse } from "../models/response/string.response";
|
|
|
|
export class ConfigCommand {
|
|
constructor(private environmentService: EnvironmentService) {}
|
|
|
|
async run(setting: string, value: string, options: OptionValues): Promise<Response> {
|
|
setting = setting.toLowerCase();
|
|
switch (setting) {
|
|
case "server":
|
|
return await this.getOrSetServer(value, options);
|
|
default:
|
|
return Response.badRequest("Unknown setting.");
|
|
}
|
|
}
|
|
|
|
private async getOrSetServer(url: string, options: OptionValues): Promise<Response> {
|
|
if (
|
|
(url == null || url.trim() === "") &&
|
|
!options.webVault &&
|
|
!options.api &&
|
|
!options.identity &&
|
|
!options.icons &&
|
|
!options.notifications &&
|
|
!options.events
|
|
) {
|
|
const env = await firstValueFrom(this.environmentService.environment$);
|
|
const stringRes = new StringResponse(
|
|
env.hasBaseUrl() ? env.getUrls().base : "https://bitwarden.com",
|
|
);
|
|
return Response.success(stringRes);
|
|
}
|
|
|
|
url = url === "null" || url === "bitwarden.com" || url === "https://bitwarden.com" ? null : url;
|
|
await this.environmentService.setEnvironment(Region.SelfHosted, {
|
|
base: url,
|
|
webVault: options.webVault || null,
|
|
api: options.api || null,
|
|
identity: options.identity || null,
|
|
icons: options.icons || null,
|
|
notifications: options.notifications || null,
|
|
events: options.events || null,
|
|
keyConnector: options.keyConnector || null,
|
|
});
|
|
const res = new MessageResponse("Saved setting `config`.", null);
|
|
return Response.success(res);
|
|
}
|
|
}
|