mirror of
https://github.com/bitwarden/jslib
synced 2025-12-23 19:53:55 +00:00
WIP
This commit is contained in:
25
common/src/misc/cme_iframe.ts
Normal file
25
common/src/misc/cme_iframe.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { I18nService } from '../abstractions/i18n.service';
|
||||||
|
import { IFrameComponent } from './iframe_component';
|
||||||
|
|
||||||
|
export class CMEIFrame extends IFrameComponent {
|
||||||
|
constructor(win: Window, webVaultUrl: string, successCallback: (message: string) => any, errorCallback: (message: string) => any,
|
||||||
|
infoCallback: (message: string) => any) {
|
||||||
|
super(win, webVaultUrl, 'cme-connector.html', 'cme_iframe', successCallback, errorCallback, (message: string) => {
|
||||||
|
const parsedMessage = JSON.parse(message);
|
||||||
|
if (typeof (parsedMessage) !== 'string') {
|
||||||
|
this.iframe.height = (parsedMessage.height).toString();
|
||||||
|
this.iframe.width = (parsedMessage.width).toString();
|
||||||
|
} else {
|
||||||
|
infoCallback(parsedMessage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
init(token: string, url: string): void {
|
||||||
|
super.initComponent(this.createParams({
|
||||||
|
url: url,
|
||||||
|
token: token,
|
||||||
|
operation: 'get',
|
||||||
|
}, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import { ApiService } from '../abstractions/api.service';
|
import { ApiService } from '../abstractions/api.service';
|
||||||
import { CryptoService } from '../abstractions/crypto.service';
|
import { CryptoService } from '../abstractions/crypto.service';
|
||||||
|
import { I18nService } from '../abstractions/i18n.service';
|
||||||
import { KeyConnectorService as KeyConnectorServiceAbstraction } from '../abstractions/keyConnector.service';
|
import { KeyConnectorService as KeyConnectorServiceAbstraction } from '../abstractions/keyConnector.service';
|
||||||
import { LogService } from '../abstractions/log.service';
|
import { LogService } from '../abstractions/log.service';
|
||||||
import { StorageService } from '../abstractions/storage.service';
|
import { StorageService } from '../abstractions/storage.service';
|
||||||
@@ -7,6 +8,7 @@ import { TokenService } from '../abstractions/token.service';
|
|||||||
import { UserService } from '../abstractions/user.service';
|
import { UserService } from '../abstractions/user.service';
|
||||||
|
|
||||||
import { OrganizationUserType } from '../enums/organizationUserType';
|
import { OrganizationUserType } from '../enums/organizationUserType';
|
||||||
|
import { CMEIFrame } from '../misc/cme_iframe';
|
||||||
|
|
||||||
import { Utils } from '../misc/utils';
|
import { Utils } from '../misc/utils';
|
||||||
|
|
||||||
@@ -58,15 +60,40 @@ export class KeyConnectorService implements KeyConnectorServiceAbstraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getAndSetKey(url: string) {
|
async getAndSetKey(url: string) {
|
||||||
try {
|
return new Promise(async resolve => {
|
||||||
const userKeyResponse = await this.apiService.getUserKeyFromKeyConnector(url);
|
|
||||||
const keyArr = Utils.fromB64ToArray(userKeyResponse.key);
|
const el = document.createElement('iframe');
|
||||||
const k = new SymmetricCryptoKey(keyArr);
|
el.id = "cme_iframe"
|
||||||
await this.cryptoService.setKey(k);
|
document.body.appendChild(el);
|
||||||
} catch (e) {
|
|
||||||
this.logService.error(e);
|
const iframe = new CMEIFrame(window, "https://localhost:8080",
|
||||||
throw new Error('Unable to reach key connector');
|
(key: string) => {
|
||||||
}
|
const keyArr = Utils.fromB64ToArray(key);
|
||||||
|
const k = new SymmetricCryptoKey(keyArr);
|
||||||
|
this.cryptoService.setKey(k).then(resolve);
|
||||||
|
}, (error: string) => {
|
||||||
|
debugger;
|
||||||
|
}, (info: string) => {
|
||||||
|
debugger;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
iframe.init(await this.apiService.getActiveBearerToken(), url);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
base64Encode(str: string): string {
|
||||||
|
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {
|
||||||
|
return String.fromCharCode(('0x' + p1) as any);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected createParams(data: any, version: number) {
|
||||||
|
return new URLSearchParams({
|
||||||
|
data: this.base64Encode(JSON.stringify(data)),
|
||||||
|
parent: encodeURIComponent(document.location.href),
|
||||||
|
v: version.toString(),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async getManagingOrganization() {
|
async getManagingOrganization() {
|
||||||
|
|||||||
Reference in New Issue
Block a user