From ff7151fbbdee31374cd1c99e8f43733347ff5f11 Mon Sep 17 00:00:00 2001 From: Hinton Date: Tue, 11 Jan 2022 19:45:34 +0100 Subject: [PATCH] Add support for setting keys --- jslib | 2 +- src/services/keyConnector.service.ts | 61 +++++++++++++++++++++++----- 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/jslib b/jslib index a6482be6..9a8dd4ed 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit a6482be6b3871989f7f00c6be8caeb65838d42fb +Subproject commit 9a8dd4ed342fee3b6159f623ebfad4a0e83fad5b diff --git a/src/services/keyConnector.service.ts b/src/services/keyConnector.service.ts index d2a0a90f..a8a4a914 100644 --- a/src/services/keyConnector.service.ts +++ b/src/services/keyConnector.service.ts @@ -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 { + async getUserKeyFromKeyConnector(url: string): Promise { 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 = new Promise(async (resolve) => { + const promise: Promise = 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 = 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; + } }