1
0
mirror of https://github.com/bitwarden/web synced 2026-02-02 17:54:10 +00:00

Add support for setting keys

This commit is contained in:
Hinton
2022-01-11 19:45:34 +01:00
parent 4415720f3f
commit ff7151fbbd
2 changed files with 52 additions and 11 deletions

2
jslib

Submodule jslib updated: a6482be6b3...9a8dd4ed34

View File

@@ -2,8 +2,8 @@ import { Injectable } from "@angular/core";
import { ApiService } from "jslib-common/abstractions/api.service";
import { CryptoService } from "jslib-common/abstractions/crypto.service";
import { CryptoFunctionService } from "jslib-common/abstractions/cryptoFunction.service";
import { EnvironmentService } from "jslib-common/abstractions/environment.service";
import { I18nService } from "jslib-common/abstractions/i18n.service";
import { LogService } from "jslib-common/abstractions/log.service";
import { OrganizationService } from "jslib-common/abstractions/organization.service";
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
@@ -11,8 +11,8 @@ import { StateService } from "jslib-common/abstractions/state.service";
import { TokenService } from "jslib-common/abstractions/token.service";
import { CMEIFrame } from "jslib-common/misc/cme_iframe";
import { Utils } from "jslib-common/misc/utils";
import { SymmetricCryptoKey } from "jslib-common/models/domain/symmetricCryptoKey";
import { KeyConnectorUserKeyRequest } from "jslib-common/models/request/keyConnectorUserKeyRequest";
import { KeyConnectorUserKeyResponse } from "jslib-common/models/response/keyConnectorUserKeyResponse";
import { KeyConnectorService as BaseKeyConnectorService } from "jslib-common/services/keyConnector.service";
@@ -20,6 +20,7 @@ import { KeyConnectorService as BaseKeyConnectorService } from "jslib-common/ser
export class KeyConnectorService extends BaseKeyConnectorService {
constructor(
stateService: StateService,
cryptoFunctionService: CryptoFunctionService,
cryptoService: CryptoService,
apiService: ApiService,
tokenService: TokenService,
@@ -28,12 +29,20 @@ export class KeyConnectorService extends BaseKeyConnectorService {
private environmentService: EnvironmentService,
private platformUtilsService: PlatformUtilsService
) {
super(stateService, cryptoService, apiService, tokenService, logService, organizationService);
super(
stateService,
cryptoFunctionService,
cryptoService,
apiService,
tokenService,
logService,
organizationService
);
}
async getAndSetKey(url: string): Promise<void> {
async getUserKeyFromKeyConnector(url: string): Promise<KeyConnectorUserKeyResponse> {
if (this.platformUtilsService.isSelfHost()) {
return super.getAndSetKey(url);
return super.getUserKeyFromKeyConnector(url);
}
const el = document.createElement("iframe");
@@ -42,14 +51,12 @@ export class KeyConnectorService extends BaseKeyConnectorService {
const webVaultUrl = this.environmentService.getWebVaultUrl();
const promise: Promise<void> = new Promise(async (resolve) => {
const promise: Promise<KeyConnectorUserKeyResponse> = new Promise(async (resolve) => {
const iframe = new CMEIFrame(
window,
webVaultUrl,
(key: string) => {
const keyArr = Utils.fromB64ToArray(key);
const k = new SymmetricCryptoKey(keyArr);
this.cryptoService.setKey(k).then(resolve);
resolve(new KeyConnectorUserKeyResponse({ Key: key }));
},
(error: string) => {
this.platformUtilsService.showToast("error", null, error);
@@ -66,4 +73,38 @@ export class KeyConnectorService extends BaseKeyConnectorService {
return promise;
}
postUserKeyToKeyConnector(url: string, request: KeyConnectorUserKeyRequest) {
if (this.platformUtilsService.isSelfHost()) {
return super.postUserKeyToKeyConnector(url, request);
}
const el = document.createElement("iframe");
el.id = "cme_iframe";
document.body.appendChild(el);
const webVaultUrl = this.environmentService.getWebVaultUrl();
const promise: Promise<void> = new Promise(async (resolve) => {
const iframe = new CMEIFrame(
window,
webVaultUrl,
() => {
resolve();
},
(error: string) => {
this.platformUtilsService.showToast("error", null, error);
},
(info: string) => {
this.logService.info(info);
}
);
iframe.initPost(await this.apiService.getActiveBearerToken(), url, request.key);
});
promise.finally(() => el.remove());
return promise;
}
}