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:
2
jslib
2
jslib
Submodule jslib updated: a6482be6b3...9a8dd4ed34
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user