mirror of
https://github.com/bitwarden/browser
synced 2025-12-18 01:03:35 +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
3.0 KiB
TypeScript
85 lines
3.0 KiB
TypeScript
import * as inquirer from "inquirer";
|
|
|
|
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
|
|
import { KeyConnectorService } from "@bitwarden/common/auth/abstractions/key-connector.service";
|
|
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
|
|
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
|
|
|
|
import { Response } from "../models/response";
|
|
import { MessageResponse } from "../models/response/message.response";
|
|
|
|
export class ConvertToKeyConnectorCommand {
|
|
constructor(
|
|
private keyConnectorService: KeyConnectorService,
|
|
private environmentService: EnvironmentService,
|
|
private syncService: SyncService,
|
|
private organizationApiService: OrganizationApiServiceAbstraction,
|
|
private logout: () => Promise<void>
|
|
) {}
|
|
|
|
async run(): Promise<Response> {
|
|
// If no interaction available, alert user to use web vault
|
|
const canInteract = process.env.BW_NOINTERACTION !== "true";
|
|
if (!canInteract) {
|
|
await this.logout();
|
|
return Response.error(
|
|
new MessageResponse(
|
|
"An organization you are a member of is using Key Connector. " +
|
|
"In order to access the vault, you must opt-in to Key Connector now via the web vault. You have been logged out.",
|
|
null
|
|
)
|
|
);
|
|
}
|
|
|
|
const organization = await this.keyConnectorService.getManagingOrganization();
|
|
|
|
const answer: inquirer.Answers = await inquirer.createPromptModule({ output: process.stderr })({
|
|
type: "list",
|
|
name: "convert",
|
|
message:
|
|
organization.name +
|
|
" is using a self-hosted key server. A master password is no longer required to log in for members of this organization. ",
|
|
choices: [
|
|
{
|
|
name: "Remove master password and unlock",
|
|
value: "remove",
|
|
},
|
|
{
|
|
name: "Leave organization and unlock",
|
|
value: "leave",
|
|
},
|
|
{
|
|
name: "Log out",
|
|
value: "exit",
|
|
},
|
|
],
|
|
});
|
|
|
|
if (answer.convert === "remove") {
|
|
try {
|
|
await this.keyConnectorService.migrateUser();
|
|
} catch (e) {
|
|
await this.logout();
|
|
throw e;
|
|
}
|
|
|
|
await this.keyConnectorService.removeConvertAccountRequired();
|
|
await this.keyConnectorService.setUsesKeyConnector(true);
|
|
|
|
// Update environment URL - required for api key login
|
|
const urls = this.environmentService.getUrls();
|
|
urls.keyConnector = organization.keyConnectorUrl;
|
|
await this.environmentService.setUrls(urls);
|
|
|
|
return Response.success();
|
|
} else if (answer.convert === "leave") {
|
|
await this.organizationApiService.leave(organization.id);
|
|
await this.keyConnectorService.removeConvertAccountRequired();
|
|
return Response.success();
|
|
} else {
|
|
await this.logout();
|
|
return Response.error("You have been logged out.");
|
|
}
|
|
}
|
|
}
|