@lifeready/core 0.6.0-beta.1
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/README.md +62 -0
- package/bundles/lifeready-core.umd.js +15939 -0
- package/bundles/lifeready-core.umd.js.map +1 -0
- package/bundles/lifeready-core.umd.min.js +2 -0
- package/bundles/lifeready-core.umd.min.js.map +1 -0
- package/esm2015/lib/_common/ast.js +40 -0
- package/esm2015/lib/_common/deferred-promise.js +24 -0
- package/esm2015/lib/_common/exceptions.js +157 -0
- package/esm2015/lib/_common/queries.gql.js +190 -0
- package/esm2015/lib/_common/run-outside-angular.js +79 -0
- package/esm2015/lib/_common/types.js +1 -0
- package/esm2015/lib/_common/utils.js +44 -0
- package/esm2015/lib/api/contact-card.gql.js +79 -0
- package/esm2015/lib/api/contact-card.service.js +154 -0
- package/esm2015/lib/api/contact-card2.gql.js +60 -0
- package/esm2015/lib/api/contact-card2.service.js +103 -0
- package/esm2015/lib/api/file.service.js +74 -0
- package/esm2015/lib/api/item2.gql.js +110 -0
- package/esm2015/lib/api/item2.service.js +311 -0
- package/esm2015/lib/api/key-exchange.gql.js +188 -0
- package/esm2015/lib/api/key-exchange.service.js +442 -0
- package/esm2015/lib/api/key-exchange.types.js +18 -0
- package/esm2015/lib/api/key-exchange2.gql.js +171 -0
- package/esm2015/lib/api/key-exchange2.service.js +479 -0
- package/esm2015/lib/api/lock.gql.js +40 -0
- package/esm2015/lib/api/lock.service.js +64 -0
- package/esm2015/lib/api/lr-apollo.service.js +46 -0
- package/esm2015/lib/api/lr-graphql/index.js +6 -0
- package/esm2015/lib/api/lr-graphql/lr-graphql.service.js +155 -0
- package/esm2015/lib/api/lr-graphql/lr-merged-mutation.js +213 -0
- package/esm2015/lib/api/lr-graphql/lr-mutation-base.js +51 -0
- package/esm2015/lib/api/lr-graphql/lr-mutation.js +48 -0
- package/esm2015/lib/api/lr-graphql/lr.service.js +18 -0
- package/esm2015/lib/api/message.service.js +138 -0
- package/esm2015/lib/api/persist.service.js +181 -0
- package/esm2015/lib/api/query-processor/common-processors.service.js +93 -0
- package/esm2015/lib/api/query-processor/index.js +3 -0
- package/esm2015/lib/api/query-processor/query-processor.service.js +192 -0
- package/esm2015/lib/api/query-processor/tp-password-reset-processor.service.js +109 -0
- package/esm2015/lib/api/shared-contact-card.service.js +119 -0
- package/esm2015/lib/api/shared-contact-card2.gql.js +41 -0
- package/esm2015/lib/api/shared-contact-card2.service.js +117 -0
- package/esm2015/lib/api/time.service.js +146 -0
- package/esm2015/lib/api/types/graphql.types.js +7 -0
- package/esm2015/lib/api/types/index.js +3 -0
- package/esm2015/lib/api/types/lr-graphql.types.js +71 -0
- package/esm2015/lib/auth/auth.config.js +57 -0
- package/esm2015/lib/auth/auth.gql.js +48 -0
- package/esm2015/lib/auth/auth.types.js +27 -0
- package/esm2015/lib/auth/idle.service.js +168 -0
- package/esm2015/lib/auth/idle.types.js +7 -0
- package/esm2015/lib/auth/lbop.service.js +355 -0
- package/esm2015/lib/auth/life-ready-auth.service.js +333 -0
- package/esm2015/lib/auth/password.service.js +320 -0
- package/esm2015/lib/auth/register.service.js +172 -0
- package/esm2015/lib/auth/two-factor.service.js +74 -0
- package/esm2015/lib/category/category-meta.service.js +99 -0
- package/esm2015/lib/category/category.gql.js +406 -0
- package/esm2015/lib/category/category.service.js +390 -0
- package/esm2015/lib/category/category.types.js +29 -0
- package/esm2015/lib/cryptography/cryptography.types.js +11 -0
- package/esm2015/lib/cryptography/encryption.service.js +189 -0
- package/esm2015/lib/cryptography/key-factory.service.js +237 -0
- package/esm2015/lib/cryptography/key-graph.service.js +280 -0
- package/esm2015/lib/cryptography/key-meta.service.js +200 -0
- package/esm2015/lib/cryptography/key.service.js +124 -0
- package/esm2015/lib/cryptography/slip39.service.js +169 -0
- package/esm2015/lib/cryptography/web-crypto.service.js +29 -0
- package/esm2015/lib/life-ready.config.js +84 -0
- package/esm2015/lib/life-ready.module.js +74 -0
- package/esm2015/lib/plan/plan.gql.js +123 -0
- package/esm2015/lib/plan/plan.service.js +149 -0
- package/esm2015/lib/plan/plan.types.js +11 -0
- package/esm2015/lib/record/record-attachment.service.js +101 -0
- package/esm2015/lib/record/record.gql.js +179 -0
- package/esm2015/lib/record/record.service.js +206 -0
- package/esm2015/lib/record/record.types.js +15 -0
- package/esm2015/lib/record-type/record-type.service.js +75 -0
- package/esm2015/lib/record-type/record-type.types.js +28 -0
- package/esm2015/lib/scenario/approvals/scenario-approval.gql.js +105 -0
- package/esm2015/lib/scenario/approvals/scenario-approval.types.js +1 -0
- package/esm2015/lib/scenario/approvals/scenario-approver.service.js +300 -0
- package/esm2015/lib/scenario/claimants/scenario-claimant.gql.js +52 -0
- package/esm2015/lib/scenario/claimants/scenario-claimant.service.js +97 -0
- package/esm2015/lib/scenario/claimants/scenario-claimant.types.js +1 -0
- package/esm2015/lib/scenario/receivers/scenario-receiver.gql.js +150 -0
- package/esm2015/lib/scenario/receivers/scenario-receiver.service.js +229 -0
- package/esm2015/lib/scenario/receivers/scenario-receiver.types.js +1 -0
- package/esm2015/lib/scenario/scenario-setup.service.js +269 -0
- package/esm2015/lib/scenario/scenario.gql.js +368 -0
- package/esm2015/lib/scenario/scenario.service.js +611 -0
- package/esm2015/lib/scenario/scenario.types.js +64 -0
- package/esm2015/lib/search/search.gql.js +62 -0
- package/esm2015/lib/search/search.service.js +156 -0
- package/esm2015/lib/search/search.types.js +6 -0
- package/esm2015/lib/trusted-parties/tp-password-reset-request.service.js +112 -0
- package/esm2015/lib/trusted-parties/tp-password-reset-user.service.js +266 -0
- package/esm2015/lib/trusted-parties/tp-password-reset.gql.js +232 -0
- package/esm2015/lib/trusted-parties/tp-password-reset.service.js +300 -0
- package/esm2015/lib/trusted-parties/trusted-party.gql.js +148 -0
- package/esm2015/lib/trusted-parties/trusted-party.service.js +326 -0
- package/esm2015/lib/trusted-parties/trusted-party.types.js +41 -0
- package/esm2015/lib/trusted-parties/trusted-party2.gql.js +87 -0
- package/esm2015/lib/trusted-parties/trusted-party2.service.js +215 -0
- package/esm2015/lib/users/profile-details.service.js +214 -0
- package/esm2015/lib/users/profile.gql.js +97 -0
- package/esm2015/lib/users/profile.service.js +169 -0
- package/esm2015/lib/users/profile.types.js +34 -0
- package/esm2015/lib/users/user.gql.js +60 -0
- package/esm2015/lib/users/user.service.js +79 -0
- package/esm2015/lib/users/user.types.js +5 -0
- package/esm2015/lifeready-core.js +10 -0
- package/esm2015/public-api.js +81 -0
- package/fesm2015/lifeready-core.js +13290 -0
- package/fesm2015/lifeready-core.js.map +1 -0
- package/lib/_common/ast.d.ts +11 -0
- package/lib/_common/deferred-promise.d.ts +12 -0
- package/lib/_common/exceptions.d.ts +109 -0
- package/lib/_common/queries.gql.d.ts +10 -0
- package/lib/_common/run-outside-angular.d.ts +14 -0
- package/lib/_common/types.d.ts +10 -0
- package/lib/_common/utils.d.ts +3 -0
- package/lib/api/contact-card.gql.d.ts +7 -0
- package/lib/api/contact-card.service.d.ts +52 -0
- package/lib/api/contact-card2.gql.d.ts +34 -0
- package/lib/api/contact-card2.service.d.ts +49 -0
- package/lib/api/file.service.d.ts +18 -0
- package/lib/api/item2.gql.d.ts +96 -0
- package/lib/api/item2.service.d.ts +177 -0
- package/lib/api/key-exchange.gql.d.ts +9 -0
- package/lib/api/key-exchange.service.d.ts +39 -0
- package/lib/api/key-exchange.types.d.ts +196 -0
- package/lib/api/key-exchange2.gql.d.ts +125 -0
- package/lib/api/key-exchange2.service.d.ts +187 -0
- package/lib/api/lock.gql.d.ts +27 -0
- package/lib/api/lock.service.d.ts +25 -0
- package/lib/api/lr-apollo.service.d.ts +15 -0
- package/lib/api/lr-graphql/index.d.ts +5 -0
- package/lib/api/lr-graphql/lr-graphql.service.d.ts +60 -0
- package/lib/api/lr-graphql/lr-merged-mutation.d.ts +27 -0
- package/lib/api/lr-graphql/lr-mutation-base.d.ts +28 -0
- package/lib/api/lr-graphql/lr-mutation.d.ts +8 -0
- package/lib/api/lr-graphql/lr.service.d.ts +9 -0
- package/lib/api/message.service.d.ts +58 -0
- package/lib/api/persist.service.d.ts +31 -0
- package/lib/api/query-processor/common-processors.service.d.ts +36 -0
- package/lib/api/query-processor/index.d.ts +2 -0
- package/lib/api/query-processor/query-processor.service.d.ts +18 -0
- package/lib/api/query-processor/tp-password-reset-processor.service.d.ts +15 -0
- package/lib/api/shared-contact-card.service.d.ts +33 -0
- package/lib/api/shared-contact-card2.gql.d.ts +36 -0
- package/lib/api/shared-contact-card2.service.d.ts +45 -0
- package/lib/api/time.service.d.ts +16 -0
- package/lib/api/types/graphql.types.d.ts +29 -0
- package/lib/api/types/index.d.ts +2 -0
- package/lib/api/types/lr-graphql.types.d.ts +385 -0
- package/lib/auth/auth.config.d.ts +5 -0
- package/lib/auth/auth.gql.d.ts +15 -0
- package/lib/auth/auth.types.d.ts +66 -0
- package/lib/auth/idle.service.d.ts +40 -0
- package/lib/auth/idle.types.d.ts +10 -0
- package/lib/auth/lbop.service.d.ts +91 -0
- package/lib/auth/life-ready-auth.service.d.ts +46 -0
- package/lib/auth/password.service.d.ts +78 -0
- package/lib/auth/register.service.d.ts +25 -0
- package/lib/auth/two-factor.service.d.ts +15 -0
- package/lib/category/category-meta.service.d.ts +23 -0
- package/lib/category/category.gql.d.ts +45 -0
- package/lib/category/category.service.d.ts +67 -0
- package/lib/category/category.types.d.ts +79 -0
- package/lib/cryptography/cryptography.types.d.ts +83 -0
- package/lib/cryptography/encryption.service.d.ts +41 -0
- package/lib/cryptography/key-factory.service.d.ts +38 -0
- package/lib/cryptography/key-graph.service.d.ts +33 -0
- package/lib/cryptography/key-meta.service.d.ts +44 -0
- package/lib/cryptography/key.service.d.ts +36 -0
- package/lib/cryptography/slip39.service.d.ts +43 -0
- package/lib/cryptography/web-crypto.service.d.ts +5 -0
- package/lib/life-ready.config.d.ts +14 -0
- package/lib/life-ready.module.d.ts +5 -0
- package/lib/plan/plan.gql.d.ts +11 -0
- package/lib/plan/plan.service.d.ts +33 -0
- package/lib/plan/plan.types.d.ts +31 -0
- package/lib/record/record-attachment.service.d.ts +16 -0
- package/lib/record/record.gql.d.ts +14 -0
- package/lib/record/record.service.d.ts +25 -0
- package/lib/record/record.types.d.ts +57 -0
- package/lib/record-type/record-type.service.d.ts +11 -0
- package/lib/record-type/record-type.types.d.ts +50 -0
- package/lib/scenario/approvals/scenario-approval.gql.d.ts +7 -0
- package/lib/scenario/approvals/scenario-approval.types.d.ts +63 -0
- package/lib/scenario/approvals/scenario-approver.service.d.ts +32 -0
- package/lib/scenario/claimants/scenario-claimant.gql.d.ts +5 -0
- package/lib/scenario/claimants/scenario-claimant.service.d.ts +17 -0
- package/lib/scenario/claimants/scenario-claimant.types.d.ts +18 -0
- package/lib/scenario/receivers/scenario-receiver.gql.d.ts +8 -0
- package/lib/scenario/receivers/scenario-receiver.service.d.ts +30 -0
- package/lib/scenario/receivers/scenario-receiver.types.d.ts +54 -0
- package/lib/scenario/scenario-setup.service.d.ts +22 -0
- package/lib/scenario/scenario.gql.d.ts +34 -0
- package/lib/scenario/scenario.service.d.ts +58 -0
- package/lib/scenario/scenario.types.d.ts +217 -0
- package/lib/search/search.gql.d.ts +1 -0
- package/lib/search/search.service.d.ts +25 -0
- package/lib/search/search.types.d.ts +20 -0
- package/lib/trusted-parties/tp-password-reset-request.service.d.ts +20 -0
- package/lib/trusted-parties/tp-password-reset-user.service.d.ts +41 -0
- package/lib/trusted-parties/tp-password-reset.gql.d.ts +218 -0
- package/lib/trusted-parties/tp-password-reset.service.d.ts +131 -0
- package/lib/trusted-parties/trusted-party.gql.d.ts +9 -0
- package/lib/trusted-parties/trusted-party.service.d.ts +44 -0
- package/lib/trusted-parties/trusted-party.types.d.ts +102 -0
- package/lib/trusted-parties/trusted-party2.gql.d.ts +79 -0
- package/lib/trusted-parties/trusted-party2.service.d.ts +114 -0
- package/lib/users/profile-details.service.d.ts +21 -0
- package/lib/users/profile.gql.d.ts +11 -0
- package/lib/users/profile.service.d.ts +35 -0
- package/lib/users/profile.types.d.ts +96 -0
- package/lib/users/user.gql.d.ts +9 -0
- package/lib/users/user.service.d.ts +12 -0
- package/lib/users/user.types.d.ts +23 -0
- package/lifeready-core.d.ts +9 -0
- package/lifeready-core.metadata.json +1 -0
- package/package.json +29 -0
- package/public-api.d.ts +77 -0
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
var TpPasswordResetService_1;
|
|
2
|
+
import { __awaiter, __decorate, __rest } from "tslib";
|
|
3
|
+
import { Injectable, Injector, NgZone } from '@angular/core';
|
|
4
|
+
import { KeyService } from '../cryptography/key.service';
|
|
5
|
+
import { EncryptionService } from '../cryptography/encryption.service';
|
|
6
|
+
import { CreateTpPasswordResetMutation, DeleteTpPasswordResetMutation, TpPasswordResetQuery, UpdateTpPasswordResetMutation, CancelTpPasswordResetRequestMutation, } from './tp-password-reset.gql';
|
|
7
|
+
import { KeyGraphService } from '../cryptography/key-graph.service';
|
|
8
|
+
import * as slip from '../cryptography/slip39.service';
|
|
9
|
+
import { LrBadArgumentException, LrBadLogicException, } from '../_common/exceptions';
|
|
10
|
+
import { KeyFactoryService } from '../cryptography/key-factory.service';
|
|
11
|
+
import { LrMutation, LrService } from '../api/lr-graphql';
|
|
12
|
+
import { RunOutsideAngular } from '../_common/run-outside-angular';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "../cryptography/key.service";
|
|
15
|
+
import * as i2 from "../cryptography/key-factory.service";
|
|
16
|
+
import * as i3 from "../cryptography/encryption.service";
|
|
17
|
+
import * as i4 from "../cryptography/key-graph.service";
|
|
18
|
+
import * as i5 from "../cryptography/slip39.service";
|
|
19
|
+
export class CreateSubAssembliesInput {
|
|
20
|
+
}
|
|
21
|
+
export class UpdateSubAssembliesInput extends CreateSubAssembliesInput {
|
|
22
|
+
}
|
|
23
|
+
export class CreateTpPasswordResetInput {
|
|
24
|
+
}
|
|
25
|
+
export class UpdateTpPasswordResetInput extends CreateTpPasswordResetInput {
|
|
26
|
+
}
|
|
27
|
+
let TpPasswordResetService = TpPasswordResetService_1 = class TpPasswordResetService extends LrService {
|
|
28
|
+
constructor(ngZone, injector, keyService, keyFactory, encryptionService, keyGraph, slip39Service) {
|
|
29
|
+
super(injector);
|
|
30
|
+
this.ngZone = ngZone;
|
|
31
|
+
this.injector = injector;
|
|
32
|
+
this.keyService = keyService;
|
|
33
|
+
this.keyFactory = keyFactory;
|
|
34
|
+
this.encryptionService = encryptionService;
|
|
35
|
+
this.keyGraph = keyGraph;
|
|
36
|
+
this.slip39Service = slip39Service;
|
|
37
|
+
}
|
|
38
|
+
getReset() {
|
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
return (yield this.query({
|
|
41
|
+
query: TpPasswordResetQuery,
|
|
42
|
+
})).tpPasswordReset;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
createReset(input) {
|
|
46
|
+
return this.mutate(this.createResetMutation(input));
|
|
47
|
+
}
|
|
48
|
+
createResetMutation(input) {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const { mutationInput } = yield this._createReset(input, (rawAssemblyKey) => __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
return this.prepareSlip39(input.createSubAssemblies, input.quorum, rawAssemblyKey);
|
|
52
|
+
}));
|
|
53
|
+
return new LrMutation({
|
|
54
|
+
mutation: CreateTpPasswordResetMutation,
|
|
55
|
+
variables: {
|
|
56
|
+
input: mutationInput,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
deleteReset() {
|
|
62
|
+
return this.mutate(this.deleteResetMutation());
|
|
63
|
+
}
|
|
64
|
+
deleteResetMutation() {
|
|
65
|
+
return new LrMutation({
|
|
66
|
+
mutation: DeleteTpPasswordResetMutation,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
updateReset(input) {
|
|
70
|
+
return this.mutate(this.updateResetMutation(input));
|
|
71
|
+
}
|
|
72
|
+
updateResetMutation(input) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
const passwordReset = yield this.getReset();
|
|
75
|
+
const { mutationInput, subjectKey, slipAssembly, assemblyKeyParams, } = yield this._createReset(input, (rawAssemblyKey) => __awaiter(this, void 0, void 0, function* () {
|
|
76
|
+
return this.prepareSlip39(input.createSubAssemblies.concat(input.updateSubAssemblies), input.quorum, rawAssemblyKey);
|
|
77
|
+
}));
|
|
78
|
+
const updateSubAssemblies = yield Promise.all(input.updateSubAssemblies.map((sa, saIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
const subjectCipherData = yield this.encryptionService.encryptToString(subjectKey, {
|
|
80
|
+
name: sa.name,
|
|
81
|
+
});
|
|
82
|
+
// Get the existing sub-assembly
|
|
83
|
+
const existingSa = passwordReset.assembly.subAssemblies.edges.find((edge) => edge.node.id === sa.id).node;
|
|
84
|
+
// Get approvers that do not exist yet
|
|
85
|
+
const createApprovers = [];
|
|
86
|
+
const updateApprovers = [];
|
|
87
|
+
sa.approverTps.forEach((tp) => {
|
|
88
|
+
var _a;
|
|
89
|
+
const approver = (_a = existingSa.approvers.edges.find((edge) => edge.node.tp.id === tp.id)) === null || _a === void 0 ? void 0 : _a.node;
|
|
90
|
+
if (approver) {
|
|
91
|
+
updateApprovers.push({
|
|
92
|
+
tp,
|
|
93
|
+
approverId: approver.id,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
createApprovers.push({
|
|
98
|
+
tp,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return {
|
|
103
|
+
subAssemblyId: sa.id,
|
|
104
|
+
singleReject: sa.singleReject,
|
|
105
|
+
quorum: sa.quorum,
|
|
106
|
+
subjectCipherData,
|
|
107
|
+
createApprovers: yield Promise.all(createApprovers.map(({ tp }, approverIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
108
|
+
return this.prepareApprover({
|
|
109
|
+
tp,
|
|
110
|
+
approverIndex,
|
|
111
|
+
saIndex: saIndex + input.createSubAssemblies.length,
|
|
112
|
+
slipAssembly,
|
|
113
|
+
assemblyKeyParams,
|
|
114
|
+
subjectKey,
|
|
115
|
+
});
|
|
116
|
+
}))),
|
|
117
|
+
updateApprovers: yield Promise.all(updateApprovers.map(({ tp, approverId }, approverIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
118
|
+
return this.prepareApprover({
|
|
119
|
+
approverId,
|
|
120
|
+
tp,
|
|
121
|
+
approverIndex: approverIndex + createApprovers.length,
|
|
122
|
+
saIndex: saIndex + input.createSubAssemblies.length,
|
|
123
|
+
slipAssembly,
|
|
124
|
+
assemblyKeyParams,
|
|
125
|
+
subjectKey,
|
|
126
|
+
});
|
|
127
|
+
}))),
|
|
128
|
+
};
|
|
129
|
+
})));
|
|
130
|
+
return new LrMutation({
|
|
131
|
+
mutation: UpdateTpPasswordResetMutation,
|
|
132
|
+
variables: {
|
|
133
|
+
input: Object.assign(Object.assign({}, mutationInput), { assembly: Object.assign(Object.assign({}, mutationInput.assembly), { updateSubAssemblies }) }),
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
cancelResetRequest() {
|
|
139
|
+
return this.mutate(this.cancelResetRequestMutation());
|
|
140
|
+
}
|
|
141
|
+
cancelResetRequestMutation() {
|
|
142
|
+
return new LrMutation({
|
|
143
|
+
mutation: CancelTpPasswordResetRequestMutation,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
validateApprovers(approvers) {
|
|
147
|
+
// Ensure all approvers have mkSharedKey.
|
|
148
|
+
for (const tp of approvers) {
|
|
149
|
+
if (!tp.currentUserSharedKey.userSharedKey.mkSharedKey) {
|
|
150
|
+
const msg = `tp ${tp.other.username} does not have mkSharedKey`;
|
|
151
|
+
console.log(msg);
|
|
152
|
+
throw new LrBadArgumentException(msg);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
prepareApprover({ approverId, tp, approverIndex, saIndex, slipAssembly, assemblyKeyParams, subjectKey, }) {
|
|
157
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
if (!tp.currentUserSharedKey.userSharedKey.mkSharedKey) {
|
|
159
|
+
throw new LrBadArgumentException(`Tp ${tp.other.username} does not have mkSharedKey. Need to reshared it first.`);
|
|
160
|
+
}
|
|
161
|
+
const sharedKey = yield this.keyFactory.createKey();
|
|
162
|
+
const tpMkSharedKey = yield this.keyGraph.getKey(tp.currentUserSharedKey.userSharedKey.mkSharedKey.id);
|
|
163
|
+
// For TP to access shared_key
|
|
164
|
+
const tpMkSharedKeyWrappedSharedKey = yield this.encryptionService.encryptToString(tpMkSharedKey.jwk, sharedKey.toJSON(true));
|
|
165
|
+
// For subject to access shared_key
|
|
166
|
+
const subjectKeyWrappedSharedKey = yield this.encryptionService.encryptToString(subjectKey, sharedKey.toJSON(true));
|
|
167
|
+
const saSlip = slipAssembly.subAssemblies[saIndex];
|
|
168
|
+
if (saSlip.index !== saIndex) {
|
|
169
|
+
// Paranoia
|
|
170
|
+
throw new LrBadLogicException('slip sub assembly index should match with array index');
|
|
171
|
+
}
|
|
172
|
+
// If quorum is 1, then using the same share for every member.
|
|
173
|
+
const share = saSlip.threshold === 1 ? saSlip.shares[0] : saSlip.shares[approverIndex];
|
|
174
|
+
const partialAssemblyKey = {
|
|
175
|
+
slip39: {
|
|
176
|
+
share,
|
|
177
|
+
subAssembly: {
|
|
178
|
+
quorum: saSlip.threshold,
|
|
179
|
+
size: saSlip.size,
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
assemblyKeyParams,
|
|
183
|
+
};
|
|
184
|
+
console.log('partialAssemblyKey', partialAssemblyKey);
|
|
185
|
+
return {
|
|
186
|
+
tpMkSharedKeyId: tpMkSharedKey.id,
|
|
187
|
+
tpMkSharedKeyWrappedSharedKey,
|
|
188
|
+
subjectKeyWrappedSharedKey,
|
|
189
|
+
sharedCipherData: yield this.encryptionService.encryptToString(sharedKey, { a: '123' }),
|
|
190
|
+
sharedCipherApprovalData: '',
|
|
191
|
+
sharedCipherPartialAssemblyKey: yield this.encryptionService.encryptToString(sharedKey, partialAssemblyKey),
|
|
192
|
+
approverId: approverId || void 0,
|
|
193
|
+
tpId: approverId ? void 0 : tp.id,
|
|
194
|
+
};
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
// Prepare slip39
|
|
198
|
+
prepareSlip39(subAssemblies, assemblyQuorum, rawAssemblyKey) {
|
|
199
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
200
|
+
// Is there enough sub assemblies to meet quorum
|
|
201
|
+
if (subAssemblies.length < assemblyQuorum) {
|
|
202
|
+
throw new LrBadArgumentException('Not enough sub assemblies to meet quorum');
|
|
203
|
+
}
|
|
204
|
+
const slipAssembly = new slip.Assembly(assemblyQuorum);
|
|
205
|
+
subAssemblies.forEach((sa, index) => {
|
|
206
|
+
let approverCount = sa.approverTps.length;
|
|
207
|
+
// slip39 restricts quorum == 1 to have only 1 member. So we just share the same
|
|
208
|
+
// partial key for all sub assembly members.
|
|
209
|
+
if (sa.quorum === 1) {
|
|
210
|
+
approverCount = 1;
|
|
211
|
+
}
|
|
212
|
+
slipAssembly.addSubAssembly(new slip.SubAssembly(index, sa.quorum, approverCount));
|
|
213
|
+
});
|
|
214
|
+
yield this.slip39Service.generateShares(rawAssemblyKey, TpPasswordResetService_1.SLIP39_PASSPHRASE, slipAssembly);
|
|
215
|
+
return slipAssembly;
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
_createReset(input, createSlipAssembly) {
|
|
219
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
220
|
+
// Create subject key
|
|
221
|
+
const masterKey = yield this.keyService.getCurrentMasterKey();
|
|
222
|
+
const subjectKey = yield this.keyFactory.createKey();
|
|
223
|
+
const assemblyKey = yield this.keyFactory.createKey();
|
|
224
|
+
const _a = assemblyKey.toJSON(true), { k: rawAssemblyKey } = _a, assemblyKeyParams = __rest(_a, ["k"]);
|
|
225
|
+
const assemblyKeyVerifierPrk = yield this.keyFactory.createPkcSignKey();
|
|
226
|
+
const wrappedAssemblyKeyVerifierPrk = yield this.encryptionService.encryptToString(assemblyKey, assemblyKeyVerifierPrk.toJSON(true));
|
|
227
|
+
const masterKeyWrappedSubjectKey = yield this.encryptionService.encryptToString(masterKey.jwk, subjectKey.toJSON(true));
|
|
228
|
+
const subjectKeyWrappedAssemblyKey = yield this.encryptionService.encryptToString(subjectKey, assemblyKey.toJSON(true));
|
|
229
|
+
// Encrypt the rootKey with the assemblyKey
|
|
230
|
+
const rootKey = yield this.keyService.getCurrentRootKey();
|
|
231
|
+
const assemblyCipherData = yield this.encryptionService.encryptToString(assemblyKey, {
|
|
232
|
+
rootKey: rootKey.jwk.toJSON(true),
|
|
233
|
+
});
|
|
234
|
+
const slipAssembly = yield createSlipAssembly(rawAssemblyKey);
|
|
235
|
+
// const slipAssembly = await this.prepareSlip39(input.createSubAssemblies, input.quorum, rawAssemblyKey);
|
|
236
|
+
const createSubAssemblies = yield Promise.all(input.createSubAssemblies.map((sa, saIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
237
|
+
const subjectCipherData = yield this.encryptionService.encryptToString(subjectKey, {
|
|
238
|
+
name: sa.name,
|
|
239
|
+
});
|
|
240
|
+
return {
|
|
241
|
+
singleReject: sa.singleReject,
|
|
242
|
+
quorum: sa.quorum,
|
|
243
|
+
subjectCipherData,
|
|
244
|
+
createApprovers: yield Promise.all(sa.approverTps.map((approverTp, approverIndex) => __awaiter(this, void 0, void 0, function* () {
|
|
245
|
+
return this.prepareApprover({
|
|
246
|
+
tp: approverTp,
|
|
247
|
+
approverIndex,
|
|
248
|
+
saIndex,
|
|
249
|
+
slipAssembly,
|
|
250
|
+
assemblyKeyParams,
|
|
251
|
+
subjectKey,
|
|
252
|
+
});
|
|
253
|
+
}))),
|
|
254
|
+
};
|
|
255
|
+
})));
|
|
256
|
+
return {
|
|
257
|
+
subjectKey,
|
|
258
|
+
slipAssembly,
|
|
259
|
+
assemblyKeyParams,
|
|
260
|
+
mutationInput: {
|
|
261
|
+
assembly: {
|
|
262
|
+
singleReject: input.singleReject,
|
|
263
|
+
quorum: input.quorum,
|
|
264
|
+
masterKeyId: masterKey.id,
|
|
265
|
+
masterKeyWrappedSubjectKey,
|
|
266
|
+
subjectKeyWrappedAssemblyKey,
|
|
267
|
+
subjectCipherData: '',
|
|
268
|
+
assemblyCipherData,
|
|
269
|
+
createSubAssemblies,
|
|
270
|
+
assemblyKeyVerifierPbk: JSON.stringify(assemblyKeyVerifierPrk.toJSON()),
|
|
271
|
+
wrappedAssemblyKeyVerifierPrk,
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
TpPasswordResetService.SLIP39_PASSPHRASE = 'lifeready';
|
|
279
|
+
TpPasswordResetService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TpPasswordResetService_Factory() { return new TpPasswordResetService(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.KeyService), i0.ɵɵinject(i2.KeyFactoryService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.KeyGraphService), i0.ɵɵinject(i5.Slip39Service)); }, token: TpPasswordResetService, providedIn: "root" });
|
|
280
|
+
TpPasswordResetService.decorators = [
|
|
281
|
+
{ type: Injectable, args: [{
|
|
282
|
+
providedIn: 'root',
|
|
283
|
+
},] }
|
|
284
|
+
];
|
|
285
|
+
TpPasswordResetService.ctorParameters = () => [
|
|
286
|
+
{ type: NgZone },
|
|
287
|
+
{ type: Injector },
|
|
288
|
+
{ type: KeyService },
|
|
289
|
+
{ type: KeyFactoryService },
|
|
290
|
+
{ type: EncryptionService },
|
|
291
|
+
{ type: KeyGraphService },
|
|
292
|
+
{ type: slip.Slip39Service }
|
|
293
|
+
];
|
|
294
|
+
TpPasswordResetService = TpPasswordResetService_1 = __decorate([
|
|
295
|
+
RunOutsideAngular({
|
|
296
|
+
ngZoneName: 'ngZone',
|
|
297
|
+
})
|
|
298
|
+
], TpPasswordResetService);
|
|
299
|
+
export { TpPasswordResetService };
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtcGFzc3dvcmQtcmVzZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWN0cy90ZXN0L3Byb2plY3RzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3RydXN0ZWQtcGFydGllcy90cC1wYXNzd29yZC1yZXNldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLDZCQUE2QixFQUM3QixvQkFBb0IsRUFDcEIsNkJBQTZCLEVBQzdCLG9DQUFvQyxHQUNyQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEtBQUssSUFBSSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFJL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFvQixVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7QUFFbkUsTUFBTSxPQUFPLHdCQUF3QjtDQUtwQztBQUVELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx3QkFBd0I7Q0FFckU7QUFFRCxNQUFNLE9BQU8sMEJBQTBCO0NBSXRDO0FBRUQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLDBCQUEwQjtDQUV6RTtJQW1EWSxzQkFBc0Isb0NBQXRCLHNCQUF1QixTQUFRLFNBQVM7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QU0sRUFBRSxDQUNoQzt3QkFDRCw2QkFBNkI7cUJBQzlCO2lCQUNGO2FBQ0YsQ0FBQztRQUNKLENBQUM7S0FBQTtDQUNGLENBQUE7QUFsWWUsd0NBQWlCLEdBQUcsV0FBVyxDQUFDOzs7WUFKL0MsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUE3RjhCLE1BQU07WUFBaEIsUUFBUTtZQUNwQixVQUFVO1lBa0JWLGlCQUFpQjtZQWpCakIsaUJBQWlCO1lBUWpCLGVBQWU7WUFDWixJQUFJLENBNkZnQixhQUFhOztBQVZoQyxzQkFBc0I7SUFObEMsaUJBQWlCLENBQUM7UUFDakIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztHQUlXLHNCQUFzQixDQW1ZbEM7U0FuWVksc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBDcmVhdGVUcFBhc3N3b3JkUmVzZXRNdXRhdGlvbixcclxuICBEZWxldGVUcFBhc3N3b3JkUmVzZXRNdXRhdGlvbixcclxuICBUcFBhc3N3b3JkUmVzZXRRdWVyeSxcclxuICBVcGRhdGVUcFBhc3N3b3JkUmVzZXRNdXRhdGlvbixcclxuICBDYW5jZWxUcFBhc3N3b3JkUmVzZXRSZXF1ZXN0TXV0YXRpb24sXHJcbn0gZnJvbSAnLi90cC1wYXNzd29yZC1yZXNldC5ncWwnO1xyXG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBzbGlwIGZyb20gJy4uL2NyeXB0b2dyYXBoeS9zbGlwMzkuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbixcclxuICBMckJhZExvZ2ljRXhjZXB0aW9uLFxyXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XHJcbmltcG9ydCB7IFBhcnRpYWxBc3NlbWJseUtleSB9IGZyb20gJy4uL3NjZW5hcmlvL3NjZW5hcmlvLnR5cGVzJztcclxuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcclxuaW1wb3J0IHsgS2V5IH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeS50eXBlcyc7XHJcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMckdyYXBoUUxTZXJ2aWNlLCBMck11dGF0aW9uLCBMclNlcnZpY2UgfSBmcm9tICcuLi9hcGkvbHItZ3JhcGhxbCc7XHJcbmltcG9ydCB7IFRwTm9kZSB9IGZyb20gJy4uL2FwaS90eXBlcyc7XHJcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVTdWJBc3NlbWJsaWVzSW5wdXQge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBxdW9ydW06IG51bWJlcjtcclxuICBzaW5nbGVSZWplY3Q6IGJvb2xlYW47XHJcbiAgYXBwcm92ZXJUcHM6IFRwTm9kZVtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXBkYXRlU3ViQXNzZW1ibGllc0lucHV0IGV4dGVuZHMgQ3JlYXRlU3ViQXNzZW1ibGllc0lucHV0IHtcclxuICBpZDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQge1xyXG4gIHF1b3J1bTogbnVtYmVyO1xyXG4gIHNpbmdsZVJlamVjdDogYm9vbGVhbjtcclxuICBjcmVhdGVTdWJBc3NlbWJsaWVzOiBDcmVhdGVTdWJBc3NlbWJsaWVzSW5wdXRbXTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVwZGF0ZVRwUGFzc3dvcmRSZXNldElucHV0IGV4dGVuZHMgQ3JlYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQge1xyXG4gIHVwZGF0ZVN1YkFzc2VtYmxpZXM6IFVwZGF0ZVN1YkFzc2VtYmxpZXNJbnB1dFtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRwQXNzZW1ibHlBcHByb3ZlcnMge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdHA6IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgfTtcclxuICBzaGFyZWRLZXk6IEtleTtcclxuICBzaGFyZWRDaXBoZXJEYXRhPzogc3RyaW5nO1xyXG4gIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb24/OiBhbnk7XHJcbiAgc2hhcmVkQ2lwaGVyQXBwcm92YWxEYXRhPzogc3RyaW5nO1xyXG4gIHNoYXJlZENpcGhlckFwcHJvdmFsRGF0YUNsZWFySnNvbj86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcFN1YkFzc2VtYmx5IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHNpbmdsZVJlamVjdDogYm9vbGVhbjtcclxuICBxdW9ydW06IG51bWJlcjtcclxuICBzdWJqZWN0Q2lwaGVyRGF0YTogc3RyaW5nO1xyXG4gIHBsYWluU3ViamVjdENpcGhlckRhdGE6IGFueTtcclxuICBhcHByb3ZlcnM6IFRwQXNzZW1ibHlBcHByb3ZlcnNbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcEFzc2VtYmx5IHtcclxuICBzaW5nbGVSZWplY3Q6IGJvb2xlYW47XHJcbiAgcXVvcnVtOiBudW1iZXI7XHJcbiAgc3ViamVjdEtleTogS2V5O1xyXG4gIGFzc2VtYmx5S2V5OiBLZXk7XHJcbiAgYXNzZW1ibHlDaXBoZXJEYXRhOiBzdHJpbmc7XHJcbiAgcGxhaW5Bc3NlbWJseUNpcGhlckRhdGE6IGFueTtcclxuICBzdWJBc3NlbWJsaWVzOiBUcFN1YkFzc2VtYmx5W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHBQYXNzd29yZFJlc2V0IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGFzc2VtYmx5OiBUcEFzc2VtYmx5O1xyXG4gIGFwcGxpZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdFJlc2V0UmVzdWx0IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGFzc29jaWF0ZV9yZXNldF91c2VyX3Rva2VuOiBzdHJpbmc7XHJcbiAgcmVzZXRfdXNlcm5hbWU6IHN0cmluZztcclxufVxyXG5cclxuQFJ1bk91dHNpZGVBbmd1bGFyKHtcclxuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcclxufSlcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRwUGFzc3dvcmRSZXNldFNlcnZpY2UgZXh0ZW5kcyBMclNlcnZpY2Uge1xyXG4gIHB1YmxpYyBzdGF0aWMgU0xJUDM5X1BBU1NQSFJBU0UgPSAnbGlmZXJlYWR5JztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUZhY3Rvcnk6IEtleUZhY3RvcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNsaXAzOVNlcnZpY2U6IHNsaXAuU2xpcDM5U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UmVzZXQoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHtcclxuICAgICAgICBxdWVyeTogVHBQYXNzd29yZFJlc2V0UXVlcnksXHJcbiAgICAgIH0pXHJcbiAgICApLnRwUGFzc3dvcmRSZXNldDtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJlc2V0KGlucHV0OiBDcmVhdGVUcFBhc3N3b3JkUmVzZXRJbnB1dCkge1xyXG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlUmVzZXRNdXRhdGlvbihpbnB1dCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlUmVzZXRNdXRhdGlvbihpbnB1dDogQ3JlYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQpIHtcclxuICAgIGNvbnN0IHsgbXV0YXRpb25JbnB1dCB9ID0gYXdhaXQgdGhpcy5fY3JlYXRlUmVzZXQoXHJcbiAgICAgIGlucHV0LFxyXG4gICAgICBhc3luYyAocmF3QXNzZW1ibHlLZXkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlU2xpcDM5KFxyXG4gICAgICAgICAgaW5wdXQuY3JlYXRlU3ViQXNzZW1ibGllcyxcclxuICAgICAgICAgIGlucHV0LnF1b3J1bSxcclxuICAgICAgICAgIHJhd0Fzc2VtYmx5S2V5XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xyXG4gICAgICBtdXRhdGlvbjogQ3JlYXRlVHBQYXNzd29yZFJlc2V0TXV0YXRpb24sXHJcbiAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgIGlucHV0OiBtdXRhdGlvbklucHV0LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVSZXNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmRlbGV0ZVJlc2V0TXV0YXRpb24oKSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVSZXNldE11dGF0aW9uKCkge1xyXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcclxuICAgICAgbXV0YXRpb246IERlbGV0ZVRwUGFzc3dvcmRSZXNldE11dGF0aW9uLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSZXNldChpbnB1dDogVXBkYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQpIHtcclxuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZVJlc2V0TXV0YXRpb24oaW5wdXQpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZVJlc2V0TXV0YXRpb24oaW5wdXQ6IFVwZGF0ZVRwUGFzc3dvcmRSZXNldElucHV0KSB7XHJcbiAgICBjb25zdCBwYXNzd29yZFJlc2V0ID0gYXdhaXQgdGhpcy5nZXRSZXNldCgpO1xyXG5cclxuICAgIGNvbnN0IHtcclxuICAgICAgbXV0YXRpb25JbnB1dCxcclxuICAgICAgc3ViamVjdEtleSxcclxuICAgICAgc2xpcEFzc2VtYmx5LFxyXG4gICAgICBhc3NlbWJseUtleVBhcmFtcyxcclxuICAgIH0gPSBhd2FpdCB0aGlzLl9jcmVhdGVSZXNldChpbnB1dCwgYXN5bmMgKHJhd0Fzc2VtYmx5S2V5KSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByZXBhcmVTbGlwMzkoXHJcbiAgICAgICAgaW5wdXQuY3JlYXRlU3ViQXNzZW1ibGllcy5jb25jYXQoaW5wdXQudXBkYXRlU3ViQXNzZW1ibGllcyksXHJcbiAgICAgICAgaW5wdXQucXVvcnVtLFxyXG4gICAgICAgIHJhd0Fzc2VtYmx5S2V5XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVTdWJBc3NlbWJsaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIGlucHV0LnVwZGF0ZVN1YkFzc2VtYmxpZXMubWFwKGFzeW5jIChzYSwgc2FJbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN1YmplY3RDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXHJcbiAgICAgICAgICBzdWJqZWN0S2V5LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBzYS5uYW1lLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIEdldCB0aGUgZXhpc3Rpbmcgc3ViLWFzc2VtYmx5XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTYSA9IHBhc3N3b3JkUmVzZXQuYXNzZW1ibHkuc3ViQXNzZW1ibGllcy5lZGdlcy5maW5kKFxyXG4gICAgICAgICAgKGVkZ2UpID0+IGVkZ2Uubm9kZS5pZCA9PT0gc2EuaWRcclxuICAgICAgICApLm5vZGU7XHJcblxyXG4gICAgICAgIC8vIEdldCBhcHByb3ZlcnMgdGhhdCBkbyBub3QgZXhpc3QgeWV0XHJcbiAgICAgICAgY29uc3QgY3JlYXRlQXBwcm92ZXJzID0gW107XHJcbiAgICAgICAgY29uc3QgdXBkYXRlQXBwcm92ZXJzID0gW107XHJcblxyXG4gICAgICAgIHNhLmFwcHJvdmVyVHBzLmZvckVhY2goKHRwKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBhcHByb3ZlciA9IGV4aXN0aW5nU2EuYXBwcm92ZXJzLmVkZ2VzLmZpbmQoXHJcbiAgICAgICAgICAgIChlZGdlKSA9PiBlZGdlLm5vZGUudHAuaWQgPT09IHRwLmlkXHJcbiAgICAgICAgICApPy5ub2RlO1xyXG4gICAgICAgICAgaWYgKGFwcHJvdmVyKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUFwcHJvdmVycy5wdXNoKHtcclxuICAgICAgICAgICAgICB0cCxcclxuICAgICAgICAgICAgICBhcHByb3ZlcklkOiBhcHByb3Zlci5pZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjcmVhdGVBcHByb3ZlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgdHAsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc3ViQXNzZW1ibHlJZDogc2EuaWQsXHJcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IHNhLnNpbmdsZVJlamVjdCxcclxuICAgICAgICAgIHF1b3J1bTogc2EucXVvcnVtLFxyXG4gICAgICAgICAgc3ViamVjdENpcGhlckRhdGEsXHJcbiAgICAgICAgICBjcmVhdGVBcHByb3ZlcnM6IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBjcmVhdGVBcHByb3ZlcnMubWFwKGFzeW5jICh7IHRwIH0sIGFwcHJvdmVySW5kZXgpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXBwcm92ZXIoe1xyXG4gICAgICAgICAgICAgICAgdHAsXHJcbiAgICAgICAgICAgICAgICBhcHByb3ZlckluZGV4LFxyXG4gICAgICAgICAgICAgICAgc2FJbmRleDogc2FJbmRleCArIGlucHV0LmNyZWF0ZVN1YkFzc2VtYmxpZXMubGVuZ3RoLCAvLyBzbGlwQXNzZW1ibHkgaXMgYWxsIHN1Yi1hc3NlbWJsaWVzIGNvbWJpbmVkXHJcbiAgICAgICAgICAgICAgICBzbGlwQXNzZW1ibHksXHJcbiAgICAgICAgICAgICAgICBhc3NlbWJseUtleVBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHN1YmplY3RLZXksXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHVwZGF0ZUFwcHJvdmVyczogYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIHVwZGF0ZUFwcHJvdmVycy5tYXAoYXN5bmMgKHsgdHAsIGFwcHJvdmVySWQgfSwgYXBwcm92ZXJJbmRleCkgPT5cclxuICAgICAgICAgICAgICB0aGlzLnByZXBhcmVBcHByb3Zlcih7XHJcbiAgICAgICAgICAgICAgICBhcHByb3ZlcklkLFxyXG4gICAgICAgICAgICAgICAgdHAsXHJcbiAgICAgICAgICAgICAgICBhcHByb3ZlckluZGV4OiBhcHByb3ZlckluZGV4ICsgY3JlYXRlQXBwcm92ZXJzLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgIHNhSW5kZXg6IHNhSW5kZXggKyBpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzLmxlbmd0aCwgLy8gc2xpcEFzc2VtYmx5IGlzIGFsbCBzdWItYXNzZW1ibGllcyBjb21iaW5lZFxyXG4gICAgICAgICAgICAgICAgc2xpcEFzc2VtYmx5LFxyXG4gICAgICAgICAgICAgICAgYXNzZW1ibHlLZXlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBzdWJqZWN0S2V5LFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcclxuICAgICAgbXV0YXRpb246IFVwZGF0ZVRwUGFzc3dvcmRSZXNldE11dGF0aW9uLFxyXG4gICAgICB2YXJpYWJsZXM6IHtcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgLi4ubXV0YXRpb25JbnB1dCxcclxuICAgICAgICAgIGFzc2VtYmx5OiB7XHJcbiAgICAgICAgICAgIC4uLm11dGF0aW9uSW5wdXQuYXNzZW1ibHksXHJcbiAgICAgICAgICAgIHVwZGF0ZVN1YkFzc2VtYmxpZXMsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbFJlc2V0UmVxdWVzdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNhbmNlbFJlc2V0UmVxdWVzdE11dGF0aW9uKCkpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsUmVzZXRSZXF1ZXN0TXV0YXRpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xyXG4gICAgICBtdXRhdGlvbjogQ2FuY2VsVHBQYXNzd29yZFJlc2V0UmVxdWVzdE11dGF0aW9uLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUFwcHJvdmVycyhhcHByb3ZlcnM6IFRwTm9kZVtdKTogdm9pZCB7XHJcbiAgICAvLyBFbnN1cmUgYWxsIGFwcHJvdmVycyBoYXZlIG1rU2hhcmVkS2V5LlxyXG4gICAgZm9yIChjb25zdCB0cCBvZiBhcHByb3ZlcnMpIHtcclxuICAgICAgaWYgKCF0cC5jdXJyZW50VXNlclNoYXJlZEtleS51c2VyU2hhcmVkS2V5Lm1rU2hhcmVkS2V5KSB7XHJcbiAgICAgICAgY29uc3QgbXNnID0gYHRwICR7dHAub3RoZXIudXNlcm5hbWV9IGRvZXMgbm90IGhhdmUgbWtTaGFyZWRLZXlgO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgdGhyb3cgbmV3IExyQmFkQXJndW1lbnRFeGNlcHRpb24obXNnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQXBwcm92ZXIoe1xyXG4gICAgYXBwcm92ZXJJZCxcclxuICAgIHRwLFxyXG4gICAgYXBwcm92ZXJJbmRleCxcclxuICAgIHNhSW5kZXgsXHJcbiAgICBzbGlwQXNzZW1ibHksXHJcbiAgICBhc3NlbWJseUtleVBhcmFtcyxcclxuICAgIHN1YmplY3RLZXksXHJcbiAgfToge1xyXG4gICAgYXBwcm92ZXJJZD86IHN0cmluZztcclxuICAgIHRwOiBUcE5vZGU7XHJcbiAgICBhcHByb3ZlckluZGV4OiBudW1iZXI7XHJcbiAgICBzYUluZGV4OiBudW1iZXI7XHJcbiAgICBzbGlwQXNzZW1ibHk6IHNsaXAuQXNzZW1ibHk7XHJcbiAgICBhc3NlbWJseUtleVBhcmFtczogb2JqZWN0O1xyXG4gICAgc3ViamVjdEtleTogSldLLktleTtcclxuICB9KSB7XHJcbiAgICBpZiAoIXRwLmN1cnJlbnRVc2VyU2hhcmVkS2V5LnVzZXJTaGFyZWRLZXkubWtTaGFyZWRLZXkpIHtcclxuICAgICAgdGhyb3cgbmV3IExyQmFkQXJndW1lbnRFeGNlcHRpb24oXHJcbiAgICAgICAgYFRwICR7dHAub3RoZXIudXNlcm5hbWV9IGRvZXMgbm90IGhhdmUgbWtTaGFyZWRLZXkuIE5lZWQgdG8gcmVzaGFyZWQgaXQgZmlyc3QuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcclxuICAgIGNvbnN0IHRwTWtTaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShcclxuICAgICAgdHAuY3VycmVudFVzZXJTaGFyZWRLZXkudXNlclNoYXJlZEtleS5ta1NoYXJlZEtleS5pZFxyXG4gICAgKTtcclxuICAgIC8vIEZvciBUUCB0byBhY2Nlc3Mgc2hhcmVkX2tleVxyXG4gICAgY29uc3QgdHBNa1NoYXJlZEtleVdyYXBwZWRTaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcclxuICAgICAgdHBNa1NoYXJlZEtleS5qd2ssXHJcbiAgICAgIHNoYXJlZEtleS50b0pTT04odHJ1ZSlcclxuICAgICk7XHJcbiAgICAvLyBGb3Igc3ViamVjdCB0byBhY2Nlc3Mgc2hhcmVkX2tleVxyXG4gICAgY29uc3Qgc3ViamVjdEtleVdyYXBwZWRTaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcclxuICAgICAgc3ViamVjdEtleSxcclxuICAgICAgc2hhcmVkS2V5LnRvSlNPTih0cnVlKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzYVNsaXAgPSBzbGlwQXNzZW1ibHkuc3ViQXNzZW1ibGllc1tzYUluZGV4XTtcclxuICAgIGlmIChzYVNsaXAuaW5kZXggIT09IHNhSW5kZXgpIHtcclxuICAgICAgLy8gUGFyYW5vaWFcclxuICAgICAgdGhyb3cgbmV3IExyQmFkTG9naWNFeGNlcHRpb24oXHJcbiAgICAgICAgJ3NsaXAgc3ViIGFzc2VtYmx5IGluZGV4IHNob3VsZCBtYXRjaCB3aXRoIGFycmF5IGluZGV4J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHF1b3J1bSBpcyAxLCB0aGVuIHVzaW5nIHRoZSBzYW1lIHNoYXJlIGZvciBldmVyeSBtZW1iZXIuXHJcbiAgICBjb25zdCBzaGFyZSA9XHJcbiAgICAgIHNhU2xpcC50aHJlc2hvbGQgPT09IDEgPyBzYVNsaXAuc2hhcmVzWzBdIDogc2FTbGlwLnNoYXJlc1thcHByb3ZlckluZGV4XTtcclxuXHJcbiAgICBjb25zdCBwYXJ0aWFsQXNzZW1ibHlLZXk6IFBhcnRpYWxBc3NlbWJseUtleSA9IHtcclxuICAgICAgc2xpcDM5OiB7XHJcbiAgICAgICAgc2hhcmUsXHJcbiAgICAgICAgc3ViQXNzZW1ibHk6IHtcclxuICAgICAgICAgIHF1b3J1bTogc2FTbGlwLnRocmVzaG9sZCxcclxuICAgICAgICAgIHNpemU6IHNhU2xpcC5zaXplLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIGFzc2VtYmx5S2V5UGFyYW1zLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygncGFydGlhbEFzc2VtYmx5S2V5JywgcGFydGlhbEFzc2VtYmx5S2V5KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0cE1rU2hhcmVkS2V5SWQ6IHRwTWtTaGFyZWRLZXkuaWQsXHJcbiAgICAgIHRwTWtTaGFyZWRLZXlXcmFwcGVkU2hhcmVkS2V5LFxyXG4gICAgICBzdWJqZWN0S2V5V3JhcHBlZFNoYXJlZEtleSxcclxuICAgICAgc2hhcmVkQ2lwaGVyRGF0YTogYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXHJcbiAgICAgICAgc2hhcmVkS2V5LFxyXG4gICAgICAgIHsgYTogJzEyMycgfVxyXG4gICAgICApLFxyXG4gICAgICBzaGFyZWRDaXBoZXJBcHByb3ZhbERhdGE6ICcnLFxyXG4gICAgICBzaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXk6IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxyXG4gICAgICAgIHNoYXJlZEtleSxcclxuICAgICAgICBwYXJ0aWFsQXNzZW1ibHlLZXlcclxuICAgICAgKSxcclxuICAgICAgYXBwcm92ZXJJZDogYXBwcm92ZXJJZCB8fCB2b2lkIDAsXHJcbiAgICAgIHRwSWQ6IGFwcHJvdmVySWQgPyB2b2lkIDAgOiB0cC5pZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBQcmVwYXJlIHNsaXAzOVxyXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVNsaXAzOShcclxuICAgIHN1YkFzc2VtYmxpZXMsXHJcbiAgICBhc3NlbWJseVF1b3J1bTogbnVtYmVyLFxyXG4gICAgcmF3QXNzZW1ibHlLZXk6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8c2xpcC5Bc3NlbWJseT4ge1xyXG4gICAgLy8gSXMgdGhlcmUgZW5vdWdoIHN1YiBhc3NlbWJsaWVzIHRvIG1lZXQgcXVvcnVtXHJcbiAgICBpZiAoc3ViQXNzZW1ibGllcy5sZW5ndGggPCBhc3NlbWJseVF1b3J1bSkge1xyXG4gICAgICB0aHJvdyBuZXcgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbihcclxuICAgICAgICAnTm90IGVub3VnaCBzdWIgYXNzZW1ibGllcyB0byBtZWV0IHF1b3J1bSdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzbGlwQXNzZW1ibHkgPSBuZXcgc2xpcC5Bc3NlbWJseShhc3NlbWJseVF1b3J1bSk7XHJcblxyXG4gICAgc3ViQXNzZW1ibGllcy5mb3JFYWNoKChzYSwgaW5kZXgpID0+IHtcclxuICAgICAgbGV0IGFwcHJvdmVyQ291bnQgPSBzYS5hcHByb3ZlclRwcy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBzbGlwMzkgcmVzdHJpY3RzIHF1b3J1bSA9PSAxIHRvIGhhdmUgb25seSAxIG1lbWJlci4gU28gd2UganVzdCBzaGFyZSB0aGUgc2FtZVxyXG4gICAgICAvLyBwYXJ0aWFsIGtleSBmb3IgYWxsIHN1YiBhc3NlbWJseSBtZW1iZXJzLlxyXG4gICAgICBpZiAoc2EucXVvcnVtID09PSAxKSB7XHJcbiAgICAgICAgYXBwcm92ZXJDb3VudCA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgc2xpcEFzc2VtYmx5LmFkZFN1YkFzc2VtYmx5KFxyXG4gICAgICAgIG5ldyBzbGlwLlN1YkFzc2VtYmx5KGluZGV4LCBzYS5xdW9ydW0sIGFwcHJvdmVyQ291bnQpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnNsaXAzOVNlcnZpY2UuZ2VuZXJhdGVTaGFyZXMoXHJcbiAgICAgIHJhd0Fzc2VtYmx5S2V5LFxyXG4gICAgICBUcFBhc3N3b3JkUmVzZXRTZXJ2aWNlLlNMSVAzOV9QQVNTUEhSQVNFLFxyXG4gICAgICBzbGlwQXNzZW1ibHlcclxuICAgICk7XHJcbiAgICByZXR1cm4gc2xpcEFzc2VtYmx5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY3JlYXRlUmVzZXQoXHJcbiAgICBpbnB1dDogQ3JlYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQsXHJcbiAgICBjcmVhdGVTbGlwQXNzZW1ibHlcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgLy8gQ3JlYXRlIHN1YmplY3Qga2V5XHJcbiAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudE1hc3RlcktleSgpO1xyXG4gICAgY29uc3Qgc3ViamVjdEtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcclxuICAgIGNvbnN0IGFzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xyXG4gICAgY29uc3QgeyBrOiByYXdBc3NlbWJseUtleSwgLi4uYXNzZW1ibHlLZXlQYXJhbXMgfSA9IGFzc2VtYmx5S2V5LnRvSlNPTihcclxuICAgICAgdHJ1ZVxyXG4gICAgKSBhcyBhbnk7XHJcbiAgICBjb25zdCBhc3NlbWJseUtleVZlcmlmaWVyUHJrID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZVBrY1NpZ25LZXkoKTtcclxuICAgIGNvbnN0IHdyYXBwZWRBc3NlbWJseUtleVZlcmlmaWVyUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXHJcbiAgICAgIGFzc2VtYmx5S2V5LFxyXG4gICAgICBhc3NlbWJseUtleVZlcmlmaWVyUHJrLnRvSlNPTih0cnVlKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBtYXN0ZXJLZXlXcmFwcGVkU3ViamVjdEtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxyXG4gICAgICBtYXN0ZXJLZXkuandrLFxyXG4gICAgICBzdWJqZWN0S2V5LnRvSlNPTih0cnVlKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHN1YmplY3RLZXlXcmFwcGVkQXNzZW1ibHlLZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcclxuICAgICAgc3ViamVjdEtleSxcclxuICAgICAgYXNzZW1ibHlLZXkudG9KU09OKHRydWUpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEVuY3J5cHQgdGhlIHJvb3RLZXkgd2l0aCB0aGUgYXNzZW1ibHlLZXlcclxuICAgIGNvbnN0IHJvb3RLZXkgPSBhd2FpdCB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFJvb3RLZXkoKTtcclxuXHJcbiAgICBjb25zdCBhc3NlbWJseUNpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcclxuICAgICAgYXNzZW1ibHlLZXksXHJcbiAgICAgIHtcclxuICAgICAgICByb290S2V5OiByb290S2V5Lmp3ay50b0pTT04odHJ1ZSksXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2xpcEFzc2VtYmx5ID0gYXdhaXQgY3JlYXRlU2xpcEFzc2VtYmx5KHJhd0Fzc2VtYmx5S2V5KTtcclxuICAgIC8vIGNvbnN0IHNsaXBBc3NlbWJseSA9IGF3YWl0IHRoaXMucHJlcGFyZVNsaXAzOShpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzLCBpbnB1dC5xdW9ydW0sIHJhd0Fzc2VtYmx5S2V5KTtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVTdWJBc3NlbWJsaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIGlucHV0LmNyZWF0ZVN1YkFzc2VtYmxpZXMubWFwKGFzeW5jIChzYSwgc2FJbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN1YmplY3RDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXHJcbiAgICAgICAgICBzdWJqZWN0S2V5LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBzYS5uYW1lLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IHNhLnNpbmdsZVJlamVjdCxcclxuICAgICAgICAgIHF1b3J1bTogc2EucXVvcnVtLFxyXG4gICAgICAgICAgc3ViamVjdENpcGhlckRhdGEsXHJcbiAgICAgICAgICBjcmVhdGVBcHByb3ZlcnM6IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBzYS5hcHByb3ZlclRwcy5tYXAoYXN5bmMgKGFwcHJvdmVyVHAsIGFwcHJvdmVySW5kZXgpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXBwcm92ZXIoe1xyXG4gICAgICAgICAgICAgICAgdHA6IGFwcHJvdmVyVHAsXHJcbiAgICAgICAgICAgICAgICBhcHByb3ZlckluZGV4LFxyXG4gICAgICAgICAgICAgICAgc2FJbmRleCxcclxuICAgICAgICAgICAgICAgIHNsaXBBc3NlbWJseSxcclxuICAgICAgICAgICAgICAgIGFzc2VtYmx5S2V5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgc3ViamVjdEtleSxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN1YmplY3RLZXksXHJcbiAgICAgIHNsaXBBc3NlbWJseSxcclxuICAgICAgYXNzZW1ibHlLZXlQYXJhbXMsXHJcbiAgICAgIG11dGF0aW9uSW5wdXQ6IHtcclxuICAgICAgICBhc3NlbWJseToge1xyXG4gICAgICAgICAgc2luZ2xlUmVqZWN0OiBpbnB1dC5zaW5nbGVSZWplY3QsXHJcbiAgICAgICAgICBxdW9ydW06IGlucHV0LnF1b3J1bSxcclxuICAgICAgICAgIG1hc3RlcktleUlkOiBtYXN0ZXJLZXkuaWQsXHJcbiAgICAgICAgICBtYXN0ZXJLZXlXcmFwcGVkU3ViamVjdEtleSxcclxuICAgICAgICAgIHN1YmplY3RLZXlXcmFwcGVkQXNzZW1ibHlLZXksXHJcbiAgICAgICAgICBzdWJqZWN0Q2lwaGVyRGF0YTogJycsXHJcbiAgICAgICAgICBhc3NlbWJseUNpcGhlckRhdGEsXHJcbiAgICAgICAgICBjcmVhdGVTdWJBc3NlbWJsaWVzLFxyXG4gICAgICAgICAgYXNzZW1ibHlLZXlWZXJpZmllclBiazogSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgICAgICAgIGFzc2VtYmx5S2V5VmVyaWZpZXJQcmsudG9KU09OKClcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICB3cmFwcGVkQXNzZW1ibHlLZXlWZXJpZmllclByayxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import gql from 'graphql-tag';
|
|
2
|
+
import { KeyGraphField } from '../_common/queries.gql';
|
|
3
|
+
import { KeyExchangeFields, UserSharedKeyFields, } from '../api/key-exchange.gql';
|
|
4
|
+
import { SharedContactCardFields } from '../api/shared-contact-card.service';
|
|
5
|
+
export const TrustedPartyProperties = `
|
|
6
|
+
id
|
|
7
|
+
user {
|
|
8
|
+
id
|
|
9
|
+
username
|
|
10
|
+
}
|
|
11
|
+
other{
|
|
12
|
+
id
|
|
13
|
+
username,
|
|
14
|
+
features {
|
|
15
|
+
shareVault
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
sharedContactCard {
|
|
19
|
+
${SharedContactCardFields}
|
|
20
|
+
}
|
|
21
|
+
myContactCard {
|
|
22
|
+
${SharedContactCardFields}
|
|
23
|
+
}
|
|
24
|
+
sharedScenarios {
|
|
25
|
+
edges {
|
|
26
|
+
node {
|
|
27
|
+
id
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
sharedItems {
|
|
32
|
+
directories {
|
|
33
|
+
edges {
|
|
34
|
+
node {
|
|
35
|
+
id
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
currentUserSharedKey {
|
|
41
|
+
userSharedKey {
|
|
42
|
+
keyExchange {
|
|
43
|
+
${KeyExchangeFields}
|
|
44
|
+
}
|
|
45
|
+
${UserSharedKeyFields}
|
|
46
|
+
}
|
|
47
|
+
}`;
|
|
48
|
+
export const GetTrustedPartiesQuery = gql `
|
|
49
|
+
query GetTrustedPartiesQuery {
|
|
50
|
+
tps {
|
|
51
|
+
edges {
|
|
52
|
+
node {
|
|
53
|
+
${TrustedPartyProperties}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
${KeyGraphField}
|
|
58
|
+
}`;
|
|
59
|
+
export const GetAllTrustedPartiesQuery = gql `
|
|
60
|
+
query GetAllTrustedPartiesQuery($userId: ID, $isExpired: Boolean, $inviteState: String, $sentInviteState: String) {
|
|
61
|
+
tps {
|
|
62
|
+
edges {
|
|
63
|
+
node {
|
|
64
|
+
${TrustedPartyProperties}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
invites: keyExchanges(
|
|
69
|
+
responder: $userId
|
|
70
|
+
isExpired: $isExpired
|
|
71
|
+
state: $inviteState
|
|
72
|
+
orderBy: "state,-created"
|
|
73
|
+
) {
|
|
74
|
+
edges {
|
|
75
|
+
node {
|
|
76
|
+
${KeyExchangeFields}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
sentInvites: keyExchanges(
|
|
81
|
+
initiator: $userId
|
|
82
|
+
isExpired: $isExpired
|
|
83
|
+
state: $sentInviteState
|
|
84
|
+
orderBy: "state,-created"
|
|
85
|
+
) {
|
|
86
|
+
edges {
|
|
87
|
+
node {
|
|
88
|
+
${KeyExchangeFields}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
${KeyGraphField}
|
|
93
|
+
}`;
|
|
94
|
+
export const GetTrustedPartyQuery = gql `
|
|
95
|
+
query GetTrustedPartyQuery($partyId: LrRelayIdInput!) {
|
|
96
|
+
tp(id: $partyId) {
|
|
97
|
+
${TrustedPartyProperties}
|
|
98
|
+
}
|
|
99
|
+
${KeyGraphField}
|
|
100
|
+
}`;
|
|
101
|
+
export const DeclineTrustedPartyInvitationMutation = gql `
|
|
102
|
+
mutation DeclineKeyExchange($input: DeclineKeyExchangeInput!) {
|
|
103
|
+
declineKeyExchange(input: $input) {
|
|
104
|
+
keyExchange {
|
|
105
|
+
id
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
`;
|
|
110
|
+
export const CancelTrustedPartyInvitationMutation = gql `
|
|
111
|
+
mutation CancelKeyExchange($input: CancelKeyExchangeInput!) {
|
|
112
|
+
cancelKeyExchange(input: $input) {
|
|
113
|
+
keyExchange {
|
|
114
|
+
id
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
`;
|
|
119
|
+
export const DeleteTrustedPartyMutation = gql `
|
|
120
|
+
mutation DeleteTpMutation($input: DeleteTpInput!) {
|
|
121
|
+
deleteTp(input: $input) {
|
|
122
|
+
id
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
`;
|
|
126
|
+
export const ShareCategoryMutation = gql `
|
|
127
|
+
mutation ShareDirectory($input: ShareDirectoryInput!) {
|
|
128
|
+
shareDirectory(input: $input) {
|
|
129
|
+
tpDirectory {
|
|
130
|
+
item {
|
|
131
|
+
plainMeta
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
`;
|
|
137
|
+
export const UnshareCategoryMutation = gql `
|
|
138
|
+
mutation UnshareDirectory($input: UnshareDirectoryInput!) {
|
|
139
|
+
unshareDirectory(input: $input) {
|
|
140
|
+
tpDirectory {
|
|
141
|
+
item {
|
|
142
|
+
plainMeta
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
`;
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS5ncWwuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVjdHMvdGVzdC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi90cnVzdGVkLXBhcnRpZXMvdHJ1c3RlZC1wYXJ0eS5ncWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHOzs7Ozs7Ozs7Ozs7OztNQWNoQyx1QkFBdUI7OztNQUd2Qix1QkFBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztVQXFCbkIsaUJBQWlCOztRQUVuQixtQkFBbUI7O0lBRXZCLENBQUM7QUFFTCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUE7Ozs7O1VBSy9CLHNCQUFzQjs7OztJQUk1QixhQUFhO0VBQ2YsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQTs7Ozs7VUFLbEMsc0JBQXNCOzs7Ozs7Ozs7Ozs7VUFZdEIsaUJBQWlCOzs7Ozs7Ozs7Ozs7VUFZakIsaUJBQWlCOzs7O0lBSXZCLGFBQWE7RUFDZixDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFBOzs7TUFHakMsc0JBQXNCOztJQUV4QixhQUFhO0VBQ2YsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Q0FRdkQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Q0FRdEQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQTs7Ozs7O0NBTTVDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Q0FVdkMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7OztDQVV6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdxbCBmcm9tICdncmFwaHFsLXRhZyc7XHJcbmltcG9ydCB7IEtleUdyYXBoRmllbGQgfSBmcm9tICcuLi9fY29tbW9uL3F1ZXJpZXMuZ3FsJztcclxuaW1wb3J0IHtcclxuICBLZXlFeGNoYW5nZUZpZWxkcyxcclxuICBVc2VyU2hhcmVkS2V5RmllbGRzLFxyXG59IGZyb20gJy4uL2FwaS9rZXktZXhjaGFuZ2UuZ3FsJztcclxuaW1wb3J0IHsgU2hhcmVkQ29udGFjdENhcmRGaWVsZHMgfSBmcm9tICcuLi9hcGkvc2hhcmVkLWNvbnRhY3QtY2FyZC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBUcnVzdGVkUGFydHlQcm9wZXJ0aWVzID0gYFxyXG4gIGlkXHJcbiAgdXNlciB7XHJcbiAgICBpZFxyXG4gICAgdXNlcm5hbWVcclxuICB9XHJcbiAgb3RoZXJ7XHJcbiAgICBpZFxyXG4gICAgdXNlcm5hbWUsXHJcbiAgICBmZWF0dXJlcyB7XHJcbiAgICAgIHNoYXJlVmF1bHRcclxuICAgIH1cclxuICB9XHJcbiAgc2hhcmVkQ29udGFjdENhcmQge1xyXG4gICAgJHtTaGFyZWRDb250YWN0Q2FyZEZpZWxkc31cclxuICB9XHJcbiAgbXlDb250YWN0Q2FyZCB7XHJcbiAgICAke1NoYXJlZENvbnRhY3RDYXJkRmllbGRzfVxyXG4gIH1cclxuICBzaGFyZWRTY2VuYXJpb3Mge1xyXG4gICAgZWRnZXMge1xyXG4gICAgICBub2RlIHtcclxuICAgICAgICBpZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNoYXJlZEl0ZW1zIHtcclxuICAgIGRpcmVjdG9yaWVzIHtcclxuICAgICAgZWRnZXMge1xyXG4gICAgICAgIG5vZGUge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgY3VycmVudFVzZXJTaGFyZWRLZXkge1xyXG4gICAgdXNlclNoYXJlZEtleSB7XHJcbiAgICAgIGtleUV4Y2hhbmdlIHtcclxuICAgICAgICAke0tleUV4Y2hhbmdlRmllbGRzfVxyXG4gICAgICB9XHJcbiAgICAgICR7VXNlclNoYXJlZEtleUZpZWxkc31cclxuICAgIH1cclxuICB9YDtcclxuXHJcbmV4cG9ydCBjb25zdCBHZXRUcnVzdGVkUGFydGllc1F1ZXJ5ID0gZ3FsYFxyXG5xdWVyeSBHZXRUcnVzdGVkUGFydGllc1F1ZXJ5IHtcclxuICB0cHMge1xyXG4gICAgZWRnZXMge1xyXG4gICAgICBub2RlIHtcclxuICAgICAgICAke1RydXN0ZWRQYXJ0eVByb3BlcnRpZXN9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgJHtLZXlHcmFwaEZpZWxkfVxyXG59YDtcclxuXHJcbmV4cG9ydCBjb25zdCBHZXRBbGxUcnVzdGVkUGFydGllc1F1ZXJ5ID0gZ3FsYFxyXG5xdWVyeSBHZXRBbGxUcnVzdGVkUGFydGllc1F1ZXJ5KCR1c2VySWQ6IElELCAkaXNFeHBpcmVkOiBCb29sZWFuLCAkaW52aXRlU3RhdGU6IFN0cmluZywgJHNlbnRJbnZpdGVTdGF0ZTogU3RyaW5nKSB7XHJcbiAgdHBzIHtcclxuICAgIGVkZ2VzIHtcclxuICAgICAgbm9kZSB7XHJcbiAgICAgICAgJHtUcnVzdGVkUGFydHlQcm9wZXJ0aWVzfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGludml0ZXM6IGtleUV4Y2hhbmdlcyhcclxuICAgIHJlc3BvbmRlcjogJHVzZXJJZFxyXG4gICAgaXNFeHBpcmVkOiAkaXNFeHBpcmVkXHJcbiAgICBzdGF0ZTogJGludml0ZVN0YXRlXHJcbiAgICBvcmRlckJ5OiBcInN0YXRlLC1jcmVhdGVkXCJcclxuICApIHtcclxuICAgIGVkZ2VzIHtcclxuICAgICAgbm9kZSB7XHJcbiAgICAgICAgJHtLZXlFeGNoYW5nZUZpZWxkc31cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzZW50SW52aXRlczoga2V5RXhjaGFuZ2VzKFxyXG4gICAgaW5pdGlhdG9yOiAkdXNlcklkXHJcbiAgICBpc0V4cGlyZWQ6ICRpc0V4cGlyZWRcclxuICAgIHN0YXRlOiAkc2VudEludml0ZVN0YXRlXHJcbiAgICBvcmRlckJ5OiBcInN0YXRlLC1jcmVhdGVkXCJcclxuICApIHtcclxuICAgIGVkZ2VzIHtcclxuICAgICAgbm9kZSB7XHJcbiAgICAgICAgJHtLZXlFeGNoYW5nZUZpZWxkc31cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAke0tleUdyYXBoRmllbGR9XHJcbn1gO1xyXG5cclxuZXhwb3J0IGNvbnN0IEdldFRydXN0ZWRQYXJ0eVF1ZXJ5ID0gZ3FsYFxyXG5xdWVyeSBHZXRUcnVzdGVkUGFydHlRdWVyeSgkcGFydHlJZDogTHJSZWxheUlkSW5wdXQhKSB7XHJcbiAgdHAoaWQ6ICRwYXJ0eUlkKSB7XHJcbiAgICAke1RydXN0ZWRQYXJ0eVByb3BlcnRpZXN9XHJcbiAgfVxyXG4gICR7S2V5R3JhcGhGaWVsZH1cclxufWA7XHJcblxyXG5leHBvcnQgY29uc3QgRGVjbGluZVRydXN0ZWRQYXJ0eUludml0YXRpb25NdXRhdGlvbiA9IGdxbGBcclxuICBtdXRhdGlvbiBEZWNsaW5lS2V5RXhjaGFuZ2UoJGlucHV0OiBEZWNsaW5lS2V5RXhjaGFuZ2VJbnB1dCEpIHtcclxuICAgIGRlY2xpbmVLZXlFeGNoYW5nZShpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgIGtleUV4Y2hhbmdlIHtcclxuICAgICAgICBpZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5gO1xyXG5cclxuZXhwb3J0IGNvbnN0IENhbmNlbFRydXN0ZWRQYXJ0eUludml0YXRpb25NdXRhdGlvbiA9IGdxbGBcclxuICBtdXRhdGlvbiBDYW5jZWxLZXlFeGNoYW5nZSgkaW5wdXQ6IENhbmNlbEtleUV4Y2hhbmdlSW5wdXQhKSB7XHJcbiAgICBjYW5jZWxLZXlFeGNoYW5nZShpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgIGtleUV4Y2hhbmdlIHtcclxuICAgICAgICBpZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5gO1xyXG5cclxuZXhwb3J0IGNvbnN0IERlbGV0ZVRydXN0ZWRQYXJ0eU11dGF0aW9uID0gZ3FsYFxyXG4gIG11dGF0aW9uIERlbGV0ZVRwTXV0YXRpb24oJGlucHV0OiBEZWxldGVUcElucHV0ISkge1xyXG4gICAgZGVsZXRlVHAoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICBpZFxyXG4gICAgfVxyXG4gIH1cclxuYDtcclxuXHJcbmV4cG9ydCBjb25zdCBTaGFyZUNhdGVnb3J5TXV0YXRpb24gPSBncWxgXHJcbiAgbXV0YXRpb24gU2hhcmVEaXJlY3RvcnkoJGlucHV0OiBTaGFyZURpcmVjdG9yeUlucHV0ISkge1xyXG4gICAgc2hhcmVEaXJlY3RvcnkoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICB0cERpcmVjdG9yeSB7XHJcbiAgICAgICAgaXRlbSB7XHJcbiAgICAgICAgICBwbGFpbk1ldGFcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmA7XHJcblxyXG5leHBvcnQgY29uc3QgVW5zaGFyZUNhdGVnb3J5TXV0YXRpb24gPSBncWxgXHJcbiAgbXV0YXRpb24gVW5zaGFyZURpcmVjdG9yeSgkaW5wdXQ6IFVuc2hhcmVEaXJlY3RvcnlJbnB1dCEpIHtcclxuICAgIHVuc2hhcmVEaXJlY3RvcnkoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICB0cERpcmVjdG9yeSB7XHJcbiAgICAgICAgaXRlbSB7XHJcbiAgICAgICAgICBwbGFpbk1ldGFcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmA7XHJcbiJdfQ==
|