@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,69 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { HttpErrorResponse, } from '@angular/common/http';
|
|
3
|
+
import { from, throwError } from 'rxjs';
|
|
4
|
+
import { NucleusIdentityConfig } from './nucleus-identity-config';
|
|
5
|
+
import { NucleusIdentityService } from './nucleus-identity.service';
|
|
6
|
+
import { mergeMap, catchError } from 'rxjs/operators';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./nucleus-identity.service";
|
|
9
|
+
import * as i2 from "./nucleus-identity-config";
|
|
10
|
+
export class NucleusTokenInterceptor {
|
|
11
|
+
constructor(auth, config) {
|
|
12
|
+
this.auth = auth;
|
|
13
|
+
this.config = config;
|
|
14
|
+
this._authorityInterceptPaths = [
|
|
15
|
+
'/api',
|
|
16
|
+
'/manage',
|
|
17
|
+
'/otp/create',
|
|
18
|
+
'/otp/status',
|
|
19
|
+
];
|
|
20
|
+
this._authority = config.authority.toLowerCase();
|
|
21
|
+
this._interceptUrls = config.httpInterceptorUrls?.map((x) => x.toLowerCase());
|
|
22
|
+
}
|
|
23
|
+
intercept(req, next) {
|
|
24
|
+
if (this.shouldIntercept(req.url)) {
|
|
25
|
+
const res = this.authorizeRequest(this.auth.getAccessToken(), req, next);
|
|
26
|
+
return this.checkUnauthorized(res);
|
|
27
|
+
}
|
|
28
|
+
return next.handle(req);
|
|
29
|
+
}
|
|
30
|
+
shouldIntercept(url) {
|
|
31
|
+
url = url.toLowerCase();
|
|
32
|
+
if (url.startsWith(this._authority)) {
|
|
33
|
+
const pathname = new URL(url).pathname;
|
|
34
|
+
return this._authorityInterceptPaths.some((x) => pathname.startsWith(x));
|
|
35
|
+
}
|
|
36
|
+
if (this._interceptUrls && this._interceptUrls.length > 0) {
|
|
37
|
+
return this.config.httpInterceptorUrls?.some((x) => url.startsWith(x)) ?? false;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
authorizeRequest(getToken, req, next) {
|
|
42
|
+
return from(getToken).pipe(mergeMap((token) => {
|
|
43
|
+
if (token) {
|
|
44
|
+
const headers = req.headers.set('Authorization', `Bearer ${token}`);
|
|
45
|
+
req = req.clone({ headers });
|
|
46
|
+
}
|
|
47
|
+
return next.handle(req);
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
checkUnauthorized(response) {
|
|
51
|
+
return response.pipe(catchError((err) => {
|
|
52
|
+
if (err instanceof HttpErrorResponse && err.status === 401) {
|
|
53
|
+
if (this.config.automaticLoginOnHttp401) {
|
|
54
|
+
this.auth.login();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return throwError(err);
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NucleusTokenInterceptor, deps: [{ token: i1.NucleusIdentityService }, { token: i2.NucleusIdentityConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
61
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NucleusTokenInterceptor, providedIn: 'root' }); }
|
|
62
|
+
}
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NucleusTokenInterceptor, decorators: [{
|
|
64
|
+
type: Injectable,
|
|
65
|
+
args: [{
|
|
66
|
+
providedIn: 'root',
|
|
67
|
+
}]
|
|
68
|
+
}], ctorParameters: function () { return [{ type: i1.NucleusIdentityService }, { type: i2.NucleusIdentityConfig }]; } });
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy10b2tlbi1pbnRlcmNlcHRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy9udWNsZXVzLWlkZW50aXR5L3NyYy9saWIvbnVjbGV1cy10b2tlbi1pbnRlcmNlcHRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUtMLGlCQUFpQixHQUNsQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBYyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLdEQsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUNVLElBQTRCLEVBQzVCLE1BQTZCO1FBRDdCLFNBQUksR0FBSixJQUFJLENBQXdCO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBUy9CLDZCQUF3QixHQUFHO1lBQ2pDLE1BQU07WUFDTixTQUFTO1lBQ1QsYUFBYTtZQUNiLGFBQWE7U0FDZCxDQUFDO1FBWkEsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzFELENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFXTSxTQUFTLENBQ2QsR0FBeUIsRUFDekIsSUFBaUI7UUFFakIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekUsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxHQUFXO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFeEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUU7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7U0FDakY7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxnQkFBZ0IsQ0FDdEIsUUFBZ0MsRUFDaEMsR0FBeUIsRUFDekIsSUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUN4QixRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixJQUFJLEtBQUssRUFBRTtnQkFDVCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDOUI7WUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsUUFBd0M7UUFFeEMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUNsQixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixJQUFJLEdBQUcsWUFBWSxpQkFBaUIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDMUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFO29CQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNuQjthQUNGO1lBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7K0dBMUVVLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBIdHRwRXZlbnQsXG4gIEh0dHBIYW5kbGVyLFxuICBIdHRwSW50ZXJjZXB0b3IsXG4gIEh0dHBSZXF1ZXN0LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTnVjbGV1c0lkZW50aXR5Q29uZmlnIH0gZnJvbSAnLi9udWNsZXVzLWlkZW50aXR5LWNvbmZpZyc7XG5pbXBvcnQgeyBOdWNsZXVzSWRlbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi9udWNsZXVzLWlkZW50aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgbWVyZ2VNYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOdWNsZXVzVG9rZW5JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aDogTnVjbGV1c0lkZW50aXR5U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZzogTnVjbGV1c0lkZW50aXR5Q29uZmlnXG4gICkge1xuICAgIHRoaXMuX2F1dGhvcml0eSA9IGNvbmZpZy5hdXRob3JpdHkudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLl9pbnRlcmNlcHRVcmxzID0gY29uZmlnLmh0dHBJbnRlcmNlcHRvclVybHM/Lm1hcCgoeCkgPT5cbiAgICAgIHgudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9hdXRob3JpdHk6IHN0cmluZztcbiAgcHJpdmF0ZSBfYXV0aG9yaXR5SW50ZXJjZXB0UGF0aHMgPSBbXG4gICAgJy9hcGknLFxuICAgICcvbWFuYWdlJyxcbiAgICAnL290cC9jcmVhdGUnLFxuICAgICcvb3RwL3N0YXR1cycsXG4gIF07XG4gIHByaXZhdGUgX2ludGVyY2VwdFVybHM/OiBzdHJpbmdbXTtcblxuICBwdWJsaWMgaW50ZXJjZXB0KFxuICAgIHJlcTogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gICAgbmV4dDogSHR0cEhhbmRsZXJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcbiAgICBpZiAodGhpcy5zaG91bGRJbnRlcmNlcHQocmVxLnVybCkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuYXV0aG9yaXplUmVxdWVzdCh0aGlzLmF1dGguZ2V0QWNjZXNzVG9rZW4oKSwgcmVxLCBuZXh0KTtcbiAgICAgIHJldHVybiB0aGlzLmNoZWNrVW5hdXRob3JpemVkKHJlcyk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRJbnRlcmNlcHQodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB1cmwgPSB1cmwudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICh1cmwuc3RhcnRzV2l0aCh0aGlzLl9hdXRob3JpdHkpKSB7XG4gICAgICBjb25zdCBwYXRobmFtZSA9IG5ldyBVUkwodXJsKS5wYXRobmFtZTtcbiAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpdHlJbnRlcmNlcHRQYXRocy5zb21lKCh4KSA9PiBwYXRobmFtZS5zdGFydHNXaXRoKHgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW50ZXJjZXB0VXJscyAmJiB0aGlzLl9pbnRlcmNlcHRVcmxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5odHRwSW50ZXJjZXB0b3JVcmxzPy5zb21lKCh4KSA9PiB1cmwuc3RhcnRzV2l0aCh4KSkgPz8gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0aG9yaXplUmVxdWVzdChcbiAgICBnZXRUb2tlbjogUHJvbWlzZTxzdHJpbmcgfCBudWxsPixcbiAgICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XG4gICAgcmV0dXJuIGZyb20oZ2V0VG9rZW4pLnBpcGUoXG4gICAgICBtZXJnZU1hcCgodG9rZW4pID0+IHtcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgY29uc3QgaGVhZGVycyA9IHJlcS5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICAgICAgICByZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1VuYXV0aG9yaXplZChcbiAgICByZXNwb25zZTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+XG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIGVyci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvbWF0aWNMb2dpbk9uSHR0cDQwMSkge1xuICAgICAgICAgICAgdGhpcy5hdXRoLmxvZ2luKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { AppAuthError, Requestor } from '@openid/appauth';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common/http";
|
|
6
|
+
export class AngularRequestor extends Requestor {
|
|
7
|
+
constructor(http) {
|
|
8
|
+
super();
|
|
9
|
+
this.http = http;
|
|
10
|
+
}
|
|
11
|
+
// eslint-disable-next-line no-undef
|
|
12
|
+
xhr(settings) {
|
|
13
|
+
let method = 'GET';
|
|
14
|
+
if (settings.method) {
|
|
15
|
+
method = settings.method;
|
|
16
|
+
}
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
this.http
|
|
19
|
+
.request(method, settings.url, {
|
|
20
|
+
body: settings.data,
|
|
21
|
+
headers: settings.headers,
|
|
22
|
+
}).
|
|
23
|
+
subscribe({
|
|
24
|
+
next: res => resolve(res),
|
|
25
|
+
error: err => {
|
|
26
|
+
let e = new AppAuthError(err);
|
|
27
|
+
if (err instanceof HttpErrorResponse) {
|
|
28
|
+
e = new AppAuthError(err.error?.error || err.statusText);
|
|
29
|
+
}
|
|
30
|
+
reject(e);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularRequestor, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
36
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularRequestor, providedIn: 'root' }); }
|
|
37
|
+
}
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularRequestor, decorators: [{
|
|
39
|
+
type: Injectable,
|
|
40
|
+
args: [{
|
|
41
|
+
providedIn: 'root',
|
|
42
|
+
}]
|
|
43
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1yZXF1ZXN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9hbmd1bGFyLXJlcXVlc3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFNckUsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFNBQVM7SUFDN0MsWUFBb0IsSUFBZ0I7UUFDbEMsS0FBSyxFQUFFLENBQUM7UUFEVSxTQUFJLEdBQUosSUFBSSxDQUFZO0lBRXBDLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsR0FBRyxDQUFJLFFBQTRCO1FBQ2pDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDbkIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7U0FDMUI7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxJQUFJO2lCQUNOLE9BQU8sQ0FBSSxNQUFNLEVBQUUsUUFBUSxDQUFDLEdBQWEsRUFBRTtnQkFDMUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNuQixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQXNCO2FBQ3pDLENBQUM7Z0JBQ0YsU0FBUyxDQUFDO2dCQUNSLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ3pCLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDWCxJQUFJLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxHQUFHLFlBQVksaUJBQWlCLEVBQUU7d0JBQ3BDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQzFEO29CQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDWixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQTdCVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBBdXRoRXJyb3IsIFJlcXVlc3RvciB9IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGNhcGFjaXRvci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJSZXF1ZXN0b3IgZXh0ZW5kcyBSZXF1ZXN0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHhocjxUPihzZXR0aW5nczogSlF1ZXJ5QWpheFNldHRpbmdzKTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IG1ldGhvZCA9ICdHRVQnXG4gICAgaWYgKHNldHRpbmdzLm1ldGhvZCkge1xuICAgICAgbWV0aG9kID0gc2V0dGluZ3MubWV0aG9kO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnJlcXVlc3Q8VD4obWV0aG9kLCBzZXR0aW5ncy51cmwgYXMgc3RyaW5nLCB7XG4gICAgICAgICAgYm9keTogc2V0dGluZ3MuZGF0YSxcbiAgICAgICAgICBoZWFkZXJzOiBzZXR0aW5ncy5oZWFkZXJzIGFzIEh0dHBIZWFkZXJzLFxuICAgICAgICB9KS5cbiAgICAgICAgc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiByZXMgPT4gcmVzb2x2ZShyZXMpLFxuICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgbGV0IGUgPSBuZXcgQXBwQXV0aEVycm9yKGVycik7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgZSA9IG5ldyBBcHBBdXRoRXJyb3IoZXJyLmVycm9yPy5lcnJvciB8fCBlcnIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AuthorizationServiceConfiguration, JQueryRequestor, } from '@openid/appauth';
|
|
2
|
+
const WELL_KNOWN_PATH = '.well-known';
|
|
3
|
+
const OPENID_CONFIGURATION = 'openid-configuration';
|
|
4
|
+
export class NucleusAuthorizationServiceConfiguration extends AuthorizationServiceConfiguration {
|
|
5
|
+
constructor(request) {
|
|
6
|
+
super(request);
|
|
7
|
+
this.deviceAuthorizationEndpoint = request.device_authorization_endpoint;
|
|
8
|
+
this.registrationEndpoint = request.registration_endpoint;
|
|
9
|
+
}
|
|
10
|
+
static async fetchFromIssuer(openIdIssuerUrl, requestor) {
|
|
11
|
+
const fullUrl = `${openIdIssuerUrl}/${WELL_KNOWN_PATH}/${OPENID_CONFIGURATION}`;
|
|
12
|
+
const requestorToUse = requestor || new JQueryRequestor();
|
|
13
|
+
const json = await requestorToUse
|
|
14
|
+
.xhr({
|
|
15
|
+
url: fullUrl,
|
|
16
|
+
dataType: 'json',
|
|
17
|
+
method: 'GET',
|
|
18
|
+
});
|
|
19
|
+
return new NucleusAuthorizationServiceConfiguration(json);
|
|
20
|
+
}
|
|
21
|
+
toJson() {
|
|
22
|
+
const res = super.toJson();
|
|
23
|
+
res.device_authorization_endpoint = this.deviceAuthorizationEndpoint;
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
+
return res;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi1zZXJ2aWNlLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9hdXRob3JpemF0aW9uLXNlcnZpY2UtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUNBQWlDLEVBRWpDLGVBQWUsR0FFaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUM7QUFDdEMsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQVFwRCxNQUFNLE9BQU8sd0NBQXlDLFNBQVEsaUNBQWlDO0lBQzdGLFlBQVksT0FBcUQ7UUFDL0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQztRQUN6RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0lBQzVELENBQUM7SUFLRCxNQUFNLENBQVUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxlQUF1QixFQUFFLFNBQXFCO1FBQ2xGLE1BQU0sT0FBTyxHQUFHLEdBQUcsZUFBZSxJQUFJLGVBQWUsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hGLE1BQU0sY0FBYyxHQUFHLFNBQVMsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLE1BQU0sY0FBYzthQUM5QixHQUFHLENBQStDO1lBQ2pELEdBQUcsRUFBRSxPQUFPO1lBQ1osUUFBUSxFQUFFLE1BQU07WUFDaEIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLENBQUM7UUFDTCxPQUFPLElBQUksd0NBQXdDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVRLE1BQU07UUFDYixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFrRCxDQUFDO1FBQzNFLEdBQUcsQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7UUFDckUsOERBQThEO1FBQzlELE9BQU8sR0FBVSxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF1dGhvcml6YXRpb25TZXJ2aWNlQ29uZmlndXJhdGlvbixcbiAgQXV0aG9yaXphdGlvblNlcnZpY2VDb25maWd1cmF0aW9uSnNvbixcbiAgSlF1ZXJ5UmVxdWVzdG9yLFxuICBSZXF1ZXN0b3IsXG59IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XG5cbmNvbnN0IFdFTExfS05PV05fUEFUSCA9ICcud2VsbC1rbm93bic7XG5jb25zdCBPUEVOSURfQ09ORklHVVJBVElPTiA9ICdvcGVuaWQtY29uZmlndXJhdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVjbGV1c0F1dGhvcml6YXRpb25TZXJ2aWNlQ29uZmlndXJhdGlvbkpzb25cbiAgZXh0ZW5kcyBBdXRob3JpemF0aW9uU2VydmljZUNvbmZpZ3VyYXRpb25Kc29uIHtcbiAgZGV2aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvbl9lbmRwb2ludD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIE51Y2xldXNBdXRob3JpemF0aW9uU2VydmljZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBBdXRob3JpemF0aW9uU2VydmljZUNvbmZpZ3VyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBOdWNsZXVzQXV0aG9yaXphdGlvblNlcnZpY2VDb25maWd1cmF0aW9uSnNvbikge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMuZGV2aWNlQXV0aG9yaXphdGlvbkVuZHBvaW50ID0gcmVxdWVzdC5kZXZpY2VfYXV0aG9yaXphdGlvbl9lbmRwb2ludDtcbiAgICB0aGlzLnJlZ2lzdHJhdGlvbkVuZHBvaW50ID0gcmVxdWVzdC5yZWdpc3RyYXRpb25fZW5kcG9pbnQ7XG4gIH1cblxuICBwdWJsaWMgZGV2aWNlQXV0aG9yaXphdGlvbkVuZHBvaW50Pzogc3RyaW5nO1xuICBwdWJsaWMgcmVnaXN0cmF0aW9uRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgc3RhdGljIG92ZXJyaWRlIGFzeW5jIGZldGNoRnJvbUlzc3VlcihvcGVuSWRJc3N1ZXJVcmw6IHN0cmluZywgcmVxdWVzdG9yPzogUmVxdWVzdG9yKSB7XG4gICAgY29uc3QgZnVsbFVybCA9IGAke29wZW5JZElzc3VlclVybH0vJHtXRUxMX0tOT1dOX1BBVEh9LyR7T1BFTklEX0NPTkZJR1VSQVRJT059YDtcbiAgICBjb25zdCByZXF1ZXN0b3JUb1VzZSA9IHJlcXVlc3RvciB8fCBuZXcgSlF1ZXJ5UmVxdWVzdG9yKCk7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHJlcXVlc3RvclRvVXNlXG4gICAgICAueGhyPE51Y2xldXNBdXRob3JpemF0aW9uU2VydmljZUNvbmZpZ3VyYXRpb25Kc29uPih7XG4gICAgICAgIHVybDogZnVsbFVybCxcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIH0pO1xuICAgIHJldHVybiBuZXcgTnVjbGV1c0F1dGhvcml6YXRpb25TZXJ2aWNlQ29uZmlndXJhdGlvbihqc29uKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvSnNvbigpIHtcbiAgICBjb25zdCByZXMgPSBzdXBlci50b0pzb24oKSBhcyBOdWNsZXVzQXV0aG9yaXphdGlvblNlcnZpY2VDb25maWd1cmF0aW9uSnNvbjtcbiAgICByZXMuZGV2aWNlX2F1dGhvcml6YXRpb25fZW5kcG9pbnQgPSB0aGlzLmRldmljZUF1dGhvcml6YXRpb25FbmRwb2ludDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJldHVybiByZXMgYXMgYW55O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { NucleusAppService } from '@kolektor/nucleus-common';
|
|
2
|
+
import { Browser } from '@capacitor/browser';
|
|
3
|
+
import { Injectable } from '@angular/core';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@kolektor/nucleus-common";
|
|
6
|
+
export class LocationService {
|
|
7
|
+
constructor(appService) {
|
|
8
|
+
this.appService = appService;
|
|
9
|
+
}
|
|
10
|
+
get hash() {
|
|
11
|
+
return window.location.hash;
|
|
12
|
+
}
|
|
13
|
+
set hash(v) {
|
|
14
|
+
window.location.hash = v;
|
|
15
|
+
}
|
|
16
|
+
get host() {
|
|
17
|
+
return window.location.host;
|
|
18
|
+
}
|
|
19
|
+
set host(v) {
|
|
20
|
+
window.location.host = v;
|
|
21
|
+
}
|
|
22
|
+
get origin() {
|
|
23
|
+
return window.location.origin;
|
|
24
|
+
}
|
|
25
|
+
get hostname() {
|
|
26
|
+
return window.location.hostname;
|
|
27
|
+
}
|
|
28
|
+
set hostname(v) {
|
|
29
|
+
window.location.hostname = v;
|
|
30
|
+
}
|
|
31
|
+
get pathname() {
|
|
32
|
+
return window.location.pathname;
|
|
33
|
+
}
|
|
34
|
+
set pathname(v) {
|
|
35
|
+
window.location.pathname = v;
|
|
36
|
+
}
|
|
37
|
+
get port() {
|
|
38
|
+
return window.location.port;
|
|
39
|
+
}
|
|
40
|
+
set port(v) {
|
|
41
|
+
window.location.port = v;
|
|
42
|
+
}
|
|
43
|
+
get protocol() {
|
|
44
|
+
return window.location.protocol;
|
|
45
|
+
}
|
|
46
|
+
set protocol(v) {
|
|
47
|
+
window.location.protocol = v;
|
|
48
|
+
}
|
|
49
|
+
get search() {
|
|
50
|
+
return window.location.search;
|
|
51
|
+
}
|
|
52
|
+
set search(v) {
|
|
53
|
+
window.location.search = v;
|
|
54
|
+
}
|
|
55
|
+
assign(url) {
|
|
56
|
+
if (this.appService.isNative) {
|
|
57
|
+
Browser.open({ url });
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
window.location.assign(url);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocationService, deps: [{ token: i1.NucleusAppService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
64
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocationService, providedIn: 'root' }); }
|
|
65
|
+
}
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocationService, decorators: [{
|
|
67
|
+
type: Injectable,
|
|
68
|
+
args: [{
|
|
69
|
+
providedIn: 'root',
|
|
70
|
+
}]
|
|
71
|
+
}], ctorParameters: function () { return [{ type: i1.NucleusAppService }]; } });
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcvbnVjbGV1cy1pZGVudGl0eS9zcmMvbGliL3V0aWxzL2xvY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUszQyxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUFvQixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtJQUFHLENBQUM7SUFFckQsSUFBSSxJQUFJO1FBQ04sT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNSLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNSLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNSLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsQ0FBQztRQUNWLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN2QjthQUFNO1lBQ0wsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDOytHQTlEVSxlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uTGlrZSB9IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XG5pbXBvcnQgeyBOdWNsZXVzQXBwU2VydmljZSB9IGZyb20gJ0Brb2xla3Rvci9udWNsZXVzLWNvbW1vbic7XG5pbXBvcnQgeyBCcm93c2VyIH0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExvY2F0aW9uU2VydmljZSBpbXBsZW1lbnRzIExvY2F0aW9uTGlrZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwU2VydmljZTogTnVjbGV1c0FwcFNlcnZpY2UpIHt9XG5cbiAgZ2V0IGhhc2goKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICB9XG4gIHNldCBoYXNoKHYpIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHY7XG4gIH1cblxuICBnZXQgaG9zdCgpIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhvc3Q7XG4gIH1cbiAgc2V0IGhvc3Qodikge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0ID0gdjtcbiAgfVxuXG4gIGdldCBvcmlnaW4oKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gIH1cblxuICBnZXQgaG9zdG5hbWUoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbiAgfVxuICBzZXQgaG9zdG5hbWUodikge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSA9IHY7XG4gIH1cblxuICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgfVxuICBzZXQgcGF0aG5hbWUodikge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSA9IHY7XG4gIH1cblxuICBnZXQgcG9ydCgpIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnBvcnQ7XG4gIH1cbiAgc2V0IHBvcnQodikge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5wb3J0ID0gdjtcbiAgfVxuXG4gIGdldCBwcm90b2NvbCgpIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnByb3RvY29sO1xuICB9XG4gIHNldCBwcm90b2NvbCh2KSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sID0gdjtcbiAgfVxuXG4gIGdldCBzZWFyY2goKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gIH1cbiAgc2V0IHNlYXJjaCh2KSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnNlYXJjaCA9IHY7XG4gIH1cblxuICBhc3NpZ24odXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hcHBTZXJ2aWNlLmlzTmF0aXZlKSB7XG4gICAgICBCcm93c2VyLm9wZW4oeyB1cmwgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AuthorizationNotifier } from '@openid/appauth';
|
|
2
|
+
export class NucleusAuthorizationNotifier extends AuthorizationNotifier {
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
this.response = null;
|
|
6
|
+
this.error = null;
|
|
7
|
+
this.setAuthorizationListener((request, response, error) => {
|
|
8
|
+
console.log('Authorization request complete ', request, response, error);
|
|
9
|
+
this.response = response;
|
|
10
|
+
this.request = request;
|
|
11
|
+
this.error = error;
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1hdXRob3JpemF0aW9uLW5vdGlmaWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy9udWNsZXVzLWlkZW50aXR5L3NyYy9saWIvdXRpbHMvbnVjbGV1cy1hdXRob3JpemF0aW9uLW5vdGlmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXhELE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxxQkFBcUI7SUFLckU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUxWLGFBQVEsR0FBaUMsSUFBSSxDQUFDO1FBRTlDLFVBQUssR0FBOEIsSUFBSSxDQUFDO1FBSXRDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aG9yaXphdGlvbk5vdGlmaWVyIH0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcbmltcG9ydCB7IEF1dGhvcml6YXRpb25SZXNwb25zZSwgQXV0aG9yaXphdGlvbkVycm9yIH0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcbmltcG9ydCB7IEF1dGhvcml6YXRpb25SZXF1ZXN0IH0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcblxuZXhwb3J0IGNsYXNzIE51Y2xldXNBdXRob3JpemF0aW9uTm90aWZpZXIgZXh0ZW5kcyBBdXRob3JpemF0aW9uTm90aWZpZXIge1xuICByZXNwb25zZTogQXV0aG9yaXphdGlvblJlc3BvbnNlIHwgbnVsbCA9IG51bGw7XG4gIHJlcXVlc3QhOiBBdXRob3JpemF0aW9uUmVxdWVzdDtcbiAgZXJyb3I6IEF1dGhvcml6YXRpb25FcnJvciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zZXRBdXRob3JpemF0aW9uTGlzdGVuZXIoKHJlcXVlc3QsIHJlc3BvbnNlLCBlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ0F1dGhvcml6YXRpb24gcmVxdWVzdCBjb21wbGV0ZSAnLCByZXF1ZXN0LCByZXNwb25zZSwgZXJyb3IpO1xuICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { NucleusAppService } from '@kolektor/nucleus-common';
|
|
3
|
+
import { NucleusIdentityConfig } from '../nucleus-identity-config';
|
|
4
|
+
import { AngularRequestor } from './angular-requestor';
|
|
5
|
+
import { NucleusAuthorizationServiceConfiguration } from './authorization-service-configuration';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./angular-requestor";
|
|
8
|
+
import * as i2 from "../nucleus-identity-config";
|
|
9
|
+
import * as i3 from "@kolektor/nucleus-common";
|
|
10
|
+
export class OidcConfigurationService {
|
|
11
|
+
constructor(requestor, config, appService) {
|
|
12
|
+
this.requestor = requestor;
|
|
13
|
+
this.config = config;
|
|
14
|
+
this.appService = appService;
|
|
15
|
+
this._configuration = null;
|
|
16
|
+
}
|
|
17
|
+
async getConfiguration() {
|
|
18
|
+
await this.assureConfiguration();
|
|
19
|
+
if (!this._configuration) {
|
|
20
|
+
throw Error('Failed to get OIDC configuration!');
|
|
21
|
+
}
|
|
22
|
+
return this._configuration;
|
|
23
|
+
}
|
|
24
|
+
get clientId() {
|
|
25
|
+
return this.config.clientId;
|
|
26
|
+
}
|
|
27
|
+
get requestedScopes() {
|
|
28
|
+
return this.config.requestedScopes;
|
|
29
|
+
}
|
|
30
|
+
get servicePrincipalRequestedScopes() {
|
|
31
|
+
return this.config.servicePrincipalRequestedScopes;
|
|
32
|
+
}
|
|
33
|
+
get authProviderHint() {
|
|
34
|
+
return this.config.authProviderHint;
|
|
35
|
+
}
|
|
36
|
+
get redirectUrl() {
|
|
37
|
+
let uri = window.location.href;
|
|
38
|
+
const platform = this.appService.platform;
|
|
39
|
+
if (platform === 'android' && this.config.androidRedirectUri) {
|
|
40
|
+
uri = this.config.androidRedirectUri;
|
|
41
|
+
}
|
|
42
|
+
else if (platform === 'ios' && this.config.iOSRedirectUri) {
|
|
43
|
+
uri = this.config.iOSRedirectUri;
|
|
44
|
+
}
|
|
45
|
+
else if (this.config.redirectUri) {
|
|
46
|
+
uri = this.config.redirectUri;
|
|
47
|
+
}
|
|
48
|
+
return this.NormalizeRedirectUri(uri);
|
|
49
|
+
}
|
|
50
|
+
getServerUrl(relativeUri = null) {
|
|
51
|
+
let authority = this.config.authority;
|
|
52
|
+
if (!authority || authority === 'origin') {
|
|
53
|
+
authority = window.origin;
|
|
54
|
+
}
|
|
55
|
+
let url = new URL(authority);
|
|
56
|
+
if (relativeUri) {
|
|
57
|
+
url = new URL(relativeUri, url);
|
|
58
|
+
}
|
|
59
|
+
return url.href;
|
|
60
|
+
}
|
|
61
|
+
NormalizeRedirectUri(uri) {
|
|
62
|
+
const i = uri.indexOf('#');
|
|
63
|
+
if (i > 0) {
|
|
64
|
+
uri = uri.substring(0, i);
|
|
65
|
+
}
|
|
66
|
+
return uri;
|
|
67
|
+
}
|
|
68
|
+
async assureConfiguration() {
|
|
69
|
+
if (this._configuration != null) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
let authority = this.getServerUrl();
|
|
73
|
+
if (authority[authority.length - 1] === '/') {
|
|
74
|
+
authority = authority.slice(0, -1);
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
this._configuration =
|
|
78
|
+
await NucleusAuthorizationServiceConfiguration.fetchFromIssuer(authority, this.requestor);
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
console.error('Nucleus.Identity: Cannot load OIDC configuration: ' +
|
|
82
|
+
e.message);
|
|
83
|
+
throw e;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OidcConfigurationService, deps: [{ token: i1.AngularRequestor }, { token: i2.NucleusIdentityConfig }, { token: i3.NucleusAppService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
87
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OidcConfigurationService, providedIn: 'root' }); }
|
|
88
|
+
}
|
|
89
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OidcConfigurationService, decorators: [{
|
|
90
|
+
type: Injectable,
|
|
91
|
+
args: [{
|
|
92
|
+
providedIn: 'root',
|
|
93
|
+
}]
|
|
94
|
+
}], ctorParameters: function () { return [{ type: i1.AngularRequestor }, { type: i2.NucleusIdentityConfig }, { type: i3.NucleusAppService }]; } });
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkYy1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9vaWRjLWNvbmZpZ3VyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7OztBQUtqRyxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQ1UsU0FBMkIsRUFDM0IsTUFBNkIsRUFDN0IsVUFBNkI7UUFGN0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFHL0IsbUJBQWMsR0FBb0QsSUFBSSxDQUFDO0lBRjVFLENBQUM7SUFJRyxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsTUFBTSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtTQUNqRDtRQUVELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFB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dCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOdWNsZXVzQXBwU2VydmljZSB9IGZyb20gJ0Brb2xla3Rvci9udWNsZXVzLWNvbW1vbic7XG5pbXBvcnQgeyBOdWNsZXVzSWRlbnRpdHlDb25maWcgfSBmcm9tICcuLi9udWNsZXVzLWlkZW50aXR5LWNvbmZpZyc7XG5pbXBvcnQgeyBBbmd1bGFyUmVxdWVzdG9yIH0gZnJvbSAnLi9hbmd1bGFyLXJlcXVlc3Rvcic7XG5pbXBvcnQgeyBOdWNsZXVzQXV0aG9yaXphdGlvblNlcnZpY2VDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9hdXRob3JpemF0aW9uLXNlcnZpY2UtY29uZmlndXJhdGlvbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlcXVlc3RvcjogQW5ndWxhclJlcXVlc3RvcixcbiAgICBwcml2YXRlIGNvbmZpZzogTnVjbGV1c0lkZW50aXR5Q29uZmlnLFxuICAgIHByaXZhdGUgYXBwU2VydmljZTogTnVjbGV1c0FwcFNlcnZpY2VcbiAgKSB7fVxuXG4gIHByaXZhdGUgX2NvbmZpZ3VyYXRpb246IE51Y2xldXNBdXRob3JpemF0aW9uU2VydmljZUNvbmZpZ3VyYXRpb24gfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlndXJhdGlvbigpIHtcbiAgICBhd2FpdCB0aGlzLmFzc3VyZUNvbmZpZ3VyYXRpb24oKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRocm93IEVycm9yKCdGYWlsZWQgdG8gZ2V0IE9JREMgY29uZmlndXJhdGlvbiEnKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBjbGllbnRJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2xpZW50SWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlcXVlc3RlZFNjb3BlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdGVkU2NvcGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBzZXJ2aWNlUHJpbmNpcGFsUmVxdWVzdGVkU2NvcGVzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5zZXJ2aWNlUHJpbmNpcGFsUmVxdWVzdGVkU2NvcGVzO1xuICB9XG5cbiAgcHVibGljIGdldCBhdXRoUHJvdmlkZXJIaW50KCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hdXRoUHJvdmlkZXJIaW50O1xuICB9XG5cbiAgcHVibGljIGdldCByZWRpcmVjdFVybCgpIHtcbiAgICBsZXQgdXJpID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLmFwcFNlcnZpY2UucGxhdGZvcm07XG4gICAgaWYgKHBsYXRmb3JtID09PSAnYW5kcm9pZCcgJiYgdGhpcy5jb25maWcuYW5kcm9pZFJlZGlyZWN0VXJpKSB7XG4gICAgICB1cmkgPSB0aGlzLmNvbmZpZy5hbmRyb2lkUmVkaXJlY3RVcmk7XG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2lvcycgJiYgdGhpcy5jb25maWcuaU9TUmVkaXJlY3RVcmkpIHtcbiAgICAgIHVyaSA9IHRoaXMuY29uZmlnLmlPU1JlZGlyZWN0VXJpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcucmVkaXJlY3RVcmkpIHtcbiAgICAgIHVyaSA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5Ob3JtYWxpemVSZWRpcmVjdFVyaSh1cmkpO1xuICB9XG5cbiAgcHVibGljIGdldFNlcnZlclVybChyZWxhdGl2ZVVyaTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBsZXQgYXV0aG9yaXR5ID0gdGhpcy5jb25maWcuYXV0aG9yaXR5O1xuICAgIGlmICghYXV0aG9yaXR5IHx8IGF1dGhvcml0eSA9PT0gJ29yaWdpbicpIHtcbiAgICAgIGF1dGhvcml0eSA9IHdpbmRvdy5vcmlnaW47XG4gICAgfVxuXG4gICAgbGV0IHVybCA9IG5ldyBVUkwoYXV0aG9yaXR5KTtcblxuICAgIGlmIChyZWxhdGl2ZVVyaSkge1xuICAgICAgdXJsID0gbmV3IFVSTChyZWxhdGl2ZVVyaSwgdXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLmhyZWY7XG4gIH1cblxuICBwcml2YXRlIE5vcm1hbGl6ZVJlZGlyZWN0VXJpKHVyaTogc3RyaW5nKSB7XG4gICAgY29uc3QgaSA9IHVyaS5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGkgPiAwKSB7XG4gICAgICB1cmkgPSB1cmkuc3Vic3RyaW5nKDAsIGkpO1xuICAgIH1cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhc3N1cmVDb25maWd1cmF0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jb25maWd1cmF0aW9uICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGF1dGhvcml0eSA9IHRoaXMuZ2V0U2VydmVyVXJsKCk7XG4gICAgaWYgKGF1dGhvcml0eVthdXRob3JpdHkubGVuZ3RoIC0gMV0gPT09ICcvJykge1xuICAgICAgYXV0aG9yaXR5ID0gYXV0aG9yaXR5LnNsaWNlKDAsIC0xKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPVxuICAgICAgICBhd2FpdCBOdWNsZXVzQXV0aG9yaXphdGlvblNlcnZpY2VDb25maWd1cmF0aW9uLmZldGNoRnJvbUlzc3VlcihcbiAgICAgICAgICBhdXRob3JpdHksXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0b3JcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnTnVjbGV1cy5JZGVudGl0eTogQ2Fubm90IGxvYWQgT0lEQyBjb25maWd1cmF0aW9uOiAnICtcbiAgICAgICAgICAoZSBhcyBFcnJvcikubWVzc2FnZVxuICAgICAgKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import 'capacitor-secure-storage-plugin';
|
|
2
|
+
import { TokenResponse } from '@openid/appauth';
|
|
3
|
+
import { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';
|
|
4
|
+
import { Identity } from '../models/identity';
|
|
5
|
+
export class SecretsStore {
|
|
6
|
+
constructor(clientId) {
|
|
7
|
+
this._tokens = {};
|
|
8
|
+
this._identities = {};
|
|
9
|
+
this._servicePrincipal = null;
|
|
10
|
+
this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail
|
|
11
|
+
this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;
|
|
12
|
+
this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;
|
|
13
|
+
this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);
|
|
14
|
+
}
|
|
15
|
+
get defaultIdentityId() {
|
|
16
|
+
return this._defaultIdentityId;
|
|
17
|
+
}
|
|
18
|
+
removeServicePrincipal() {
|
|
19
|
+
this._servicePrincipal = null;
|
|
20
|
+
return this.clear(this._servicePrincipalKey);
|
|
21
|
+
}
|
|
22
|
+
async setServicePrincipal(servicePrincipal) {
|
|
23
|
+
this._servicePrincipal = servicePrincipal;
|
|
24
|
+
await this.save(this._servicePrincipalKey, servicePrincipal);
|
|
25
|
+
}
|
|
26
|
+
async getServicePrincipal() {
|
|
27
|
+
if (!this._servicePrincipal) {
|
|
28
|
+
this._servicePrincipal = await this.load(this._servicePrincipalKey);
|
|
29
|
+
}
|
|
30
|
+
return this._servicePrincipal;
|
|
31
|
+
}
|
|
32
|
+
setToken(token, id = null) {
|
|
33
|
+
return this.setTokenInternal(token, true, id);
|
|
34
|
+
}
|
|
35
|
+
getIdentity(id = null) {
|
|
36
|
+
const key = this.getTokenKey(id);
|
|
37
|
+
return this._identities[key];
|
|
38
|
+
}
|
|
39
|
+
setDefaultIdentityId(id) {
|
|
40
|
+
this._defaultIdentityId = id;
|
|
41
|
+
if (this._defaultIdentityId) {
|
|
42
|
+
localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
localStorage.removeItem(this._defaultIdentityIdStorageKey);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async getToken(id = null) {
|
|
49
|
+
const key = this.getTokenKey(id);
|
|
50
|
+
// if token is not there or it is invalid we check storage again before returning
|
|
51
|
+
if (!this._tokens[key] || !this._tokens[key]?.isValid()) {
|
|
52
|
+
await this.reloadTokenFromStorage(id);
|
|
53
|
+
}
|
|
54
|
+
return this._tokens[key];
|
|
55
|
+
}
|
|
56
|
+
removeToken(id = null) {
|
|
57
|
+
const key = this.getTokenKey(id);
|
|
58
|
+
delete this._tokens[key];
|
|
59
|
+
delete this._identities[key];
|
|
60
|
+
return this.clear(key);
|
|
61
|
+
}
|
|
62
|
+
async reloadTokenFromStorage(id) {
|
|
63
|
+
const key = this.getTokenKey(id);
|
|
64
|
+
const storedToken = await this.load(key);
|
|
65
|
+
if (storedToken) {
|
|
66
|
+
const res = new TokenResponse(storedToken);
|
|
67
|
+
if (res?.accessToken || res?.idToken) {
|
|
68
|
+
await this.setTokenInternal(res, false, id);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
async setTokenInternal(token, save, id) {
|
|
74
|
+
const key = this.getTokenKey(id);
|
|
75
|
+
if (token == null) {
|
|
76
|
+
await this.removeToken(id);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this._tokens[key] = token;
|
|
80
|
+
this._identities[key] = new Identity(token);
|
|
81
|
+
if (save) {
|
|
82
|
+
try {
|
|
83
|
+
await this.save(key, token.toJson());
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
console.warn('Nucleus.Identity: Could not save to SecureStorage.');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
getTokenKey(id) {
|
|
92
|
+
if (!id) {
|
|
93
|
+
id = this._defaultIdentityId;
|
|
94
|
+
}
|
|
95
|
+
return id
|
|
96
|
+
? `${this._tokenStorageKeyPrefix}.${id}`
|
|
97
|
+
: this._tokenStorageKeyPrefix;
|
|
98
|
+
}
|
|
99
|
+
clear(key) {
|
|
100
|
+
return SecureStoragePlugin.remove({ key });
|
|
101
|
+
}
|
|
102
|
+
save(key, value) {
|
|
103
|
+
return SecureStoragePlugin.set({ key, value: JSON.stringify(value) });
|
|
104
|
+
}
|
|
105
|
+
async load(key) {
|
|
106
|
+
try {
|
|
107
|
+
const x = await SecureStoragePlugin.get({ key });
|
|
108
|
+
if (x?.value) {
|
|
109
|
+
return JSON.parse(x.value);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcvbnVjbGV1cy1pZGVudGl0eS9zcmMvbGliL3V0aWxzL3NlY3JldHMtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFxQixNQUFNLGlCQUFpQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUFZLFFBQWdCO1FBU3BCLFlBQU8sR0FBMkMsRUFBRSxDQUFDO1FBQ3JELGdCQUFXLEdBQStCLEVBQUUsQ0FBQztRQUU3QyxzQkFBaUIsR0FBNEIsSUFBSSxDQUFDO1FBWHhELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxvQkFBb0IsUUFBUSxFQUFFLENBQUMsQ0FBQyw2REFBNkQ7UUFDM0gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixPQUFPLENBQUM7UUFDbEUsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixPQUFPLENBQUM7UUFDMUUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQzVDLElBQUksQ0FBQyw0QkFBNEIsQ0FDbEMsQ0FBQztJQUNKLENBQUM7SUFVRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRU0sc0JBQXNCO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxL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QyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFJLENBQUksR0FBVztRQUMvQixJQUFJO1lBQ0YsTUFBTSxDQUFDLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtnQkFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBTSxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUFDLE1BQU07WUFDTixPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdjYXBhY2l0b3Itc2VjdXJlLXN0b3JhZ2UtcGx1Z2luJztcbmltcG9ydCB7IFRva2VuUmVzcG9uc2UsIFRva2VuUmVzcG9uc2VKc29uIH0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tICcuLi9tb2RlbHMvc2VydmljZS1wcmluY2lwYWwnO1xuaW1wb3J0IHsgU2VjdXJlU3RvcmFnZVBsdWdpbiB9IGZyb20gJ2NhcGFjaXRvci1zZWN1cmUtc3RvcmFnZS1wbHVnaW4nO1xuaW1wb3J0IHsgSWRlbnRpdHkgfSBmcm9tICcuLi9tb2RlbHMvaWRlbnRpdHknO1xuXG5leHBvcnQgY2xhc3MgU2VjcmV0c1N0b3JlIHtcbiAgY29uc3RydWN0b3IoY2xpZW50SWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeCA9IGBOdWNsZXVzLklkZW50aXR5LiR7Y2xpZW50SWR9YDsgLy8gZG8gbm90IGNoYW5nZSB0aGlzIG9yIGxvZ2luIHdpdGggZXhpc3RpbmcgdG9rZW5zIHdpbGwgZmFpbFxuICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkgPSBgJHt0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXh9LlN2Y1BgO1xuICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleSA9IGAke3RoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeH0uSWRJZGA7XG4gICAgdGhpcy5fZGVmYXVsdElkZW50aXR5SWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcbiAgICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBfdG9rZW5TdG9yYWdlS2V5UHJlZml4OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Rva2VuczogeyBbaWQ6IHN0cmluZ106IFRva2VuUmVzcG9uc2UgfCBudWxsIH0gPSB7fTtcbiAgcHJpdmF0ZSBfaWRlbnRpdGllczogeyBbaWQ6IHN0cmluZ106IElkZW50aXR5IH0gPSB7fTtcbiAgcHJpdmF0ZSBfc2VydmljZVByaW5jaXBhbEtleTtcbiAgcHJpdmF0ZSBfc2VydmljZVByaW5jaXBhbDogU2VydmljZVByaW5jaXBhbCB8IG51bGwgPSBudWxsO1xuICAvLyB0aGlzIHNwZWNpZnkgd2hpY2ggaWRlbnRpdHkgaWQgaXMgdXNlZCBieSBkZWZhdWx0LCB3aGVuIElmIGlkIGlzIG5vdCBzcGVjaWZpZWQgaW4gZ2V0VG9rZW4gb3IgZ2V0SWRlbnRpdHlcbiAgcHJpdmF0ZSBfZGVmYXVsdElkZW50aXR5SWQ6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleTogc3RyaW5nO1xuXG4gIHB1YmxpYyBnZXQgZGVmYXVsdElkZW50aXR5SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVNlcnZpY2VQcmluY2lwYWwoKSB7XG4gICAgdGhpcy5fc2VydmljZVByaW5jaXBhbCA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuY2xlYXIodGhpcy5fc2VydmljZVByaW5jaXBhbEtleSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0U2VydmljZVByaW5jaXBhbChzZXJ2aWNlUHJpbmNpcGFsOiBTZXJ2aWNlUHJpbmNpcGFsKSB7XG4gICAgdGhpcy5fc2VydmljZVByaW5jaXBhbCA9IHNlcnZpY2VQcmluY2lwYWw7XG4gICAgYXdhaXQgdGhpcy5zYXZlKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXksIHNlcnZpY2VQcmluY2lwYWwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWwoKSB7XG4gICAgaWYgKCF0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsKSB7XG4gICAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gYXdhaXQgdGhpcy5sb2FkPFNlcnZpY2VQcmluY2lwYWw+KFxuICAgICAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVByaW5jaXBhbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUb2tlbih0b2tlbjogVG9rZW5SZXNwb25zZSwgaWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0VG9rZW5JbnRlcm5hbCh0b2tlbiwgdHJ1ZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIGdldElkZW50aXR5KGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkgOiBJZGVudGl0eSB8IG51bGwge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xuICAgIHJldHVybiB0aGlzLl9pZGVudGl0aWVzW2tleV07XG4gIH1cblxuICBwdWJsaWMgc2V0RGVmYXVsdElkZW50aXR5SWQoaWQ6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZCA9IGlkO1xuICAgIGlmICh0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZCkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleSxcbiAgICAgICAgdGhpcy5fZGVmYXVsdElkZW50aXR5SWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRva2VuKGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xuXG4gICAgLy8gaWYgdG9rZW4gaXMgbm90IHRoZXJlIG9yIGl0IGlzIGludmFsaWQgd2UgY2hlY2sgc3RvcmFnZSBhZ2FpbiBiZWZvcmUgcmV0dXJuaW5nXG4gICAgaWYgKCF0aGlzLl90b2tlbnNba2V5XSB8fCAhdGhpcy5fdG9rZW5zW2tleV0/LmlzVmFsaWQoKSkge1xuICAgICAgYXdhaXQgdGhpcy5yZWxvYWRUb2tlbkZyb21TdG9yYWdlKGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Rva2Vuc1trZXldO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVRva2VuKGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xuICAgIGRlbGV0ZSB0aGlzLl90b2tlbnNba2V5XTtcbiAgICBkZWxldGUgdGhpcy5faWRlbnRpdGllc1trZXldO1xuICAgIHJldHVybiB0aGlzLmNsZWFyKGtleSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbG9hZFRva2VuRnJvbVN0b3JhZ2UoaWQ6IHN0cmluZyB8IG51bGwpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcbiAgICBjb25zdCBzdG9yZWRUb2tlbiA9IGF3YWl0IHRoaXMubG9hZDxUb2tlblJlc3BvbnNlSnNvbj4oa2V5KTtcbiAgICBpZiAoc3RvcmVkVG9rZW4pIHtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBUb2tlblJlc3BvbnNlKHN0b3JlZFRva2VuKTtcbiAgICAgIGlmIChyZXM/LmFjY2Vzc1Rva2VuIHx8IHJlcz8uaWRUb2tlbikge1xuICAgICAgICBhd2FpdCB0aGlzLnNldFRva2VuSW50ZXJuYWwocmVzLCBmYWxzZSwgaWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0VG9rZW5JbnRlcm5hbCh0b2tlbjogVG9rZW5SZXNwb25zZSwgc2F2ZTogYm9vbGVhbiwgaWQ6IHN0cmluZyB8IG51bGwpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcbiAgICBpZiAodG9rZW4gPT0gbnVsbCkge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVUb2tlbihpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Rva2Vuc1trZXldID0gdG9rZW47XG4gICAgICB0aGlzLl9pZGVudGl0aWVzW2tleV0gPSBuZXcgSWRlbnRpdHkodG9rZW4pO1xuICAgICAgaWYgKHNhdmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNhdmUoa2V5LCB0b2tlbi50b0pzb24oKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IENvdWxkIG5vdCBzYXZlIHRvIFNlY3VyZVN0b3JhZ2UuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFRva2VuS2V5KGlkOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgaWQgPSB0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZDtcbiAgICB9XG4gICAgcmV0dXJuIGlkXG4gICAgICA/IGAke3RoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeH0uJHtpZH1gXG4gICAgICA6IHRoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeDtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXIoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gU2VjdXJlU3RvcmFnZVBsdWdpbi5yZW1vdmUoeyBrZXkgfSk7XG4gIH1cblxuICBwcml2YXRlIHNhdmU8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogUHJvbWlzZTx7IHZhbHVlOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm4gU2VjdXJlU3RvcmFnZVBsdWdpbi5zZXQoeyBrZXksIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWQ8VD4oa2V5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeCA9IGF3YWl0IFNlY3VyZVN0b3JhZ2VQbHVnaW4uZ2V0KHsga2V5IH0pO1xuICAgICAgaWYgKHg/LnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHgudmFsdWUpIGFzIFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19
|