@kolektor/nucleus-identity 0.0.12-pre.7931 → 0.1.0-pre.128
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 +4 -0
- package/esm2022/index.mjs +7 -0
- package/esm2022/kolektor-nucleus-identity.mjs +5 -0
- package/esm2022/lib/models/client-registration.mjs +8 -0
- package/esm2022/lib/models/device-code.mjs +19 -0
- package/esm2022/lib/models/identity.mjs +52 -0
- package/esm2022/lib/models/otp.mjs +11 -0
- package/esm2022/lib/models/service-principal.mjs +16 -0
- package/esm2022/lib/nucleus-identity-config.mjs +7 -0
- package/esm2022/lib/nucleus-identity.module.mjs +32 -0
- package/esm2022/lib/nucleus-identity.service.mjs +350 -0
- package/esm2022/lib/nucleus-token-interceptor.service.mjs +69 -0
- package/esm2022/lib/utils/angular-requestor.mjs +44 -0
- package/esm2022/lib/utils/authorization-service-configuration.mjs +28 -0
- package/esm2022/lib/utils/location.service.mjs +72 -0
- package/esm2022/lib/utils/nucleus-authorization-notifier.mjs +15 -0
- package/esm2022/lib/utils/oidc-configuration.service.mjs +95 -0
- package/esm2022/lib/utils/secrets-store.mjs +120 -0
- package/esm2022/lib/utils/token-client.mjs +140 -0
- package/{fesm2020 → fesm2022}/kolektor-nucleus-identity.mjs +980 -1012
- package/fesm2022/kolektor-nucleus-identity.mjs.map +1 -0
- package/index.d.ts +6 -5
- package/lib/models/client-registration.d.ts +11 -11
- package/lib/models/device-code.d.ts +19 -19
- package/lib/models/identity.d.ts +14 -14
- package/lib/models/otp.d.ts +14 -14
- package/lib/models/service-principal.d.ts +12 -12
- package/lib/nucleus-identity-config.d.ts +12 -12
- package/lib/nucleus-identity.module.d.ts +9 -9
- package/lib/nucleus-identity.service.d.ts +63 -63
- package/lib/nucleus-token-interceptor.service.d.ts +19 -19
- package/lib/utils/angular-requestor.d.ts +11 -11
- package/lib/utils/authorization-service-configuration.d.ts +12 -12
- package/lib/utils/location.service.d.ts +25 -25
- package/lib/utils/nucleus-authorization-notifier.d.ts +9 -9
- package/lib/utils/oidc-configuration.service.d.ts +23 -23
- package/lib/utils/secrets-store.d.ts +33 -33
- package/lib/utils/token-client.d.ts +23 -23
- package/package.json +29 -33
- package/esm2020/kolektor-nucleus-identity.mjs +0 -5
- package/esm2020/lib/models/client-registration.mjs +0 -8
- package/esm2020/lib/models/device-code.mjs +0 -19
- package/esm2020/lib/models/identity.mjs +0 -49
- package/esm2020/lib/models/otp.mjs +0 -11
- package/esm2020/lib/models/service-principal.mjs +0 -16
- package/esm2020/lib/nucleus-identity-config.mjs +0 -8
- package/esm2020/lib/nucleus-identity.module.mjs +0 -28
- package/esm2020/lib/nucleus-identity.service.mjs +0 -341
- package/esm2020/lib/nucleus-token-interceptor.service.mjs +0 -64
- package/esm2020/lib/utils/angular-requestor.mjs +0 -38
- package/esm2020/lib/utils/authorization-service-configuration.mjs +0 -23
- package/esm2020/lib/utils/location.service.mjs +0 -72
- package/esm2020/lib/utils/nucleus-authorization-notifier.mjs +0 -13
- package/esm2020/lib/utils/nucleus-crypto.mjs +0 -68
- package/esm2020/lib/utils/oidc-configuration.service.mjs +0 -90
- package/esm2020/lib/utils/secrets-store.mjs +0 -120
- package/esm2020/lib/utils/token-client.mjs +0 -140
- package/esm2020/public-api.mjs +0 -11
- package/fesm2015/kolektor-nucleus-identity.mjs +0 -1139
- package/fesm2015/kolektor-nucleus-identity.mjs.map +0 -1
- package/fesm2020/kolektor-nucleus-identity.mjs.map +0 -1
- package/lib/utils/nucleus-crypto.d.ts +0 -9
- package/public-api.d.ts +0 -7
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { AppAuthError, BaseTokenRequestHandler, BasicQueryStringUtils, GRANT_TYPE_AUTHORIZATION_CODE, GRANT_TYPE_REFRESH_TOKEN, TokenRequest, } from '@openid/appauth';
|
|
2
|
+
import { OidcConfigurationService } from './oidc-configuration.service';
|
|
3
|
+
import { AngularRequestor } from './angular-requestor';
|
|
4
|
+
import { Injectable } from '@angular/core';
|
|
5
|
+
import { DeviceCode } from '../models/device-code';
|
|
6
|
+
import { ClientRegistrationResponse, } from '../models/client-registration';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./angular-requestor";
|
|
9
|
+
import * as i2 from "./oidc-configuration.service";
|
|
10
|
+
export class TokenClient {
|
|
11
|
+
constructor(requestor, config) {
|
|
12
|
+
this.requestor = requestor;
|
|
13
|
+
this.config = config;
|
|
14
|
+
this._tokenHandler = new BaseTokenRequestHandler(requestor);
|
|
15
|
+
this._utils = new BasicQueryStringUtils();
|
|
16
|
+
}
|
|
17
|
+
async getByAuthorizationCode(redirectUrl, code, codeVerifier) {
|
|
18
|
+
const config = await this.config.getConfiguration();
|
|
19
|
+
const redirectUri = redirectUrl;
|
|
20
|
+
const req = new TokenRequest({
|
|
21
|
+
client_id: this.config.clientId,
|
|
22
|
+
redirect_uri: redirectUri,
|
|
23
|
+
grant_type: GRANT_TYPE_AUTHORIZATION_CODE,
|
|
24
|
+
code,
|
|
25
|
+
extras: codeVerifier ? { code_verifier: codeVerifier } : undefined,
|
|
26
|
+
});
|
|
27
|
+
return await this._tokenHandler.performTokenRequest(config, req);
|
|
28
|
+
}
|
|
29
|
+
async getByRefreshToken(refreshToken) {
|
|
30
|
+
const config = await this.config.getConfiguration();
|
|
31
|
+
const redirectUri = this.config.redirectUrl;
|
|
32
|
+
const req = new TokenRequest({
|
|
33
|
+
client_id: this.config.clientId,
|
|
34
|
+
redirect_uri: redirectUri,
|
|
35
|
+
grant_type: GRANT_TYPE_REFRESH_TOKEN,
|
|
36
|
+
refresh_token: refreshToken,
|
|
37
|
+
});
|
|
38
|
+
return await this._tokenHandler.performTokenRequest(config, req);
|
|
39
|
+
}
|
|
40
|
+
async getByClientCredentials(clientId, clientSecret, scope) {
|
|
41
|
+
const config = await this.config.getConfiguration();
|
|
42
|
+
const req = new TokenRequest({
|
|
43
|
+
client_id: clientId,
|
|
44
|
+
redirect_uri: '',
|
|
45
|
+
grant_type: 'client_credentials',
|
|
46
|
+
extras: {
|
|
47
|
+
client_secret: clientSecret,
|
|
48
|
+
scope,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
return await this._tokenHandler.performTokenRequest(config, req);
|
|
52
|
+
}
|
|
53
|
+
async getBySecret(provider, secret, assertionToken, scope) {
|
|
54
|
+
const config = await this.config.getConfiguration();
|
|
55
|
+
const req = new TokenRequest({
|
|
56
|
+
client_id: this.config.clientId,
|
|
57
|
+
redirect_uri: '',
|
|
58
|
+
grant_type: 'urn:kolektor:nucleus:secret',
|
|
59
|
+
extras: {
|
|
60
|
+
secret_provider: provider,
|
|
61
|
+
secret_value: secret,
|
|
62
|
+
client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
|
|
63
|
+
client_assertion: assertionToken,
|
|
64
|
+
scope,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
return await this._tokenHandler.performTokenRequest(config, req);
|
|
68
|
+
}
|
|
69
|
+
async getByDeviceCode(deviceCode) {
|
|
70
|
+
const config = await this.config.getConfiguration();
|
|
71
|
+
const req = new TokenRequest({
|
|
72
|
+
client_id: this.config.clientId,
|
|
73
|
+
redirect_uri: '',
|
|
74
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
|
|
75
|
+
extras: {
|
|
76
|
+
device_code: deviceCode,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
return await this._tokenHandler.performTokenRequest(config, req);
|
|
80
|
+
}
|
|
81
|
+
async registerServicePrincipal(token) {
|
|
82
|
+
const config = await this.config.getConfiguration();
|
|
83
|
+
const response = await this.requestor.xhr({
|
|
84
|
+
url: config.registrationEndpoint,
|
|
85
|
+
method: 'POST',
|
|
86
|
+
dataType: 'json',
|
|
87
|
+
headers: {
|
|
88
|
+
'Content-Type': 'application/json',
|
|
89
|
+
Authorization: `Bearer ${token}`,
|
|
90
|
+
},
|
|
91
|
+
// data: this._utils.stringify(map)
|
|
92
|
+
});
|
|
93
|
+
if (response.error === undefined) {
|
|
94
|
+
return new ClientRegistrationResponse(response);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
throw new AppAuthError(response.error);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async getRegistrationCode(existingServicePrincipalId = null) {
|
|
101
|
+
const params = {
|
|
102
|
+
custom_action: 'sp_register',
|
|
103
|
+
service_principal_id: existingServicePrincipalId,
|
|
104
|
+
};
|
|
105
|
+
return this.getDeviceCodeInternal(params);
|
|
106
|
+
}
|
|
107
|
+
async getDeviceCode(scope) {
|
|
108
|
+
const params = {
|
|
109
|
+
scope,
|
|
110
|
+
};
|
|
111
|
+
return this.getDeviceCodeInternal(params);
|
|
112
|
+
}
|
|
113
|
+
async getDeviceCodeInternal(params) {
|
|
114
|
+
const config = await this.config.getConfiguration();
|
|
115
|
+
params['client_id'] = this.config.clientId;
|
|
116
|
+
const map = params;
|
|
117
|
+
const response = await this.requestor.xhr({
|
|
118
|
+
url: config.deviceAuthorizationEndpoint,
|
|
119
|
+
method: 'POST',
|
|
120
|
+
dataType: 'json',
|
|
121
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
122
|
+
data: this._utils.stringify(map),
|
|
123
|
+
});
|
|
124
|
+
if (response.error === undefined) {
|
|
125
|
+
return new DeviceCode(response);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
throw new AppAuthError(response.error);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TokenClient, deps: [{ token: i1.AngularRequestor }, { token: i2.OidcConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
132
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TokenClient, providedIn: 'root' }); }
|
|
133
|
+
}
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TokenClient, decorators: [{
|
|
135
|
+
type: Injectable,
|
|
136
|
+
args: [{
|
|
137
|
+
providedIn: 'root',
|
|
138
|
+
}]
|
|
139
|
+
}], ctorParameters: function () { return [{ type: i1.AngularRequestor }, { type: i2.OidcConfigurationService }]; } });
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy9udWNsZXVzLWlkZW50aXR5L3NyYy9saWIvdXRpbHMvdG9rZW4tY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQiw2QkFBNkIsRUFDN0Isd0JBQXdCLEVBSXhCLFlBQVksR0FFYixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBa0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsMEJBQTBCLEdBRTNCLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFLdkMsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDVSxTQUEyQixFQUMzQixNQUFnQztRQURoQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUEwQjtRQUV4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUtNLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsV0FBbUIsRUFDbkIsSUFBWSxFQUNaLFlBQXFCO1FBRXJCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FB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bkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFcEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzNDLE1BQU0sR0FBRyxHQUFjLE1BQU0sQ0FBQztRQUU5QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFrQztZQUN6RSxHQUFHLEVBQUUsTUFBTSxDQUFDLDJCQUEyQjtZQUN2QyxNQUFNLEVBQUUsTUFBTTtZQUNkLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxtQ0FBbUMsRUFBRTtZQUNoRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUVILElBQUssUUFBMkIsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3BELE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBMEIsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDTCxNQUFNLElBQUksWUFBWSxDQUFFLFFBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUQ7SUFDSCxDQUFDOytHQTVKVSxXQUFXO21IQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcEF1dGhFcnJvcixcbiAgQmFzZVRva2VuUmVxdWVzdEhhbmRsZXIsXG4gIEJhc2ljUXVlcnlTdHJpbmdVdGlscyxcbiAgR1JBTlRfVFlQRV9BVVRIT1JJWkFUSU9OX0NPREUsXG4gIEdSQU5UX1RZUEVfUkVGUkVTSF9UT0tFTixcbiAgUXVlcnlTdHJpbmdVdGlscyxcbiAgU3RyaW5nTWFwLFxuICBUb2tlbkVycm9ySnNvbixcbiAgVG9rZW5SZXF1ZXN0LFxuICBUb2tlblJlcXVlc3RIYW5kbGVyLFxufSBmcm9tICdAb3BlbmlkL2FwcGF1dGgnO1xuaW1wb3J0IHsgT2lkY0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9vaWRjLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbmd1bGFyUmVxdWVzdG9yIH0gZnJvbSAnLi9hbmd1bGFyLXJlcXVlc3Rvcic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VDb2RlLCBEZXZpY2VDb2RlSnNvbiB9IGZyb20gJy4uL21vZGVscy9kZXZpY2UtY29kZSc7XG5pbXBvcnQge1xuICBDbGllbnRSZWdpc3RyYXRpb25SZXNwb25zZSxcbiAgQ2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2VKc29uLFxufSBmcm9tICcuLi9tb2RlbHMvY2xpZW50LXJlZ2lzdHJhdGlvbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVxdWVzdG9yOiBBbmd1bGFyUmVxdWVzdG9yLFxuICAgIHByaXZhdGUgY29uZmlnOiBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5fdG9rZW5IYW5kbGVyID0gbmV3IEJhc2VUb2tlblJlcXVlc3RIYW5kbGVyKHJlcXVlc3Rvcik7XG4gICAgdGhpcy5fdXRpbHMgPSBuZXcgQmFzaWNRdWVyeVN0cmluZ1V0aWxzKCk7XG4gIH1cblxuICBwcml2YXRlIF90b2tlbkhhbmRsZXI6IFRva2VuUmVxdWVzdEhhbmRsZXI7XG4gIHByaXZhdGUgX3V0aWxzOiBRdWVyeVN0cmluZ1V0aWxzO1xuXG4gIHB1YmxpYyBhc3luYyBnZXRCeUF1dGhvcml6YXRpb25Db2RlKFxuICAgIHJlZGlyZWN0VXJsOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIGNvZGVWZXJpZmllcj86IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSByZWRpcmVjdFVybDtcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxuICAgICAgZ3JhbnRfdHlwZTogR1JBTlRfVFlQRV9BVVRIT1JJWkFUSU9OX0NPREUsXG4gICAgICBjb2RlLFxuICAgICAgZXh0cmFzOiBjb2RlVmVyaWZpZXIgPyB7IGNvZGVfdmVyaWZpZXI6IGNvZGVWZXJpZmllciB9IDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl90b2tlbkhhbmRsZXIucGVyZm9ybVRva2VuUmVxdWVzdChjb25maWcsIHJlcSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QnlSZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSB0aGlzLmNvbmZpZy5yZWRpcmVjdFVybDtcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxuICAgICAgZ3JhbnRfdHlwZTogR1JBTlRfVFlQRV9SRUZSRVNIX1RPS0VOLFxuICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl90b2tlbkhhbmRsZXIucGVyZm9ybVRva2VuUmVxdWVzdChjb25maWcsIHJlcSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QnlDbGllbnRDcmVkZW50aWFscyhcbiAgICBjbGllbnRJZDogc3RyaW5nLFxuICAgIGNsaWVudFNlY3JldDogc3RyaW5nLFxuICAgIHNjb3BlOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWcuZ2V0Q29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IHJlcSA9IG5ldyBUb2tlblJlcXVlc3Qoe1xuICAgICAgY2xpZW50X2lkOiBjbGllbnRJZCxcbiAgICAgIHJlZGlyZWN0X3VyaTogJycsXG4gICAgICBncmFudF90eXBlOiAnY2xpZW50X2NyZWRlbnRpYWxzJyxcbiAgICAgIGV4dHJhczoge1xuICAgICAgICBjbGllbnRfc2VjcmV0OiBjbGllbnRTZWNyZXQsXG4gICAgICAgIHNjb3BlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fdG9rZW5IYW5kbGVyLnBlcmZvcm1Ub2tlblJlcXVlc3QoY29uZmlnLCByZXEpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEJ5U2VjcmV0KFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgc2VjcmV0OiBzdHJpbmcsXG4gICAgYXNzZXJ0aW9uVG9rZW46IHN0cmluZyxcbiAgICBzY29wZTogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6ICcnLFxuICAgICAgZ3JhbnRfdHlwZTogJ3Vybjprb2xla3RvcjpudWNsZXVzOnNlY3JldCcsXG4gICAgICBleHRyYXM6IHtcbiAgICAgICAgc2VjcmV0X3Byb3ZpZGVyOiBwcm92aWRlcixcbiAgICAgICAgc2VjcmV0X3ZhbHVlOiBzZWNyZXQsXG4gICAgICAgIGNsaWVudF9hc3NlcnRpb25fdHlwZTpcbiAgICAgICAgICAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmNsaWVudC1hc3NlcnRpb24tdHlwZTpqd3QtYmVhcmVyJyxcbiAgICAgICAgY2xpZW50X2Fzc2VydGlvbjogYXNzZXJ0aW9uVG9rZW4sXG4gICAgICAgIHNjb3BlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl90b2tlbkhhbmRsZXIucGVyZm9ybVRva2VuUmVxdWVzdChjb25maWcsIHJlcSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QnlEZXZpY2VDb2RlKGRldmljZUNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25zdCByZXEgPSBuZXcgVG9rZW5SZXF1ZXN0KHtcbiAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICByZWRpcmVjdF91cmk6ICcnLFxuICAgICAgZ3JhbnRfdHlwZTogJ3VybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9jb2RlJyxcbiAgICAgIGV4dHJhczoge1xuICAgICAgICBkZXZpY2VfY29kZTogZGV2aWNlQ29kZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3Rva2VuSGFuZGxlci5wZXJmb3JtVG9rZW5SZXF1ZXN0KGNvbmZpZywgcmVxKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWdpc3RlclNlcnZpY2VQcmluY2lwYWwodG9rZW46IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0b3IueGhyPFxuICAgICAgQ2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2VKc29uIHwgVG9rZW5FcnJvckpzb25cbiAgICA+KHtcbiAgICAgIHVybDogY29uZmlnLnJlZ2lzdHJhdGlvbkVuZHBvaW50LFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgIH0sXG4gICAgICAvLyBkYXRhOiB0aGlzLl91dGlscy5zdHJpbmdpZnkobWFwKVxuICAgIH0pO1xuXG4gICAgaWYgKChyZXNwb25zZSBhcyBUb2tlbkVycm9ySnNvbikuZXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBDbGllbnRSZWdpc3RyYXRpb25SZXNwb25zZShcbiAgICAgICAgcmVzcG9uc2UgYXMgQ2xpZW50UmVnaXN0cmF0aW9uUmVzcG9uc2VKc29uXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgQXBwQXV0aEVycm9yKChyZXNwb25zZSBhcyBUb2tlbkVycm9ySnNvbikuZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWdpc3RyYXRpb25Db2RlKGV4aXN0aW5nU2VydmljZVByaW5jaXBhbElkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGN1c3RvbV9hY3Rpb246ICdzcF9yZWdpc3RlcicsXG4gICAgICBzZXJ2aWNlX3ByaW5jaXBhbF9pZDogZXhpc3RpbmdTZXJ2aWNlUHJpbmNpcGFsSWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmdldERldmljZUNvZGVJbnRlcm5hbChwYXJhbXMgYXMgU3RyaW5nTWFwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VDb2RlKHNjb3BlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBzY29wZSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldERldmljZUNvZGVJbnRlcm5hbChwYXJhbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VDb2RlSW50ZXJuYWwocGFyYW1zOiBTdHJpbmdNYXApIHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XG5cbiAgICBwYXJhbXNbJ2NsaWVudF9pZCddID0gdGhpcy5jb25maWcuY2xpZW50SWQ7XG4gICAgY29uc3QgbWFwOiBTdHJpbmdNYXAgPSBwYXJhbXM7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdG9yLnhocjxEZXZpY2VDb2RlSnNvbiB8IFRva2VuRXJyb3JKc29uPih7XG4gICAgICB1cmw6IGNvbmZpZy5kZXZpY2VBdXRob3JpemF0aW9uRW5kcG9pbnQsXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9LFxuICAgICAgZGF0YTogdGhpcy5fdXRpbHMuc3RyaW5naWZ5KG1hcCksXG4gICAgfSk7XG5cbiAgICBpZiAoKHJlc3BvbnNlIGFzIFRva2VuRXJyb3JKc29uKS5lcnJvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IERldmljZUNvZGUocmVzcG9uc2UgYXMgRGV2aWNlQ29kZUpzb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgQXBwQXV0aEVycm9yKChyZXNwb25zZSBhcyBUb2tlbkVycm9ySnNvbikuZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIl19
|