@lifeready/core 1.0.21 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/lifeready-core.umd.js +9745 -9700
- package/bundles/lifeready-core.umd.js.map +1 -1
- package/bundles/lifeready-core.umd.min.js +2 -2
- package/bundles/lifeready-core.umd.min.js.map +1 -1
- package/esm2015/lib/_common/run-outside-angular.js +2 -2
- package/esm2015/lib/_common/types.js +1 -1
- package/esm2015/lib/api/lr-apollo.service.js +3 -3
- package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +3 -3
- package/esm2015/lib/api/query-processor/common-processors.service.js +3 -3
- package/esm2015/lib/api/query-processor/query-processor.service.js +4 -4
- package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +6 -5
- package/esm2015/lib/api/types/lr-graphql.types.js +1 -1
- package/esm2015/lib/auth/auth.gql.js +1 -28
- package/esm2015/lib/auth/auth.types.js +1 -1
- package/esm2015/lib/auth/life-ready-auth.service.js +32 -31
- package/esm2015/lib/category/category.gql.js +1 -1
- package/esm2015/lib/category/category.service.js +6 -6
- package/esm2015/lib/contact-card/contact-card.gql.js +79 -0
- package/esm2015/lib/contact-card/contact-card.service.js +154 -0
- package/esm2015/lib/contact-card/contact-card2.gql.js +29 -0
- package/esm2015/lib/contact-card/contact-card2.service.js +103 -0
- package/esm2015/lib/encryption/encryption.service.js +189 -0
- package/esm2015/lib/file-upload/file-upload.service.js +74 -0
- package/esm2015/lib/file-upload/file-upload.types.js +1 -0
- package/esm2015/lib/{auth → idle}/idle.service.js +7 -7
- package/esm2015/lib/{auth → idle}/idle.types.js +1 -1
- package/esm2015/lib/items2/item2.service.js +20 -20
- package/esm2015/lib/key/key-factory.service.js +237 -0
- package/esm2015/lib/{cryptography → key}/key-graph.service.js +10 -10
- package/esm2015/lib/key/key-meta.service.js +200 -0
- package/esm2015/lib/key/key.service.js +124 -0
- package/esm2015/lib/key/key.types.js +11 -0
- package/esm2015/lib/key-exchange/key-exchange.gql.js +188 -0
- package/esm2015/lib/key-exchange/key-exchange.service.js +443 -0
- package/esm2015/lib/key-exchange/key-exchange.types.js +7 -0
- package/esm2015/lib/key-exchange/key-exchange2.gql.js +171 -0
- package/esm2015/lib/key-exchange/key-exchange2.service.js +500 -0
- package/esm2015/lib/lbop/lbop.service.js +355 -0
- package/esm2015/lib/life-ready.module.js +2 -27
- package/esm2015/lib/lock/lock.gql.js +40 -0
- package/esm2015/lib/lock/lock.service.js +64 -0
- package/esm2015/lib/message/message.gql.js +32 -0
- package/esm2015/lib/message/message.service.js +116 -0
- package/esm2015/lib/message/message.types.js +1 -0
- package/esm2015/lib/password/password.gql.js +28 -0
- package/esm2015/lib/password/password.service.js +315 -0
- package/esm2015/lib/persist/persist.service.js +180 -0
- package/esm2015/lib/profile/profile-details.service.js +214 -0
- package/esm2015/lib/profile/profile.gql.js +97 -0
- package/esm2015/lib/profile/profile.service.js +169 -0
- package/esm2015/lib/profile/profile.types.js +34 -0
- package/esm2015/lib/record/record-attachment.service.js +15 -15
- package/esm2015/lib/record/record.service.js +3 -3
- package/esm2015/lib/register/register.service.js +172 -0
- package/esm2015/lib/scenario/scenario.controller.js +2 -2
- package/esm2015/lib/scenario/{scenario.gql.private.js → scenario.private.gql.js} +1 -1
- package/esm2015/lib/scenario/scenario.service.js +9 -9
- package/esm2015/lib/scenario/scenario.types.js +1 -1
- package/esm2015/lib/shared-contact-card/shared-contact-card.service.js +119 -0
- package/esm2015/lib/shared-contact-card/shared-contact-card2.gql.js +41 -0
- package/esm2015/lib/shared-contact-card/shared-contact-card2.service.js +117 -0
- package/esm2015/lib/slip39/slip39.service.js +169 -0
- package/esm2015/lib/time/time.service.js +146 -0
- package/esm2015/lib/tp-assembly/tp-assembly.js +365 -0
- package/esm2015/lib/tp-assembly/tp-assembly.private.gql.js +22 -0
- package/esm2015/lib/tp-assembly/tp-assembly.types.js +1 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset-request.service.js +100 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset-user.service.js +117 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.constants.js +4 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.controller.js +34 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.gql.js +74 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.private.gql.js +165 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.private.service.js +54 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.service.js +92 -0
- package/esm2015/lib/tp-password-reset/tp-password-reset.types.js +1 -0
- package/esm2015/lib/trusted-party/trusted-party.gql.js +148 -0
- package/esm2015/lib/trusted-party/trusted-party.service.js +326 -0
- package/esm2015/lib/trusted-party/trusted-party.types.js +41 -0
- package/esm2015/lib/trusted-party/trusted-party2.gql.js +64 -0
- package/esm2015/lib/trusted-party/trusted-party2.gql.private.js +25 -0
- package/esm2015/lib/trusted-party/trusted-party2.service.js +224 -0
- package/esm2015/lib/trusted-party/trusted-party2.types.js +1 -0
- package/esm2015/lib/two-factor/two-factor.service.js +74 -0
- package/esm2015/lib/user/user.gql.js +60 -0
- package/esm2015/lib/user/user.service.js +79 -0
- package/esm2015/lib/user/user.types.js +1 -0
- package/esm2015/lib/web-crypto/web-crypto.service.js +29 -0
- package/esm2015/lifeready-core.js +15 -13
- package/esm2015/public-api.js +49 -51
- package/fesm2015/lifeready-core.js +9232 -9214
- package/fesm2015/lifeready-core.js.map +1 -1
- package/lib/_common/types.d.ts +3 -1
- package/lib/api/lr-apollo.service.d.ts +1 -1
- package/lib/api/lr-graphql/lr-graphql.service.d.ts +1 -1
- package/lib/api/query-processor/common-processors.service.d.ts +1 -1
- package/lib/api/query-processor/query-processor.service.d.ts +1 -1
- package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +1 -1
- package/lib/api/types/lr-graphql.types.d.ts +11 -0
- package/lib/auth/auth.gql.d.ts +0 -3
- package/lib/auth/auth.types.d.ts +2 -2
- package/lib/auth/life-ready-auth.service.d.ts +12 -12
- package/lib/category/category.gql.d.ts +1 -1
- package/lib/category/category.service.d.ts +2 -2
- package/lib/{api → contact-card}/contact-card.service.d.ts +9 -9
- package/lib/contact-card/contact-card2.gql.d.ts +25 -0
- package/lib/{api → contact-card}/contact-card2.service.d.ts +11 -12
- package/lib/{cryptography → encryption}/encryption.service.d.ts +2 -2
- package/lib/{api/file.service.d.ts → file-upload/file-upload.service.d.ts} +3 -7
- package/lib/file-upload/file-upload.types.d.ts +5 -0
- package/lib/{auth → idle}/idle.service.d.ts +4 -4
- package/lib/items2/item2.service.d.ts +11 -11
- package/lib/{cryptography → key}/key-factory.service.d.ts +2 -2
- package/lib/{cryptography → key}/key-graph.service.d.ts +5 -5
- package/lib/{cryptography → key}/key-meta.service.d.ts +1 -1
- package/lib/{cryptography → key}/key.service.d.ts +2 -2
- package/lib/{cryptography/cryptography.types.d.ts → key/key.types.d.ts} +9 -13
- package/lib/{api → key-exchange}/key-exchange.service.d.ts +5 -5
- package/lib/{api → key-exchange}/key-exchange.types.d.ts +4 -4
- package/lib/{api → key-exchange}/key-exchange2.gql.d.ts +1 -1
- package/lib/{api → key-exchange}/key-exchange2.service.d.ts +71 -18
- package/lib/{auth → lbop}/lbop.service.d.ts +7 -7
- package/lib/{api → lock}/lock.gql.d.ts +1 -1
- package/lib/{api → lock}/lock.service.d.ts +1 -1
- package/lib/message/message.gql.d.ts +13 -0
- package/lib/message/message.service.d.ts +29 -0
- package/lib/message/message.types.d.ts +12 -0
- package/lib/password/password.gql.d.ts +3 -0
- package/lib/{auth → password}/password.service.d.ts +8 -8
- package/lib/{api → persist}/persist.service.d.ts +3 -3
- package/lib/{users → profile}/profile-details.service.d.ts +3 -3
- package/lib/{users → profile}/profile.gql.d.ts +2 -2
- package/lib/{users → profile}/profile.service.d.ts +6 -6
- package/lib/{users → profile}/profile.types.d.ts +1 -1
- package/lib/record/record-attachment.service.d.ts +6 -6
- package/lib/record/record.service.d.ts +1 -1
- package/lib/{auth → register}/register.service.d.ts +4 -4
- package/lib/scenario/scenario.controller.d.ts +1 -1
- package/lib/scenario/scenario.service.d.ts +2 -2
- package/lib/scenario/scenario.types.d.ts +1 -1
- package/lib/{api → shared-contact-card}/shared-contact-card.service.d.ts +9 -9
- package/lib/{api → shared-contact-card}/shared-contact-card2.gql.d.ts +1 -1
- package/lib/{api → shared-contact-card}/shared-contact-card2.service.d.ts +6 -6
- package/lib/{trusted-parties → tp-assembly}/tp-assembly.d.ts +7 -7
- package/lib/{trusted-parties → tp-assembly}/tp-assembly.types.d.ts +1 -1
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset-request.service.d.ts +4 -8
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset-user.service.d.ts +7 -13
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset.controller.d.ts +1 -1
- package/lib/tp-password-reset/tp-password-reset.gql.d.ts +63 -0
- package/lib/{trusted-parties/tp-password-reset.gql.d.ts → tp-password-reset/tp-password-reset.private.gql.d.ts} +1 -63
- package/lib/tp-password-reset/tp-password-reset.private.service.d.ts +59 -0
- package/lib/{trusted-parties → tp-password-reset}/tp-password-reset.service.d.ts +6 -89
- package/lib/tp-password-reset/tp-password-reset.types.d.ts +40 -0
- package/lib/{trusted-parties → trusted-party}/trusted-party.service.d.ts +7 -7
- package/lib/{trusted-parties → trusted-party}/trusted-party.types.d.ts +2 -3
- package/lib/{trusted-parties → trusted-party}/trusted-party2.gql.d.ts +0 -22
- package/lib/trusted-party/trusted-party2.gql.private.d.ts +23 -0
- package/lib/{trusted-parties → trusted-party}/trusted-party2.service.d.ts +11 -35
- package/lib/trusted-party/trusted-party2.types.d.ts +12 -0
- package/lib/{users → user}/user.gql.d.ts +1 -1
- package/lib/{users → user}/user.types.d.ts +1 -1
- package/lifeready-core.d.ts +14 -12
- package/lifeready-core.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +48 -50
- package/esm2015/lib/api/contact-card.gql.js +0 -79
- package/esm2015/lib/api/contact-card.service.js +0 -154
- package/esm2015/lib/api/contact-card2.gql.js +0 -60
- package/esm2015/lib/api/contact-card2.service.js +0 -103
- package/esm2015/lib/api/file.service.js +0 -74
- package/esm2015/lib/api/key-exchange.gql.js +0 -188
- package/esm2015/lib/api/key-exchange.service.js +0 -442
- package/esm2015/lib/api/key-exchange.types.js +0 -7
- package/esm2015/lib/api/key-exchange2.gql.js +0 -171
- package/esm2015/lib/api/key-exchange2.service.js +0 -480
- package/esm2015/lib/api/lock.gql.js +0 -40
- package/esm2015/lib/api/lock.service.js +0 -64
- package/esm2015/lib/api/message.service.js +0 -138
- package/esm2015/lib/api/persist.service.js +0 -181
- package/esm2015/lib/api/shared-contact-card.service.js +0 -119
- package/esm2015/lib/api/shared-contact-card2.gql.js +0 -41
- package/esm2015/lib/api/shared-contact-card2.service.js +0 -117
- package/esm2015/lib/api/time.service.js +0 -146
- package/esm2015/lib/auth/lbop.service.js +0 -355
- package/esm2015/lib/auth/password.service.js +0 -315
- package/esm2015/lib/auth/register.service.js +0 -172
- package/esm2015/lib/auth/two-factor.service.js +0 -74
- package/esm2015/lib/cryptography/cryptography.types.js +0 -11
- package/esm2015/lib/cryptography/encryption.service.js +0 -189
- package/esm2015/lib/cryptography/key-factory.service.js +0 -237
- package/esm2015/lib/cryptography/key-meta.service.js +0 -200
- package/esm2015/lib/cryptography/key.service.js +0 -124
- package/esm2015/lib/cryptography/slip39.service.js +0 -169
- package/esm2015/lib/cryptography/web-crypto.service.js +0 -29
- package/esm2015/lib/trusted-parties/tp-assembly.gql.private.js +0 -22
- package/esm2015/lib/trusted-parties/tp-assembly.js +0 -365
- package/esm2015/lib/trusted-parties/tp-assembly.types.js +0 -1
- package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +0 -113
- package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +0 -129
- package/esm2015/lib/trusted-parties/tp-password-reset.constants.js +0 -4
- package/esm2015/lib/trusted-parties/tp-password-reset.controller.js +0 -34
- package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +0 -237
- package/esm2015/lib/trusted-parties/tp-password-reset.service.js +0 -95
- package/esm2015/lib/trusted-parties/trusted-party.gql.js +0 -148
- package/esm2015/lib/trusted-parties/trusted-party.service.js +0 -326
- package/esm2015/lib/trusted-parties/trusted-party.types.js +0 -41
- package/esm2015/lib/trusted-parties/trusted-party2.gql.js +0 -87
- package/esm2015/lib/trusted-parties/trusted-party2.service.js +0 -218
- package/esm2015/lib/users/profile-details.service.js +0 -214
- package/esm2015/lib/users/profile.gql.js +0 -97
- package/esm2015/lib/users/profile.service.js +0 -169
- package/esm2015/lib/users/profile.types.js +0 -34
- package/esm2015/lib/users/user.gql.js +0 -60
- package/esm2015/lib/users/user.service.js +0 -79
- package/esm2015/lib/users/user.types.js +0 -1
- package/lib/api/contact-card2.gql.d.ts +0 -34
- package/lib/api/message.service.d.ts +0 -59
- /package/lib/{api → contact-card}/contact-card.gql.d.ts +0 -0
- /package/lib/{auth → idle}/idle.types.d.ts +0 -0
- /package/lib/{api → key-exchange}/key-exchange.gql.d.ts +0 -0
- /package/lib/scenario/{scenario.gql.private.d.ts → scenario.private.gql.d.ts} +0 -0
- /package/lib/{cryptography → slip39}/slip39.service.d.ts +0 -0
- /package/lib/{api → time}/time.service.d.ts +0 -0
- /package/lib/{trusted-parties/tp-assembly.gql.private.d.ts → tp-assembly/tp-assembly.private.gql.d.ts} +0 -0
- /package/lib/{trusted-parties → tp-password-reset}/tp-password-reset.constants.d.ts +0 -0
- /package/lib/{trusted-parties → trusted-party}/trusted-party.gql.d.ts +0 -0
- /package/lib/{auth → two-factor}/two-factor.service.d.ts +0 -0
- /package/lib/{users → user}/user.service.d.ts +0 -0
- /package/lib/{cryptography → web-crypto}/web-crypto.service.d.ts +0 -0
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
import { __awaiter, __rest } from "tslib";
|
|
2
|
-
import { mapEdges, } from '../api/types';
|
|
3
|
-
import { EncryptionService } from '../cryptography/encryption.service';
|
|
4
|
-
import { KeyFactoryService } from '../cryptography/key-factory.service';
|
|
5
|
-
import { KeyGraphService } from '../cryptography/key-graph.service';
|
|
6
|
-
import * as slip from '../cryptography/slip39.service';
|
|
7
|
-
import { LrBadArgumentException, LrBadStateException, } from '../_common/exceptions';
|
|
8
|
-
import { KeyService } from '../cryptography/key.service';
|
|
9
|
-
import { LrGraphQLService } from '../api/lr-graphql';
|
|
10
|
-
import { TpsKeysQuery } from './tp-assembly.gql.private';
|
|
11
|
-
export class TpAssemblyController {
|
|
12
|
-
constructor(injector) {
|
|
13
|
-
this.keyFactory = injector.get(KeyFactoryService);
|
|
14
|
-
this.keyService = injector.get(KeyService);
|
|
15
|
-
this.encryptionService = injector.get(EncryptionService);
|
|
16
|
-
this.keyGraph = injector.get(KeyGraphService);
|
|
17
|
-
this.slip39Service = injector.get(slip.Slip39Service);
|
|
18
|
-
this.lrGraphQl = injector.get(LrGraphQLService);
|
|
19
|
-
}
|
|
20
|
-
recoverAssemblyKey(partials) {
|
|
21
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
-
// Every receiverPbkCipher should contain this and they should all be the same.
|
|
23
|
-
let assemblyKeyParams;
|
|
24
|
-
const shares = partials.map((partial) => {
|
|
25
|
-
if (assemblyKeyParams) {
|
|
26
|
-
if (JSON.stringify(assemblyKeyParams) !==
|
|
27
|
-
JSON.stringify(partial.assemblyKeyParams)) {
|
|
28
|
-
throw new LrBadStateException('The assembly key parameters are different between the approvals.');
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
assemblyKeyParams = partial.assemblyKeyParams;
|
|
33
|
-
}
|
|
34
|
-
return partial.slip39.share.mnemonics;
|
|
35
|
-
});
|
|
36
|
-
const rawAssemblyKey = yield this.slip39Service.recoverSecret(shares, this.slip39Passphrase);
|
|
37
|
-
return yield KeyFactoryService.asKey(Object.assign(Object.assign({}, assemblyKeyParams), { k: rawAssemblyKey }));
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
prepareTpWrappingKey(tp) {
|
|
41
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
-
return this.keyGraph.getKey(tp.wrappingKeyId);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
prepareAssembly({ subjectKey, rootKey, }) {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
const assemblyKey = yield this.keyFactory.createKey();
|
|
48
|
-
console.log('prepareAssembly assemblyKey', assemblyKey);
|
|
49
|
-
const _a = assemblyKey.toJSON(true), { k: rawAssemblyKey } = _a, assemblyKeyParams = __rest(_a, ["k"]);
|
|
50
|
-
const assemblyKeyVerifierPrk = yield this.keyFactory.createPkcSignKey();
|
|
51
|
-
const wrappedAssemblyKeyVerifierPrk = yield this.encryptionService.encryptToString(assemblyKey, assemblyKeyVerifierPrk.toJSON(true));
|
|
52
|
-
const assemblyKeyVerifierPbk = JSON.stringify(assemblyKeyVerifierPrk.toJSON());
|
|
53
|
-
const subjectKeyWrappedAssemblyKey = yield this.encryptionService.encryptToString(subjectKey, assemblyKey.toJSON(true));
|
|
54
|
-
// Encrypt the rootKey with the assemblyKey
|
|
55
|
-
const assemblyCipherData = yield this.encryptionService.encryptToString(assemblyKey, {
|
|
56
|
-
rootKey: rootKey.toJSON(true),
|
|
57
|
-
});
|
|
58
|
-
return {
|
|
59
|
-
assemblyKey,
|
|
60
|
-
rawAssemblyKey,
|
|
61
|
-
assemblyKeyParams,
|
|
62
|
-
subjectKeyWrappedAssemblyKey,
|
|
63
|
-
assemblyCipherData,
|
|
64
|
-
assemblyKeyVerifierPbk,
|
|
65
|
-
wrappedAssemblyKeyVerifierPrk,
|
|
66
|
-
};
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
prepareCreateSubAssemblies({ input, subjectKey, slipSubAssemblies, assemblyKeyParams, }) {
|
|
70
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
-
return Promise.all(input.map((sa, saIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
const subjectCipherData = yield this.encryptionService.encryptToString(subjectKey, sa.subjectCipherDataClearJson || '');
|
|
73
|
-
const createApprovers = yield Promise.all(sa.approverTps.map((approverTp, approverIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
74
|
-
return this.prepareApprover({
|
|
75
|
-
tp: approverTp,
|
|
76
|
-
approverIndex,
|
|
77
|
-
slipSubAssembly: slipSubAssemblies[saIndex],
|
|
78
|
-
assemblyKeyParams,
|
|
79
|
-
subjectKey,
|
|
80
|
-
});
|
|
81
|
-
})));
|
|
82
|
-
return {
|
|
83
|
-
singleReject: sa.singleReject,
|
|
84
|
-
quorum: sa.quorum,
|
|
85
|
-
subjectCipherData,
|
|
86
|
-
createApprovers,
|
|
87
|
-
};
|
|
88
|
-
})));
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
prepareUpdateSubAssemblies({ input, subjectKey, slipSubAssemblies, assemblyKeyParams, subAssemblies, }) {
|
|
92
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
if (slipSubAssemblies.length !== input.length) {
|
|
94
|
-
throw new LrBadArgumentException('The slipSubAssemblies must be the same length as the input');
|
|
95
|
-
}
|
|
96
|
-
return Promise.all(input.map((sa, saIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
97
|
-
const subjectCipherData = yield this.encryptionService.encryptToString(subjectKey, sa.subjectCipherDataClearJson || '');
|
|
98
|
-
// Get the existing sub-assembly
|
|
99
|
-
const existingSa = subAssemblies.edges.find((edge) => edge.node.id === sa.id).node;
|
|
100
|
-
// Get approvers that do not exist yet
|
|
101
|
-
const createApprovers = [];
|
|
102
|
-
const updateApprovers = [];
|
|
103
|
-
sa.approverTps.forEach((tp) => {
|
|
104
|
-
var _a;
|
|
105
|
-
const approver = (_a = existingSa.approvers.edges.find((edge) => edge.node.tp.id === tp.tpId)) === null || _a === void 0 ? void 0 : _a.node;
|
|
106
|
-
if (approver) {
|
|
107
|
-
updateApprovers.push({
|
|
108
|
-
tp,
|
|
109
|
-
approverId: approver.id,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
createApprovers.push({
|
|
114
|
-
tp,
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
const slipSubAssembly = slipSubAssemblies[saIndex];
|
|
119
|
-
return {
|
|
120
|
-
subAssemblyId: sa.id,
|
|
121
|
-
singleReject: sa.singleReject,
|
|
122
|
-
quorum: sa.quorum,
|
|
123
|
-
subjectCipherData,
|
|
124
|
-
createApprovers: yield Promise.all(createApprovers.map(({ tp }, approverIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
125
|
-
return this.prepareApprover({
|
|
126
|
-
tp,
|
|
127
|
-
approverIndex,
|
|
128
|
-
slipSubAssembly,
|
|
129
|
-
assemblyKeyParams,
|
|
130
|
-
subjectKey,
|
|
131
|
-
});
|
|
132
|
-
}))),
|
|
133
|
-
updateApprovers: yield Promise.all(updateApprovers.map(({ tp, approverId }, approverIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
134
|
-
return this.prepareApprover({
|
|
135
|
-
approverId,
|
|
136
|
-
tp,
|
|
137
|
-
approverIndex: approverIndex + createApprovers.length,
|
|
138
|
-
slipSubAssembly,
|
|
139
|
-
assemblyKeyParams,
|
|
140
|
-
subjectKey,
|
|
141
|
-
});
|
|
142
|
-
}))),
|
|
143
|
-
};
|
|
144
|
-
})));
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
fillWrappingKeyId(input, tps) {
|
|
148
|
-
// Fill in wrappingKeyId if not present
|
|
149
|
-
input.forEach((sa) => {
|
|
150
|
-
sa.approverTps.forEach((approver) => {
|
|
151
|
-
if (!approver.wrappingKeyId) {
|
|
152
|
-
const tp = tps.find((x) => x.id === approver.tpId);
|
|
153
|
-
approver.wrappingKeyId = this.getTpWrappingKeyId(tp);
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
getInputApprovers(input) {
|
|
159
|
-
const tpIds = [];
|
|
160
|
-
input.forEach((sa) => {
|
|
161
|
-
sa.approverTps.forEach((approver) => {
|
|
162
|
-
tpIds.push(approver.tpId);
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
return tpIds;
|
|
166
|
-
}
|
|
167
|
-
prepareCreate(input) {
|
|
168
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
-
const rootKey = yield this.keyService.getCurrentRootKey();
|
|
170
|
-
const subjectKey = yield this.keyFactory.createKey();
|
|
171
|
-
const rootKeyWrappedSubjectKey = yield this.keyGraph.wrapKey(rootKey, subjectKey);
|
|
172
|
-
const _a = yield this.prepareAssembly({
|
|
173
|
-
rootKey: rootKey.jwk,
|
|
174
|
-
subjectKey,
|
|
175
|
-
}), { assemblyKey, rawAssemblyKey, assemblyKeyParams } = _a, assemblyInput = __rest(_a, ["assemblyKey", "rawAssemblyKey", "assemblyKeyParams"]);
|
|
176
|
-
const slipAssembly = yield this.prepareSlip39(input.createSubAssemblies, input.quorum, rawAssemblyKey);
|
|
177
|
-
const tpIds = this.getInputApprovers(input.createSubAssemblies);
|
|
178
|
-
// This should contain all the TPs that we need to update the assembly.
|
|
179
|
-
const tps = mapEdges((yield this.lrGraphQl.query({
|
|
180
|
-
query: TpsKeysQuery,
|
|
181
|
-
variables: {
|
|
182
|
-
ids: tpIds,
|
|
183
|
-
},
|
|
184
|
-
})).tps);
|
|
185
|
-
// Fill in wrappingKeyId if not present
|
|
186
|
-
this.fillWrappingKeyId(input.createSubAssemblies, tps);
|
|
187
|
-
const createSubAssemblies = yield this.prepareCreateSubAssemblies({
|
|
188
|
-
input: input.createSubAssemblies,
|
|
189
|
-
assemblyKeyParams,
|
|
190
|
-
slipSubAssemblies: slipAssembly.subAssemblies,
|
|
191
|
-
subjectKey,
|
|
192
|
-
});
|
|
193
|
-
const subjectCipherData = yield this.encryptionService.encryptToString(subjectKey, input.subjectCipherDataClearJson || '');
|
|
194
|
-
return {
|
|
195
|
-
assemblyKey,
|
|
196
|
-
mutationInput: Object.assign(Object.assign({}, assemblyInput), { singleReject: input.singleReject, quorum: input.quorum, subjectCipherData,
|
|
197
|
-
createSubAssemblies, rootKeyId: rootKey.id, rootKeyWrappedSubjectKey }),
|
|
198
|
-
};
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
getAssemblyApprovers(assembly) {
|
|
202
|
-
const tpIds = [];
|
|
203
|
-
// Find all TPs that belong to sub-assemblies
|
|
204
|
-
mapEdges(assembly.subAssemblies).map((sa) => {
|
|
205
|
-
mapEdges(sa.approvers).forEach((approver) => tpIds.push(approver.tp.id));
|
|
206
|
-
});
|
|
207
|
-
return tpIds;
|
|
208
|
-
}
|
|
209
|
-
prepareUpdate(input, assembly // TODO type this to only what we need.
|
|
210
|
-
) {
|
|
211
|
-
var _a;
|
|
212
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
213
|
-
input = Object.assign({ createSubAssemblies: [] }, input);
|
|
214
|
-
const createSubAssembliesInput = input.createSubAssemblies || [];
|
|
215
|
-
const updateSubAssembliesInput = input.updateSubAssemblies || [];
|
|
216
|
-
const deleteSubAssembliesInput = input.deleteSubAssemblies || [];
|
|
217
|
-
// Must have at least one.
|
|
218
|
-
if (createSubAssembliesInput.length === 0 &&
|
|
219
|
-
updateSubAssembliesInput.length === 0 &&
|
|
220
|
-
deleteSubAssembliesInput.length === 0) {
|
|
221
|
-
throw new LrBadArgumentException('Must specify at least one of: [createSubAssemblies, updateSubAssemblies, deleteSubAssemblies]');
|
|
222
|
-
}
|
|
223
|
-
const rootKey = yield this.keyService.getCurrentRootKey();
|
|
224
|
-
const subjectKey = yield this.keyGraph.getKey(assembly.subjectKey.id);
|
|
225
|
-
const _b = yield this.prepareAssembly({
|
|
226
|
-
rootKey: rootKey.jwk,
|
|
227
|
-
subjectKey: subjectKey.jwk,
|
|
228
|
-
}), { assemblyKey, rawAssemblyKey, assemblyKeyParams } = _b, assemblyInput = __rest(_b, ["assemblyKey", "rawAssemblyKey", "assemblyKeyParams"]);
|
|
229
|
-
// Find all the TPs that we need, duplicates are no problem.
|
|
230
|
-
// Existing approvers
|
|
231
|
-
const tpIds = this.getAssemblyApprovers(assembly).concat(this.getInputApprovers(createSubAssembliesInput), this.getInputApprovers(updateSubAssembliesInput));
|
|
232
|
-
// This should contain all the TPs that we need to update the assembly.
|
|
233
|
-
const tps = mapEdges((yield this.lrGraphQl.query({
|
|
234
|
-
query: TpsKeysQuery,
|
|
235
|
-
variables: {
|
|
236
|
-
ids: tpIds,
|
|
237
|
-
},
|
|
238
|
-
})).tps);
|
|
239
|
-
// Auto fill the updateSubAssemblies with existing sub assemblies if they are not
|
|
240
|
-
// explicitly deleted.
|
|
241
|
-
mapEdges(assembly.subAssemblies).forEach((existing) => {
|
|
242
|
-
// Deleting existing, don't include it
|
|
243
|
-
if (deleteSubAssembliesInput.includes(existing.id)) {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
// Update already specified in the input
|
|
247
|
-
if (updateSubAssembliesInput.some((sa) => sa.id === existing.id)) {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
const approverTps = mapEdges(existing.approvers).map((approver) => {
|
|
251
|
-
return {
|
|
252
|
-
tpId: approver.tp.id,
|
|
253
|
-
sharedCipherDataClearJson: approver.sharedCipherDataClearJson,
|
|
254
|
-
sharedCipherApprovalDataClearJson: approver.sharedCipherApprovalDataClearJson,
|
|
255
|
-
};
|
|
256
|
-
});
|
|
257
|
-
updateSubAssembliesInput.push({
|
|
258
|
-
id: existing.id,
|
|
259
|
-
quorum: existing.quorum,
|
|
260
|
-
singleReject: existing.singleReject,
|
|
261
|
-
approverTps,
|
|
262
|
-
subjectCipherDataClearJson: existing.subjectCipherDataClearJson,
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
// Fill in wrappingKeyId if not present
|
|
266
|
-
this.fillWrappingKeyId(createSubAssembliesInput, tps);
|
|
267
|
-
this.fillWrappingKeyId(updateSubAssembliesInput, tps);
|
|
268
|
-
let slipAssembly;
|
|
269
|
-
try {
|
|
270
|
-
slipAssembly = yield this.prepareSlip39((createSubAssembliesInput || []).concat(updateSubAssembliesInput || []), input.quorum, rawAssemblyKey);
|
|
271
|
-
}
|
|
272
|
-
catch (error) {
|
|
273
|
-
// TODO this sometimes happens. Maybe missing await.
|
|
274
|
-
console.log('Error while creating slip assembly', error);
|
|
275
|
-
}
|
|
276
|
-
const common = {
|
|
277
|
-
assemblyKeyParams,
|
|
278
|
-
subjectKey: subjectKey.jwk,
|
|
279
|
-
};
|
|
280
|
-
const createSubAssemblies = yield this.prepareCreateSubAssemblies(Object.assign(Object.assign({}, common), { input: createSubAssembliesInput,
|
|
281
|
-
// Need to match the slip sub assemblies to the input
|
|
282
|
-
slipSubAssemblies: slipAssembly.subAssemblies.slice(0, createSubAssembliesInput.length) }));
|
|
283
|
-
const updateSubAssemblies = yield this.prepareUpdateSubAssemblies(Object.assign(Object.assign({}, common), { input: updateSubAssembliesInput,
|
|
284
|
-
// Add an offset to the sub assemblies to skip the one that are created.
|
|
285
|
-
slipSubAssemblies: slipAssembly.subAssemblies.slice(createSubAssembliesInput.length), subAssemblies: assembly.subAssemblies }));
|
|
286
|
-
const subjectCipherData = yield this.encryptionService.encryptToString(subjectKey.jwk, (_a = input.subjectCipherDataClearJson) !== null && _a !== void 0 ? _a : assembly.subjectCipherDataClearJson);
|
|
287
|
-
return {
|
|
288
|
-
assemblyKey,
|
|
289
|
-
mutationInput: Object.assign(Object.assign({}, assemblyInput), { singleReject: input.singleReject, quorum: input.quorum, subjectCipherData, subjectKeyId: subjectKey.id, createSubAssemblies,
|
|
290
|
-
updateSubAssemblies }),
|
|
291
|
-
};
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
prepareApprover({ approverId, tp, approverIndex, slipSubAssembly, assemblyKeyParams, subjectKey, }) {
|
|
295
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
296
|
-
const tpWrappingKey = yield this.prepareTpWrappingKey(tp);
|
|
297
|
-
// shared key is rotated every time.
|
|
298
|
-
const sharedKey = yield this.keyFactory.createKey();
|
|
299
|
-
// For TP to access shared_key
|
|
300
|
-
const tpWrappedSharedKey = yield this.encryptionService.encryptToString(tpWrappingKey.jwk, sharedKey.toJSON(true));
|
|
301
|
-
// For subject to access shared_key
|
|
302
|
-
const subjectKeyWrappedSharedKey = yield this.encryptionService.encryptToString(subjectKey, sharedKey.toJSON(true));
|
|
303
|
-
// If quorum is 1, then using the same share for every member.
|
|
304
|
-
const share = slipSubAssembly.threshold === 1
|
|
305
|
-
? slipSubAssembly.shares[0]
|
|
306
|
-
: slipSubAssembly.shares[approverIndex];
|
|
307
|
-
const partialAssemblyKey = {
|
|
308
|
-
slip39: {
|
|
309
|
-
share,
|
|
310
|
-
subAssembly: {
|
|
311
|
-
quorum: slipSubAssembly.threshold,
|
|
312
|
-
size: slipSubAssembly.size,
|
|
313
|
-
},
|
|
314
|
-
},
|
|
315
|
-
assemblyKeyParams,
|
|
316
|
-
};
|
|
317
|
-
console.log('partialAssemblyKey', partialAssemblyKey);
|
|
318
|
-
const sharedCipherData = yield this.encryptionService.encryptToString(sharedKey, tp.sharedCipherDataClearJson || '');
|
|
319
|
-
const sharedCipherApprovalData = yield this.encryptionService.encryptToString(sharedKey, tp.sharedCipherApprovalDataClearJson || '');
|
|
320
|
-
const sharedCipherPartialAssemblyKey = yield this.encryptionService.encryptToString(sharedKey, partialAssemblyKey);
|
|
321
|
-
return {
|
|
322
|
-
tpWrappingKeyId: tpWrappingKey.id,
|
|
323
|
-
tpWrappedSharedKey,
|
|
324
|
-
subjectKeyWrappedSharedKey,
|
|
325
|
-
sharedCipherData,
|
|
326
|
-
sharedCipherApprovalData,
|
|
327
|
-
sharedCipherPartialAssemblyKey,
|
|
328
|
-
approverId: approverId || void 0,
|
|
329
|
-
tpId: approverId ? void 0 : tp.tpId,
|
|
330
|
-
};
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
validateApprovers(approvers) {
|
|
334
|
-
// Ensure all approvers have mkSharedKey.
|
|
335
|
-
for (const tp of approvers) {
|
|
336
|
-
if (!tp.currentUserSharedKey.userSharedKey.mkSharedKey) {
|
|
337
|
-
const msg = `tp ${tp.other.username} does not have mkSharedKey`;
|
|
338
|
-
console.log(msg);
|
|
339
|
-
throw new LrBadArgumentException(msg);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
// Prepare slip39
|
|
344
|
-
prepareSlip39(subAssemblies, assemblyQuorum, rawAssemblyKey) {
|
|
345
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
346
|
-
// Is there enough sub assemblies to meet quorum
|
|
347
|
-
if (subAssemblies.length < assemblyQuorum) {
|
|
348
|
-
throw new LrBadArgumentException('Not enough sub assemblies to meet quorum');
|
|
349
|
-
}
|
|
350
|
-
const slipAssembly = new slip.Assembly(assemblyQuorum);
|
|
351
|
-
subAssemblies.forEach((sa, index) => {
|
|
352
|
-
let approverCount = sa.approverTps.length;
|
|
353
|
-
// slip39 restricts quorum == 1 to have only 1 member. So we just share the same
|
|
354
|
-
// partial key for all sub assembly members.
|
|
355
|
-
if (sa.quorum === 1) {
|
|
356
|
-
approverCount = 1;
|
|
357
|
-
}
|
|
358
|
-
slipAssembly.addSubAssembly(new slip.SubAssembly(index, sa.quorum, approverCount));
|
|
359
|
-
});
|
|
360
|
-
yield this.slip39Service.generateShares(rawAssemblyKey, this.slip39Passphrase, slipAssembly);
|
|
361
|
-
return slipAssembly;
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3RydXN0ZWQtcGFydGllcy90cC1hc3NlbWJseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUVMLFFBQVEsR0FJVCxNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxLQUFLLElBQUksTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2RCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG1CQUFtQixHQUNwQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsTUFBTSxPQUFnQixvQkFBb0I7SUFVeEMsWUFBWSxRQUFrQjtRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxR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Q0FBQyxNQUFNLENBQUM7Z0JBRTFDLGdGQUFnRjtnQkFDaEYsNENBQTRDO2dCQUM1QyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNuQixhQUFhLEdBQUcsQ0FBQyxDQUFDO2lCQUNuQjtnQkFDRCxZQUFZLENBQUMsY0FBYyxDQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQ3RELENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQ3JDLGNBQWMsRUFDZCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLFlBQVksQ0FDYixDQUFDO1lBQ0YsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztLQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcbmltcG9ydCB7XG4gIENvbm5lY3Rpb24sXG4gIG1hcEVkZ2VzLFxuICBUcEFzc2VtYmx5Tm9kZSxcbiAgVHBOb2RlLFxuICBUcFN1YkFzc2VtYmx5Tm9kZSxcbn0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBLZXlGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZmFjdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XG5pbXBvcnQgKiBhcyBzbGlwIGZyb20gJy4uL2NyeXB0b2dyYXBoeS9zbGlwMzkuc2VydmljZSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5LnR5cGVzJztcbmltcG9ydCB7XG4gIExyQmFkQXJndW1lbnRFeGNlcHRpb24sXG4gIExyQmFkU3RhdGVFeGNlcHRpb24sXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENyZWF0ZVRwQXNzZW1ibHlJbnB1dCxcbiAgQ3JlYXRlVHBTdWJBc3NlbWJseUlucHV0LFxuICBQYXJ0aWFsQXNzZW1ibHlLZXksXG4gIFRwQXNzZW1ibHlBcHByb3ZlcklucHV0LFxuICBVcGRhdGVUcEFzc2VtYmx5SW5wdXQsXG4gIFVwZGF0ZVRwU3ViQXNzZW1ibHlJbnB1dCxcbn0gZnJvbSAnLi90cC1hc3NlbWJseS50eXBlcyc7XG5pbXBvcnQgeyBMckdyYXBoUUxTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHsgVHBzS2V5c1F1ZXJ5IH0gZnJvbSAnLi90cC1hc3NlbWJseS5ncWwucHJpdmF0ZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcEFzc2VtYmx5Q29udHJvbGxlciB7XG4gIGFic3RyYWN0IHNsaXAzOVBhc3NwaHJhc2U6IHN0cmluZztcblxuICBwcm90ZWN0ZWQga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2U7XG4gIHByb3RlY3RlZCBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlO1xuICBwcm90ZWN0ZWQga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZTtcbiAgcHJvdGVjdGVkIHNsaXAzOVNlcnZpY2U6IHNsaXAuU2xpcDM5U2VydmljZTtcbiAgcHJvdGVjdGVkIGxyR3JhcGhRbDogTHJHcmFwaFFMU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLmtleUZhY3RvcnkgPSBpbmplY3Rvci5nZXQoS2V5RmFjdG9yeVNlcnZpY2UpO1xuICAgIHRoaXMua2V5U2VydmljZSA9IGluamVjdG9yLmdldChLZXlTZXJ2aWNlKTtcbiAgICB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KEVuY3J5cHRpb25TZXJ2aWNlKTtcbiAgICB0aGlzLmtleUdyYXBoID0gaW5qZWN0b3IuZ2V0KEtleUdyYXBoU2VydmljZSk7XG4gICAgdGhpcy5zbGlwMzlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KHNsaXAuU2xpcDM5U2VydmljZSk7XG4gICAgdGhpcy5sckdyYXBoUWwgPSBpbmplY3Rvci5nZXQoTHJHcmFwaFFMU2VydmljZSk7XG4gIH1cblxuICBhYnN0cmFjdCBnZXRUcFdyYXBwaW5nS2V5SWQodHA6IFRwTm9kZSk6IHN0cmluZztcblxuICBhc3luYyByZWNvdmVyQXNzZW1ibHlLZXkocGFydGlhbHM6IFBhcnRpYWxBc3NlbWJseUtleVtdKSB7XG4gICAgLy8gRXZlcnkgcmVjZWl2ZXJQYmtDaXBoZXIgc2hvdWxkIGNvbnRhaW4gdGhpcyBhbmQgdGhleSBzaG91bGQgYWxsIGJlIHRoZSBzYW1lLlxuICAgIGxldCBhc3NlbWJseUtleVBhcmFtczogb2JqZWN0O1xuXG4gICAgY29uc3Qgc2hhcmVzID0gcGFydGlhbHMubWFwKChwYXJ0aWFsKSA9PiB7XG4gICAgICBpZiAoYXNzZW1ibHlLZXlQYXJhbXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFzc2VtYmx5S2V5UGFyYW1zKSAhPT1cbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShwYXJ0aWFsLmFzc2VtYmx5S2V5UGFyYW1zKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTHJCYWRTdGF0ZUV4Y2VwdGlvbihcbiAgICAgICAgICAgICdUaGUgYXNzZW1ibHkga2V5IHBhcmFtZXRlcnMgYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBhcHByb3ZhbHMuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VtYmx5S2V5UGFyYW1zID0gcGFydGlhbC5hc3NlbWJseUtleVBhcmFtcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJ0aWFsLnNsaXAzOS5zaGFyZS5tbmVtb25pY3M7XG4gICAgfSk7XG5cbiAgICBjb25zdCByYXdBc3NlbWJseUtleSA9IGF3YWl0IHRoaXMuc2xpcDM5U2VydmljZS5yZWNvdmVyU2VjcmV0KFxuICAgICAgc2hhcmVzLFxuICAgICAgdGhpcy5zbGlwMzlQYXNzcGhyYXNlXG4gICAgKTtcblxuICAgIHJldHVybiBhd2FpdCBLZXlGYWN0b3J5U2VydmljZS5hc0tleSh7XG4gICAgICAuLi5hc3NlbWJseUtleVBhcmFtcyxcbiAgICAgIGs6IHJhd0Fzc2VtYmx5S2V5LFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHByZXBhcmVUcFdyYXBwaW5nS2V5KFxuICAgIHRwOiBUcEFzc2VtYmx5QXBwcm92ZXJJbnB1dFxuICApOiBQcm9taXNlPEtleT4ge1xuICAgIHJldHVybiB0aGlzLmtleUdyYXBoLmdldEtleSh0cC53cmFwcGluZ0tleUlkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBwcmVwYXJlQXNzZW1ibHkoe1xuICAgIHN1YmplY3RLZXksXG4gICAgcm9vdEtleSxcbiAgfToge1xuICAgIHN1YmplY3RLZXk6IEpXSy5LZXk7XG4gICAgcm9vdEtleTogSldLLktleTtcbiAgfSkge1xuICAgIGNvbnN0IGFzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuICAgIGNvbnNvbGUubG9nKCdwcmVwYXJlQXNzZW1ibHkgYXNzZW1ibHlLZXknLCBhc3NlbWJseUtleSk7XG5cbiAgICBjb25zdCB7IGs6IHJhd0Fzc2VtYmx5S2V5LCAuLi5hc3NlbWJseUtleVBhcmFtcyB9ID0gYXNzZW1ibHlLZXkudG9KU09OKFxuICAgICAgdHJ1ZVxuICAgICkgYXMgYW55O1xuICAgIGNvbnN0IGFzc2VtYmx5S2V5VmVyaWZpZXJQcmsgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlUGtjU2lnbktleSgpO1xuICAgIGNvbnN0IHdyYXBwZWRBc3NlbWJseUtleVZlcmlmaWVyUHJrID1cbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICBhc3NlbWJseUtleSxcbiAgICAgICAgYXNzZW1ibHlLZXlWZXJpZmllclByay50b0pTT04odHJ1ZSlcbiAgICAgICk7XG4gICAgY29uc3QgYXNzZW1ibHlLZXlWZXJpZmllclBiayA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgYXNzZW1ibHlLZXlWZXJpZmllclByay50b0pTT04oKVxuICAgICk7XG5cbiAgICBjb25zdCBzdWJqZWN0S2V5V3JhcHBlZEFzc2VtYmx5S2V5ID1cbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICBzdWJqZWN0S2V5LFxuICAgICAgICBhc3NlbWJseUtleS50b0pTT04odHJ1ZSlcbiAgICAgICk7XG5cbiAgICAvLyBFbmNyeXB0IHRoZSByb290S2V5IHdpdGggdGhlIGFzc2VtYmx5S2V5XG4gICAgY29uc3QgYXNzZW1ibHlDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIHtcbiAgICAgICAgcm9vdEtleTogcm9vdEtleS50b0pTT04odHJ1ZSksXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIHJhd0Fzc2VtYmx5S2V5LFxuICAgICAgYXNzZW1ibHlLZXlQYXJhbXMsXG4gICAgICBzdWJqZWN0S2V5V3JhcHBlZEFzc2VtYmx5S2V5LFxuICAgICAgYXNzZW1ibHlDaXBoZXJEYXRhLFxuICAgICAgYXNzZW1ibHlLZXlWZXJpZmllclBiayxcbiAgICAgIHdyYXBwZWRBc3NlbWJseUtleVZlcmlmaWVyUHJrLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcHJlcGFyZUNyZWF0ZVN1YkFzc2VtYmxpZXMoe1xuICAgIGlucHV0LFxuICAgIHN1YmplY3RLZXksXG4gICAgc2xpcFN1YkFzc2VtYmxpZXMsXG4gICAgYXNzZW1ibHlLZXlQYXJhbXMsXG4gIH06IHtcbiAgICBpbnB1dDogQ3JlYXRlVHBTdWJBc3NlbWJseUlucHV0W107XG4gICAgc3ViamVjdEtleTogSldLLktleTtcbiAgICBzbGlwU3ViQXNzZW1ibGllczogc2xpcC5TdWJBc3NlbWJseVtdO1xuICAgIGFzc2VtYmx5S2V5UGFyYW1zOyAvLyBUT0RPIHR5cGUgdGhpc1xuICB9KSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgaW5wdXQubWFwKGFzeW5jIChzYSwgc2FJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0Q2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICAgIHN1YmplY3RLZXksXG4gICAgICAgICAgc2Euc3ViamVjdENpcGhlckRhdGFDbGVhckpzb24gfHwgJydcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBjcmVhdGVBcHByb3ZlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBzYS5hcHByb3ZlclRwcy5tYXAoYXN5bmMgKGFwcHJvdmVyVHAsIGFwcHJvdmVySW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVBcHByb3Zlcih7XG4gICAgICAgICAgICAgIHRwOiBhcHByb3ZlclRwLFxuICAgICAgICAgICAgICBhcHByb3ZlckluZGV4LFxuICAgICAgICAgICAgICBzbGlwU3ViQXNzZW1ibHk6IHNsaXBTdWJBc3NlbWJsaWVzW3NhSW5kZXhdLFxuICAgICAgICAgICAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICAgICAgICAgICAgc3ViamVjdEtleSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2luZ2xlUmVqZWN0OiBzYS5zaW5nbGVSZWplY3QsXG4gICAgICAgICAgcXVvcnVtOiBzYS5xdW9ydW0sXG4gICAgICAgICAgc3ViamVjdENpcGhlckRhdGEsXG4gICAgICAgICAgY3JlYXRlQXBwcm92ZXJzLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHByZXBhcmVVcGRhdGVTdWJBc3NlbWJsaWVzKHtcbiAgICBpbnB1dCxcbiAgICBzdWJqZWN0S2V5LFxuICAgIHNsaXBTdWJBc3NlbWJsaWVzLFxuICAgIGFzc2VtYmx5S2V5UGFyYW1zLFxuICAgIHN1YkFzc2VtYmxpZXMsXG4gIH06IHtcbiAgICBpbnB1dDogVXBkYXRlVHBTdWJBc3NlbWJseUlucHV0W107XG4gICAgc3ViamVjdEtleTogSldLLktleTtcbiAgICBzbGlwU3ViQXNzZW1ibGllczogc2xpcC5TdWJBc3NlbWJseVtdO1xuICAgIGFzc2VtYmx5S2V5UGFyYW1zOyAvLyBUT0RPIHR5cGUgdGhpc1xuICAgIHN1YkFzc2VtYmxpZXM6IENvbm5lY3Rpb248VHBTdWJBc3NlbWJseU5vZGU+O1xuICB9KSB7XG4gICAgaWYgKHNsaXBTdWJBc3NlbWJsaWVzLmxlbmd0aCAhPT0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgJ1RoZSBzbGlwU3ViQXNzZW1ibGllcyBtdXN0IGJlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgaW5wdXQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGlucHV0Lm1hcChhc3luYyAoc2EsIHNhSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViamVjdENpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgICBzdWJqZWN0S2V5LFxuICAgICAgICAgIHNhLnN1YmplY3RDaXBoZXJEYXRhQ2xlYXJKc29uIHx8ICcnXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBzdWItYXNzZW1ibHlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTYSA9IHN1YkFzc2VtYmxpZXMuZWRnZXMuZmluZChcbiAgICAgICAgICAoZWRnZSkgPT4gZWRnZS5ub2RlLmlkID09PSBzYS5pZFxuICAgICAgICApLm5vZGU7XG5cbiAgICAgICAgLy8gR2V0IGFwcHJvdmVycyB0aGF0IGRvIG5vdCBleGlzdCB5ZXRcbiAgICAgICAgY29uc3QgY3JlYXRlQXBwcm92ZXJzID0gW107XG4gICAgICAgIGNvbnN0IHVwZGF0ZUFwcHJvdmVycyA9IFtdO1xuXG4gICAgICAgIHNhLmFwcHJvdmVyVHBzLmZvckVhY2goKHRwKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXBwcm92ZXIgPSBleGlzdGluZ1NhLmFwcHJvdmVycy5lZGdlcy5maW5kKFxuICAgICAgICAgICAgKGVkZ2UpID0+IGVkZ2Uubm9kZS50cC5pZCA9PT0gdHAudHBJZFxuICAgICAgICAgICk/Lm5vZGU7XG4gICAgICAgICAgaWYgKGFwcHJvdmVyKSB7XG4gICAgICAgICAgICB1cGRhdGVBcHByb3ZlcnMucHVzaCh7XG4gICAgICAgICAgICAgIHRwLFxuICAgICAgICAgICAgICBhcHByb3ZlcklkOiBhcHByb3Zlci5pZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjcmVhdGVBcHByb3ZlcnMucHVzaCh7XG4gICAgICAgICAgICAgIHRwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzbGlwU3ViQXNzZW1ibHkgPSBzbGlwU3ViQXNzZW1ibGllc1tzYUluZGV4XTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1YkFzc2VtYmx5SWQ6IHNhLmlkLFxuICAgICAgICAgIHNpbmdsZVJlamVjdDogc2Euc2luZ2xlUmVqZWN0LFxuICAgICAgICAgIHF1b3J1bTogc2EucXVvcnVtLFxuICAgICAgICAgIHN1YmplY3RDaXBoZXJEYXRhLFxuICAgICAgICAgIGNyZWF0ZUFwcHJvdmVyczogYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBjcmVhdGVBcHByb3ZlcnMubWFwKGFzeW5jICh7IHRwIH0sIGFwcHJvdmVySW5kZXgpID0+XG4gICAgICAgICAgICAgIHRoaXMucHJlcGFyZUFwcHJvdmVyKHtcbiAgICAgICAgICAgICAgICB0cCxcbiAgICAgICAgICAgICAgICBhcHByb3ZlckluZGV4LFxuICAgICAgICAgICAgICAgIHNsaXBTdWJBc3NlbWJseSxcbiAgICAgICAgICAgICAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICAgICAgICAgICAgICBzdWJqZWN0S2V5LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgdXBkYXRlQXBwcm92ZXJzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHVwZGF0ZUFwcHJvdmVycy5tYXAoYXN5bmMgKHsgdHAsIGFwcHJvdmVySWQgfSwgYXBwcm92ZXJJbmRleCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXBwcm92ZXIoe1xuICAgICAgICAgICAgICAgIGFwcHJvdmVySWQsXG4gICAgICAgICAgICAgICAgdHAsXG4gICAgICAgICAgICAgICAgYXBwcm92ZXJJbmRleDogYXBwcm92ZXJJbmRleCArIGNyZWF0ZUFwcHJvdmVycy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgc2xpcFN1YkFzc2VtYmx5LFxuICAgICAgICAgICAgICAgIGFzc2VtYmx5S2V5UGFyYW1zLFxuICAgICAgICAgICAgICAgIHN1YmplY3RLZXksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsbFdyYXBwaW5nS2V5SWQoaW5wdXQ6IENyZWF0ZVRwU3ViQXNzZW1ibHlJbnB1dFtdLCB0cHM6IFRwTm9kZVtdKSB7XG4gICAgLy8gRmlsbCBpbiB3cmFwcGluZ0tleUlkIGlmIG5vdCBwcmVzZW50XG4gICAgaW5wdXQuZm9yRWFjaCgoc2EpID0+IHtcbiAgICAgIHNhLmFwcHJvdmVyVHBzLmZvckVhY2goKGFwcHJvdmVyKSA9PiB7XG4gICAgICAgIGlmICghYXBwcm92ZXIud3JhcHBpbmdLZXlJZCkge1xuICAgICAgICAgIGNvbnN0IHRwID0gdHBzLmZpbmQoKHgpID0+IHguaWQgPT09IGFwcHJvdmVyLnRwSWQpO1xuICAgICAgICAgIGFwcHJvdmVyLndyYXBwaW5nS2V5SWQgPSB0aGlzLmdldFRwV3JhcHBpbmdLZXlJZCh0cCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnB1dEFwcHJvdmVycyhpbnB1dDogQ3JlYXRlVHBTdWJBc3NlbWJseUlucHV0W10pIHtcbiAgICBjb25zdCB0cElkczogc3RyaW5nW10gPSBbXTtcbiAgICBpbnB1dC5mb3JFYWNoKChzYSkgPT4ge1xuICAgICAgc2EuYXBwcm92ZXJUcHMuZm9yRWFjaCgoYXBwcm92ZXIpID0+IHtcbiAgICAgICAgdHBJZHMucHVzaChhcHByb3Zlci50cElkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB0cElkcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmVwYXJlQ3JlYXRlKGlucHV0OiBDcmVhdGVUcEFzc2VtYmx5SW5wdXQpIHtcbiAgICBjb25zdCByb290S2V5ID0gYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLmdldEN1cnJlbnRSb290S2V5KCk7XG4gICAgY29uc3Qgc3ViamVjdEtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcbiAgICBjb25zdCByb290S2V5V3JhcHBlZFN1YmplY3RLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLndyYXBLZXkoXG4gICAgICByb290S2V5LFxuICAgICAgc3ViamVjdEtleVxuICAgICk7XG5cbiAgICBjb25zdCB7IGFzc2VtYmx5S2V5LCByYXdBc3NlbWJseUtleSwgYXNzZW1ibHlLZXlQYXJhbXMsIC4uLmFzc2VtYmx5SW5wdXQgfSA9XG4gICAgICBhd2FpdCB0aGlzLnByZXBhcmVBc3NlbWJseSh7XG4gICAgICAgIHJvb3RLZXk6IHJvb3RLZXkuandrLFxuICAgICAgICBzdWJqZWN0S2V5LFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBzbGlwQXNzZW1ibHkgPSBhd2FpdCB0aGlzLnByZXBhcmVTbGlwMzkoXG4gICAgICBpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzLFxuICAgICAgaW5wdXQucXVvcnVtLFxuICAgICAgcmF3QXNzZW1ibHlLZXlcbiAgICApO1xuXG4gICAgY29uc3QgdHBJZHMgPSB0aGlzLmdldElucHV0QXBwcm92ZXJzKGlucHV0LmNyZWF0ZVN1YkFzc2VtYmxpZXMpO1xuXG4gICAgLy8gVGhpcyBzaG91bGQgY29udGFpbiBhbGwgdGhlIFRQcyB0aGF0IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBhc3NlbWJseS5cbiAgICBjb25zdCB0cHMgPSBtYXBFZGdlcyhcbiAgICAgIChcbiAgICAgICAgYXdhaXQgdGhpcy5sckdyYXBoUWwucXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBUcHNLZXlzUXVlcnksXG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBpZHM6IHRwSWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApLnRwc1xuICAgICk7XG5cbiAgICAvLyBGaWxsIGluIHdyYXBwaW5nS2V5SWQgaWYgbm90IHByZXNlbnRcbiAgICB0aGlzLmZpbGxXcmFwcGluZ0tleUlkKGlucHV0LmNyZWF0ZVN1YkFzc2VtYmxpZXMsIHRwcyk7XG5cbiAgICBjb25zdCBjcmVhdGVTdWJBc3NlbWJsaWVzID0gYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlU3ViQXNzZW1ibGllcyh7XG4gICAgICBpbnB1dDogaW5wdXQuY3JlYXRlU3ViQXNzZW1ibGllcyxcbiAgICAgIGFzc2VtYmx5S2V5UGFyYW1zLFxuICAgICAgc2xpcFN1YkFzc2VtYmxpZXM6IHNsaXBBc3NlbWJseS5zdWJBc3NlbWJsaWVzLFxuICAgICAgc3ViamVjdEtleSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YmplY3RDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBzdWJqZWN0S2V5LFxuICAgICAgaW5wdXQuc3ViamVjdENpcGhlckRhdGFDbGVhckpzb24gfHwgJydcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgbXV0YXRpb25JbnB1dDoge1xuICAgICAgICAuLi5hc3NlbWJseUlucHV0LFxuICAgICAgICBzaW5nbGVSZWplY3Q6IGlucHV0LnNpbmdsZVJlamVjdCxcbiAgICAgICAgcXVvcnVtOiBpbnB1dC5xdW9ydW0sXG4gICAgICAgIHN1YmplY3RDaXBoZXJEYXRhLFxuICAgICAgICBjcmVhdGVTdWJBc3NlbWJsaWVzLFxuICAgICAgICByb290S2V5SWQ6IHJvb3RLZXkuaWQsXG4gICAgICAgIHJvb3RLZXlXcmFwcGVkU3ViamVjdEtleSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXNzZW1ibHlBcHByb3ZlcnMoYXNzZW1ibHk6IFRwQXNzZW1ibHlOb2RlKSB7XG4gICAgY29uc3QgdHBJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBGaW5kIGFsbCBUUHMgdGhhdCBiZWxvbmcgdG8gc3ViLWFzc2VtYmxpZXNcbiAgICBtYXBFZGdlcyhhc3NlbWJseS5zdWJBc3NlbWJsaWVzKS5tYXAoKHNhKSA9PiB7XG4gICAgICBtYXBFZGdlcyhzYS5hcHByb3ZlcnMpLmZvckVhY2goKGFwcHJvdmVyKSA9PiB0cElkcy5wdXNoKGFwcHJvdmVyLnRwLmlkKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHBJZHM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZVVwZGF0ZShcbiAgICBpbnB1dDogVXBkYXRlVHBBc3NlbWJseUlucHV0LFxuICAgIGFzc2VtYmx5OiBUcEFzc2VtYmx5Tm9kZSAvLyBUT0RPIHR5cGUgdGhpcyB0byBvbmx5IHdoYXQgd2UgbmVlZC5cbiAgKSB7XG4gICAgaW5wdXQgPSB7XG4gICAgICBjcmVhdGVTdWJBc3NlbWJsaWVzOiBbXSxcbiAgICAgIC4uLmlucHV0LFxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVTdWJBc3NlbWJsaWVzSW5wdXQgPSBpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzIHx8IFtdO1xuICAgIGNvbnN0IHVwZGF0ZVN1YkFzc2VtYmxpZXNJbnB1dCA9IGlucHV0LnVwZGF0ZVN1YkFzc2VtYmxpZXMgfHwgW107XG4gICAgY29uc3QgZGVsZXRlU3ViQXNzZW1ibGllc0lucHV0ID0gaW5wdXQuZGVsZXRlU3ViQXNzZW1ibGllcyB8fCBbXTtcblxuICAgIC8vIE11c3QgaGF2ZSBhdCBsZWFzdCBvbmUuXG4gICAgaWYgKFxuICAgICAgY3JlYXRlU3ViQXNzZW1ibGllc0lucHV0Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgdXBkYXRlU3ViQXNzZW1ibGllc0lucHV0Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgZGVsZXRlU3ViQXNzZW1ibGllc0lucHV0Lmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IExyQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICdNdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIG9mOiBbY3JlYXRlU3ViQXNzZW1ibGllcywgdXBkYXRlU3ViQXNzZW1ibGllcywgZGVsZXRlU3ViQXNzZW1ibGllc10nXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3RLZXkgPSBhd2FpdCB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFJvb3RLZXkoKTtcbiAgICBjb25zdCBzdWJqZWN0S2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoYXNzZW1ibHkuc3ViamVjdEtleS5pZCk7XG5cbiAgICBjb25zdCB7IGFzc2VtYmx5S2V5LCByYXdBc3NlbWJseUtleSwgYXNzZW1ibHlLZXlQYXJhbXMsIC4uLmFzc2VtYmx5SW5wdXQgfSA9XG4gICAgICBhd2FpdCB0aGlzLnByZXBhcmVBc3NlbWJseSh7XG4gICAgICAgIHJvb3RLZXk6IHJvb3RLZXkuandrLFxuICAgICAgICBzdWJqZWN0S2V5OiBzdWJqZWN0S2V5Lmp3ayxcbiAgICAgIH0pO1xuXG4gICAgLy8gRmluZCBhbGwgdGhlIFRQcyB0aGF0IHdlIG5lZWQsIGR1cGxpY2F0ZXMgYXJlIG5vIHByb2JsZW0uXG4gICAgLy8gRXhpc3RpbmcgYXBwcm92ZXJzXG4gICAgY29uc3QgdHBJZHMgPSB0aGlzLmdldEFzc2VtYmx5QXBwcm92ZXJzKGFzc2VtYmx5KS5jb25jYXQoXG4gICAgICB0aGlzLmdldElucHV0QXBwcm92ZXJzKGNyZWF0ZVN1YkFzc2VtYmxpZXNJbnB1dCksXG4gICAgICB0aGlzLmdldElucHV0QXBwcm92ZXJzKHVwZGF0ZVN1YkFzc2VtYmxpZXNJbnB1dClcbiAgICApO1xuXG4gICAgLy8gVGhpcyBzaG91bGQgY29udGFpbiBhbGwgdGhlIFRQcyB0aGF0IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBhc3NlbWJseS5cbiAgICBjb25zdCB0cHMgPSBtYXBFZGdlcyhcbiAgICAgIChcbiAgICAgICAgYXdhaXQgdGhpcy5sckdyYXBoUWwucXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBUcHNLZXlzUXVlcnksXG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBpZHM6IHRwSWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApLnRwc1xuICAgICk7XG5cbiAgICAvLyBBdXRvIGZpbGwgdGhlIHVwZGF0ZVN1YkFzc2VtYmxpZXMgd2l0aCBleGlzdGluZyBzdWIgYXNzZW1ibGllcyBpZiB0aGV5IGFyZSBub3RcbiAgICAvLyBleHBsaWNpdGx5IGRlbGV0ZWQuXG4gICAgbWFwRWRnZXMoYXNzZW1ibHkuc3ViQXNzZW1ibGllcykuZm9yRWFjaCgoZXhpc3RpbmcpID0+IHtcbiAgICAgIC8vIERlbGV0aW5nIGV4aXN0aW5nLCBkb24ndCBpbmNsdWRlIGl0XG4gICAgICBpZiAoZGVsZXRlU3ViQXNzZW1ibGllc0lucHV0LmluY2x1ZGVzKGV4aXN0aW5nLmlkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgaW5wdXRcbiAgICAgIGlmICh1cGRhdGVTdWJBc3NlbWJsaWVzSW5wdXQuc29tZSgoc2EpID0+IHNhLmlkID09PSBleGlzdGluZy5pZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcHByb3ZlclRwczogVHBBc3NlbWJseUFwcHJvdmVySW5wdXRbXSA9IG1hcEVkZ2VzKFxuICAgICAgICBleGlzdGluZy5hcHByb3ZlcnNcbiAgICAgICkubWFwKChhcHByb3ZlcikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRwSWQ6IGFwcHJvdmVyLnRwLmlkLFxuICAgICAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb246IGFwcHJvdmVyLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyQXBwcm92YWxEYXRhQ2xlYXJKc29uOlxuICAgICAgICAgICAgYXBwcm92ZXIuc2hhcmVkQ2lwaGVyQXBwcm92YWxEYXRhQ2xlYXJKc29uLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHVwZGF0ZVN1YkFzc2VtYmxpZXNJbnB1dC5wdXNoKHtcbiAgICAgICAgaWQ6IGV4aXN0aW5nLmlkLFxuICAgICAgICBxdW9ydW06IGV4aXN0aW5nLnF1b3J1bSxcbiAgICAgICAgc2luZ2xlUmVqZWN0OiBleGlzdGluZy5zaW5nbGVSZWplY3QsXG4gICAgICAgIGFwcHJvdmVyVHBzLFxuICAgICAgICBzdWJqZWN0Q2lwaGVyRGF0YUNsZWFySnNvbjogZXhpc3Rpbmcuc3ViamVjdENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEZpbGwgaW4gd3JhcHBpbmdLZXlJZCBpZiBub3QgcHJlc2VudFxuICAgIHRoaXMuZmlsbFdyYXBwaW5nS2V5SWQoY3JlYXRlU3ViQXNzZW1ibGllc0lucHV0LCB0cHMpO1xuICAgIHRoaXMuZmlsbFdyYXBwaW5nS2V5SWQodXBkYXRlU3ViQXNzZW1ibGllc0lucHV0LCB0cHMpO1xuXG4gICAgbGV0IHNsaXBBc3NlbWJseTtcbiAgICB0cnkge1xuICAgICAgc2xpcEFzc2VtYmx5ID0gYXdhaXQgdGhpcy5wcmVwYXJlU2xpcDM5KFxuICAgICAgICAoY3JlYXRlU3ViQXNzZW1ibGllc0lucHV0IHx8IFtdKS5jb25jYXQodXBkYXRlU3ViQXNzZW1ibGllc0lucHV0IHx8IFtdKSxcbiAgICAgICAgaW5wdXQucXVvcnVtLFxuICAgICAgICByYXdBc3NlbWJseUtleVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVE9ETyB0aGlzIHNvbWV0aW1lcyBoYXBwZW5zLiBNYXliZSBtaXNzaW5nIGF3YWl0LlxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoaWxlIGNyZWF0aW5nIHNsaXAgYXNzZW1ibHknLCBlcnJvcik7XG4gICAgfVxuXG4gICAgY29uc3QgY29tbW9uID0ge1xuICAgICAgYXNzZW1ibHlLZXlQYXJhbXMsXG4gICAgICBzdWJqZWN0S2V5OiBzdWJqZWN0S2V5Lmp3ayxcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlU3ViQXNzZW1ibGllcyA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZVN1YkFzc2VtYmxpZXMoe1xuICAgICAgLi4uY29tbW9uLFxuICAgICAgaW5wdXQ6IGNyZWF0ZVN1YkFzc2VtYmxpZXNJbnB1dCxcbiAgICAgIC8vIE5lZWQgdG8gbWF0Y2ggdGhlIHNsaXAgc3ViIGFzc2VtYmxpZXMgdG8gdGhlIGlucHV0XG4gICAgICBzbGlwU3ViQXNzZW1ibGllczogc2xpcEFzc2VtYmx5LnN1YkFzc2VtYmxpZXMuc2xpY2UoXG4gICAgICAgIDAsXG4gICAgICAgIGNyZWF0ZVN1YkFzc2VtYmxpZXNJbnB1dC5sZW5ndGhcbiAgICAgICksXG4gICAgfSk7XG5cbiAgICBjb25zdCB1cGRhdGVTdWJBc3NlbWJsaWVzID0gYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlU3ViQXNzZW1ibGllcyh7XG4gICAgICAuLi5jb21tb24sXG4gICAgICBpbnB1dDogdXBkYXRlU3ViQXNzZW1ibGllc0lucHV0LFxuICAgICAgLy8gQWRkIGFuIG9mZnNldCB0byB0aGUgc3ViIGFzc2VtYmxpZXMgdG8gc2tpcCB0aGUgb25lIHRoYXQgYXJlIGNyZWF0ZWQuXG4gICAgICBzbGlwU3ViQXNzZW1ibGllczogc2xpcEFzc2VtYmx5LnN1YkFzc2VtYmxpZXMuc2xpY2UoXG4gICAgICAgIGNyZWF0ZVN1YkFzc2VtYmxpZXNJbnB1dC5sZW5ndGhcbiAgICAgICksXG4gICAgICBzdWJBc3NlbWJsaWVzOiBhc3NlbWJseS5zdWJBc3NlbWJsaWVzLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3ViamVjdENpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHN1YmplY3RLZXkuandrLFxuICAgICAgaW5wdXQuc3ViamVjdENpcGhlckRhdGFDbGVhckpzb24gPz8gYXNzZW1ibHkuc3ViamVjdENpcGhlckRhdGFDbGVhckpzb25cbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgbXV0YXRpb25JbnB1dDoge1xuICAgICAgICAuLi5hc3NlbWJseUlucHV0LFxuICAgICAgICBzaW5nbGVSZWplY3Q6IGlucHV0LnNpbmdsZVJlamVjdCxcbiAgICAgICAgcXVvcnVtOiBpbnB1dC5xdW9ydW0sXG4gICAgICAgIHN1YmplY3RDaXBoZXJEYXRhLFxuICAgICAgICBzdWJqZWN0S2V5SWQ6IHN1YmplY3RLZXkuaWQsXG4gICAgICAgIGNyZWF0ZVN1YkFzc2VtYmxpZXMsXG4gICAgICAgIHVwZGF0ZVN1YkFzc2VtYmxpZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVBcHByb3Zlcih7XG4gICAgYXBwcm92ZXJJZCxcbiAgICB0cCxcbiAgICBhcHByb3ZlckluZGV4LFxuICAgIHNsaXBTdWJBc3NlbWJseSxcbiAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICBzdWJqZWN0S2V5LFxuICB9OiB7XG4gICAgYXBwcm92ZXJJZD86IHN0cmluZzsgLy8gR2l2ZW4gaWYgdXBkYXRpbmcgZXhpc3RpbmcgYXBwcm92ZXJcbiAgICB0cDogVHBBc3NlbWJseUFwcHJvdmVySW5wdXQ7XG4gICAgYXBwcm92ZXJJbmRleDogbnVtYmVyO1xuICAgIHNsaXBTdWJBc3NlbWJseTogc2xpcC5TdWJBc3NlbWJseTtcbiAgICBhc3NlbWJseUtleVBhcmFtczogb2JqZWN0O1xuICAgIHN1YmplY3RLZXk6IEpXSy5LZXk7XG4gIH0pIHtcbiAgICBjb25zdCB0cFdyYXBwaW5nS2V5ID0gYXdhaXQgdGhpcy5wcmVwYXJlVHBXcmFwcGluZ0tleSh0cCk7XG4gICAgLy8gc2hhcmVkIGtleSBpcyByb3RhdGVkIGV2ZXJ5IHRpbWUuXG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuXG4gICAgLy8gRm9yIFRQIHRvIGFjY2VzcyBzaGFyZWRfa2V5XG4gICAgY29uc3QgdHBXcmFwcGVkU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICB0cFdyYXBwaW5nS2V5Lmp3ayxcbiAgICAgIHNoYXJlZEtleS50b0pTT04odHJ1ZSlcbiAgICApO1xuICAgIC8vIEZvciBzdWJqZWN0IHRvIGFjY2VzcyBzaGFyZWRfa2V5XG4gICAgY29uc3Qgc3ViamVjdEtleVdyYXBwZWRTaGFyZWRLZXkgPVxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIHN1YmplY3RLZXksXG4gICAgICAgIHNoYXJlZEtleS50b0pTT04odHJ1ZSlcbiAgICAgICk7XG5cbiAgICAvLyBJZiBxdW9ydW0gaXMgMSwgdGhlbiB1c2luZyB0aGUgc2FtZSBzaGFyZSBmb3IgZXZlcnkgbWVtYmVyLlxuICAgIGNvbnN0IHNoYXJlID1cbiAgICAgIHNsaXBTdWJBc3NlbWJseS50aHJlc2hvbGQgPT09IDFcbiAgICAgICAgPyBzbGlwU3ViQXNzZW1ibHkuc2hhcmVzWzBdXG4gICAgICAgIDogc2xpcFN1YkFzc2VtYmx5LnNoYXJlc1thcHByb3ZlckluZGV4XTtcblxuICAgIGNvbnN0IHBhcnRpYWxBc3NlbWJseUtleTogUGFydGlhbEFzc2VtYmx5S2V5ID0ge1xuICAgICAgc2xpcDM5OiB7XG4gICAgICAgIHNoYXJlLFxuICAgICAgICBzdWJBc3NlbWJseToge1xuICAgICAgICAgIHF1b3J1bTogc2xpcFN1YkFzc2VtYmx5LnRocmVzaG9sZCxcbiAgICAgICAgICBzaXplOiBzbGlwU3ViQXNzZW1ibHkuc2l6ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coJ3BhcnRpYWxBc3NlbWJseUtleScsIHBhcnRpYWxBc3NlbWJseUtleSk7XG5cbiAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBzaGFyZWRLZXksXG4gICAgICB0cC5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uIHx8ICcnXG4gICAgKTtcblxuICAgIGNvbnN0IHNoYXJlZENpcGhlckFwcHJvdmFsRGF0YSA9XG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgc2hhcmVkS2V5LFxuICAgICAgICB0cC5zaGFyZWRDaXBoZXJBcHByb3ZhbERhdGFDbGVhckpzb24gfHwgJydcbiAgICAgICk7XG5cbiAgICBjb25zdCBzaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXkgPVxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIHNoYXJlZEtleSxcbiAgICAgICAgcGFydGlhbEFzc2VtYmx5S2V5XG4gICAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRwV3JhcHBpbmdLZXlJZDogdHBXcmFwcGluZ0tleS5pZCxcbiAgICAgIHRwV3JhcHBlZFNoYXJlZEtleSxcbiAgICAgIHN1YmplY3RLZXlXcmFwcGVkU2hhcmVkS2V5LFxuICAgICAgc2hhcmVkQ2lwaGVyRGF0YSxcbiAgICAgIHNoYXJlZENpcGhlckFwcHJvdmFsRGF0YSxcbiAgICAgIHNoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleSxcbiAgICAgIGFwcHJvdmVySWQ6IGFwcHJvdmVySWQgfHwgdm9pZCAwLCAvLyBJZiBleGlzdGluZyBhcHByb3ZlclxuICAgICAgdHBJZDogYXBwcm92ZXJJZCA/IHZvaWQgMCA6IHRwLnRwSWQsIC8vIGVsc2UgYWRkaW5nIG5ldyBUUFxuICAgIH07XG4gIH1cblxuICB2YWxpZGF0ZUFwcHJvdmVycyhhcHByb3ZlcnM6IFRwTm9kZVtdKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIGFsbCBhcHByb3ZlcnMgaGF2ZSBta1NoYXJlZEtleS5cbiAgICBmb3IgKGNvbnN0IHRwIG9mIGFwcHJvdmVycykge1xuICAgICAgaWYgKCF0cC5jdXJyZW50VXNlclNoYXJlZEtleS51c2VyU2hhcmVkS2V5Lm1rU2hhcmVkS2V5KSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGB0cCAke3RwLm90aGVyLnVzZXJuYW1lfSBkb2VzIG5vdCBoYXZlIG1rU2hhcmVkS2V5YDtcbiAgICAgICAgY29uc29sZS5sb2cobXNnKTtcbiAgICAgICAgdGhyb3cgbmV3IExyQmFkQXJndW1lbnRFeGNlcHRpb24obXNnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQcmVwYXJlIHNsaXAzOVxuICBwcm90ZWN0ZWQgYXN5bmMgcHJlcGFyZVNsaXAzOShcbiAgICBzdWJBc3NlbWJsaWVzLFxuICAgIGFzc2VtYmx5UXVvcnVtOiBudW1iZXIsXG4gICAgcmF3QXNzZW1ibHlLZXk6IHN0cmluZ1xuICApOiBQcm9taXNlPHNsaXAuQXNzZW1ibHk+IHtcbiAgICAvLyBJcyB0aGVyZSBlbm91Z2ggc3ViIGFzc2VtYmxpZXMgdG8gbWVldCBxdW9ydW1cbiAgICBpZiAoc3ViQXNzZW1ibGllcy5sZW5ndGggPCBhc3NlbWJseVF1b3J1bSkge1xuICAgICAgdGhyb3cgbmV3IExyQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICdOb3QgZW5vdWdoIHN1YiBhc3NlbWJsaWVzIHRvIG1lZXQgcXVvcnVtJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzbGlwQXNzZW1ibHkgPSBuZXcgc2xpcC5Bc3NlbWJseShhc3NlbWJseVF1b3J1bSk7XG5cbiAgICBzdWJBc3NlbWJsaWVzLmZvckVhY2goKHNhLCBpbmRleCkgPT4ge1xuICAgICAgbGV0IGFwcHJvdmVyQ291bnQgPSBzYS5hcHByb3ZlclRwcy5sZW5ndGg7XG5cbiAgICAgIC8vIHNsaXAzOSByZXN0cmljdHMgcXVvcnVtID09IDEgdG8gaGF2ZSBvbmx5IDEgbWVtYmVyLiBTbyB3ZSBqdXN0IHNoYXJlIHRoZSBzYW1lXG4gICAgICAvLyBwYXJ0aWFsIGtleSBmb3IgYWxsIHN1YiBhc3NlbWJseSBtZW1iZXJzLlxuICAgICAgaWYgKHNhLnF1b3J1bSA9PT0gMSkge1xuICAgICAgICBhcHByb3ZlckNvdW50ID0gMTtcbiAgICAgIH1cbiAgICAgIHNsaXBBc3NlbWJseS5hZGRTdWJBc3NlbWJseShcbiAgICAgICAgbmV3IHNsaXAuU3ViQXNzZW1ibHkoaW5kZXgsIHNhLnF1b3J1bSwgYXBwcm92ZXJDb3VudClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLnNsaXAzOVNlcnZpY2UuZ2VuZXJhdGVTaGFyZXMoXG4gICAgICByYXdBc3NlbWJseUtleSxcbiAgICAgIHRoaXMuc2xpcDM5UGFzc3BocmFzZSxcbiAgICAgIHNsaXBBc3NlbWJseVxuICAgICk7XG4gICAgcmV0dXJuIHNsaXBBc3NlbWJseTtcbiAgfVxufVxuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtYXNzZW1ibHkudHlwZXMuanMiLCJzb3VyY2VSb290IjoiL29wdC9hdGxhc3NpYW4vcGlwZWxpbmVzL2FnZW50L2J1aWxkL3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3RydXN0ZWQtcGFydGllcy90cC1hc3NlbWJseS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSlNPTk9iamVjdCB9IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgKiBhcyBzbGlwIGZyb20gJy4uL2NyeXB0b2dyYXBoeS9zbGlwMzkuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGlhbEFzc2VtYmx5S2V5IHtcbiAgc2xpcDM5OiB7XG4gICAgc2hhcmU6IHNsaXAuU2VjcmV0U2hhcmU7XG4gICAgLy8gTWFpbmx5IGZvciBkZWJ1Z2dpbmcuXG4gICAgc3ViQXNzZW1ibHk6IHtcbiAgICAgIHF1b3J1bTogbnVtYmVyO1xuICAgICAgc2l6ZTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGFzc2VtYmx5S2V5UGFyYW1zOiBvYmplY3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlVHBTdWJBc3NlbWJseUlucHV0IHtcbiAgcXVvcnVtOiBudW1iZXI7XG4gIHNpbmdsZVJlamVjdDogYm9vbGVhbjtcbiAgYXBwcm92ZXJUcHM6IFRwQXNzZW1ibHlBcHByb3ZlcklucHV0W107IC8vIE1ha2UgdGhpcyBleHBsaWNpdCB0eXBpbmcsIG1heWJlIHVzZSB0cyB0byBwaWNrIG1lbWJlcnNcbiAgc3ViamVjdENpcGhlckRhdGFDbGVhckpzb24/OiBKU09OT2JqZWN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVRwU3ViQXNzZW1ibHlJbnB1dCBleHRlbmRzIENyZWF0ZVRwU3ViQXNzZW1ibHlJbnB1dCB7XG4gIGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHBBc3NlbWJseUlucHV0IHtcbiAgcXVvcnVtOiBudW1iZXI7XG4gIHNpbmdsZVJlamVjdDogYm9vbGVhbjtcbiAgc3ViamVjdENpcGhlckRhdGFDbGVhckpzb24/OiBKU09OT2JqZWN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVRwQXNzZW1ibHlJbnB1dCBleHRlbmRzIFRwQXNzZW1ibHlJbnB1dCB7XG4gIGNyZWF0ZVN1YkFzc2VtYmxpZXM6IENyZWF0ZVRwU3ViQXNzZW1ibHlJbnB1dFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVRwQXNzZW1ibHlJbnB1dCBleHRlbmRzIFRwQXNzZW1ibHlJbnB1dCB7XG4gIGNyZWF0ZVN1YkFzc2VtYmxpZXM/OiBDcmVhdGVUcFN1YkFzc2VtYmx5SW5wdXRbXTtcbiAgdXBkYXRlU3ViQXNzZW1ibGllcz86IFVwZGF0ZVRwU3ViQXNzZW1ibHlJbnB1dFtdO1xuICBkZWxldGVTdWJBc3NlbWJsaWVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHBBc3NlbWJseUFwcHJvdmVySW5wdXQge1xuICB0cElkOiBzdHJpbmc7XG4gIC8vIFRoaXMgd3JhcHBpbmcga2V5IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGUgc2hhcmVkIGtleSBiZXR3ZWVuIHRoZSBjdXJyZW50IHVzZXJcbiAgLy8gYW5kIHRoZSBUUC4gVGhpcyBjYW4gYmUgZWl0aGVyIHRoZSBzaGFyZWRLZXkgb3IgbWtTaGFyZWRLZXkgZGVwZW5kaW5nIG9uIHRoZSBtdXRhdGlvbi5cbiAgLy8gZWcuIGZvciB0cCBwYXNzd29yZCByZXN0LCB3ZSB3YW50IHRvIHVzZSBta1NoYXJlZEtleSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgY2FzY2FkaW5nXG4gIC8vIGJyZWFjaGVzIG9mIHRoZSByb290IGtleS4gRm9yIHNjZW5hcmlvLCB3ZSB1c2Ugc2hhcmVkS2V5IGJlY2F1c2Ugd2Ugd2FudCB0byBzY2VuYXJpb3NcbiAgLy8gdG8gcGVyc2lzdCBhZnRlciBtYXN0ZXIga2V5IGhhcyBiZWVuIHJlc2V0LlxuICAvLyBOb3cgd2UgaXNzdWUgYSBUUHMgcXVlcnkgdG8gZmlsbCBpbiBtaXNzaW5nIHVwZGF0ZVN1YkFzc2VtYmx5IGZpZWxkcy4gU28gd2UgZ2V0XG4gIC8vIHRoaXMga2V5IGRpcmVjdG9yeSBmcm9tIHRoZSBUUC5cbiAgd3JhcHBpbmdLZXlJZD86IHN0cmluZztcbiAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbj86IEpTT05PYmplY3Q7XG4gIHNoYXJlZENpcGhlckFwcHJvdmFsRGF0YUNsZWFySnNvbj86IEpTT05PYmplY3Q7XG59XG4iXX0=
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { __awaiter, __decorate } from "tslib";
|
|
2
|
-
import { Injectable, Injector, NgZone } from '@angular/core';
|
|
3
|
-
import { JWK } from 'node-jose';
|
|
4
|
-
import { LrMergedMutation, LrMutation, LrService, } from '../api/lr-graphql';
|
|
5
|
-
import { TpAssemblyState, TpClaimApproverState } from '../api/types';
|
|
6
|
-
import { EncryptionService } from '../cryptography/encryption.service';
|
|
7
|
-
import { LrBadStateException } from '../_common/exceptions';
|
|
8
|
-
import { RunOutsideAngular } from '../_common/run-outside-angular';
|
|
9
|
-
import { ApproveTpPasswordResetRequestMutation, RejectTpPasswordResetRequestMutation, SharedTpPasswordResetQuery, SharedTpPasswordResetsQuery, } from './tp-password-reset.gql';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "../cryptography/encryption.service";
|
|
12
|
-
let TpPasswordResetRequestService = class TpPasswordResetRequestService extends LrService {
|
|
13
|
-
constructor(ngZone, injector, encryptionService) {
|
|
14
|
-
super(injector);
|
|
15
|
-
this.ngZone = ngZone;
|
|
16
|
-
this.injector = injector;
|
|
17
|
-
this.encryptionService = encryptionService;
|
|
18
|
-
}
|
|
19
|
-
getSharedResets() {
|
|
20
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
-
return (yield this.query({
|
|
22
|
-
query: SharedTpPasswordResetsQuery,
|
|
23
|
-
})).sharedTpPasswordResets;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
getSharedReset(id) {
|
|
27
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
-
return (yield this.query({
|
|
29
|
-
query: SharedTpPasswordResetQuery,
|
|
30
|
-
variables: {
|
|
31
|
-
id,
|
|
32
|
-
},
|
|
33
|
-
})).sharedTpPasswordReset;
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
activeRequestOrRaise(sharedReset) {
|
|
37
|
-
const state = sharedReset.sharedRequest.claim.state;
|
|
38
|
-
if (state !== TpAssemblyState.CLAIMED) {
|
|
39
|
-
throw new LrBadStateException(`Claim is already in ${state} state.`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
rejectRequest(sharedResetId) {
|
|
43
|
-
return this.mutate(this.rejectRequestMutation(sharedResetId));
|
|
44
|
-
}
|
|
45
|
-
rejectRequestMutation(sharedResetId) {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
const sharedReset = yield this.getSharedReset(sharedResetId);
|
|
48
|
-
this.activeRequestOrRaise(sharedReset);
|
|
49
|
-
return LrMergedMutation.create(sharedReset.sharedRequest.claim.asClaimApprovers.edges
|
|
50
|
-
.filter((edge) => edge.node.state === TpClaimApproverState.CLAIMED)
|
|
51
|
-
.map((edge) => new LrMutation({
|
|
52
|
-
mutation: RejectTpPasswordResetRequestMutation,
|
|
53
|
-
variables: { input: { claimApproverId: edge.node.id } },
|
|
54
|
-
})));
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
approveRequest(sharedResetId, pbkFingerPrint) {
|
|
58
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
return this.lrGraphQL.lrMutate(yield this.approveRequestMutation(sharedResetId, pbkFingerPrint));
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
approveRequestMutation(sharedResetId, pbkFingerPrint) {
|
|
63
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
const sharedReset = yield this.getSharedReset(sharedResetId);
|
|
65
|
-
this.activeRequestOrRaise(sharedReset);
|
|
66
|
-
const pbk = yield JWK.asKey(JSON.parse(sharedReset.sharedRequest.pxk.pbk));
|
|
67
|
-
console.log(pbk.toJSON());
|
|
68
|
-
// TODO <AZ> Verify pbk against pbkFingerPrint
|
|
69
|
-
const claimApprovers = sharedReset.sharedRequest.claim.asClaimApprovers.edges.filter((edge) => edge.node.state === TpClaimApproverState.CLAIMED);
|
|
70
|
-
// A single approver may belong to multiple sub-assemblies. We approve them all here in a single
|
|
71
|
-
// transaction.
|
|
72
|
-
return LrMergedMutation.create(yield Promise.all(claimApprovers.map((approverEdge) => __awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
const ca = approverEdge.node;
|
|
74
|
-
const input = {
|
|
75
|
-
claimApproverId: ca.id,
|
|
76
|
-
receiverApprovals: yield Promise.all(ca.receiverApprovals.edges.map((receiverEdge) => __awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
const ra = receiverEdge.node;
|
|
78
|
-
return {
|
|
79
|
-
receiverApprovalId: ra.id,
|
|
80
|
-
receiverCipher: '',
|
|
81
|
-
receiverCipherPartialAssemblyKey: yield this.encryptionService.encryptToString(pbk, ca.sharedCipherPartialAssemblyKeyClearJson),
|
|
82
|
-
};
|
|
83
|
-
}))),
|
|
84
|
-
};
|
|
85
|
-
console.log(input);
|
|
86
|
-
return new LrMutation({
|
|
87
|
-
mutation: ApproveTpPasswordResetRequestMutation,
|
|
88
|
-
variables: {
|
|
89
|
-
input,
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
}))));
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
TpPasswordResetRequestService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TpPasswordResetRequestService_Factory() { return new TpPasswordResetRequestService(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.EncryptionService)); }, token: TpPasswordResetRequestService, providedIn: "root" });
|
|
97
|
-
TpPasswordResetRequestService.decorators = [
|
|
98
|
-
{ type: Injectable, args: [{
|
|
99
|
-
providedIn: 'root',
|
|
100
|
-
},] }
|
|
101
|
-
];
|
|
102
|
-
TpPasswordResetRequestService.ctorParameters = () => [
|
|
103
|
-
{ type: NgZone },
|
|
104
|
-
{ type: Injector },
|
|
105
|
-
{ type: EncryptionService }
|
|
106
|
-
];
|
|
107
|
-
TpPasswordResetRequestService = __decorate([
|
|
108
|
-
RunOutsideAngular({
|
|
109
|
-
ngZoneName: 'ngZone',
|
|
110
|
-
})
|
|
111
|
-
], TpPasswordResetRequestService);
|
|
112
|
-
export { TpPasswordResetRequestService };
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtcGFzc3dvcmQtcmVzZXQtcmVxdWVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi90cnVzdGVkLXBhcnRpZXMvdHAtcGFzc3dvcmQtcmVzZXQtcmVxdWVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFFVixTQUFTLEdBQ1YsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsb0NBQW9DLEVBQ3BDLDBCQUEwQixFQUMxQiwyQkFBMkIsR0FDNUIsTUFBTSx5QkFBeUIsQ0FBQzs7O0lBUXBCLDZCQUE2QixTQUE3Qiw2QkFBOEIsU0FBUSxTQUFTO0lBQzFELFlBQ1UsTUFBYyxFQUNkLFFBQWtCLEVBQ2xCLGlCQUFvQztRQUU1QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKUixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBRzlDLENBQUM7SUFFSyxlQUFlOztZQUNuQixPQUFPLENBQ0wsTUFBTSxJ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dG9yLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEpXSyB9IGZyb20gJ25vZGUtam9zZSc7XG5pbXBvcnQge1xuICBMckdyYXBoUUxTZXJ2aWNlLFxuICBMck1lcmdlZE11dGF0aW9uLFxuICBMck11dGF0aW9uLFxuICBMck11dGF0aW9uQmFzZSxcbiAgTHJTZXJ2aWNlLFxufSBmcm9tICcuLi9hcGkvbHItZ3JhcGhxbCc7XG5pbXBvcnQgeyBUcEFzc2VtYmx5U3RhdGUsIFRwQ2xhaW1BcHByb3ZlclN0YXRlIH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBMckJhZFN0YXRlRXhjZXB0aW9uIH0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEFwcHJvdmVUcFBhc3N3b3JkUmVzZXRSZXF1ZXN0TXV0YXRpb24sXG4gIFJlamVjdFRwUGFzc3dvcmRSZXNldFJlcXVlc3RNdXRhdGlvbixcbiAgU2hhcmVkVHBQYXNzd29yZFJlc2V0UXVlcnksXG4gIFNoYXJlZFRwUGFzc3dvcmRSZXNldHNRdWVyeSxcbn0gZnJvbSAnLi90cC1wYXNzd29yZC1yZXNldC5ncWwnO1xuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVHBQYXNzd29yZFJlc2V0UmVxdWVzdFNlcnZpY2UgZXh0ZW5kcyBMclNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIGFzeW5jIGdldFNoYXJlZFJlc2V0cygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5xdWVyeSh7XG4gICAgICAgIHF1ZXJ5OiBTaGFyZWRUcFBhc3N3b3JkUmVzZXRzUXVlcnksXG4gICAgICB9KVxuICAgICkuc2hhcmVkVHBQYXNzd29yZFJlc2V0cztcbiAgfVxuXG4gIGFzeW5jIGdldFNoYXJlZFJlc2V0KGlkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgICBxdWVyeTogU2hhcmVkVHBQYXNzd29yZFJlc2V0UXVlcnksXG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApLnNoYXJlZFRwUGFzc3dvcmRSZXNldDtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZlUmVxdWVzdE9yUmFpc2Uoc2hhcmVkUmVzZXQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHNoYXJlZFJlc2V0LnNoYXJlZFJlcXVlc3QuY2xhaW0uc3RhdGU7XG4gICAgaWYgKHN0YXRlICE9PSBUcEFzc2VtYmx5U3RhdGUuQ0xBSU1FRCkge1xuICAgICAgdGhyb3cgbmV3IExyQmFkU3RhdGVFeGNlcHRpb24oYENsYWltIGlzIGFscmVhZHkgaW4gJHtzdGF0ZX0gc3RhdGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmVqZWN0UmVxdWVzdChzaGFyZWRSZXNldElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZWplY3RSZXF1ZXN0TXV0YXRpb24oc2hhcmVkUmVzZXRJZCkpO1xuICB9XG5cbiAgYXN5bmMgcmVqZWN0UmVxdWVzdE11dGF0aW9uKHNoYXJlZFJlc2V0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNoYXJlZFJlc2V0ID0gYXdhaXQgdGhpcy5nZXRTaGFyZWRSZXNldChzaGFyZWRSZXNldElkKTtcblxuICAgIHRoaXMuYWN0aXZlUmVxdWVzdE9yUmFpc2Uoc2hhcmVkUmVzZXQpO1xuXG4gICAgcmV0dXJuIExyTWVyZ2VkTXV0YXRpb24uY3JlYXRlKFxuICAgICAgc2hhcmVkUmVzZXQuc2hhcmVkUmVxdWVzdC5jbGFpbS5hc0NsYWltQXBwcm92ZXJzLmVkZ2VzXG4gICAgICAgIC5maWx0ZXIoKGVkZ2UpID0+IGVkZ2Uubm9kZS5zdGF0ZSA9PT0gVHBDbGFpbUFwcHJvdmVyU3RhdGUuQ0xBSU1FRClcbiAgICAgICAgLm1hcChcbiAgICAgICAgICAoZWRnZSkgPT5cbiAgICAgICAgICAgIG5ldyBMck11dGF0aW9uKHtcbiAgICAgICAgICAgICAgbXV0YXRpb246IFJlamVjdFRwUGFzc3dvcmRSZXNldFJlcXVlc3RNdXRhdGlvbixcbiAgICAgICAgICAgICAgdmFyaWFibGVzOiB7IGlucHV0OiB7IGNsYWltQXBwcm92ZXJJZDogZWRnZS5ub2RlLmlkIH0gfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYXBwcm92ZVJlcXVlc3Qoc2hhcmVkUmVzZXRJZDogc3RyaW5nLCBwYmtGaW5nZXJQcmludD86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmxyR3JhcGhRTC5sck11dGF0ZShcbiAgICAgIGF3YWl0IHRoaXMuYXBwcm92ZVJlcXVlc3RNdXRhdGlvbihzaGFyZWRSZXNldElkLCBwYmtGaW5nZXJQcmludClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYXBwcm92ZVJlcXVlc3RNdXRhdGlvbihzaGFyZWRSZXNldElkOiBzdHJpbmcsIHBia0ZpbmdlclByaW50Pzogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2hhcmVkUmVzZXQgPSBhd2FpdCB0aGlzLmdldFNoYXJlZFJlc2V0KHNoYXJlZFJlc2V0SWQpO1xuXG4gICAgdGhpcy5hY3RpdmVSZXF1ZXN0T3JSYWlzZShzaGFyZWRSZXNldCk7XG5cbiAgICBjb25zdCBwYmsgPSBhd2FpdCBKV0suYXNLZXkoSlNPTi5wYXJzZShzaGFyZWRSZXNldC5zaGFyZWRSZXF1ZXN0LnB4ay5wYmspKTtcbiAgICBjb25zb2xlLmxvZyhwYmsudG9KU09OKCkpO1xuXG4gICAgLy8gVE9ETyA8QVo+IFZlcmlmeSBwYmsgYWdhaW5zdCBwYmtGaW5nZXJQcmludFxuXG4gICAgY29uc3QgY2xhaW1BcHByb3ZlcnMgPSBzaGFyZWRSZXNldC5zaGFyZWRSZXF1ZXN0LmNsYWltLmFzQ2xhaW1BcHByb3ZlcnMuZWRnZXMuZmlsdGVyKFxuICAgICAgKGVkZ2UpID0+IGVkZ2Uubm9kZS5zdGF0ZSA9PT0gVHBDbGFpbUFwcHJvdmVyU3RhdGUuQ0xBSU1FRFxuICAgICk7XG5cbiAgICAvLyBBIHNpbmdsZSBhcHByb3ZlciBtYXkgYmVsb25nIHRvIG11bHRpcGxlIHN1Yi1hc3NlbWJsaWVzLiBXZSBhcHByb3ZlIHRoZW0gYWxsIGhlcmUgaW4gYSBzaW5nbGVcbiAgICAvLyB0cmFuc2FjdGlvbi5cbiAgICByZXR1cm4gTHJNZXJnZWRNdXRhdGlvbi5jcmVhdGUoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgY2xhaW1BcHByb3ZlcnMubWFwKGFzeW5jIChhcHByb3ZlckVkZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBjYSA9IGFwcHJvdmVyRWRnZS5ub2RlO1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgICAgICAgY2xhaW1BcHByb3ZlcklkOiBjYS5pZCxcbiAgICAgICAgICAgIHJlY2VpdmVyQXBwcm92YWxzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgY2EucmVjZWl2ZXJBcHByb3ZhbHMuZWRnZXMubWFwKGFzeW5jIChyZWNlaXZlckVkZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYSA9IHJlY2VpdmVyRWRnZS5ub2RlO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICByZWNlaXZlckFwcHJvdmFsSWQ6IHJhLmlkLFxuICAgICAgICAgICAgICAgICAgcmVjZWl2ZXJDaXBoZXI6ICcnLFxuICAgICAgICAgICAgICAgICAgcmVjZWl2ZXJDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXk6IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBwYmssXG4gICAgICAgICAgICAgICAgICAgIGNhLnNoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleUNsZWFySnNvblxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc29sZS5sb2coaW5wdXQpO1xuXG4gICAgICAgICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgICAgICAgIG11dGF0aW9uOiBBcHByb3ZlVHBQYXNzd29yZFJlc2V0UmVxdWVzdE11dGF0aW9uLFxuICAgICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICB9XG59XG4iXX0=
|