@kolektor/nucleus-identity 0.0.9-pre.5702 → 0.0.9-pre.5894
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/esm2020/lib/nucleus-identity.service.mjs +28 -30
- package/esm2020/lib/utils/secrets-store.mjs +23 -3
- package/fesm2015/kolektor-nucleus-identity.mjs +50 -33
- package/fesm2015/kolektor-nucleus-identity.mjs.map +1 -1
- package/fesm2020/kolektor-nucleus-identity.mjs +49 -32
- package/fesm2020/kolektor-nucleus-identity.mjs.map +1 -1
- package/lib/nucleus-identity.service.d.ts +4 -2
- package/lib/utils/secrets-store.d.ts +4 -0
- package/package.json +1 -1
|
@@ -12,6 +12,7 @@ import { SecretsStore } from './utils/secrets-store';
|
|
|
12
12
|
import { OidcConfigurationService } from './utils/oidc-configuration.service';
|
|
13
13
|
import { TokenClient } from './utils/token-client';
|
|
14
14
|
import { ServicePrincipalRegistrationStatus } from './models/service-principal';
|
|
15
|
+
import { lastValueFrom } from 'rxjs';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
import * as i1 from "@kolektor/nucleus-common";
|
|
17
18
|
import * as i2 from "./utils/location.service";
|
|
@@ -46,6 +47,9 @@ export class NucleusIdentityService {
|
|
|
46
47
|
get isServicePrincipalAuthenticated() {
|
|
47
48
|
return this.servicePrincipalIdentity != null;
|
|
48
49
|
}
|
|
50
|
+
get isIdentityServicePrincipal() {
|
|
51
|
+
return this._store.defaultIdentityId === this._servicePrincipalTokenId;
|
|
52
|
+
}
|
|
49
53
|
async init(startLogin = false) {
|
|
50
54
|
if (this._initStarted || this._initialized) {
|
|
51
55
|
console.warn('Nucleus.Identity: Auth initialization was already started. Don\'t call init() multiple times!');
|
|
@@ -63,6 +67,7 @@ export class NucleusIdentityService {
|
|
|
63
67
|
const request = this._authorizationNotifier.request;
|
|
64
68
|
const response = this._authorizationNotifier.response;
|
|
65
69
|
const res = await this.tokenClient.getByAuthorizationCode(request.redirectUri, response.code, request.internal['code_verifier']);
|
|
70
|
+
this._store.setDefaultIdentityId(null);
|
|
66
71
|
await this._store.setToken(res);
|
|
67
72
|
}
|
|
68
73
|
else {
|
|
@@ -78,6 +83,7 @@ export class NucleusIdentityService {
|
|
|
78
83
|
const assertionToken = await this.getServicePrincipalAccessToken();
|
|
79
84
|
const scope = this.prepareScope(true, this.config?.requestedScopes);
|
|
80
85
|
const res = await this.tokenClient.getBySecret(provider, secret, assertionToken, scope);
|
|
86
|
+
this._store.setDefaultIdentityId(null);
|
|
81
87
|
await this._store.setToken(res);
|
|
82
88
|
}
|
|
83
89
|
async login() {
|
|
@@ -146,30 +152,34 @@ export class NucleusIdentityService {
|
|
|
146
152
|
}
|
|
147
153
|
}
|
|
148
154
|
async loginServicePrincipal() {
|
|
149
|
-
await this.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
155
|
+
const sp = await this._store.getServicePrincipal();
|
|
156
|
+
if (sp) {
|
|
157
|
+
const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);
|
|
158
|
+
const res = await this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);
|
|
159
|
+
await this._store.setToken(res, this._servicePrincipalTokenId);
|
|
160
|
+
return res;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
throw Error('Service principal is not registered!');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async loginAsServicePrincipal() {
|
|
167
|
+
const token = await this._store.getToken(this._servicePrincipalTokenId);
|
|
168
|
+
if (!token) {
|
|
169
|
+
await this.loginServicePrincipal();
|
|
170
|
+
}
|
|
171
|
+
this._store.setDefaultIdentityId(this._servicePrincipalTokenId);
|
|
172
|
+
}
|
|
163
173
|
async getOtp(type, expiresIn = -1) {
|
|
164
174
|
let url = this.config.getServerUrl(`/otp/create?type=${type}`);
|
|
165
175
|
if (expiresIn > 0) {
|
|
166
176
|
url += `&expiresIn=${expiresIn}`;
|
|
167
177
|
}
|
|
168
|
-
return this.http.get(url)
|
|
178
|
+
return lastValueFrom(this.http.get(url));
|
|
169
179
|
}
|
|
170
180
|
async getOtpStatus(id) {
|
|
171
181
|
const url = this.config.getServerUrl(`/otp/status/${id}`);
|
|
172
|
-
return this.http.get(url)
|
|
182
|
+
return lastValueFrom(this.http.get(url));
|
|
173
183
|
}
|
|
174
184
|
getOtpUrl(redirectUrl, password) {
|
|
175
185
|
const encoded = encodeURIComponent(redirectUrl);
|
|
@@ -240,22 +250,10 @@ export class NucleusIdentityService {
|
|
|
240
250
|
extras: params,
|
|
241
251
|
}, this._crypto, true);
|
|
242
252
|
}
|
|
243
|
-
async loginServicePrincipalInternal() {
|
|
244
|
-
const sp = await this._store.getServicePrincipal();
|
|
245
|
-
if (sp) {
|
|
246
|
-
const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);
|
|
247
|
-
const res = await this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);
|
|
248
|
-
await this._store.setToken(res, this._servicePrincipalTokenId);
|
|
249
|
-
return res;
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
throw Error('Service principal is not registered!');
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
253
|
async getServicePrincipalAccessTokenInternal() {
|
|
256
254
|
let token = await this._store.getToken(this._servicePrincipalTokenId);
|
|
257
255
|
if (!token?.isValid()) {
|
|
258
|
-
token = await this.
|
|
256
|
+
token = await this.loginServicePrincipal();
|
|
259
257
|
}
|
|
260
258
|
return token?.accessToken;
|
|
261
259
|
}
|
|
@@ -340,4 +338,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
|
|
|
340
338
|
providedIn: 'root'
|
|
341
339
|
}]
|
|
342
340
|
}], ctorParameters: function () { return [{ type: i1.NucleusAppService }, { type: i2.LocationService }, { type: i3.HttpClient }, { type: i4.OidcConfigurationService }, { type: i5.TokenClient }]; } });
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1pZGVudGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbnVjbGV1cy1pZGVudGl0eS9zcmMvbGliL251Y2xldXMtaWRlbnRpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLFlBQVksRUFDYixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztBQUtoRixNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1UsVUFBNkIsRUFDckMsUUFBeUIsRUFDakIs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dGhvcml6YXRpb25SZXF1ZXN0LFxyXG4gIFRva2VuUmVzcG9uc2UsXHJcbiAgQ3J5cHRvLFxyXG4gIFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIsXHJcbiAgQmFzaWNRdWVyeVN0cmluZ1V0aWxzLFxyXG4gIExvY2FsU3RvcmFnZUJhY2tlbmQsXHJcbiAgQXBwQXV0aEVycm9yXHJcbn0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXBwIH0gZnJvbSAnQGNhcGFjaXRvci9hcHAnO1xyXG5pbXBvcnQgeyBCcm93c2VyIH0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcclxuaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGNhcGFjaXRvci9kZXZpY2UnO1xyXG5pbXBvcnQgeyBOdWNsZXVzQ3J5cHRvIH0gZnJvbSAnLi91dGlscy9udWNsZXVzLWNyeXB0byc7XHJcbmltcG9ydCB7IE51Y2xldXNBcHBTZXJ2aWNlIH0gZnJvbSAnQGtvbGVrdG9yL251Y2xldXMtY29tbW9uJztcclxuaW1wb3J0IHsgTG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi91dGlscy9sb2NhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblJlcXVlc3RIYW5kbGVyIH0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcclxuaW1wb3J0IHsgTnVjbGV1c0F1dGhvcml6YXRpb25Ob3RpZmllciB9IGZyb20gJy4vdXRpbHMvbnVjbGV1cy1hdXRob3JpemF0aW9uLW5vdGlmaWVyJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT3RwUmVzcG9uc2UsIE90cFN0YXR1cywgT3RwVHlwZSB9IGZyb20gJy4vbW9kZWxzL290cCc7XHJcbmltcG9ydCB7IFNlY3JldHNTdG9yZSB9IGZyb20gJy4vdXRpbHMvc2VjcmV0cy1zdG9yZSc7XHJcbmltcG9ydCB7IE9pZGNDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vdXRpbHMvb2lkYy1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vdXRpbHMvdG9rZW4tY2xpZW50JztcclxuaW1wb3J0IHsgRGV2aWNlQ29kZSB9IGZyb20gJy4vbW9kZWxzL2RldmljZS1jb2RlJztcclxuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cyB9IGZyb20gJy4vbW9kZWxzL3NlcnZpY2UtcHJpbmNpcGFsJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE51Y2xldXNJZGVudGl0eVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBOdWNsZXVzQXBwU2VydmljZSxcclxuICAgIGxvY2F0aW9uOiBMb2NhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogT2lkY0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2tlbkNsaWVudDogVG9rZW5DbGllbnRcclxuICApIHtcclxuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgTG9jYWxTdG9yYWdlQmFja2VuZCgpO1xyXG4gICAgdGhpcy5fY3J5cHRvID0gbmV3IE51Y2xldXNDcnlwdG8oKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIoc3RvcmFnZSwgbmV3IEJhc2ljUXVlcnlTdHJpbmdVdGlscygpLCBsb2NhdGlvbiwgdGhpcy5fY3J5cHRvKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnNldEF1dGhvcml6YXRpb25Ob3RpZmllcih0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIpO1xyXG4gICAgdGhpcy5fc3RvcmUgPSBuZXcgU2VjcmV0c1N0b3JlKGNvbmZpZy5jbGllbnRJZCk7XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiBhZGQgc29tZSBraW5kIG9mIGNvbmZpZyB0aGF0IHdpbGwgc3BlY2lmeSB3aGljaCB0b2tlbiAodXNlclRva2VuIG9yIHNlcnZpY2VQcmluY2lwYWxUb2tlbikgc2hvdWxkIGJlIGluamVjdGVkIGJ5IGh0dHBJbnRlcmNlcHRvclxyXG5cclxuICBwcml2YXRlIF9hdXRob3JpemF0aW9uSGFuZGxlcjogQXV0aG9yaXphdGlvblJlcXVlc3RIYW5kbGVyO1xyXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25Ob3RpZmllciA9IG5ldyBOdWNsZXVzQXV0aG9yaXphdGlvbk5vdGlmaWVyKCk7XHJcbiAgcHJpdmF0ZSBfY3J5cHRvOiBDcnlwdG87XHJcbiAgcHJpdmF0ZSBfaW5pdFN0YXJ0ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlZnJlc2hUb2tlblByb21pc2U6IFByb21pc2U8VG9rZW5SZXNwb25zZT47XHJcbiAgcHJpdmF0ZSBfZ2V0VG9rZW5Qcm9taXNlOiBQcm9taXNlPHN0cmluZz47XHJcbiAgcHJpdmF0ZSBfZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkID0gJ19zdmNwJztcclxuICBwcml2YXRlIF9zdG9yZTogU2VjcmV0c1N0b3JlO1xyXG5cclxuICBwdWJsaWMgZ2V0IGlkZW50aXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldElkZW50aXR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzQXV0aGVudGljYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmlkZW50aXR5ICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlcnZpY2VQcmluY2lwYWxJZGVudGl0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5nZXRJZGVudGl0eSh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VydmljZVByaW5jaXBhbEF1dGhlbnRpY2F0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUHJpbmNpcGFsSWRlbnRpdHkgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0KHN0YXJ0TG9naW46IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX2luaXRTdGFydGVkIHx8IHRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogQXV0aCBpbml0aWFsaXphdGlvbiB3YXMgYWxyZWFkeSBzdGFydGVkLiBEb25cXCd0IGNhbGwgaW5pdCgpIG11bHRpcGxlIHRpbWVzIScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0U3RhcnRlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5oYW5kbGVMYXVuY2hDb2RlSGFzaCgpO1xyXG4gICAgYXdhaXQgdGhpcy5fYXV0aG9yaXphdGlvbkhhbmRsZXIuY29tcGxldGVBdXRob3JpemF0aW9uUmVxdWVzdElmUG9zc2libGUoKTtcclxuXHJcbiAgICBjb25zdCBhdXRoRXJyID0gdGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLmVycm9yO1xyXG4gICAgaWYgKGF1dGhFcnIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRob3JpemF0aW9uIGVycjogJyArIGF1dGhFcnIuZXJyb3IgKyAnOiAnICsgYXV0aEVyci5lcnJvckRlc2NyaXB0aW9uKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLnJlc3BvbnNlKSB7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyc7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVxdWVzdDtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVzcG9uc2U7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlBdXRob3JpemF0aW9uQ29kZShyZXF1ZXN0LnJlZGlyZWN0VXJpLCByZXNwb25zZS5jb2RlLCByZXF1ZXN0LmludGVybmFsWydjb2RlX3ZlcmlmaWVyJ10pO1xyXG4gICAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4oKTtcclxuICAgICAgaWYgKCFyZXMgJiYgc3RhcnRMb2dpbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luV2l0aFNlY3JldChwcm92aWRlcjogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGFzc2VydGlvblRva2VuID0gYXdhaXQgdGhpcy5nZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW4oKTtcclxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWc/LnJlcXVlc3RlZFNjb3Blcyk7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5U2VjcmV0KHByb3ZpZGVyLCBzZWNyZXQsIGFzc2VydGlvblRva2VuLCBzY29wZSk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnByZXBhcmVBdXRob3JpemF0aW9uUmVxdWVzdCgpO1xyXG4gICAgaWYgKHRoaXMuYXBwU2VydmljZS5pc05hdGl2ZSkge1xyXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsIGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmFwcFNlcnZpY2UucGxhdGZvcm0gPT09ICdpb3MnKSB7XHJcbiAgICAgICAgICBCcm93c2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xyXG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldENvZGVIYXNoKGRhdGEudXJsKTtcclxuICAgICAgICBpZiAoaGFzaCkge1xyXG4gICAgICAgICAgY29uc3QgdGFyZ2V0VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICcjJyArIGhhc2g7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRhcmdldFVybCk7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogUmVkaXJlY3QgdXJsIGRpZCBub3QgY29udGFpbiBhdXRob3JpemF0aW9uIGNvZGUhJywgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnBlcmZvcm1BdXRob3JpemF0aW9uUmVxdWVzdChjb25maWcsIHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3N0b3JlLnJlbW92ZVRva2VuKCk7XHJcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJsO1xyXG4gICAgY29uc3QgbG9nb3V0VXJsID0gY29uZmlnLmVuZFNlc3Npb25FbmRwb2ludCArICc/cG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPScgKyBlbmNvZGVVUkkocmVkaXJlY3RVcmwpO1xyXG4gICAgaWYgKHRoaXMuYXBwU2VydmljZS5pc05hdGl2ZSkge1xyXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsICgpID0+IHtcclxuICAgICAgICBEZXZpY2UuZ2V0SW5mbygpLnRoZW4oaW5mbyA9PiB7XHJcbiAgICAgICAgICBpZiAoaW5mby5wbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgICAgQnJvd3Nlci5jbG9zZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgQnJvd3Nlci5vcGVuKHsgdXJsOiBsb2dvdXRVcmwgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGxvZ291dFVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuX2dldFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9nZXRUb2tlblByb21pc2UgPSB0aGlzLmdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9nZXRUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbigpIHtcclxuICAgIGlmICghdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlID0gdGhpcy5nZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW5JbnRlcm5hbCgpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dpblNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZVByaW5jaXBhbEludGVybmFsKCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIHB1YmxpYyBhc3luYyBsb2dpbkFzU2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIGxldCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgYXdhaXQgdGhpcy5sb2dpblNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIH1cclxuICAgIHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4odGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gICAgIC8vIFRPRE86IHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2hlZCB0aGF0IHRva2VuIGlzIHNlcnZpY2UgcHJpbmNpcGFsIHNvIHJlZnJlc2ggdG9rZW4gc3R1ZmYgaXMgaGFuZGxlZCBjb3JyZWN0bHkuXHJcbiAgICAgLy8gV2UgaGF2ZSB0byBpbXBsZW1lbnQgdW5pdmVyc2FsIGdldEFjY2Vzc1Rva2VuIGZ1bmN0aW9uIHRoYXQgY2FuIGhhbmRsZSBhbGwgY2FzZXNcclxuICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHRva2VuKTtcclxuICB9XHJcbiAgKi9cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldE90cCh0eXBlOiBPdHBUeXBlLCBleHBpcmVzSW46IG51bWJlciA9IC0xKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5jb25maWcuZ2V0U2VydmVyVXJsKGAvb3RwL2NyZWF0ZT90eXBlPSR7dHlwZX1gKTtcclxuICAgIGlmIChleHBpcmVzSW4gPiAwKSB7XHJcbiAgICAgIHVybCArPSBgJmV4cGlyZXNJbj0ke2V4cGlyZXNJbn1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8T3RwUmVzcG9uc2U+KHVybCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3RwU3RhdHVzKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmdldFNlcnZlclVybChgL290cC9zdGF0dXMvJHtpZH1gKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE90cFN0YXR1cz4odXJsKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPdHBVcmwocmVkaXJlY3RVcmw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVybCk7XHJcbiAgICBjb25zdCB1cmwgPSBgL290cC9hdXRoP290cFZhbHVlPSR7cGFzc3dvcmR9JnJldHVyblVybD0ke2VuY29kZWR9YDtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRTZXJ2ZXJVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oKSB7XHJcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldFJlZ2lzdHJhdGlvbkNvZGUoc3A/LmlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oZGV2aWNlQ29kZTogRGV2aWNlQ29kZSkge1xyXG4gICAgY29uc3QgdG9rZW5SZXMgPSBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlKTtcclxuICAgIGNvbnN0IHJlZ1JlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQucmVnaXN0ZXJTZXJ2aWNlUHJpbmNpcGFsKHRva2VuUmVzLmFjY2Vzc1Rva2VuKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRTZXJ2aWNlUHJpbmNpcGFsKHtcclxuICAgICAgaWQ6IHJlZ1Jlcy5jbGllbnRJZCxcclxuICAgICAgc2VjcmV0OiByZWdSZXMuY2xpZW50U2VjcmV0LFxyXG4gICAgICBleHBpcmVzQXQ6IHJlZ1Jlcy5zZWNyZXRFeHBpcmF0aW9uRGF0ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5yZW1vdmVTZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cygpIHtcclxuICAgIGNvbnN0IHNwID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0U2VydmljZVByaW5jaXBhbCgpO1xyXG4gICAgcmV0dXJuIG5ldyBTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uU3RhdHVzKHNwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydERldmljZUNvZGVMb2dpbigpIHtcclxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWcucmVxdWVzdGVkU2NvcGVzKTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldERldmljZUNvZGUoc2NvcGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlRGV2aWNlQ29kZUxvZ2luKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMud2FpdEZvckRldmljZVRva2VuKGRldmljZUNvZGUpO1xyXG4gICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckRldmljZVRva2VuKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGxldCByZXM6IFRva2VuUmVzcG9uc2UgPSBudWxsO1xyXG4gICAgZG8ge1xyXG4gICAgICBpZiAoZGV2aWNlQ29kZS5pc0V4cGlyZWQoKSkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdEZXZpY2UgY29kZSBpcyBleHBpcmVkIScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlEZXZpY2VDb2RlKGRldmljZUNvZGUuZGV2aWNlQ29kZSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBwQXV0aEVycm9yICYmIGVycm9yLm1lc3NhZ2UgPT09ICdhdXRob3JpemF0aW9uX3BlbmRpbmcnKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KDIwMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gd2hpbGUgKCFyZXMpO1xyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUF1dGhvcml6YXRpb25SZXF1ZXN0KCk6IEF1dGhvcml6YXRpb25SZXF1ZXN0IHtcclxuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmw7XHJcblxyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICByZXNwb25zZV9tb2RlOiAnZnJhZ21lbnQnLFxyXG4gICAgICBwcm9tcHQ6ICdjb25zZW50JyxcclxuICAgICAgYWNjZXNzX3R5cGU6ICdvZmZsaW5lJyxcclxuICAgICAgYXV0aF9wcm92aWRlcl9oaW50OiB0aGlzLmNvbmZpZy5hdXRoUHJvdmlkZXJIaW50XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgQXV0aG9yaXphdGlvblJlcXVlc3Qoe1xyXG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY29uZmlnLmNsaWVudElkLFxyXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxyXG4gICAgICByZXNwb25zZV90eXBlOiBBdXRob3JpemF0aW9uUmVxdWVzdC5SRVNQT05TRV9UWVBFX0NPREUsXHJcbiAgICAgIHNjb3BlOiB0aGlzLnByZXBhcmVTY29wZSh0cnVlLCB0aGlzLmNvbmZpZy5yZXF1ZXN0ZWRTY29wZXMpLFxyXG4gICAgICBleHRyYXM6IHBhcmFtcyxcclxuICAgIH0sIHRoaXMuX2NyeXB0bywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvZ2luU2VydmljZVByaW5jaXBhbEludGVybmFsKCkge1xyXG4gICAgY29uc3Qgc3AgPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRTZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgICBpZiAoc3ApIHtcclxuICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLnByZXBhcmVTY29wZShmYWxzZSwgdGhpcy5jb25maWcuc2VydmljZVByaW5jaXBhbFJlcXVlc3RlZFNjb3Blcyk7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlDbGllbnRDcmVkZW50aWFscyhzcC5pZCwgc3Auc2VjcmV0LCBzY29wZSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcywgdGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1NlcnZpY2UgcHJpbmNpcGFsIGlzIG5vdCByZWdpc3RlcmVkIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW5JbnRlcm5hbCgpIHtcclxuICAgIGxldCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgIGlmICghdG9rZW4/LmlzVmFsaWQoKSkge1xyXG4gICAgICB0b2tlbiA9IGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlUHJpbmNpcGFsSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b2tlbj8uYWNjZXNzVG9rZW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKSB7XHJcbiAgICBsZXQgdG9rZW4gPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRUb2tlbigpO1xyXG4gICAgaWYgKHRva2VuICYmICF0b2tlbi5pc1ZhbGlkKCkpIHtcclxuICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLmxvZ2luV2l0aFJlZnJlc2hUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4/LmFjY2Vzc1Rva2VuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW4odG9rZW46IFRva2VuUmVzcG9uc2UpIHtcclxuICAgIGlmICghdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlID0gdGhpcy5sb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbik7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX3JlZnJlc2hUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbjogVG9rZW5SZXNwb25zZSkge1xyXG4gICAgaWYgKHRva2VuPy5yZWZyZXNoVG9rZW4pIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5UmVmcmVzaFRva2VuKHRva2VuLnJlZnJlc2hUb2tlbik7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IEZhaWxlZCB0byBsb2dpbiB3aXRoIHJlZnJlc2ggdG9rZW4uJywgZXJyKTtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdpbnZhbGlkX2dyYW50Jykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogVGhlcmUgaXMgbm8gcmVmcmVzaCB0b2tlbiBhdmFpbGFibGUuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvZGVIYXNoKHVybDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhcnIgPSB1cmwuc3BsaXQoJyMnKTtcclxuICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBoYXNoID0gYXJyWzFdO1xyXG4gICAgICBpZiAoaGFzaC5zdGFydHNXaXRoKCdjb2RlPScpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVMYXVuY2hDb2RlSGFzaCgpIHtcclxuICAgIGlmICh0aGlzLmFwcFNlcnZpY2UuaXNOYXRpdmUgJiYgdGhpcy5hcHBTZXJ2aWNlLmxhdW5jaFVybCkge1xyXG4gICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRDb2RlSGFzaCh0aGlzLmFwcFNlcnZpY2UubGF1bmNoVXJsKTtcclxuICAgICAgaWYgKGhhc2gpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTnVjbGV1cy5JZGVudGl0eTogR290IGF1dGhvcml6YXRpb24gY29kZSBmcm9tIGxhdW5jaFVybCwgd2lsbCBhc3NpZ24gaXQgdG8gaGFzaC4nKTtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcjJyArIGhhc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZVNjb3BlKG9mZmxpbmVBY2Nlc3M6IGJvb2xlYW4sIGFkaXRpb25hbFNjb3BlOiBzdHJpbmcpIHtcclxuICAgIGxldCBzY29wZSA9ICdvcGVuaWQnO1xyXG4gICAgaWYgKG9mZmxpbmVBY2Nlc3MpIHtcclxuICAgICAgc2NvcGUgKz0gJyBvZmZsaW5lX2FjY2Vzcyc7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgc2NvcGUgKz0gJyAnICsgYWRpdGlvbmFsU2NvcGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2NvcGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGF5KG1pbGlzZWNvbmRzOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCBtaWxpc2Vjb25kcyk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1pZGVudGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbnVjbGV1cy1pZGVudGl0eS9zcmMvbGliL251Y2xldXMtaWRlbnRpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLFlBQVksRUFDYixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBS3JDLE1BQU0sT0FBTyxz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O1FBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLElBQUksR0FBRyxHQUFHLGNBQWMsQ0FBQztTQUMvQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFtQjtRQUMvQixPQUFPLElBQUksT0FBTyxDQUFPLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEF4VlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBdXRob3JpemF0aW9uUmVxdWVzdCxcclxuICBUb2tlblJlc3BvbnNlLFxyXG4gIENyeXB0byxcclxuICBSZWRpcmVjdFJlcXVlc3RIYW5kbGVyLFxyXG4gIEJhc2ljUXVlcnlTdHJpbmdVdGlscyxcclxuICBMb2NhbFN0b3JhZ2VCYWNrZW5kLFxyXG4gIEFwcEF1dGhFcnJvclxyXG59IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFwcCB9IGZyb20gJ0BjYXBhY2l0b3IvYXBwJztcclxuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJ0BjYXBhY2l0b3IvYnJvd3Nlcic7XHJcbmltcG9ydCB7IERldmljZSB9IGZyb20gJ0BjYXBhY2l0b3IvZGV2aWNlJztcclxuaW1wb3J0IHsgTnVjbGV1c0NyeXB0byB9IGZyb20gJy4vdXRpbHMvbnVjbGV1cy1jcnlwdG8nO1xyXG5pbXBvcnQgeyBOdWNsZXVzQXBwU2VydmljZSB9IGZyb20gJ0Brb2xla3Rvci9udWNsZXVzLWNvbW1vbic7XHJcbmltcG9ydCB7IExvY2F0aW9uU2VydmljZSB9IGZyb20gJy4vdXRpbHMvbG9jYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25SZXF1ZXN0SGFuZGxlciB9IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcbmltcG9ydCB7IE51Y2xldXNBdXRob3JpemF0aW9uTm90aWZpZXIgfSBmcm9tICcuL3V0aWxzL251Y2xldXMtYXV0aG9yaXphdGlvbi1ub3RpZmllcic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE90cFJlc3BvbnNlLCBPdHBTdGF0dXMsIE90cFR5cGUgfSBmcm9tICcuL21vZGVscy9vdHAnO1xyXG5pbXBvcnQgeyBTZWNyZXRzU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NlY3JldHMtc3RvcmUnO1xyXG5pbXBvcnQgeyBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3V0aWxzL29pZGMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9rZW5DbGllbnQgfSBmcm9tICcuL3V0aWxzL3Rva2VuLWNsaWVudCc7XHJcbmltcG9ydCB7IERldmljZUNvZGUgfSBmcm9tICcuL21vZGVscy9kZXZpY2UtY29kZSc7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb25TdGF0dXMgfSBmcm9tICcuL21vZGVscy9zZXJ2aWNlLXByaW5jaXBhbCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE51Y2xldXNJZGVudGl0eVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBOdWNsZXVzQXBwU2VydmljZSxcclxuICAgIGxvY2F0aW9uOiBMb2NhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogT2lkY0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2tlbkNsaWVudDogVG9rZW5DbGllbnRcclxuICApIHtcclxuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgTG9jYWxTdG9yYWdlQmFja2VuZCgpO1xyXG4gICAgdGhpcy5fY3J5cHRvID0gbmV3IE51Y2xldXNDcnlwdG8oKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIoc3RvcmFnZSwgbmV3IEJhc2ljUXVlcnlTdHJpbmdVdGlscygpLCBsb2NhdGlvbiwgdGhpcy5fY3J5cHRvKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnNldEF1dGhvcml6YXRpb25Ob3RpZmllcih0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIpO1xyXG4gICAgdGhpcy5fc3RvcmUgPSBuZXcgU2VjcmV0c1N0b3JlKGNvbmZpZy5jbGllbnRJZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hdXRob3JpemF0aW9uSGFuZGxlcjogQXV0aG9yaXphdGlvblJlcXVlc3RIYW5kbGVyO1xyXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25Ob3RpZmllciA9IG5ldyBOdWNsZXVzQXV0aG9yaXphdGlvbk5vdGlmaWVyKCk7XHJcbiAgcHJpdmF0ZSBfY3J5cHRvOiBDcnlwdG87XHJcbiAgcHJpdmF0ZSBfaW5pdFN0YXJ0ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlZnJlc2hUb2tlblByb21pc2U6IFByb21pc2U8VG9rZW5SZXNwb25zZT47XHJcbiAgcHJpdmF0ZSBfZ2V0VG9rZW5Qcm9taXNlOiBQcm9taXNlPHN0cmluZz47XHJcbiAgcHJpdmF0ZSBfZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkID0gJ19zdmNwJztcclxuICBwcml2YXRlIF9zdG9yZTogU2VjcmV0c1N0b3JlO1xyXG5cclxuICBwdWJsaWMgZ2V0IGlkZW50aXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldElkZW50aXR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzQXV0aGVudGljYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmlkZW50aXR5ICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlcnZpY2VQcmluY2lwYWxJZGVudGl0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5nZXRJZGVudGl0eSh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VydmljZVByaW5jaXBhbEF1dGhlbnRpY2F0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUHJpbmNpcGFsSWRlbnRpdHkgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNJZGVudGl0eVNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUuZGVmYXVsdElkZW50aXR5SWQgPT09IHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXQoc3RhcnRMb2dpbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5faW5pdFN0YXJ0ZWQgfHwgdGhpcy5faW5pdGlhbGl6ZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBBdXRoIGluaXRpYWxpemF0aW9uIHdhcyBhbHJlYWR5IHN0YXJ0ZWQuIERvblxcJ3QgY2FsbCBpbml0KCkgbXVsdGlwbGUgdGltZXMhJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2luaXRTdGFydGVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmhhbmRsZUxhdW5jaENvZGVIYXNoKCk7XHJcbiAgICBhd2FpdCB0aGlzLl9hdXRob3JpemF0aW9uSGFuZGxlci5jb21wbGV0ZUF1dGhvcml6YXRpb25SZXF1ZXN0SWZQb3NzaWJsZSgpO1xyXG5cclxuICAgIGNvbnN0IGF1dGhFcnIgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIuZXJyb3I7XHJcbiAgICBpZiAoYXV0aEVycikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhvcml6YXRpb24gZXJyOiAnICsgYXV0aEVyci5lcnJvciArICc6ICcgKyBhdXRoRXJyLmVycm9yRGVzY3JpcHRpb24pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVzcG9uc2UpIHtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnJztcclxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuX2F1dGhvcml6YXRpb25Ob3RpZmllci5yZXF1ZXN0O1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuX2F1dGhvcml6YXRpb25Ob3RpZmllci5yZXNwb25zZTtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeUF1dGhvcml6YXRpb25Db2RlKHJlcXVlc3QucmVkaXJlY3RVcmksIHJlc3BvbnNlLmNvZGUsIHJlcXVlc3QuaW50ZXJuYWxbJ2NvZGVfdmVyaWZpZXInXSk7XHJcbiAgICAgIHRoaXMuX3N0b3JlLnNldERlZmF1bHRJZGVudGl0eUlkKG51bGwpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4oKTtcclxuICAgICAgaWYgKCFyZXMgJiYgc3RhcnRMb2dpbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luV2l0aFNlY3JldChwcm92aWRlcjogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGFzc2VydGlvblRva2VuID0gYXdhaXQgdGhpcy5nZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW4oKTtcclxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWc/LnJlcXVlc3RlZFNjb3Blcyk7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5U2VjcmV0KHByb3ZpZGVyLCBzZWNyZXQsIGFzc2VydGlvblRva2VuLCBzY29wZSk7XHJcbiAgICB0aGlzLl9zdG9yZS5zZXREZWZhdWx0SWRlbnRpdHlJZChudWxsKTtcclxuICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9naW4oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9zdG9yZS5yZW1vdmVUb2tlbigpO1xyXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWcuZ2V0Q29uZmlndXJhdGlvbigpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucHJlcGFyZUF1dGhvcml6YXRpb25SZXF1ZXN0KCk7XHJcbiAgICBpZiAodGhpcy5hcHBTZXJ2aWNlLmlzTmF0aXZlKSB7XHJcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gQXBwLmFkZExpc3RlbmVyKCdhcHBVcmxPcGVuJywgZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXBwU2VydmljZS5wbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgIEJyb3dzZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XHJcbiAgICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0Q29kZUhhc2goZGF0YS51cmwpO1xyXG4gICAgICAgIGlmIChoYXNoKSB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXRVcmwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgJyMnICsgaGFzaDtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odGFyZ2V0VXJsKTtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBSZWRpcmVjdCB1cmwgZGlkIG5vdCBjb250YWluIGF1dGhvcml6YXRpb24gY29kZSEnLCBkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYXV0aG9yaXphdGlvbkhhbmRsZXIucGVyZm9ybUF1dGhvcml6YXRpb25SZXF1ZXN0KGNvbmZpZywgcmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcclxuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmw7XHJcbiAgICBjb25zdCBsb2dvdXRVcmwgPSBjb25maWcuZW5kU2Vzc2lvbkVuZHBvaW50ICsgJz9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk9JyArIGVuY29kZVVSSShyZWRpcmVjdFVybCk7XHJcbiAgICBpZiAodGhpcy5hcHBTZXJ2aWNlLmlzTmF0aXZlKSB7XHJcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gQXBwLmFkZExpc3RlbmVyKCdhcHBVcmxPcGVuJywgKCkgPT4ge1xyXG4gICAgICAgIERldmljZS5nZXRJbmZvKCkudGhlbihpbmZvID0+IHtcclxuICAgICAgICAgIGlmIChpbmZvLnBsYXRmb3JtID09PSAnaW9zJykge1xyXG4gICAgICAgICAgICBCcm93c2VyLmNsb3NlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBCcm93c2VyLm9wZW4oeyB1cmw6IGxvZ291dFVybCB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24obG9nb3V0VXJsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBY2Nlc3NUb2tlbigpIHtcclxuICAgIGlmICghdGhpcy5fZ2V0VG9rZW5Qcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX2dldFRva2VuUHJvbWlzZSA9IHRoaXMuZ2V0QWNjZXNzVG9rZW5JbnRlcm5hbCgpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldFRva2VuUHJvbWlzZTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX2dldFRva2VuUHJvbWlzZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbEFjY2Vzc1Rva2VuKCkge1xyXG4gICAgaWYgKCF0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2UgPSB0aGlzLmdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbkludGVybmFsKCk7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luU2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIGNvbnN0IHNwID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0U2VydmljZVByaW5jaXBhbCgpO1xyXG4gICAgaWYgKHNwKSB7XHJcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUoZmFsc2UsIHRoaXMuY29uZmlnLnNlcnZpY2VQcmluY2lwYWxSZXF1ZXN0ZWRTY29wZXMpO1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5Q2xpZW50Q3JlZGVudGlhbHMoc3AuaWQsIHNwLnNlY3JldCwgc2NvcGUpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMsIHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdTZXJ2aWNlIHByaW5jaXBhbCBpcyBub3QgcmVnaXN0ZXJlZCEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dpbkFzU2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4odGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gICAgaWYgKCF0b2tlbikge1xyXG4gICAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZVByaW5jaXBhbCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc3RvcmUuc2V0RGVmYXVsdElkZW50aXR5SWQodGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldE90cCh0eXBlOiBPdHBUeXBlLCBleHBpcmVzSW46IG51bWJlciA9IC0xKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5jb25maWcuZ2V0U2VydmVyVXJsKGAvb3RwL2NyZWF0ZT90eXBlPSR7dHlwZX1gKTtcclxuICAgIGlmIChleHBpcmVzSW4gPiAwKSB7XHJcbiAgICAgIHVybCArPSBgJmV4cGlyZXNJbj0ke2V4cGlyZXNJbn1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxPdHBSZXNwb25zZT4odXJsKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3RwU3RhdHVzKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmdldFNlcnZlclVybChgL290cC9zdGF0dXMvJHtpZH1gKTtcclxuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8T3RwU3RhdHVzPih1cmwpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPdHBVcmwocmVkaXJlY3RVcmw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVybCk7XHJcbiAgICBjb25zdCB1cmwgPSBgL290cC9hdXRoP290cFZhbHVlPSR7cGFzc3dvcmR9JnJldHVyblVybD0ke2VuY29kZWR9YDtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRTZXJ2ZXJVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oKSB7XHJcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldFJlZ2lzdHJhdGlvbkNvZGUoc3A/LmlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oZGV2aWNlQ29kZTogRGV2aWNlQ29kZSkge1xyXG4gICAgY29uc3QgdG9rZW5SZXMgPSBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlKTtcclxuICAgIGNvbnN0IHJlZ1JlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQucmVnaXN0ZXJTZXJ2aWNlUHJpbmNpcGFsKHRva2VuUmVzLmFjY2Vzc1Rva2VuKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRTZXJ2aWNlUHJpbmNpcGFsKHtcclxuICAgICAgaWQ6IHJlZ1Jlcy5jbGllbnRJZCxcclxuICAgICAgc2VjcmV0OiByZWdSZXMuY2xpZW50U2VjcmV0LFxyXG4gICAgICBleHBpcmVzQXQ6IHJlZ1Jlcy5zZWNyZXRFeHBpcmF0aW9uRGF0ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5yZW1vdmVTZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cygpIHtcclxuICAgIGNvbnN0IHNwID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0U2VydmljZVByaW5jaXBhbCgpO1xyXG4gICAgcmV0dXJuIG5ldyBTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uU3RhdHVzKHNwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydERldmljZUNvZGVMb2dpbigpIHtcclxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWcucmVxdWVzdGVkU2NvcGVzKTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldERldmljZUNvZGUoc2NvcGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlRGV2aWNlQ29kZUxvZ2luKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMud2FpdEZvckRldmljZVRva2VuKGRldmljZUNvZGUpO1xyXG4gICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckRldmljZVRva2VuKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGxldCByZXM6IFRva2VuUmVzcG9uc2UgPSBudWxsO1xyXG4gICAgZG8ge1xyXG4gICAgICBpZiAoZGV2aWNlQ29kZS5pc0V4cGlyZWQoKSkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdEZXZpY2UgY29kZSBpcyBleHBpcmVkIScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlEZXZpY2VDb2RlKGRldmljZUNvZGUuZGV2aWNlQ29kZSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBwQXV0aEVycm9yICYmIGVycm9yLm1lc3NhZ2UgPT09ICdhdXRob3JpemF0aW9uX3BlbmRpbmcnKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KDIwMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gd2hpbGUgKCFyZXMpO1xyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUF1dGhvcml6YXRpb25SZXF1ZXN0KCk6IEF1dGhvcml6YXRpb25SZXF1ZXN0IHtcclxuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmw7XHJcblxyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICByZXNwb25zZV9tb2RlOiAnZnJhZ21lbnQnLFxyXG4gICAgICBwcm9tcHQ6ICdjb25zZW50JyxcclxuICAgICAgYWNjZXNzX3R5cGU6ICdvZmZsaW5lJyxcclxuICAgICAgYXV0aF9wcm92aWRlcl9oaW50OiB0aGlzLmNvbmZpZy5hdXRoUHJvdmlkZXJIaW50XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgQXV0aG9yaXphdGlvblJlcXVlc3Qoe1xyXG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY29uZmlnLmNsaWVudElkLFxyXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxyXG4gICAgICByZXNwb25zZV90eXBlOiBBdXRob3JpemF0aW9uUmVxdWVzdC5SRVNQT05TRV9UWVBFX0NPREUsXHJcbiAgICAgIHNjb3BlOiB0aGlzLnByZXBhcmVTY29wZSh0cnVlLCB0aGlzLmNvbmZpZy5yZXF1ZXN0ZWRTY29wZXMpLFxyXG4gICAgICBleHRyYXM6IHBhcmFtcyxcclxuICAgIH0sIHRoaXMuX2NyeXB0bywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbkludGVybmFsKCkge1xyXG4gICAgbGV0IHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4odGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gICAgaWYgKCF0b2tlbj8uaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRva2VuID0gYXdhaXQgdGhpcy5sb2dpblNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b2tlbj8uYWNjZXNzVG9rZW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKSB7XHJcbiAgICBsZXQgdG9rZW4gPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRUb2tlbigpO1xyXG4gICAgaWYgKHRva2VuICYmICF0b2tlbi5pc1ZhbGlkKCkpIHtcclxuICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLmxvZ2luV2l0aFJlZnJlc2hUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4/LmFjY2Vzc1Rva2VuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW4odG9rZW46IFRva2VuUmVzcG9uc2UpIHtcclxuICAgIGlmICghdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlID0gdGhpcy5sb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbik7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX3JlZnJlc2hUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbjogVG9rZW5SZXNwb25zZSkge1xyXG4gICAgaWYgKHRva2VuPy5yZWZyZXNoVG9rZW4pIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5UmVmcmVzaFRva2VuKHRva2VuLnJlZnJlc2hUb2tlbik7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IEZhaWxlZCB0byBsb2dpbiB3aXRoIHJlZnJlc2ggdG9rZW4uJywgZXJyKTtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdpbnZhbGlkX2dyYW50Jykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogVGhlcmUgaXMgbm8gcmVmcmVzaCB0b2tlbiBhdmFpbGFibGUuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvZGVIYXNoKHVybDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhcnIgPSB1cmwuc3BsaXQoJyMnKTtcclxuICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBoYXNoID0gYXJyWzFdO1xyXG4gICAgICBpZiAoaGFzaC5zdGFydHNXaXRoKCdjb2RlPScpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVMYXVuY2hDb2RlSGFzaCgpIHtcclxuICAgIGlmICh0aGlzLmFwcFNlcnZpY2UuaXNOYXRpdmUgJiYgdGhpcy5hcHBTZXJ2aWNlLmxhdW5jaFVybCkge1xyXG4gICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRDb2RlSGFzaCh0aGlzLmFwcFNlcnZpY2UubGF1bmNoVXJsKTtcclxuICAgICAgaWYgKGhhc2gpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTnVjbGV1cy5JZGVudGl0eTogR290IGF1dGhvcml6YXRpb24gY29kZSBmcm9tIGxhdW5jaFVybCwgd2lsbCBhc3NpZ24gaXQgdG8gaGFzaC4nKTtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcjJyArIGhhc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZVNjb3BlKG9mZmxpbmVBY2Nlc3M6IGJvb2xlYW4sIGFkaXRpb25hbFNjb3BlOiBzdHJpbmcpIHtcclxuICAgIGxldCBzY29wZSA9ICdvcGVuaWQnO1xyXG4gICAgaWYgKG9mZmxpbmVBY2Nlc3MpIHtcclxuICAgICAgc2NvcGUgKz0gJyBvZmZsaW5lX2FjY2Vzcyc7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgc2NvcGUgKz0gJyAnICsgYWRpdGlvbmFsU2NvcGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2NvcGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGF5KG1pbGlzZWNvbmRzOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCBtaWxpc2Vjb25kcyk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -6,8 +6,16 @@ export class SecretsStore {
|
|
|
6
6
|
constructor(clientId) {
|
|
7
7
|
this._tokens = {};
|
|
8
8
|
this._identities = {};
|
|
9
|
-
this
|
|
10
|
-
this.
|
|
9
|
+
// this specify which identity id is used by default, when If id is not specified in getToken or getIdentity
|
|
10
|
+
this._defaultIdentityId = null;
|
|
11
|
+
this._defaultIdentityIdStorageKey = null;
|
|
12
|
+
this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail
|
|
13
|
+
this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;
|
|
14
|
+
this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;
|
|
15
|
+
this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);
|
|
16
|
+
}
|
|
17
|
+
get defaultIdentityId() {
|
|
18
|
+
return this._defaultIdentityId;
|
|
11
19
|
}
|
|
12
20
|
removeServicePrincipal() {
|
|
13
21
|
this._servicePrincipal = null;
|
|
@@ -30,6 +38,15 @@ export class SecretsStore {
|
|
|
30
38
|
const key = this.getTokenKey(id);
|
|
31
39
|
return this._identities[key];
|
|
32
40
|
}
|
|
41
|
+
setDefaultIdentityId(id) {
|
|
42
|
+
this._defaultIdentityId = id;
|
|
43
|
+
if (this._defaultIdentityId) {
|
|
44
|
+
localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
localStorage.removeItem(this._defaultIdentityIdStorageKey);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
33
50
|
async getToken(id = null) {
|
|
34
51
|
const key = this.getTokenKey(id);
|
|
35
52
|
// if token is not there or it is invalid we check storage again before returning
|
|
@@ -74,6 +91,9 @@ export class SecretsStore {
|
|
|
74
91
|
}
|
|
75
92
|
}
|
|
76
93
|
getTokenKey(id = null) {
|
|
94
|
+
if (!id) {
|
|
95
|
+
id = this._defaultIdentityId;
|
|
96
|
+
}
|
|
77
97
|
return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;
|
|
78
98
|
}
|
|
79
99
|
clear(key) {
|
|
@@ -97,4 +117,4 @@ export class SecretsStore {
|
|
|
97
117
|
}
|
|
98
118
|
}
|
|
99
119
|
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9zZWNyZXRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBWSxRQUFnQjtRQU1wQixZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUM5QyxnQkFBVyxHQUErQixFQUFFLENBQUM7UUFObkQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixRQUFRLEVBQUUsQ0FBQyxDQUFDLHFFQUFxRTtRQUNuSSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLFFBQVEsT0FBTyxDQUFDO0lBQ2xFLENBQUM7SUFRTSxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBa0M7UUFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBQzFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQW1CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3ZGO1FBQ0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFvQixFQUFFLEtBQWEsSUFBSTtRQUNyRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxXQUFXLENBQUMsS0FBYSxJQUFJO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQWEsSUFBSTtRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWpDLGlGQUFpRjtRQUNqRixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdEQsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFhLElBQUk7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLEVBQVU7UUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQzVELElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0MsSUFBSSxHQUFHLEVBQUUsV0FBVyxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUU7Z0JBQ3BDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDN0M7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFvQixFQUFFLElBQWEsRUFBRSxLQUFhLElBQUk7UUFDbkYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDakIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRCxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJO29CQUNGLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQ3RDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQztpQkFDcEU7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFhLElBQUk7UUFDbkMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDbkYsQ0FBQztJQUVPLEtBQUssQ0FBQyxHQUFXO1FBQ3ZCLE9BQU8sbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sSUFBSSxDQUFJLEdBQVcsRUFBRSxLQUFRO1FBQ25DLE9BQU8sbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sS0FBSyxDQUFDLElBQUksQ0FBSSxHQUFXO1FBQy9CLElBQUk7WUFDRixNQUFNLENBQUMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFO2dCQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFNLENBQUM7YUFDakM7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQUMsTUFBTTtZQUNOLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ2NhcGFjaXRvci1zZWN1cmUtc3RvcmFnZS1wbHVnaW4nO1xyXG5pbXBvcnQgeyBUb2tlblJlc3BvbnNlLCBUb2tlblJlc3BvbnNlSnNvbiB9IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcbmltcG9ydCB7IElkZW50aXR5IH0gZnJvbSAnLi4vbW9kZWxzL2lkZW50aXR5JztcclxuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJy4uL21vZGVscy9zZXJ2aWNlLXByaW5jaXBhbCc7XHJcbmltcG9ydCB7IFNlY3VyZVN0b3JhZ2VQbHVnaW4gfSBmcm9tICdjYXBhY2l0b3Itc2VjdXJlLXN0b3JhZ2UtcGx1Z2luJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWNyZXRzU3RvcmUge1xyXG4gIGNvbnN0cnVjdG9yKGNsaWVudElkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeCA9IGBOdWNsZXVzLklkZW50aXR5LiR7Y2xpZW50SWR9YDsgLy8gZG8gbm90IGNoYW5nZSB0aGlzIG9yIGxvZ2luIGZpdGggZXhpc3RpbmcgcmVmcmVzaCB0b2tlbnMgd2lsbCBmYWlsXHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5ID0gYE51Y2xldXMuSWRlbnRpdHkuJHtjbGllbnRJZH0uU3ZjUGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b2tlblN0b3JhZ2VLZXlQcmVmaXg6IHN0cmluZztcclxuICBwcml2YXRlIF90b2tlbnM6IHsgW2lkOiBzdHJpbmddOiBUb2tlblJlc3BvbnNlIH0gPSB7fTtcclxuICBwcml2YXRlIF9pZGVudGl0aWVzOiB7IFtpZDogc3RyaW5nXTogSWRlbnRpdHkgfSA9IHt9O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWxLZXk7XHJcbiAgcHJpdmF0ZSBfc2VydmljZVByaW5jaXBhbDogU2VydmljZVByaW5jaXBhbDtcclxuXHJcbiAgcHVibGljIHJlbW92ZVNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLmNsZWFyKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFNlcnZpY2VQcmluY2lwYWwoc2VydmljZVByaW5jaXBhbDogU2VydmljZVByaW5jaXBhbCkge1xyXG4gICAgdGhpcy5fc2VydmljZVByaW5jaXBhbCA9IHNlcnZpY2VQcmluY2lwYWw7XHJcbiAgICBhd2FpdCB0aGlzLnNhdmUodGhpcy5fc2VydmljZVByaW5jaXBhbEtleSwgc2VydmljZVByaW5jaXBhbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIGlmICghdGhpcy5fc2VydmljZVByaW5jaXBhbCkge1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gYXdhaXQgdGhpcy5sb2FkPFNlcnZpY2VQcmluY2lwYWw+KHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VQcmluY2lwYWw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VG9rZW4odG9rZW46IFRva2VuUmVzcG9uc2UsIGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXRUb2tlbkludGVybmFsKHRva2VuLCB0cnVlLCBpZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SWRlbnRpdHkoaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkZW50aXRpZXNba2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUb2tlbihpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcblxyXG4gICAgLy8gaWYgdG9rZW4gaXMgbm90IHRoZXJlIG9yIGl0IGlzIGludmFsaWQgd2UgY2hlY2sgc3RvcmFnZSBhZ2FpbiBiZWZvcmUgcmV0dXJuaW5nXHJcbiAgICBpZiAoIXRoaXMuX3Rva2Vuc1trZXldIHx8ICF0aGlzLl90b2tlbnNba2V5XS5pc1ZhbGlkKCkpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZWxvYWRUb2tlbkZyb21TdG9yYWdlKGlkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl90b2tlbnNba2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVUb2tlbihpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICBkZWxldGUgdGhpcy5fdG9rZW5zW2tleV07XHJcbiAgICBkZWxldGUgdGhpcy5faWRlbnRpdGllc1trZXldO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xlYXIoa2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVsb2FkVG9rZW5Gcm9tU3RvcmFnZShpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIGNvbnN0IHN0b3JlZFRva2VuID0gYXdhaXQgdGhpcy5sb2FkPFRva2VuUmVzcG9uc2VKc29uPihrZXkpO1xyXG4gICAgaWYgKHN0b3JlZFRva2VuKSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBUb2tlblJlc3BvbnNlKHN0b3JlZFRva2VuKTtcclxuICAgICAgaWYgKHJlcz8uYWNjZXNzVG9rZW4gfHwgcmVzPy5pZFRva2VuKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRUb2tlbkludGVybmFsKHJlcywgZmFsc2UsIGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldFRva2VuSW50ZXJuYWwodG9rZW46IFRva2VuUmVzcG9uc2UsIHNhdmU6IGJvb2xlYW4sIGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIGlmICh0b2tlbiA9PSBudWxsKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlVG9rZW4oaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdG9rZW5zW2tleV0gPSB0b2tlbjtcclxuICAgICAgdGhpcy5faWRlbnRpdGllc1trZXldID0gSWRlbnRpdHkuY3JlYXRlRnJvbVJlc3BvbnNlKHRva2VuKTtcclxuICAgICAgaWYgKHNhdmUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zYXZlKGtleSwgdG9rZW4udG9Kc29uKCkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogQ291bGQgbm90IHNhdmUgdG8gU2VjdXJlU3RvcmFnZS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VG9rZW5LZXkoaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHJldHVybiBpZCA/IGAke3RoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeH0uJHtpZH1gIDogdGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhcihrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIFNlY3VyZVN0b3JhZ2VQbHVnaW4ucmVtb3ZlKHsga2V5IH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8eyB2YWx1ZTogYm9vbGVhbiB9PiB7XHJcbiAgICByZXR1cm4gU2VjdXJlU3RvcmFnZVBsdWdpbi5zZXQoeyBrZXksIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWQ8VD4oa2V5OiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHggPSBhd2FpdCBTZWN1cmVTdG9yYWdlUGx1Z2luLmdldCh7IGtleSB9KTtcclxuICAgICAgaWYgKHg/LnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoeC52YWx1ZSkgYXMgVDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9zZWNyZXRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBWSxRQUFnQjtRQU9wQixZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUM5QyxnQkFBVyxHQUErQixFQUFFLENBQUM7UUFHckQsNEdBQTRHO1FBQ3BHLHVCQUFrQixHQUFXLElBQUksQ0FBQztRQUNsQyxpQ0FBNEIsR0FBVyxJQUFJLENBQUM7UUFabEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixRQUFRLEVBQUUsQ0FBQyxDQUFDLDZEQUE2RDtRQUMzSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUNsRSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUMxRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBVUQsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMs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RSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxLQUFLLENBQUMsSUFBSSxDQUFJLEdBQVc7UUFDL0IsSUFBSTtZQUNGLE1BQU0sQ0FBQyxHQUFHLE1BQU0sbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Z0JBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQU0sQ0FBQzthQUNqQztpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFBQyxNQUFNO1lBQ04sT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnY2FwYWNpdG9yLXNlY3VyZS1zdG9yYWdlLXBsdWdpbic7XHJcbmltcG9ydCB7IFRva2VuUmVzcG9uc2UsIFRva2VuUmVzcG9uc2VKc29uIH0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcclxuaW1wb3J0IHsgSWRlbnRpdHkgfSBmcm9tICcuLi9tb2RlbHMvaWRlbnRpdHknO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSAnLi4vbW9kZWxzL3NlcnZpY2UtcHJpbmNpcGFsJztcclxuaW1wb3J0IHsgU2VjdXJlU3RvcmFnZVBsdWdpbiB9IGZyb20gJ2NhcGFjaXRvci1zZWN1cmUtc3RvcmFnZS1wbHVnaW4nO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlY3JldHNTdG9yZSB7XHJcbiAgY29uc3RydWN0b3IoY2xpZW50SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4ID0gYE51Y2xldXMuSWRlbnRpdHkuJHtjbGllbnRJZH1gOyAvLyBkbyBub3QgY2hhbmdlIHRoaXMgb3IgbG9naW4gd2l0aCBleGlzdGluZyB0b2tlbnMgd2lsbCBmYWlsXHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5ID0gYCR7dGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4fS5TdmNQYDtcclxuICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleSA9IGAke3RoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeH0uSWRJZGA7XHJcbiAgICB0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Rva2VuU3RvcmFnZUtleVByZWZpeDogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3Rva2VuczogeyBbaWQ6IHN0cmluZ106IFRva2VuUmVzcG9uc2UgfSA9IHt9O1xyXG4gIHByaXZhdGUgX2lkZW50aXRpZXM6IHsgW2lkOiBzdHJpbmddOiBJZGVudGl0eSB9ID0ge307XHJcbiAgcHJpdmF0ZSBfc2VydmljZVByaW5jaXBhbEtleTtcclxuICBwcml2YXRlIF9zZXJ2aWNlUHJpbmNpcGFsOiBTZXJ2aWNlUHJpbmNpcGFsO1xyXG4gIC8vIHRoaXMgc3BlY2lmeSB3aGljaCBpZGVudGl0eSBpZCBpcyB1c2VkIGJ5IGRlZmF1bHQsIHdoZW4gSWYgaWQgaXMgbm90IHNwZWNpZmllZCBpbiBnZXRUb2tlbiBvciBnZXRJZGVudGl0eVxyXG4gIHByaXZhdGUgX2RlZmF1bHRJZGVudGl0eUlkOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgcHVibGljIGdldCBkZWZhdWx0SWRlbnRpdHlJZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVTZXJ2aWNlUHJpbmNpcGFsKCkge1xyXG4gICAgdGhpcy5fc2VydmljZVByaW5jaXBhbCA9IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhcih0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRTZXJ2aWNlUHJpbmNpcGFsKHNlcnZpY2VQcmluY2lwYWw6IFNlcnZpY2VQcmluY2lwYWwpIHtcclxuICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWwgPSBzZXJ2aWNlUHJpbmNpcGFsO1xyXG4gICAgYXdhaXQgdGhpcy5zYXZlKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXksIHNlcnZpY2VQcmluY2lwYWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuX3NlcnZpY2VQcmluY2lwYWwpIHtcclxuICAgICAgdGhpcy5fc2VydmljZVByaW5jaXBhbCA9IGF3YWl0IHRoaXMubG9hZDxTZXJ2aWNlUHJpbmNpcGFsPih0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFRva2VuKHRva2VuOiBUb2tlblJlc3BvbnNlLCBpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0VG9rZW5JbnRlcm5hbCh0b2tlbiwgdHJ1ZSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElkZW50aXR5KGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIHJldHVybiB0aGlzLl9pZGVudGl0aWVzW2tleV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdElkZW50aXR5SWQoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZGVmYXVsdElkZW50aXR5SWQgPSBpZDtcclxuICAgIGlmICh0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZCkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZFN0b3JhZ2VLZXksIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VG9rZW4oaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG5cclxuICAgIC8vIGlmIHRva2VuIGlzIG5vdCB0aGVyZSBvciBpdCBpcyBpbnZhbGlkIHdlIGNoZWNrIHN0b3JhZ2UgYWdhaW4gYmVmb3JlIHJldHVybmluZ1xyXG4gICAgaWYgKCF0aGlzLl90b2tlbnNba2V5XSB8fCAhdGhpcy5fdG9rZW5zW2tleV0uaXNWYWxpZCgpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVsb2FkVG9rZW5Gcm9tU3RvcmFnZShpZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5zW2tleV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlVG9rZW4oaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgZGVsZXRlIHRoaXMuX3Rva2Vuc1trZXldO1xyXG4gICAgZGVsZXRlIHRoaXMuX2lkZW50aXRpZXNba2V5XTtcclxuICAgIHJldHVybiB0aGlzLmNsZWFyKGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbG9hZFRva2VuRnJvbVN0b3JhZ2UoaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICBjb25zdCBzdG9yZWRUb2tlbiA9IGF3YWl0IHRoaXMubG9hZDxUb2tlblJlc3BvbnNlSnNvbj4oa2V5KTtcclxuICAgIGlmIChzdG9yZWRUb2tlbikge1xyXG4gICAgICBjb25zdCByZXMgPSBuZXcgVG9rZW5SZXNwb25zZShzdG9yZWRUb2tlbik7XHJcbiAgICAgIGlmIChyZXM/LmFjY2Vzc1Rva2VuIHx8IHJlcz8uaWRUb2tlbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VG9rZW5JbnRlcm5hbChyZXMsIGZhbHNlLCBpZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRUb2tlbkludGVybmFsKHRva2VuOiBUb2tlblJlc3BvbnNlLCBzYXZlOiBib29sZWFuLCBpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICBpZiAodG9rZW4gPT0gbnVsbCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlbW92ZVRva2VuKGlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3Rva2Vuc1trZXldID0gdG9rZW47XHJcbiAgICAgIHRoaXMuX2lkZW50aXRpZXNba2V5XSA9IElkZW50aXR5LmNyZWF0ZUZyb21SZXNwb25zZSh0b2tlbik7XHJcbiAgICAgIGlmIChzYXZlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZShrZXksIHRva2VuLnRvSnNvbigpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IENvdWxkIG5vdCBzYXZlIHRvIFNlY3VyZVN0b3JhZ2UuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRva2VuS2V5KGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIGlkID0gdGhpcy5fZGVmYXVsdElkZW50aXR5SWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWQgPyBgJHt0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXh9LiR7aWR9YCA6IHRoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXIoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBTZWN1cmVTdG9yYWdlUGx1Z2luLnJlbW92ZSh7IGtleSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBQcm9taXNlPHsgdmFsdWU6IGJvb2xlYW4gfT4ge1xyXG4gICAgcmV0dXJuIFNlY3VyZVN0b3JhZ2VQbHVnaW4uc2V0KHsga2V5LCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkPFQ+KGtleTogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB4ID0gYXdhaXQgU2VjdXJlU3RvcmFnZVBsdWdpbi5nZXQoeyBrZXkgfSk7XHJcbiAgICAgIGlmICh4Py52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHgudmFsdWUpIGFzIFQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { Injectable, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/common/http';
|
|
4
4
|
import { HttpErrorResponse, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
5
|
-
import { from, throwError } from 'rxjs';
|
|
5
|
+
import { lastValueFrom, from, throwError } from 'rxjs';
|
|
6
6
|
import { mergeMap, catchError } from 'rxjs/operators';
|
|
7
7
|
import { __awaiter } from 'tslib';
|
|
8
8
|
import { AppAuthError, AuthorizationNotifier, TokenResponse, AuthorizationServiceConfiguration, JQueryRequestor, Requestor, nowInSeconds, BaseTokenRequestHandler, BasicQueryStringUtils, TokenRequest, GRANT_TYPE_AUTHORIZATION_CODE, GRANT_TYPE_REFRESH_TOKEN, LocalStorageBackend, RedirectRequestHandler, AuthorizationRequest } from '@openid/appauth';
|
|
@@ -144,8 +144,16 @@ class SecretsStore {
|
|
|
144
144
|
constructor(clientId) {
|
|
145
145
|
this._tokens = {};
|
|
146
146
|
this._identities = {};
|
|
147
|
-
this
|
|
148
|
-
this.
|
|
147
|
+
// this specify which identity id is used by default, when If id is not specified in getToken or getIdentity
|
|
148
|
+
this._defaultIdentityId = null;
|
|
149
|
+
this._defaultIdentityIdStorageKey = null;
|
|
150
|
+
this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail
|
|
151
|
+
this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;
|
|
152
|
+
this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;
|
|
153
|
+
this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);
|
|
154
|
+
}
|
|
155
|
+
get defaultIdentityId() {
|
|
156
|
+
return this._defaultIdentityId;
|
|
149
157
|
}
|
|
150
158
|
removeServicePrincipal() {
|
|
151
159
|
this._servicePrincipal = null;
|
|
@@ -172,6 +180,15 @@ class SecretsStore {
|
|
|
172
180
|
const key = this.getTokenKey(id);
|
|
173
181
|
return this._identities[key];
|
|
174
182
|
}
|
|
183
|
+
setDefaultIdentityId(id) {
|
|
184
|
+
this._defaultIdentityId = id;
|
|
185
|
+
if (this._defaultIdentityId) {
|
|
186
|
+
localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
localStorage.removeItem(this._defaultIdentityIdStorageKey);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
175
192
|
getToken(id = null) {
|
|
176
193
|
return __awaiter(this, void 0, void 0, function* () {
|
|
177
194
|
const key = this.getTokenKey(id);
|
|
@@ -222,6 +239,9 @@ class SecretsStore {
|
|
|
222
239
|
});
|
|
223
240
|
}
|
|
224
241
|
getTokenKey(id = null) {
|
|
242
|
+
if (!id) {
|
|
243
|
+
id = this._defaultIdentityId;
|
|
244
|
+
}
|
|
225
245
|
return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;
|
|
226
246
|
}
|
|
227
247
|
clear(key) {
|
|
@@ -683,6 +703,9 @@ class NucleusIdentityService {
|
|
|
683
703
|
get isServicePrincipalAuthenticated() {
|
|
684
704
|
return this.servicePrincipalIdentity != null;
|
|
685
705
|
}
|
|
706
|
+
get isIdentityServicePrincipal() {
|
|
707
|
+
return this._store.defaultIdentityId === this._servicePrincipalTokenId;
|
|
708
|
+
}
|
|
686
709
|
init(startLogin = false) {
|
|
687
710
|
return __awaiter(this, void 0, void 0, function* () {
|
|
688
711
|
if (this._initStarted || this._initialized) {
|
|
@@ -701,6 +724,7 @@ class NucleusIdentityService {
|
|
|
701
724
|
const request = this._authorizationNotifier.request;
|
|
702
725
|
const response = this._authorizationNotifier.response;
|
|
703
726
|
const res = yield this.tokenClient.getByAuthorizationCode(request.redirectUri, response.code, request.internal['code_verifier']);
|
|
727
|
+
this._store.setDefaultIdentityId(null);
|
|
704
728
|
yield this._store.setToken(res);
|
|
705
729
|
}
|
|
706
730
|
else {
|
|
@@ -719,6 +743,7 @@ class NucleusIdentityService {
|
|
|
719
743
|
const assertionToken = yield this.getServicePrincipalAccessToken();
|
|
720
744
|
const scope = this.prepareScope(true, (_a = this.config) === null || _a === void 0 ? void 0 : _a.requestedScopes);
|
|
721
745
|
const res = yield this.tokenClient.getBySecret(provider, secret, assertionToken, scope);
|
|
746
|
+
this._store.setDefaultIdentityId(null);
|
|
722
747
|
yield this._store.setToken(res);
|
|
723
748
|
});
|
|
724
749
|
}
|
|
@@ -797,34 +822,40 @@ class NucleusIdentityService {
|
|
|
797
822
|
}
|
|
798
823
|
loginServicePrincipal() {
|
|
799
824
|
return __awaiter(this, void 0, void 0, function* () {
|
|
800
|
-
yield this.
|
|
825
|
+
const sp = yield this._store.getServicePrincipal();
|
|
826
|
+
if (sp) {
|
|
827
|
+
const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);
|
|
828
|
+
const res = yield this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);
|
|
829
|
+
yield this._store.setToken(res, this._servicePrincipalTokenId);
|
|
830
|
+
return res;
|
|
831
|
+
}
|
|
832
|
+
else {
|
|
833
|
+
throw Error('Service principal is not registered!');
|
|
834
|
+
}
|
|
835
|
+
});
|
|
836
|
+
}
|
|
837
|
+
loginAsServicePrincipal() {
|
|
838
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
839
|
+
const token = yield this._store.getToken(this._servicePrincipalTokenId);
|
|
840
|
+
if (!token) {
|
|
841
|
+
yield this.loginServicePrincipal();
|
|
842
|
+
}
|
|
843
|
+
this._store.setDefaultIdentityId(this._servicePrincipalTokenId);
|
|
801
844
|
});
|
|
802
845
|
}
|
|
803
|
-
/*
|
|
804
|
-
public async loginAsServicePrincipal() {
|
|
805
|
-
let token = await this._store.getToken(this._servicePrincipalTokenId);
|
|
806
|
-
if (!token) {
|
|
807
|
-
await this.loginServicePrincipal();
|
|
808
|
-
}
|
|
809
|
-
token = await this._store.getToken(this._servicePrincipalTokenId);
|
|
810
|
-
// TODO: we have to distinguished that token is service principal so refresh token stuff is handled correctly.
|
|
811
|
-
// We have to implement universal getAccessToken function that can handle all cases
|
|
812
|
-
await this._store.setToken(token);
|
|
813
|
-
}
|
|
814
|
-
*/
|
|
815
846
|
getOtp(type, expiresIn = -1) {
|
|
816
847
|
return __awaiter(this, void 0, void 0, function* () {
|
|
817
848
|
let url = this.config.getServerUrl(`/otp/create?type=${type}`);
|
|
818
849
|
if (expiresIn > 0) {
|
|
819
850
|
url += `&expiresIn=${expiresIn}`;
|
|
820
851
|
}
|
|
821
|
-
return this.http.get(url)
|
|
852
|
+
return lastValueFrom(this.http.get(url));
|
|
822
853
|
});
|
|
823
854
|
}
|
|
824
855
|
getOtpStatus(id) {
|
|
825
856
|
return __awaiter(this, void 0, void 0, function* () {
|
|
826
857
|
const url = this.config.getServerUrl(`/otp/status/${id}`);
|
|
827
|
-
return this.http.get(url)
|
|
858
|
+
return lastValueFrom(this.http.get(url));
|
|
828
859
|
});
|
|
829
860
|
}
|
|
830
861
|
getOtpUrl(redirectUrl, password) {
|
|
@@ -908,25 +939,11 @@ class NucleusIdentityService {
|
|
|
908
939
|
extras: params,
|
|
909
940
|
}, this._crypto, true);
|
|
910
941
|
}
|
|
911
|
-
loginServicePrincipalInternal() {
|
|
912
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
913
|
-
const sp = yield this._store.getServicePrincipal();
|
|
914
|
-
if (sp) {
|
|
915
|
-
const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);
|
|
916
|
-
const res = yield this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);
|
|
917
|
-
yield this._store.setToken(res, this._servicePrincipalTokenId);
|
|
918
|
-
return res;
|
|
919
|
-
}
|
|
920
|
-
else {
|
|
921
|
-
throw Error('Service principal is not registered!');
|
|
922
|
-
}
|
|
923
|
-
});
|
|
924
|
-
}
|
|
925
942
|
getServicePrincipalAccessTokenInternal() {
|
|
926
943
|
return __awaiter(this, void 0, void 0, function* () {
|
|
927
944
|
let token = yield this._store.getToken(this._servicePrincipalTokenId);
|
|
928
945
|
if (!(token === null || token === void 0 ? void 0 : token.isValid())) {
|
|
929
|
-
token = yield this.
|
|
946
|
+
token = yield this.loginServicePrincipal();
|
|
930
947
|
}
|
|
931
948
|
return token === null || token === void 0 ? void 0 : token.accessToken;
|
|
932
949
|
});
|