@meshmakers/shared-auth 2.0.2212-7001 → 2.0.2301-12001
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/authorize.guard.mjs +31 -10
- package/esm2020/lib/authorize.service.mjs +10 -7
- package/fesm2015/meshmakers-shared-auth.mjs +44 -17
- package/fesm2015/meshmakers-shared-auth.mjs.map +1 -1
- package/fesm2020/meshmakers-shared-auth.mjs +39 -15
- package/fesm2020/meshmakers-shared-auth.mjs.map +1 -1
- package/lib/authorize.guard.d.ts +9 -4
- package/lib/authorize.service.d.ts +2 -1
- package/package.json +1 -1
|
@@ -1,24 +1,45 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { firstValueFrom } from "rxjs";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "./authorize.service";
|
|
5
|
+
import * as i2 from "@angular/router";
|
|
5
6
|
export class AuthorizeGuard {
|
|
6
|
-
constructor(authorize) {
|
|
7
|
+
constructor(authorize, router) {
|
|
7
8
|
this.authorize = authorize;
|
|
9
|
+
this.router = router;
|
|
8
10
|
}
|
|
9
|
-
canActivate(
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
canActivate(next, state) {
|
|
12
|
+
let url = state.url;
|
|
13
|
+
return this.handleAuthorization(next, url);
|
|
12
14
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
canActivateChild(next, state) {
|
|
16
|
+
return this.canActivate(next, state);
|
|
17
|
+
}
|
|
18
|
+
canDeactivate(component, currentRoute, currentState, nextState) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
canLoad(route, segments) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
async handleAuthorization(route, url) {
|
|
25
|
+
const isAuthenticated = await firstValueFrom(this.authorize.getIsAuthenticated());
|
|
26
|
+
if (isAuthenticated) {
|
|
27
|
+
const userRoles = await firstValueFrom(this.authorize.getRoles());
|
|
28
|
+
if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {
|
|
29
|
+
this.router.navigate(['']);
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
15
35
|
this.authorize.login();
|
|
16
36
|
}
|
|
37
|
+
return false;
|
|
17
38
|
}
|
|
18
39
|
}
|
|
19
|
-
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, deps: [{ token: i1.AuthorizeService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
40
|
+
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, deps: [{ token: i1.AuthorizeService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
20
41
|
AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard });
|
|
21
42
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, decorators: [{
|
|
22
43
|
type: Injectable
|
|
23
|
-
}], ctorParameters: function () { return [{ type: i1.AuthorizeService }]; } });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
}], ctorParameters: function () { return [{ type: i1.AuthorizeService }, { type: i2.Router }]; } });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtYXV0aC9zcmMvbGliL2F1dGhvcml6ZS5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBWXpDLE9BQU8sRUFBQyxjQUFjLEVBQTRCLE1BQU0sTUFBTSxDQUFDOzs7O0FBRy9ELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLFNBQTJCLEVBQVUsTUFBYztRQUFuRCxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDdkUsQ0FBQztJQUVELFdBQVcsQ0FDVCxJQUE0QixFQUM1QixLQUEwQjtRQUMxQixJQUFJLEdBQUcsR0FBVyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsSUFBNEIsRUFDNUIsS0FBMEI7UUFDMUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsYUFBYSxDQUNYLFNBQWtCLEVBQ2xCLFlBQW9DLEVBQ3BDLFlBQWlDLEVBQ2pDLFNBQStCO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sQ0FDTCxLQUFZLEVBQ1osUUFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQTZCLEVBQUUsR0FBUTtRQUN2RSxNQUFNLGVBQWUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUNsRixJQUFJLGVBQWUsRUFBRTtZQUNuQixNQUFNLFNBQVMsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbEUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDcEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN4QjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7MkdBN0NVLGNBQWM7K0dBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gIENhbkFjdGl2YXRlLFxyXG4gIENhbkFjdGl2YXRlQ2hpbGQsXHJcbiAgQ2FuRGVhY3RpdmF0ZSxcclxuICBDYW5Mb2FkLCBSb3V0ZSxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCwgVXJsU2VnbWVudCxcclxuICBVcmxUcmVlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtBdXRob3JpemVTZXJ2aWNlfSBmcm9tICcuL2F1dGhvcml6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbSwgbGFzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhvcml6ZUd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQsIENhbkRlYWN0aXZhdGU8dW5rbm93bj4sIENhbkxvYWQge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aG9yaXplOiBBdXRob3JpemVTZXJ2aWNlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XHJcbiAgfVxyXG5cclxuICBjYW5BY3RpdmF0ZShcclxuICAgIG5leHQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFVybFRyZWU+IHwgUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT4gfCBib29sZWFuIHwgVXJsVHJlZSB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmcgPSBzdGF0ZS51cmw7XHJcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVBdXRob3JpemF0aW9uKG5leHQsIHVybCk7XHJcbiAgfVxyXG5cclxuICBjYW5BY3RpdmF0ZUNoaWxkKFxyXG4gICAgbmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4gfCBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IGJvb2xlYW4gfCBVcmxUcmVlIHtcclxuICAgIHJldHVybiB0aGlzLmNhbkFjdGl2YXRlKG5leHQsIHN0YXRlKTtcclxuICB9XHJcblxyXG4gIGNhbkRlYWN0aXZhdGUoXHJcbiAgICBjb21wb25lbnQ6IHVua25vd24sXHJcbiAgICBjdXJyZW50Um91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBjdXJyZW50U3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsXHJcbiAgICBuZXh0U3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4gfCBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IGJvb2xlYW4gfCBVcmxUcmVlIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY2FuTG9hZChcclxuICAgIHJvdXRlOiBSb3V0ZSxcclxuICAgIHNlZ21lbnRzOiBVcmxTZWdtZW50W10pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhbmRsZUF1dGhvcml6YXRpb24ocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHVybDogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBpc0F1dGhlbnRpY2F0ZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGhvcml6ZS5nZXRJc0F1dGhlbnRpY2F0ZWQoKSk7XHJcbiAgICBpZiAoaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgIGNvbnN0IHVzZXJSb2xlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXV0aG9yaXplLmdldFJvbGVzKCkpO1xyXG4gICAgICBpZiAocm91dGUuZGF0YS5yb2xlcyAmJiAhcm91dGUuZGF0YS5yb2xlcy5maWx0ZXIodmFsdWUgPT4gdXNlclJvbGVzLmluY2x1ZGVzKHZhbHVlKSkpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmF1dGhvcml6ZS5sb2dpbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Inject, Injectable } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { filter } from 'rxjs/operators';
|
|
3
|
+
import { filter, map } from 'rxjs/operators';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "angular-oauth2-oidc";
|
|
6
6
|
export class AuthorizeOptions {
|
|
@@ -19,11 +19,14 @@ export class AuthorizeService {
|
|
|
19
19
|
console.debug("AuthorizeService::created");
|
|
20
20
|
this.getUser().subscribe(s => {
|
|
21
21
|
this.isAuthenticated.next(!!s);
|
|
22
|
-
this.isAdmin.next(!!s && (s.role.includes("Administrators")
|
|
23
|
-
this.isDeveloper.next(!!s && (s.role.includes("Developers")
|
|
22
|
+
this.isAdmin.next(!!s && (s.role.includes("Administrators")));
|
|
23
|
+
this.isDeveloper.next(!!s && (s.role.includes("Developers")));
|
|
24
24
|
this.isManager.next(!!s && s.role.includes("Managers"));
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
+
getRoles() {
|
|
28
|
+
return this.getUser().pipe(map(u => u.role));
|
|
29
|
+
}
|
|
27
30
|
getServiceUris() {
|
|
28
31
|
return this.authorizeOptions.wellKnownServiceUris;
|
|
29
32
|
}
|
|
@@ -76,18 +79,18 @@ export class AuthorizeService {
|
|
|
76
79
|
});
|
|
77
80
|
this.oauthService.events
|
|
78
81
|
.pipe(filter(e => e.type === 'session_terminated'))
|
|
79
|
-
.subscribe(
|
|
82
|
+
.subscribe(_ => {
|
|
80
83
|
// tslint:disable-next-line:no-console
|
|
81
84
|
console.debug('Your session has been terminated!');
|
|
82
85
|
});
|
|
83
86
|
this.oauthService.events
|
|
84
87
|
.pipe(filter(e => e.type === 'token_received'))
|
|
85
|
-
.subscribe(
|
|
88
|
+
.subscribe(_ => {
|
|
86
89
|
this.loadUser();
|
|
87
90
|
});
|
|
88
91
|
this.oauthService.events
|
|
89
92
|
.pipe(filter(e => e.type === 'logout'))
|
|
90
|
-
.subscribe(
|
|
93
|
+
.subscribe(_ => {
|
|
91
94
|
this.accessToken.next(null);
|
|
92
95
|
this.user.next(null);
|
|
93
96
|
});
|
|
@@ -117,4 +120,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImpor
|
|
|
117
120
|
type: Inject,
|
|
118
121
|
args: [AuthorizeOptions]
|
|
119
122
|
}] }, { type: i1.OAuthService }]; } });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC1hdXRoL3NyYy9saWIvYXV0aG9yaXplLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7OztBQVF0QyxNQUFNLE9BQU8sZ0JBQWdCO0NBYzVCO0FBR0QsTUFBTSxPQUFPLGdCQUFnQjtJQVMzQixZQUE4QyxnQkFBa0MsRUFBVSxZQUEwQjtRQUF0RSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFSNUcsb0JBQWUsR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsWUFBTyxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxnQkFBVyxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRSxjQUFTLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLGNBQVMsR0FBNEIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0QsZ0JBQVcsR0FBNEIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsU0FBSSxHQUEyQixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUcvRCxPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsZUFBZSxD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bEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBRXRELENBQUM7SUFFTyxRQUFRO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7WUFDaEUsT0FBTztTQUNSO1FBRUQsTUFBTSxJQUFJLEdBQVUsTUFBTSxDQUFDO1FBQzNCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQzs7NkdBL0hVLGdCQUFnQixrQkFTUCxnQkFBZ0I7aUhBVHpCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVOzswQkFVSSxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0F1dGhDb25maWcsIE9BdXRoU2VydmljZX0gZnJvbSBcImFuZ3VsYXItb2F1dGgyLW9pZGNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICByb2xlOiBzdHJpbmdbXTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1dGhvcml6ZU9wdGlvbnMge1xyXG4gIHdlbGxLbm93blNlcnZpY2VVcmlzOiBzdHJpbmdbXTtcclxuICAvLyBVcmwgb2YgdGhlIElkZW50aXR5IFByb3ZpZGVyXHJcbiAgaXNzdWVyOiBzdHJpbmc7XHJcbiAgLy8gVVJMIG9mIHRoZSBTUEEgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gYWZ0ZXIgbG9naW5cclxuICByZWRpcmVjdFVyaTogc3RyaW5nO1xyXG4gIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogc3RyaW5nO1xyXG4gIC8vIFRoZSBTUEEncyBpZC4gVGhlIFNQQSBpcyByZWdpc3RlcmVkIHdpdGggdGhpcyBpZCBhdCB0aGUgYXV0aC1zZXJ2ZXJcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIC8vIHNldCB0aGUgc2NvcGUgZm9yIHRoZSBwZXJtaXNzaW9ucyB0aGUgY2xpZW50IHNob3VsZCByZXF1ZXN0XHJcbiAgLy8gVGhlIGZpcnN0IHRocmVlIGFyZSBkZWZpbmVkIGJ5IE9JREMuIFRoZSA0dGggaXMgYSB1c2UgY2FzZS1zcGVjaWZpYyBvbmVcclxuICBzY29wZTogc3RyaW5nO1xyXG4gIHNob3dEZWJ1Z0luZm9ybWF0aW9uOiBib29sZWFuO1xyXG4gIHNlc3Npb25DaGVja3NFbmFibGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRob3JpemVTZXJ2aWNlIHtcclxuICBwcml2YXRlIGlzQXV0aGVudGljYXRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc0FkbWluOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICBwcml2YXRlIGlzRGV2ZWxvcGVyOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICBwcml2YXRlIGlzTWFuYWdlcjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBhdXRob3JpdHk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuICBwcml2YXRlIGFjY2Vzc1Rva2VuOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgcHJpdmF0ZSB1c2VyOiBCZWhhdmlvclN1YmplY3Q8SVVzZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChBdXRob3JpemVPcHRpb25zKSBwcml2YXRlIGF1dGhvcml6ZU9wdGlvbnM6IEF1dGhvcml6ZU9wdGlvbnMsIHByaXZhdGUgb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UpIHtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJBdXRob3JpemVTZXJ2aWNlOjpjcmVhdGVkXCIpO1xyXG4gICAgdGhpcy5nZXRVc2VyKCkuc3Vic2NyaWJlKHMgPT4ge1xyXG4gICAgICB0aGlzLmlzQXV0aGVudGljYXRlZC5uZXh0KCEhcyk7XHJcbiAgICAgIHRoaXMuaXNBZG1pbi5uZXh0KCEhcyAmJiAocy5yb2xlLmluY2x1ZGVzKFwiQWRtaW5pc3RyYXRvcnNcIil8fCBzLnJvbGUuaW5jbHVkZXMoXCJEZXZlbG9wZXJzXCIpfHwgcy5yb2xlLmluY2x1ZGVzKFwiTWFuYWdlcnNcIikpKTtcclxuICAgICAgdGhpcy5pc0RldmVsb3Blci5uZXh0KCEhcyAmJiAocy5yb2xlLmluY2x1ZGVzKFwiRGV2ZWxvcGVyc1wiKSB8fCBzLnJvbGUuaW5jbHVkZXMoXCJNYW5hZ2Vyc1wiKSkpO1xyXG4gICAgICB0aGlzLmlzTWFuYWdlci5uZXh0KCEhcyAmJiBzLnJvbGUuaW5jbHVkZXMoXCJNYW5hZ2Vyc1wiKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZXJ2aWNlVXJpcygpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMud2VsbEtub3duU2VydmljZVVyaXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QXV0aG9yaXR5KCk6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLmF1dGhvcml0eTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc0F1dGhlbnRpY2F0ZWQoKTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc0FkbWluKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0FkbWluO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElzRGV2ZWxvcGVyKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0RldmVsb3BlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc01hbmFnZXIoKTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLmlzTWFuYWdlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBY2Nlc3NUb2tlbigpOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hY2Nlc3NUb2tlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRVc2VyKCk6IEJlaGF2aW9yU3ViamVjdDxJVXNlcj4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dpbigpIHtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmluaXRJbXBsaWNpdEZsb3coKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKSB7XHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5sb2dPdXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBpbml0aWFsaXplKCkge1xyXG5cclxuICAgIGNvbnNvbGUuZGVidWcoXCJBdXRob3JpemVTZXJ2aWNlOjppbml0aWFsaXplOjpzdGFydGVkXCIpO1xyXG5cclxuICAgIGNvbnN0IGNvbmZpZzogQXV0aENvbmZpZyA9IHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnY29kZScsXHJcbiAgICAgIGlzc3VlcjogdGhpcy5hdXRob3JpemVPcHRpb25zLmlzc3VlcixcclxuICAgICAgcmVkaXJlY3RVcmk6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5yZWRpcmVjdFVyaSxcclxuICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMucG9zdExvZ291dFJlZGlyZWN0VXJpLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5hdXRob3JpemVPcHRpb25zLmNsaWVudElkLFxyXG4gICAgICBzY29wZTogdGhpcy5hdXRob3JpemVPcHRpb25zLnNjb3BlLFxyXG4gICAgICBzaG93RGVidWdJbmZvcm1hdGlvbjogdGhpcy5hdXRob3JpemVPcHRpb25zLnNob3dEZWJ1Z0luZm9ybWF0aW9uLFxyXG4gICAgICBzZXNzaW9uQ2hlY2tzRW5hYmxlZDogdGhpcy5hdXRob3JpemVPcHRpb25zLnNlc3Npb25DaGVja3NFbmFibGVkXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmNvbmZpZ3VyZShjb25maWcpO1xyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2Uuc2V0U3RvcmFnZShsb2NhbFN0b3JhZ2UpO1xyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5zZXR1cEF1dG9tYXRpY1NpbGVudFJlZnJlc2goKTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5ldmVudHMuc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmRlYnVnKCdvYXV0aC9vaWRjIGV2ZW50JywgZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5ldmVudHNcclxuICAgICAgLnBpcGUoZmlsdGVyKGUgPT4gZS50eXBlID09PSAnc2Vzc2lvbl90ZXJtaW5hdGVkJykpXHJcbiAgICAgIC5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCdZb3VyIHNlc3Npb24gaGFzIGJlZW4gdGVybWluYXRlZCEnKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3Rva2VuX3JlY2VpdmVkJykpXHJcbiAgICAgIC5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlcigpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5ldmVudHNcclxuICAgICAgLnBpcGUoZmlsdGVyKGUgPT4gZS50eXBlID09PSAnbG9nb3V0JykpXHJcbiAgICAgIC5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbi5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMudXNlci5uZXh0KG51bGwpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgIHRoaXMubG9hZFVzZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dGhvcml0eS5uZXh0KHRoaXMuYXV0aG9yaXplT3B0aW9ucy5pc3N1ZXIpO1xyXG5cclxuICAgIGNvbnNvbGUuZGVidWcoXCJBdXRob3JpemVTZXJ2aWNlOjppbml0aWFsaXplOjpkb25lXCIpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFVzZXIoKSB7XHJcbiAgICBjb25zdCBjbGFpbXMgPSB0aGlzLm9hdXRoU2VydmljZS5nZXRJZGVudGl0eUNsYWltcygpO1xyXG4gICAgaWYgKCFjbGFpbXMpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImNsYWltcyB3aGVyZSBudWxsIHdoZW4gbG9hZGluZyBpZGVudGl0eSBjbGFpbXNcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1c2VyID0gPElVc2VyPmNsYWltcztcclxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKTtcclxuICAgIHRoaXMudXNlci5uZXh0KHVzZXIpO1xyXG4gICAgdGhpcy5hY2Nlc3NUb2tlbi5uZXh0KGFjY2Vzc1Rva2VuKTtcclxuICB9XHJcbn1cclxuIl19
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC1hdXRoL3NyYy9saWIvYXV0aG9yaXplLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFRM0MsTUFBTSxPQUFPLGdCQUFnQjtDQWM1QjtBQUdELE1BQU0sT0FBTyxnQkFBZ0I7SUFTM0IsWUFBOEMsZ0JBQWtDLEVBQVUsWUFBMEI7UUFBdEUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBUjVHLG9CQUFlLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLFlBQU8sR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsZ0JBQVcsR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsY0FBUyxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxjQUFTLEdBQTRCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELGdCQUFXLEdBQTRCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLFNBQUksR0FBMkIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFHL0QsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxD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QUVsRCxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFFdEQsQ0FBQztJQUVPLFFBQVE7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUNoRSxPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBVSxNQUFNLENBQUM7UUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDOzs2R0FySVUsZ0JBQWdCLGtCQVNQLGdCQUFnQjtpSEFUekIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQVVJLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtBdXRoQ29uZmlnLCBPQXV0aFNlcnZpY2V9IGZyb20gXCJhbmd1bGFyLW9hdXRoMi1vaWRjXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcm9sZTogc3RyaW5nW107XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRob3JpemVPcHRpb25zIHtcclxuICB3ZWxsS25vd25TZXJ2aWNlVXJpczogc3RyaW5nW107XHJcbiAgLy8gVXJsIG9mIHRoZSBJZGVudGl0eSBQcm92aWRlclxyXG4gIGlzc3Vlcjogc3RyaW5nO1xyXG4gIC8vIFVSTCBvZiB0aGUgU1BBIHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIGFmdGVyIGxvZ2luXHJcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcclxuICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IHN0cmluZztcclxuICAvLyBUaGUgU1BBJ3MgaWQuIFRoZSBTUEEgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgaWQgYXQgdGhlIGF1dGgtc2VydmVyXHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuICAvLyBzZXQgdGhlIHNjb3BlIGZvciB0aGUgcGVybWlzc2lvbnMgdGhlIGNsaWVudCBzaG91bGQgcmVxdWVzdFxyXG4gIC8vIFRoZSBmaXJzdCB0aHJlZSBhcmUgZGVmaW5lZCBieSBPSURDLiBUaGUgNHRoIGlzIGEgdXNlIGNhc2Utc3BlY2lmaWMgb25lXHJcbiAgc2NvcGU6IHN0cmluZztcclxuICBzaG93RGVidWdJbmZvcm1hdGlvbjogYm9vbGVhbjtcclxuICBzZXNzaW9uQ2hlY2tzRW5hYmxlZDogYm9vbGVhbjtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXV0aG9yaXplU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBpc0F1dGhlbnRpY2F0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHByaXZhdGUgaXNBZG1pbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc0RldmVsb3BlcjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc01hbmFnZXI6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHByaXZhdGUgYXV0aG9yaXR5OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgcHJpdmF0ZSBhY2Nlc3NUb2tlbjogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gIHByaXZhdGUgdXNlcjogQmVoYXZpb3JTdWJqZWN0PElVc2VyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQXV0aG9yaXplT3B0aW9ucykgcHJpdmF0ZSBhdXRob3JpemVPcHRpb25zOiBBdXRob3JpemVPcHRpb25zLCBwcml2YXRlIG9hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlKSB7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6Y3JlYXRlZFwiKTtcclxuICAgIHRoaXMuZ2V0VXNlcigpLnN1YnNjcmliZShzID0+IHtcclxuICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQubmV4dCghIXMpO1xyXG4gICAgICB0aGlzLmlzQWRtaW4ubmV4dCghIXMgJiYgKHMucm9sZS5pbmNsdWRlcyhcIkFkbWluaXN0cmF0b3JzXCIpKSk7XHJcbiAgICAgIHRoaXMuaXNEZXZlbG9wZXIubmV4dCghIXMgJiYgKHMucm9sZS5pbmNsdWRlcyhcIkRldmVsb3BlcnNcIikpKTtcclxuICAgICAgdGhpcy5pc01hbmFnZXIubmV4dCghIXMgJiYgcy5yb2xlLmluY2x1ZGVzKFwiTWFuYWdlcnNcIikpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Um9sZXMoKTogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PntcclxuICAgIHJldHVybiB0aGlzLmdldFVzZXIoKS5waXBlKFxyXG4gICAgICBtYXAodT0+IHUucm9sZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VydmljZVVyaXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRob3JpemVPcHRpb25zLndlbGxLbm93blNlcnZpY2VVcmlzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEF1dGhvcml0eSgpOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRob3JpdHk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNBdXRoZW50aWNhdGVkKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNBZG1pbigpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNBZG1pbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc0RldmVsb3BlcigpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNEZXZlbG9wZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNNYW5hZ2VyKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc01hbmFnZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZXNzVG9rZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VXNlcigpOiBCZWhhdmlvclN1YmplY3Q8SVVzZXI+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9naW4oKSB7XHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5pbml0SW1wbGljaXRGbG93KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KCkge1xyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UubG9nT3V0KGZhbHNlKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpIHtcclxuXHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6aW5pdGlhbGl6ZTo6c3RhcnRlZFwiKTtcclxuXHJcbiAgICBjb25zdCBjb25maWc6IEF1dGhDb25maWcgPSB7XHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2NvZGUnLFxyXG4gICAgICBpc3N1ZXI6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5pc3N1ZXIsXHJcbiAgICAgIHJlZGlyZWN0VXJpOiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMucmVkaXJlY3RVcmksXHJcbiAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogdGhpcy5hdXRob3JpemVPcHRpb25zLnBvc3RMb2dvdXRSZWRpcmVjdFVyaSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5jbGllbnRJZCxcclxuICAgICAgc2NvcGU6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5zY29wZSxcclxuICAgICAgc2hvd0RlYnVnSW5mb3JtYXRpb246IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5zaG93RGVidWdJbmZvcm1hdGlvbixcclxuICAgICAgc2Vzc2lvbkNoZWNrc0VuYWJsZWQ6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5zZXNzaW9uQ2hlY2tzRW5hYmxlZFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5jb25maWd1cmUoY29uZmlnKTtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLnNldFN0b3JhZ2UobG9jYWxTdG9yYWdlKTtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudEFuZFRyeUxvZ2luKCk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5kZWJ1Zygnb2F1dGgvb2lkYyBldmVudCcsIGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3Nlc3Npb25fdGVybWluYXRlZCcpKVxyXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnWW91ciBzZXNzaW9uIGhhcyBiZWVuIHRlcm1pbmF0ZWQhJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50c1xyXG4gICAgICAucGlwZShmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICd0b2tlbl9yZWNlaXZlZCcpKVxyXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZFVzZXIoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ2xvZ291dCcpKVxyXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIHRoaXMuYWNjZXNzVG9rZW4ubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnVzZXIubmV4dChudWxsKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICB0aGlzLmxvYWRVc2VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdXRob3JpdHkubmV4dCh0aGlzLmF1dGhvcml6ZU9wdGlvbnMuaXNzdWVyKTtcclxuXHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6aW5pdGlhbGl6ZTo6ZG9uZVwiKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRVc2VyKCkge1xyXG4gICAgY29uc3QgY2xhaW1zID0gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRlbnRpdHlDbGFpbXMoKTtcclxuICAgIGlmICghY2xhaW1zKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJjbGFpbXMgd2hlcmUgbnVsbCB3aGVuIGxvYWRpbmcgaWRlbnRpdHkgY2xhaW1zXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXNlciA9IDxJVXNlcj5jbGFpbXM7XHJcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XHJcbiAgICB0aGlzLnVzZXIubmV4dCh1c2VyKTtcclxuICAgIHRoaXMuYWNjZXNzVG9rZW4ubmV4dChhY2Nlc3NUb2tlbik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, Inject, Component, NgModule } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
import {
|
|
3
|
+
import { BehaviorSubject, firstValueFrom } from 'rxjs';
|
|
4
|
+
import { map, filter } from 'rxjs/operators';
|
|
5
5
|
import * as i1 from 'angular-oauth2-oidc';
|
|
6
6
|
import { OAuthModule } from 'angular-oauth2-oidc';
|
|
7
7
|
import * as i2 from '@angular/common';
|
|
8
8
|
import { CommonModule } from '@angular/common';
|
|
9
9
|
import { HttpClientModule } from '@angular/common/http';
|
|
10
|
+
import { __awaiter } from 'tslib';
|
|
11
|
+
import * as i2$1 from '@angular/router';
|
|
10
12
|
|
|
11
13
|
class AuthorizeOptions {
|
|
12
14
|
}
|
|
@@ -24,11 +26,14 @@ class AuthorizeService {
|
|
|
24
26
|
console.debug("AuthorizeService::created");
|
|
25
27
|
this.getUser().subscribe(s => {
|
|
26
28
|
this.isAuthenticated.next(!!s);
|
|
27
|
-
this.isAdmin.next(!!s && (s.role.includes("Administrators")
|
|
28
|
-
this.isDeveloper.next(!!s && (s.role.includes("Developers")
|
|
29
|
+
this.isAdmin.next(!!s && (s.role.includes("Administrators")));
|
|
30
|
+
this.isDeveloper.next(!!s && (s.role.includes("Developers")));
|
|
29
31
|
this.isManager.next(!!s && s.role.includes("Managers"));
|
|
30
32
|
});
|
|
31
33
|
}
|
|
34
|
+
getRoles() {
|
|
35
|
+
return this.getUser().pipe(map(u => u.role));
|
|
36
|
+
}
|
|
32
37
|
getServiceUris() {
|
|
33
38
|
return this.authorizeOptions.wellKnownServiceUris;
|
|
34
39
|
}
|
|
@@ -81,18 +86,18 @@ class AuthorizeService {
|
|
|
81
86
|
});
|
|
82
87
|
this.oauthService.events
|
|
83
88
|
.pipe(filter(e => e.type === 'session_terminated'))
|
|
84
|
-
.subscribe(
|
|
89
|
+
.subscribe(_ => {
|
|
85
90
|
// tslint:disable-next-line:no-console
|
|
86
91
|
console.debug('Your session has been terminated!');
|
|
87
92
|
});
|
|
88
93
|
this.oauthService.events
|
|
89
94
|
.pipe(filter(e => e.type === 'token_received'))
|
|
90
|
-
.subscribe(
|
|
95
|
+
.subscribe(_ => {
|
|
91
96
|
this.loadUser();
|
|
92
97
|
});
|
|
93
98
|
this.oauthService.events
|
|
94
99
|
.pipe(filter(e => e.type === 'logout'))
|
|
95
|
-
.subscribe(
|
|
100
|
+
.subscribe(_ => {
|
|
96
101
|
this.accessToken.next(null);
|
|
97
102
|
this.user.next(null);
|
|
98
103
|
});
|
|
@@ -156,24 +161,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImpor
|
|
|
156
161
|
}], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
|
|
157
162
|
|
|
158
163
|
class AuthorizeGuard {
|
|
159
|
-
constructor(authorize) {
|
|
164
|
+
constructor(authorize, router) {
|
|
160
165
|
this.authorize = authorize;
|
|
166
|
+
this.router = router;
|
|
161
167
|
}
|
|
162
|
-
canActivate(
|
|
163
|
-
|
|
164
|
-
|
|
168
|
+
canActivate(next, state) {
|
|
169
|
+
let url = state.url;
|
|
170
|
+
return this.handleAuthorization(next, url);
|
|
165
171
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
172
|
+
canActivateChild(next, state) {
|
|
173
|
+
return this.canActivate(next, state);
|
|
174
|
+
}
|
|
175
|
+
canDeactivate(component, currentRoute, currentState, nextState) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
canLoad(route, segments) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
handleAuthorization(route, url) {
|
|
182
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
const isAuthenticated = yield firstValueFrom(this.authorize.getIsAuthenticated());
|
|
184
|
+
if (isAuthenticated) {
|
|
185
|
+
const userRoles = yield firstValueFrom(this.authorize.getRoles());
|
|
186
|
+
if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {
|
|
187
|
+
this.router.navigate(['']);
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
this.authorize.login();
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
});
|
|
170
197
|
}
|
|
171
198
|
}
|
|
172
|
-
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, deps: [{ token: AuthorizeService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
199
|
+
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, deps: [{ token: AuthorizeService }, { token: i2$1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
173
200
|
AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard });
|
|
174
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, decorators: [{
|
|
175
202
|
type: Injectable
|
|
176
|
-
}], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
|
|
203
|
+
}], ctorParameters: function () { return [{ type: AuthorizeService }, { type: i2$1.Router }]; } });
|
|
177
204
|
|
|
178
205
|
class SharedAuthModule {
|
|
179
206
|
static forRoot(authorizeOptions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshmakers-shared-auth.mjs","sources":["../../../../projects/meshmakers/shared-auth/src/lib/authorize.service.ts","../../../../projects/meshmakers/shared-auth/src/lib/login-menu/login-menu.component.ts","../../../../projects/meshmakers/shared-auth/src/lib/login-menu/login-menu.component.html","../../../../projects/meshmakers/shared-auth/src/lib/authorize.guard.ts","../../../../projects/meshmakers/shared-auth/src/lib/shared-auth.module.ts","../../../../projects/meshmakers/shared-auth/src/lib/authorize.interceptor.ts","../../../../projects/meshmakers/shared-auth/src/public-api.ts","../../../../projects/meshmakers/shared-auth/src/meshmakers-shared-auth.ts"],"sourcesContent":["import {Inject, Injectable} from '@angular/core';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {filter} from 'rxjs/operators';\r\nimport {AuthConfig, OAuthService} from \"angular-oauth2-oidc\";\r\n\r\nexport interface IUser {\r\n name: string;\r\n role: string[];\r\n}\r\n\r\nexport class AuthorizeOptions {\r\n wellKnownServiceUris: string[];\r\n // Url of the Identity Provider\r\n issuer: string;\r\n // URL of the SPA to redirect the user to after login\r\n redirectUri: string;\r\n postLogoutRedirectUri: string;\r\n // The SPA's id. The SPA is registered with this id at the auth-server\r\n clientId: string;\r\n // set the scope for the permissions the client should request\r\n // The first three are defined by OIDC. The 4th is a use case-specific one\r\n scope: string;\r\n showDebugInformation: boolean;\r\n sessionChecksEnabled: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthorizeService {\r\n private isAuthenticated: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isAdmin: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isDeveloper: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isManager: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private authority: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private accessToken: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private user: BehaviorSubject<IUser> = new BehaviorSubject(null);\r\n\r\n constructor(@Inject(AuthorizeOptions) private authorizeOptions: AuthorizeOptions, private oauthService: OAuthService) {\r\n console.debug(\"AuthorizeService::created\");\r\n this.getUser().subscribe(s => {\r\n this.isAuthenticated.next(!!s);\r\n this.isAdmin.next(!!s && (s.role.includes(\"Administrators\")|| s.role.includes(\"Developers\")|| s.role.includes(\"Managers\")));\r\n this.isDeveloper.next(!!s && (s.role.includes(\"Developers\") || s.role.includes(\"Managers\")));\r\n this.isManager.next(!!s && s.role.includes(\"Managers\"));\r\n });\r\n }\r\n\r\n public getServiceUris(): Array<string> {\r\n return this.authorizeOptions.wellKnownServiceUris;\r\n }\r\n\r\n public getAuthority(): BehaviorSubject<string> {\r\n return this.authority;\r\n }\r\n\r\n public getIsAuthenticated(): BehaviorSubject<boolean> {\r\n return this.isAuthenticated;\r\n }\r\n\r\n public getIsAdmin(): BehaviorSubject<boolean> {\r\n return this.isAdmin;\r\n }\r\n\r\n public getIsDeveloper(): BehaviorSubject<boolean> {\r\n return this.isDeveloper;\r\n }\r\n\r\n public getIsManager(): BehaviorSubject<boolean> {\r\n return this.isManager;\r\n }\r\n\r\n public getAccessToken(): BehaviorSubject<string> {\r\n return this.accessToken;\r\n }\r\n\r\n public getUser(): BehaviorSubject<IUser> {\r\n return this.user;\r\n }\r\n\r\n public login() {\r\n this.oauthService.initImplicitFlow();\r\n }\r\n\r\n public logout() {\r\n this.oauthService.logOut(false);\r\n }\r\n\r\n\r\n public initialize() {\r\n\r\n console.debug(\"AuthorizeService::initialize::started\");\r\n\r\n const config: AuthConfig = {\r\n responseType: 'code',\r\n issuer: this.authorizeOptions.issuer,\r\n redirectUri: this.authorizeOptions.redirectUri,\r\n postLogoutRedirectUri: this.authorizeOptions.postLogoutRedirectUri,\r\n clientId: this.authorizeOptions.clientId,\r\n scope: this.authorizeOptions.scope,\r\n showDebugInformation: this.authorizeOptions.showDebugInformation,\r\n sessionChecksEnabled: this.authorizeOptions.sessionChecksEnabled\r\n };\r\n\r\n this.oauthService.configure(config);\r\n this.oauthService.setStorage(localStorage);\r\n this.oauthService.loadDiscoveryDocumentAndTryLogin();\r\n\r\n this.oauthService.setupAutomaticSilentRefresh();\r\n\r\n this.oauthService.events.subscribe(e => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('oauth/oidc event', e);\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'session_terminated'))\r\n .subscribe(e => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('Your session has been terminated!');\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'token_received'))\r\n .subscribe(e => {\r\n this.loadUser();\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'logout'))\r\n .subscribe(e => {\r\n this.accessToken.next(null);\r\n this.user.next(null);\r\n });\r\n\r\n if (this.oauthService.hasValidAccessToken()) {\r\n this.loadUser();\r\n }\r\n\r\n this.authority.next(this.authorizeOptions.issuer);\r\n\r\n console.debug(\"AuthorizeService::initialize::done\");\r\n\r\n }\r\n\r\n private loadUser() {\r\n const claims = this.oauthService.getIdentityClaims();\r\n if (!claims) {\r\n console.error(\"claims where null when loading identity claims\");\r\n return;\r\n }\r\n\r\n const user = <IUser>claims;\r\n const accessToken = this.oauthService.getAccessToken();\r\n this.user.next(user);\r\n this.accessToken.next(accessToken);\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {AuthorizeService} from '../authorize.service';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login-menu',\r\n templateUrl: './login-menu.component.html',\r\n styleUrls: ['./login-menu.component.css']\r\n})\r\nexport class LoginMenuComponent implements OnInit {\r\n public isAuthenticated: BehaviorSubject<boolean>;\r\n public userName: Observable<string>;\r\n public isAdmin: Observable<boolean>;\r\n\r\n constructor(private authorizeService: AuthorizeService) {\r\n }\r\n\r\n ngOnInit() {\r\n const isIFrame = window.self !== window.top;\r\n\r\n console.log(\"app-login-menu::created\");\r\n\r\n this.isAuthenticated = this.authorizeService.getIsAuthenticated();\r\n this.userName = this.authorizeService.getUser().pipe(map(u => u && u.name));\r\n this.isAdmin = this.authorizeService.getIsAdmin();\r\n\r\n this.isAuthenticated.subscribe(x => {\r\n\r\n console.log(`isAuthenticated changed to ${x} (iframe ${isIFrame})`);\r\n });\r\n }\r\n\r\n public login() {\r\n this.authorizeService.login();\r\n }\r\n\r\n public logout() {\r\n this.authorizeService.logout();\r\n }\r\n\r\n public register() {\r\n\r\n }\r\n}\r\n","<ul *ngIf=\"isAuthenticated | async\" class=\"navbar-nav\">\r\n <li class=\"nav-item dropdown\">\r\n <a aria-expanded=\"false\" aria-haspopup=\"true\" class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"\r\n id=\"navbarDropdownLogin\" role=\"button\">\r\n {{ userName | async }} <b class=\"caret\"></b>\r\n </a>\r\n <div aria-labelledby=\"navbarDropdown\" class=\"dropdown-menu\">\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Grants\">Client Application Access</a>-->\r\n <!--<a class=\"dropdown-item\" [routerLink]='[\"/authentication/profile\"]' title=\"Manage\">Manage</a>-->\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Diagnostics\">Diagnostics</a>-->\r\n <div class=\"dropdown-divider\"></div>\r\n <a (click)='logout()' class=\"dropdown-item\" routerLink=\"\" title=\"Logout\">Logout</a>\r\n </div>\r\n </li>\r\n</ul>\r\n<ul *ngIf=\"!(isAuthenticated | async)\" class=\"navbar-nav\">\r\n <li class=\"nav-item\">\r\n <a (click)='register()' class=\"nav-link\" routerLink=\"\">Register</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a (click)='login()' class=\"nav-link\" routerLink=\"\">Login</a>\r\n </li>\r\n</ul>\r\n","import {Injectable} from '@angular/core';\r\nimport {ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot} from '@angular/router';\r\nimport {AuthorizeService} from './authorize.service';\r\nimport {tap} from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate {\r\n constructor(private authorize: AuthorizeService) {\r\n }\r\n\r\n canActivate(\r\n _next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): any {\r\n return this.authorize.getIsAuthenticated()\r\n .pipe(tap(isAuthenticated => this.handleAuthorization(isAuthenticated)));\r\n }\r\n\r\n private handleAuthorization(isAuthenticated: boolean) {\r\n if (!isAuthenticated) {\r\n this.authorize.login();\r\n }\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {LoginMenuComponent} from \"./login-menu/login-menu.component\";\r\nimport {AuthorizeOptions, AuthorizeService} from \"./authorize.service\";\r\nimport {OAuthModule} from \"angular-oauth2-oidc\";\r\nimport {AuthorizeGuard} from \"./authorize.guard\";\r\n\r\n@NgModule({\r\n declarations: [LoginMenuComponent],\r\n exports: [LoginMenuComponent],\r\n providers: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n OAuthModule.forRoot()\r\n ]\r\n})\r\nexport class SharedAuthModule {\r\n static forRoot(authorizeOptions: AuthorizeOptions): ModuleWithProviders<SharedAuthModule> {\r\n return {\r\n ngModule: SharedAuthModule,\r\n providers: [\r\n {\r\n provide: AuthorizeOptions,\r\n useValue: authorizeOptions\r\n },\r\n AuthorizeService,\r\n AuthorizeGuard\r\n ]\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {AuthorizeService} from './authorize.service';\r\n\r\n@Injectable()\r\nexport class AuthorizeInterceptor implements HttpInterceptor {\r\n\r\n accessToken: string;\r\n\r\n constructor(private authorize: AuthorizeService) {\r\n\r\n authorize.getAccessToken().subscribe(value => this.accessToken = value);\r\n\r\n }\r\n\r\n private static isSameOriginUrl(req: any) {\r\n // It's an absolute url with the same origin.\r\n if (req.url.startsWith(`${window.location.origin}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a protocol relative url with the same origin.\r\n // For example: //www.example.com/api/Products\r\n if (req.url.startsWith(`//${window.location.host}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a relative url like /api/Products\r\n if (/^\\/[^\\/].*/.test(req.url)) {\r\n return true;\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n\r\n // Checks if there is an access_token available in the authorize service\r\n // and adds it to the request in case it's targeted at the same origin as the\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return this.processRequestWithToken(this.accessToken, req, next);\r\n }\r\n\r\n // single page application.\r\n private processRequestWithToken(token: string, req: HttpRequest<any>, next: HttpHandler) {\r\n if (!!token && (AuthorizeInterceptor.isSameOriginUrl(req) || this.isKnownServiceUri(req))) {\r\n req = req.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n\r\n private isKnownServiceUri(req: any) {\r\n\r\n const serviceUris = this.authorize.getServiceUris();\r\n\r\n for (let i = 0; i < serviceUris.length; i++) {\r\n if (req.url.startsWith(`${serviceUris[i]}`)) {\r\n return true;\r\n }\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of shared-auth\r\n */\r\n\r\nexport * from './lib/authorize.service';\r\nexport * from './lib/login-menu/login-menu.component';\r\nexport * from './lib/shared-auth.module';\r\nexport * from './lib/authorize.interceptor';\r\nexport * from './lib/authorize.guard';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthorizeService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"meshmakers-shared-auth.mjs","sources":["../../../../projects/meshmakers/shared-auth/src/lib/authorize.service.ts","../../../../projects/meshmakers/shared-auth/src/lib/login-menu/login-menu.component.ts","../../../../projects/meshmakers/shared-auth/src/lib/login-menu/login-menu.component.html","../../../../projects/meshmakers/shared-auth/src/lib/authorize.guard.ts","../../../../projects/meshmakers/shared-auth/src/lib/shared-auth.module.ts","../../../../projects/meshmakers/shared-auth/src/lib/authorize.interceptor.ts","../../../../projects/meshmakers/shared-auth/src/public-api.ts","../../../../projects/meshmakers/shared-auth/src/meshmakers-shared-auth.ts"],"sourcesContent":["import {Inject, Injectable} from '@angular/core';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {filter, map} from 'rxjs/operators';\r\nimport {AuthConfig, OAuthService} from \"angular-oauth2-oidc\";\r\n\r\nexport interface IUser {\r\n name: string;\r\n role: string[];\r\n}\r\n\r\nexport class AuthorizeOptions {\r\n wellKnownServiceUris: string[];\r\n // Url of the Identity Provider\r\n issuer: string;\r\n // URL of the SPA to redirect the user to after login\r\n redirectUri: string;\r\n postLogoutRedirectUri: string;\r\n // The SPA's id. The SPA is registered with this id at the auth-server\r\n clientId: string;\r\n // set the scope for the permissions the client should request\r\n // The first three are defined by OIDC. The 4th is a use case-specific one\r\n scope: string;\r\n showDebugInformation: boolean;\r\n sessionChecksEnabled: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthorizeService {\r\n private isAuthenticated: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isAdmin: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isDeveloper: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isManager: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private authority: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private accessToken: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private user: BehaviorSubject<IUser> = new BehaviorSubject(null);\r\n\r\n constructor(@Inject(AuthorizeOptions) private authorizeOptions: AuthorizeOptions, private oauthService: OAuthService) {\r\n console.debug(\"AuthorizeService::created\");\r\n this.getUser().subscribe(s => {\r\n this.isAuthenticated.next(!!s);\r\n this.isAdmin.next(!!s && (s.role.includes(\"Administrators\")));\r\n this.isDeveloper.next(!!s && (s.role.includes(\"Developers\")));\r\n this.isManager.next(!!s && s.role.includes(\"Managers\"));\r\n });\r\n }\r\n\r\n public getRoles(): Observable<Array<string>>{\r\n return this.getUser().pipe(\r\n map(u=> u.role)\r\n );\r\n }\r\n\r\n public getServiceUris(): Array<string> {\r\n return this.authorizeOptions.wellKnownServiceUris;\r\n }\r\n\r\n public getAuthority(): BehaviorSubject<string> {\r\n return this.authority;\r\n }\r\n\r\n public getIsAuthenticated(): BehaviorSubject<boolean> {\r\n return this.isAuthenticated;\r\n }\r\n\r\n public getIsAdmin(): BehaviorSubject<boolean> {\r\n return this.isAdmin;\r\n }\r\n\r\n public getIsDeveloper(): BehaviorSubject<boolean> {\r\n return this.isDeveloper;\r\n }\r\n\r\n public getIsManager(): BehaviorSubject<boolean> {\r\n return this.isManager;\r\n }\r\n\r\n public getAccessToken(): BehaviorSubject<string> {\r\n return this.accessToken;\r\n }\r\n\r\n public getUser(): BehaviorSubject<IUser> {\r\n return this.user;\r\n }\r\n\r\n public login() {\r\n this.oauthService.initImplicitFlow();\r\n }\r\n\r\n public logout() {\r\n this.oauthService.logOut(false);\r\n }\r\n\r\n\r\n public initialize() {\r\n\r\n console.debug(\"AuthorizeService::initialize::started\");\r\n\r\n const config: AuthConfig = {\r\n responseType: 'code',\r\n issuer: this.authorizeOptions.issuer,\r\n redirectUri: this.authorizeOptions.redirectUri,\r\n postLogoutRedirectUri: this.authorizeOptions.postLogoutRedirectUri,\r\n clientId: this.authorizeOptions.clientId,\r\n scope: this.authorizeOptions.scope,\r\n showDebugInformation: this.authorizeOptions.showDebugInformation,\r\n sessionChecksEnabled: this.authorizeOptions.sessionChecksEnabled\r\n };\r\n\r\n this.oauthService.configure(config);\r\n this.oauthService.setStorage(localStorage);\r\n this.oauthService.loadDiscoveryDocumentAndTryLogin();\r\n\r\n this.oauthService.setupAutomaticSilentRefresh();\r\n\r\n this.oauthService.events.subscribe(e => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('oauth/oidc event', e);\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'session_terminated'))\r\n .subscribe(_ => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('Your session has been terminated!');\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'token_received'))\r\n .subscribe(_ => {\r\n this.loadUser();\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'logout'))\r\n .subscribe(_ => {\r\n this.accessToken.next(null);\r\n this.user.next(null);\r\n });\r\n\r\n if (this.oauthService.hasValidAccessToken()) {\r\n this.loadUser();\r\n }\r\n\r\n this.authority.next(this.authorizeOptions.issuer);\r\n\r\n console.debug(\"AuthorizeService::initialize::done\");\r\n\r\n }\r\n\r\n private loadUser() {\r\n const claims = this.oauthService.getIdentityClaims();\r\n if (!claims) {\r\n console.error(\"claims where null when loading identity claims\");\r\n return;\r\n }\r\n\r\n const user = <IUser>claims;\r\n const accessToken = this.oauthService.getAccessToken();\r\n this.user.next(user);\r\n this.accessToken.next(accessToken);\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {AuthorizeService} from '../authorize.service';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login-menu',\r\n templateUrl: './login-menu.component.html',\r\n styleUrls: ['./login-menu.component.css']\r\n})\r\nexport class LoginMenuComponent implements OnInit {\r\n public isAuthenticated: BehaviorSubject<boolean>;\r\n public userName: Observable<string>;\r\n public isAdmin: Observable<boolean>;\r\n\r\n constructor(private authorizeService: AuthorizeService) {\r\n }\r\n\r\n ngOnInit() {\r\n const isIFrame = window.self !== window.top;\r\n\r\n console.log(\"app-login-menu::created\");\r\n\r\n this.isAuthenticated = this.authorizeService.getIsAuthenticated();\r\n this.userName = this.authorizeService.getUser().pipe(map(u => u && u.name));\r\n this.isAdmin = this.authorizeService.getIsAdmin();\r\n\r\n this.isAuthenticated.subscribe(x => {\r\n\r\n console.log(`isAuthenticated changed to ${x} (iframe ${isIFrame})`);\r\n });\r\n }\r\n\r\n public login() {\r\n this.authorizeService.login();\r\n }\r\n\r\n public logout() {\r\n this.authorizeService.logout();\r\n }\r\n\r\n public register() {\r\n\r\n }\r\n}\r\n","<ul *ngIf=\"isAuthenticated | async\" class=\"navbar-nav\">\r\n <li class=\"nav-item dropdown\">\r\n <a aria-expanded=\"false\" aria-haspopup=\"true\" class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"\r\n id=\"navbarDropdownLogin\" role=\"button\">\r\n {{ userName | async }} <b class=\"caret\"></b>\r\n </a>\r\n <div aria-labelledby=\"navbarDropdown\" class=\"dropdown-menu\">\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Grants\">Client Application Access</a>-->\r\n <!--<a class=\"dropdown-item\" [routerLink]='[\"/authentication/profile\"]' title=\"Manage\">Manage</a>-->\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Diagnostics\">Diagnostics</a>-->\r\n <div class=\"dropdown-divider\"></div>\r\n <a (click)='logout()' class=\"dropdown-item\" routerLink=\"\" title=\"Logout\">Logout</a>\r\n </div>\r\n </li>\r\n</ul>\r\n<ul *ngIf=\"!(isAuthenticated | async)\" class=\"navbar-nav\">\r\n <li class=\"nav-item\">\r\n <a (click)='register()' class=\"nav-link\" routerLink=\"\">Register</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a (click)='login()' class=\"nav-link\" routerLink=\"\">Login</a>\r\n </li>\r\n</ul>\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivate,\r\n CanActivateChild,\r\n CanDeactivate,\r\n CanLoad, Route,\r\n Router,\r\n RouterStateSnapshot, UrlSegment,\r\n UrlTree\r\n} from '@angular/router';\r\nimport {AuthorizeService} from './authorize.service';\r\nimport {firstValueFrom, lastValueFrom, Observable} from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate, CanActivateChild, CanDeactivate<unknown>, CanLoad {\r\n constructor(private authorize: AuthorizeService, private router: Router) {\r\n }\r\n\r\n canActivate(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n let url: string = state.url;\r\n return this.handleAuthorization(next, url);\r\n }\r\n\r\n canActivateChild(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return this.canActivate(next, state);\r\n }\r\n\r\n canDeactivate(\r\n component: unknown,\r\n currentRoute: ActivatedRouteSnapshot,\r\n currentState: RouterStateSnapshot,\r\n nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return true;\r\n }\r\n\r\n canLoad(\r\n route: Route,\r\n segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {\r\n return true;\r\n }\r\n\r\n private async handleAuthorization(route: ActivatedRouteSnapshot, url: any): Promise<boolean> {\r\n const isAuthenticated = await firstValueFrom(this.authorize.getIsAuthenticated());\r\n if (isAuthenticated) {\r\n const userRoles = await firstValueFrom(this.authorize.getRoles());\r\n if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {\r\n this.router.navigate(['']);\r\n return false;\r\n }\r\n return true;\r\n } else {\r\n this.authorize.login();\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {LoginMenuComponent} from \"./login-menu/login-menu.component\";\r\nimport {AuthorizeOptions, AuthorizeService} from \"./authorize.service\";\r\nimport {OAuthModule} from \"angular-oauth2-oidc\";\r\nimport {AuthorizeGuard} from \"./authorize.guard\";\r\n\r\n@NgModule({\r\n declarations: [LoginMenuComponent],\r\n exports: [LoginMenuComponent],\r\n providers: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n OAuthModule.forRoot()\r\n ]\r\n})\r\nexport class SharedAuthModule {\r\n static forRoot(authorizeOptions: AuthorizeOptions): ModuleWithProviders<SharedAuthModule> {\r\n return {\r\n ngModule: SharedAuthModule,\r\n providers: [\r\n {\r\n provide: AuthorizeOptions,\r\n useValue: authorizeOptions\r\n },\r\n AuthorizeService,\r\n AuthorizeGuard\r\n ]\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {AuthorizeService} from './authorize.service';\r\n\r\n@Injectable()\r\nexport class AuthorizeInterceptor implements HttpInterceptor {\r\n\r\n accessToken: string;\r\n\r\n constructor(private authorize: AuthorizeService) {\r\n\r\n authorize.getAccessToken().subscribe(value => this.accessToken = value);\r\n\r\n }\r\n\r\n private static isSameOriginUrl(req: any) {\r\n // It's an absolute url with the same origin.\r\n if (req.url.startsWith(`${window.location.origin}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a protocol relative url with the same origin.\r\n // For example: //www.example.com/api/Products\r\n if (req.url.startsWith(`//${window.location.host}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a relative url like /api/Products\r\n if (/^\\/[^\\/].*/.test(req.url)) {\r\n return true;\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n\r\n // Checks if there is an access_token available in the authorize service\r\n // and adds it to the request in case it's targeted at the same origin as the\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return this.processRequestWithToken(this.accessToken, req, next);\r\n }\r\n\r\n // single page application.\r\n private processRequestWithToken(token: string, req: HttpRequest<any>, next: HttpHandler) {\r\n if (!!token && (AuthorizeInterceptor.isSameOriginUrl(req) || this.isKnownServiceUri(req))) {\r\n req = req.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n\r\n private isKnownServiceUri(req: any) {\r\n\r\n const serviceUris = this.authorize.getServiceUris();\r\n\r\n for (let i = 0; i < serviceUris.length; i++) {\r\n if (req.url.startsWith(`${serviceUris[i]}`)) {\r\n return true;\r\n }\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of shared-auth\r\n */\r\n\r\nexport * from './lib/authorize.service';\r\nexport * from './lib/login-menu/login-menu.component';\r\nexport * from './lib/shared-auth.module';\r\nexport * from './lib/authorize.interceptor';\r\nexport * from './lib/authorize.guard';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthorizeService","i2"],"mappings":";;;;;;;;;;;;MAUa,gBAAgB,CAAA;AAc5B,CAAA;MAGY,gBAAgB,CAAA;IAS3B,WAA8C,CAAA,gBAAkC,EAAU,YAA0B,EAAA;AAAtE,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAAU,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAR5G,IAAA,CAAA,eAAe,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACvE,IAAA,CAAA,OAAO,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAA,CAAA,WAAW,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACnE,IAAA,CAAA,SAAS,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACjE,IAAA,CAAA,SAAS,GAA4B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAA,CAAA,WAAW,GAA4B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACjE,IAAA,CAAA,IAAI,GAA2B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AAG/D,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAG;YAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;KACJ;IAEM,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CACxB,GAAG,CAAC,CAAC,IAAG,CAAC,CAAC,IAAI,CAAC,CAChB,CAAC;KACH;IAEM,cAAc,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;KACnD;IAEM,YAAY,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAEM,kBAAkB,GAAA;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAEM,UAAU,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAEM,cAAc,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAEM,YAAY,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAEM,cAAc,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAEM,OAAO,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;KACtC;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACjC;IAGM,UAAU,GAAA;AAEf,QAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAEvD,QAAA,MAAM,MAAM,GAAe;AACzB,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;AACpC,YAAA,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW;AAC9C,YAAA,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,qBAAqB;AAClE,YAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ;AACxC,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK;AAClC,YAAA,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB;AAChE,YAAA,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB;SACjE,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,CAAC;AAErD,QAAA,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,CAAC;QAEhD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAG;;AAErC,YAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC;aAClD,SAAS,CAAC,CAAC,IAAG;;AAEb,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,YAAY,CAAC,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;aAC9C,SAAS,CAAC,CAAC,IAAG;YACb,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,YAAY,CAAC,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;aACtC,SAAS,CAAC,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,EAAE;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,SAAA;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAElD,QAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;KAErD;IAEO,QAAQ,GAAA;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO;AACR,SAAA;QAED,MAAM,IAAI,GAAU,MAAM,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACpC;;AArIU,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBASP,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHATzB,gBAAgB,EAAA,CAAA,CAAA;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;8BAUI,MAAM;+BAAC,gBAAgB,CAAA;;;;MC1BzB,kBAAkB,CAAA;AAK7B,IAAA,WAAA,CAAoB,gBAAkC,EAAA;AAAlC,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KACrD;IAED,QAAQ,GAAA;QACN,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC;AAE5C,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEvC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAElD,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAG;YAEjC,OAAO,CAAC,GAAG,CAAC,CAAA,2BAAA,EAA8B,CAAC,CAAY,SAAA,EAAA,QAAQ,CAAG,CAAA,CAAA,CAAC,CAAC;AACtE,SAAC,CAAC,CAAC;KACJ;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;KAC/B;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;KAChC;IAEM,QAAQ,GAAA;KAEd;;+GAjCU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,sDCV/B,oyCAuBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDba,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,oyCAAA,EAAA,CAAA;;;MESf,cAAc,CAAA;IACzB,WAAoB,CAAA,SAA2B,EAAU,MAAc,EAAA;AAAnD,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;AAAU,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KACtE;IAED,WAAW,CACT,IAA4B,EAC5B,KAA0B,EAAA;AAC1B,QAAA,IAAI,GAAG,GAAW,KAAK,CAAC,GAAG,CAAC;QAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5C;IAED,gBAAgB,CACd,IAA4B,EAC5B,KAA0B,EAAA;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACtC;AAED,IAAA,aAAa,CACX,SAAkB,EAClB,YAAoC,EACpC,YAAiC,EACjC,SAA+B,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CACL,KAAY,EACZ,QAAsB,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC;KACb;IAEa,mBAAmB,CAAC,KAA6B,EAAE,GAAQ,EAAA;;AACvE,YAAA,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAClF,YAAA,IAAI,eAAe,EAAE;AACnB,gBAAA,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAClE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;oBACpF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACxB,aAAA;AAED,YAAA,OAAO,KAAK,CAAC;SACd,CAAA,CAAA;AAAA,KAAA;;2GA7CU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+GAAd,cAAc,EAAA,CAAA,CAAA;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;;;MCIE,gBAAgB,CAAA;IAC3B,OAAO,OAAO,CAAC,gBAAkC,EAAA;QAC/C,OAAO;AACL,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA;gBACD,gBAAgB;gBAChB,cAAc;AACf,aAAA;SACF,CAAA;KACF;;6GAbU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;8GAAhB,gBAAgB,EAAA,YAAA,EAAA,CATZ,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAI/B,YAAY;AACZ,QAAA,gBAAgB,6BAJR,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAQjB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YALzB,YAAY;QACZ,gBAAgB;AAChB,QAAA,WAAW,CAAC,OAAO,EAAE,CAAA,EAAA,CAAA,CAAA;2FAGZ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;oBAClC,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,gBAAgB;wBAChB,WAAW,CAAC,OAAO,EAAE;AACtB,qBAAA;iBACF,CAAA;;;MCXY,oBAAoB,CAAA;AAI/B,IAAA,WAAA,CAAoB,SAA2B,EAAA;AAA3B,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;AAE7C,QAAA,SAAS,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;KAEzE;IAEO,OAAO,eAAe,CAAC,GAAQ,EAAA;;AAErC,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;;AAID,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;QAGD,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;;AAID,QAAA,OAAO,KAAK,CAAC;KACd;;;IAKD,SAAS,CAAC,GAAqB,EAAE,IAAiB,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KAClE;;AAGO,IAAA,uBAAuB,CAAC,KAAa,EAAE,GAAqB,EAAE,IAAiB,EAAA;AACrF,QAAA,IAAI,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;AACzF,YAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;AACd,gBAAA,UAAU,EAAE;oBACV,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;AACjC,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACzB;AAEO,IAAA,iBAAiB,CAAC,GAAQ,EAAA;QAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;AAEpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAG,EAAA,WAAW,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC,EAAE;AAC3C,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;;;AAID,QAAA,OAAO,KAAK,CAAC;KACd;;iHAjEU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAApB,oBAAoB,EAAA,CAAA,CAAA;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;;ACLX;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, Inject, Component, NgModule } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
import {
|
|
3
|
+
import { BehaviorSubject, firstValueFrom } from 'rxjs';
|
|
4
|
+
import { map, filter } from 'rxjs/operators';
|
|
5
5
|
import * as i1 from 'angular-oauth2-oidc';
|
|
6
6
|
import { OAuthModule } from 'angular-oauth2-oidc';
|
|
7
7
|
import * as i2 from '@angular/common';
|
|
8
8
|
import { CommonModule } from '@angular/common';
|
|
9
9
|
import { HttpClientModule } from '@angular/common/http';
|
|
10
|
+
import * as i2$1 from '@angular/router';
|
|
10
11
|
|
|
11
12
|
class AuthorizeOptions {
|
|
12
13
|
}
|
|
@@ -24,11 +25,14 @@ class AuthorizeService {
|
|
|
24
25
|
console.debug("AuthorizeService::created");
|
|
25
26
|
this.getUser().subscribe(s => {
|
|
26
27
|
this.isAuthenticated.next(!!s);
|
|
27
|
-
this.isAdmin.next(!!s && (s.role.includes("Administrators")
|
|
28
|
-
this.isDeveloper.next(!!s && (s.role.includes("Developers")
|
|
28
|
+
this.isAdmin.next(!!s && (s.role.includes("Administrators")));
|
|
29
|
+
this.isDeveloper.next(!!s && (s.role.includes("Developers")));
|
|
29
30
|
this.isManager.next(!!s && s.role.includes("Managers"));
|
|
30
31
|
});
|
|
31
32
|
}
|
|
33
|
+
getRoles() {
|
|
34
|
+
return this.getUser().pipe(map(u => u.role));
|
|
35
|
+
}
|
|
32
36
|
getServiceUris() {
|
|
33
37
|
return this.authorizeOptions.wellKnownServiceUris;
|
|
34
38
|
}
|
|
@@ -81,18 +85,18 @@ class AuthorizeService {
|
|
|
81
85
|
});
|
|
82
86
|
this.oauthService.events
|
|
83
87
|
.pipe(filter(e => e.type === 'session_terminated'))
|
|
84
|
-
.subscribe(
|
|
88
|
+
.subscribe(_ => {
|
|
85
89
|
// tslint:disable-next-line:no-console
|
|
86
90
|
console.debug('Your session has been terminated!');
|
|
87
91
|
});
|
|
88
92
|
this.oauthService.events
|
|
89
93
|
.pipe(filter(e => e.type === 'token_received'))
|
|
90
|
-
.subscribe(
|
|
94
|
+
.subscribe(_ => {
|
|
91
95
|
this.loadUser();
|
|
92
96
|
});
|
|
93
97
|
this.oauthService.events
|
|
94
98
|
.pipe(filter(e => e.type === 'logout'))
|
|
95
|
-
.subscribe(
|
|
99
|
+
.subscribe(_ => {
|
|
96
100
|
this.accessToken.next(null);
|
|
97
101
|
this.user.next(null);
|
|
98
102
|
});
|
|
@@ -154,24 +158,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImpor
|
|
|
154
158
|
}], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
|
|
155
159
|
|
|
156
160
|
class AuthorizeGuard {
|
|
157
|
-
constructor(authorize) {
|
|
161
|
+
constructor(authorize, router) {
|
|
158
162
|
this.authorize = authorize;
|
|
163
|
+
this.router = router;
|
|
164
|
+
}
|
|
165
|
+
canActivate(next, state) {
|
|
166
|
+
let url = state.url;
|
|
167
|
+
return this.handleAuthorization(next, url);
|
|
168
|
+
}
|
|
169
|
+
canActivateChild(next, state) {
|
|
170
|
+
return this.canActivate(next, state);
|
|
171
|
+
}
|
|
172
|
+
canDeactivate(component, currentRoute, currentState, nextState) {
|
|
173
|
+
return true;
|
|
159
174
|
}
|
|
160
|
-
|
|
161
|
-
return
|
|
162
|
-
.pipe(tap(isAuthenticated => this.handleAuthorization(isAuthenticated)));
|
|
175
|
+
canLoad(route, segments) {
|
|
176
|
+
return true;
|
|
163
177
|
}
|
|
164
|
-
handleAuthorization(
|
|
165
|
-
|
|
178
|
+
async handleAuthorization(route, url) {
|
|
179
|
+
const isAuthenticated = await firstValueFrom(this.authorize.getIsAuthenticated());
|
|
180
|
+
if (isAuthenticated) {
|
|
181
|
+
const userRoles = await firstValueFrom(this.authorize.getRoles());
|
|
182
|
+
if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {
|
|
183
|
+
this.router.navigate(['']);
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
166
189
|
this.authorize.login();
|
|
167
190
|
}
|
|
191
|
+
return false;
|
|
168
192
|
}
|
|
169
193
|
}
|
|
170
|
-
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, deps: [{ token: AuthorizeService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
194
|
+
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, deps: [{ token: AuthorizeService }, { token: i2$1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
171
195
|
AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard });
|
|
172
196
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, decorators: [{
|
|
173
197
|
type: Injectable
|
|
174
|
-
}], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
|
|
198
|
+
}], ctorParameters: function () { return [{ type: AuthorizeService }, { type: i2$1.Router }]; } });
|
|
175
199
|
|
|
176
200
|
class SharedAuthModule {
|
|
177
201
|
static forRoot(authorizeOptions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshmakers-shared-auth.mjs","sources":["../../../../projects/meshmakers/shared-auth/src/lib/authorize.service.ts","../../../../projects/meshmakers/shared-auth/src/lib/login-menu/login-menu.component.ts","../../../../projects/meshmakers/shared-auth/src/lib/login-menu/login-menu.component.html","../../../../projects/meshmakers/shared-auth/src/lib/authorize.guard.ts","../../../../projects/meshmakers/shared-auth/src/lib/shared-auth.module.ts","../../../../projects/meshmakers/shared-auth/src/lib/authorize.interceptor.ts","../../../../projects/meshmakers/shared-auth/src/public-api.ts","../../../../projects/meshmakers/shared-auth/src/meshmakers-shared-auth.ts"],"sourcesContent":["import {Inject, Injectable} from '@angular/core';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {filter} from 'rxjs/operators';\r\nimport {AuthConfig, OAuthService} from \"angular-oauth2-oidc\";\r\n\r\nexport interface IUser {\r\n name: string;\r\n role: string[];\r\n}\r\n\r\nexport class AuthorizeOptions {\r\n wellKnownServiceUris: string[];\r\n // Url of the Identity Provider\r\n issuer: string;\r\n // URL of the SPA to redirect the user to after login\r\n redirectUri: string;\r\n postLogoutRedirectUri: string;\r\n // The SPA's id. The SPA is registered with this id at the auth-server\r\n clientId: string;\r\n // set the scope for the permissions the client should request\r\n // The first three are defined by OIDC. The 4th is a use case-specific one\r\n scope: string;\r\n showDebugInformation: boolean;\r\n sessionChecksEnabled: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthorizeService {\r\n private isAuthenticated: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isAdmin: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isDeveloper: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isManager: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private authority: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private accessToken: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private user: BehaviorSubject<IUser> = new BehaviorSubject(null);\r\n\r\n constructor(@Inject(AuthorizeOptions) private authorizeOptions: AuthorizeOptions, private oauthService: OAuthService) {\r\n console.debug(\"AuthorizeService::created\");\r\n this.getUser().subscribe(s => {\r\n this.isAuthenticated.next(!!s);\r\n this.isAdmin.next(!!s && (s.role.includes(\"Administrators\")|| s.role.includes(\"Developers\")|| s.role.includes(\"Managers\")));\r\n this.isDeveloper.next(!!s && (s.role.includes(\"Developers\") || s.role.includes(\"Managers\")));\r\n this.isManager.next(!!s && s.role.includes(\"Managers\"));\r\n });\r\n }\r\n\r\n public getServiceUris(): Array<string> {\r\n return this.authorizeOptions.wellKnownServiceUris;\r\n }\r\n\r\n public getAuthority(): BehaviorSubject<string> {\r\n return this.authority;\r\n }\r\n\r\n public getIsAuthenticated(): BehaviorSubject<boolean> {\r\n return this.isAuthenticated;\r\n }\r\n\r\n public getIsAdmin(): BehaviorSubject<boolean> {\r\n return this.isAdmin;\r\n }\r\n\r\n public getIsDeveloper(): BehaviorSubject<boolean> {\r\n return this.isDeveloper;\r\n }\r\n\r\n public getIsManager(): BehaviorSubject<boolean> {\r\n return this.isManager;\r\n }\r\n\r\n public getAccessToken(): BehaviorSubject<string> {\r\n return this.accessToken;\r\n }\r\n\r\n public getUser(): BehaviorSubject<IUser> {\r\n return this.user;\r\n }\r\n\r\n public login() {\r\n this.oauthService.initImplicitFlow();\r\n }\r\n\r\n public logout() {\r\n this.oauthService.logOut(false);\r\n }\r\n\r\n\r\n public initialize() {\r\n\r\n console.debug(\"AuthorizeService::initialize::started\");\r\n\r\n const config: AuthConfig = {\r\n responseType: 'code',\r\n issuer: this.authorizeOptions.issuer,\r\n redirectUri: this.authorizeOptions.redirectUri,\r\n postLogoutRedirectUri: this.authorizeOptions.postLogoutRedirectUri,\r\n clientId: this.authorizeOptions.clientId,\r\n scope: this.authorizeOptions.scope,\r\n showDebugInformation: this.authorizeOptions.showDebugInformation,\r\n sessionChecksEnabled: this.authorizeOptions.sessionChecksEnabled\r\n };\r\n\r\n this.oauthService.configure(config);\r\n this.oauthService.setStorage(localStorage);\r\n this.oauthService.loadDiscoveryDocumentAndTryLogin();\r\n\r\n this.oauthService.setupAutomaticSilentRefresh();\r\n\r\n this.oauthService.events.subscribe(e => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('oauth/oidc event', e);\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'session_terminated'))\r\n .subscribe(e => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('Your session has been terminated!');\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'token_received'))\r\n .subscribe(e => {\r\n this.loadUser();\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'logout'))\r\n .subscribe(e => {\r\n this.accessToken.next(null);\r\n this.user.next(null);\r\n });\r\n\r\n if (this.oauthService.hasValidAccessToken()) {\r\n this.loadUser();\r\n }\r\n\r\n this.authority.next(this.authorizeOptions.issuer);\r\n\r\n console.debug(\"AuthorizeService::initialize::done\");\r\n\r\n }\r\n\r\n private loadUser() {\r\n const claims = this.oauthService.getIdentityClaims();\r\n if (!claims) {\r\n console.error(\"claims where null when loading identity claims\");\r\n return;\r\n }\r\n\r\n const user = <IUser>claims;\r\n const accessToken = this.oauthService.getAccessToken();\r\n this.user.next(user);\r\n this.accessToken.next(accessToken);\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {AuthorizeService} from '../authorize.service';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login-menu',\r\n templateUrl: './login-menu.component.html',\r\n styleUrls: ['./login-menu.component.css']\r\n})\r\nexport class LoginMenuComponent implements OnInit {\r\n public isAuthenticated: BehaviorSubject<boolean>;\r\n public userName: Observable<string>;\r\n public isAdmin: Observable<boolean>;\r\n\r\n constructor(private authorizeService: AuthorizeService) {\r\n }\r\n\r\n ngOnInit() {\r\n const isIFrame = window.self !== window.top;\r\n\r\n console.log(\"app-login-menu::created\");\r\n\r\n this.isAuthenticated = this.authorizeService.getIsAuthenticated();\r\n this.userName = this.authorizeService.getUser().pipe(map(u => u && u.name));\r\n this.isAdmin = this.authorizeService.getIsAdmin();\r\n\r\n this.isAuthenticated.subscribe(x => {\r\n\r\n console.log(`isAuthenticated changed to ${x} (iframe ${isIFrame})`);\r\n });\r\n }\r\n\r\n public login() {\r\n this.authorizeService.login();\r\n }\r\n\r\n public logout() {\r\n this.authorizeService.logout();\r\n }\r\n\r\n public register() {\r\n\r\n }\r\n}\r\n","<ul *ngIf=\"isAuthenticated | async\" class=\"navbar-nav\">\r\n <li class=\"nav-item dropdown\">\r\n <a aria-expanded=\"false\" aria-haspopup=\"true\" class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"\r\n id=\"navbarDropdownLogin\" role=\"button\">\r\n {{ userName | async }} <b class=\"caret\"></b>\r\n </a>\r\n <div aria-labelledby=\"navbarDropdown\" class=\"dropdown-menu\">\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Grants\">Client Application Access</a>-->\r\n <!--<a class=\"dropdown-item\" [routerLink]='[\"/authentication/profile\"]' title=\"Manage\">Manage</a>-->\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Diagnostics\">Diagnostics</a>-->\r\n <div class=\"dropdown-divider\"></div>\r\n <a (click)='logout()' class=\"dropdown-item\" routerLink=\"\" title=\"Logout\">Logout</a>\r\n </div>\r\n </li>\r\n</ul>\r\n<ul *ngIf=\"!(isAuthenticated | async)\" class=\"navbar-nav\">\r\n <li class=\"nav-item\">\r\n <a (click)='register()' class=\"nav-link\" routerLink=\"\">Register</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a (click)='login()' class=\"nav-link\" routerLink=\"\">Login</a>\r\n </li>\r\n</ul>\r\n","import {Injectable} from '@angular/core';\r\nimport {ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot} from '@angular/router';\r\nimport {AuthorizeService} from './authorize.service';\r\nimport {tap} from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate {\r\n constructor(private authorize: AuthorizeService) {\r\n }\r\n\r\n canActivate(\r\n _next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): any {\r\n return this.authorize.getIsAuthenticated()\r\n .pipe(tap(isAuthenticated => this.handleAuthorization(isAuthenticated)));\r\n }\r\n\r\n private handleAuthorization(isAuthenticated: boolean) {\r\n if (!isAuthenticated) {\r\n this.authorize.login();\r\n }\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {LoginMenuComponent} from \"./login-menu/login-menu.component\";\r\nimport {AuthorizeOptions, AuthorizeService} from \"./authorize.service\";\r\nimport {OAuthModule} from \"angular-oauth2-oidc\";\r\nimport {AuthorizeGuard} from \"./authorize.guard\";\r\n\r\n@NgModule({\r\n declarations: [LoginMenuComponent],\r\n exports: [LoginMenuComponent],\r\n providers: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n OAuthModule.forRoot()\r\n ]\r\n})\r\nexport class SharedAuthModule {\r\n static forRoot(authorizeOptions: AuthorizeOptions): ModuleWithProviders<SharedAuthModule> {\r\n return {\r\n ngModule: SharedAuthModule,\r\n providers: [\r\n {\r\n provide: AuthorizeOptions,\r\n useValue: authorizeOptions\r\n },\r\n AuthorizeService,\r\n AuthorizeGuard\r\n ]\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {AuthorizeService} from './authorize.service';\r\n\r\n@Injectable()\r\nexport class AuthorizeInterceptor implements HttpInterceptor {\r\n\r\n accessToken: string;\r\n\r\n constructor(private authorize: AuthorizeService) {\r\n\r\n authorize.getAccessToken().subscribe(value => this.accessToken = value);\r\n\r\n }\r\n\r\n private static isSameOriginUrl(req: any) {\r\n // It's an absolute url with the same origin.\r\n if (req.url.startsWith(`${window.location.origin}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a protocol relative url with the same origin.\r\n // For example: //www.example.com/api/Products\r\n if (req.url.startsWith(`//${window.location.host}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a relative url like /api/Products\r\n if (/^\\/[^\\/].*/.test(req.url)) {\r\n return true;\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n\r\n // Checks if there is an access_token available in the authorize service\r\n // and adds it to the request in case it's targeted at the same origin as the\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return this.processRequestWithToken(this.accessToken, req, next);\r\n }\r\n\r\n // single page application.\r\n private processRequestWithToken(token: string, req: HttpRequest<any>, next: HttpHandler) {\r\n if (!!token && (AuthorizeInterceptor.isSameOriginUrl(req) || this.isKnownServiceUri(req))) {\r\n req = req.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n\r\n private isKnownServiceUri(req: any) {\r\n\r\n const serviceUris = this.authorize.getServiceUris();\r\n\r\n for (let i = 0; i < serviceUris.length; i++) {\r\n if (req.url.startsWith(`${serviceUris[i]}`)) {\r\n return true;\r\n }\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of shared-auth\r\n */\r\n\r\nexport * from './lib/authorize.service';\r\nexport * from './lib/login-menu/login-menu.component';\r\nexport * from './lib/shared-auth.module';\r\nexport * from './lib/authorize.interceptor';\r\nexport * from './lib/authorize.guard';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthorizeService"],"mappings":";;;;;;;;;;MAUa,gBAAgB,CAAA;AAc5B,CAAA;MAGY,gBAAgB,CAAA;IAS3B,WAA8C,CAAA,gBAAkC,EAAU,YAA0B,EAAA;QAAtE,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAAU,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAR5G,QAAA,IAAA,CAAA,eAAe,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AACvE,QAAA,IAAA,CAAA,OAAO,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AAC/D,QAAA,IAAA,CAAA,WAAW,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AACnE,QAAA,IAAA,CAAA,SAAS,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,SAAS,GAA4B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAA,IAAA,CAAA,WAAW,GAA4B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AACjE,QAAA,IAAA,CAAA,IAAI,GAA2B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;AAG/D,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAG;YAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5H,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7F,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;KACJ;IAEM,cAAc,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;KACnD;IAEM,YAAY,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAEM,kBAAkB,GAAA;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAEM,UAAU,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAEM,cAAc,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAEM,YAAY,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAEM,cAAc,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAEM,OAAO,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;KACtC;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACjC;IAGM,UAAU,GAAA;AAEf,QAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAEvD,QAAA,MAAM,MAAM,GAAe;AACzB,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;AACpC,YAAA,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW;AAC9C,YAAA,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,qBAAqB;AAClE,YAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ;AACxC,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK;AAClC,YAAA,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB;AAChE,YAAA,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB;SACjE,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,CAAC;AAErD,QAAA,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,CAAC;QAEhD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAG;;AAErC,YAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC;aAClD,SAAS,CAAC,CAAC,IAAG;;AAEb,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,YAAY,CAAC,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;aAC9C,SAAS,CAAC,CAAC,IAAG;YACb,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,YAAY,CAAC,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;aACtC,SAAS,CAAC,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,EAAE;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,SAAA;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAElD,QAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;KAErD;IAEO,QAAQ,GAAA;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO;AACR,SAAA;QAED,MAAM,IAAI,GAAU,MAAM,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACpC;;AA/HU,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBASP,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHATzB,gBAAgB,EAAA,CAAA,CAAA;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;0BAUI,MAAM;2BAAC,gBAAgB,CAAA;;;MC1BzB,kBAAkB,CAAA;AAK7B,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KACrD;IAED,QAAQ,GAAA;QACN,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC;AAE5C,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEvC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAElD,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAG;YAEjC,OAAO,CAAC,GAAG,CAAC,CAAA,2BAAA,EAA8B,CAAC,CAAY,SAAA,EAAA,QAAQ,CAAG,CAAA,CAAA,CAAC,CAAC;AACtE,SAAC,CAAC,CAAC;KACJ;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;KAC/B;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;KAChC;IAEM,QAAQ,GAAA;KAEd;;+GAjCU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,sDCV/B,oyCAuBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDba,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,oyCAAA,EAAA,CAAA;;;MEAf,cAAc,CAAA;AACzB,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;KAC9C;IAED,WAAW,CACT,KAA6B,EAC7B,KAA0B,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;AACvC,aAAA,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;KAC5E;AAEO,IAAA,mBAAmB,CAAC,eAAwB,EAAA;QAClD,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACxB,SAAA;KACF;;2GAfU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+GAAd,cAAc,EAAA,CAAA,CAAA;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;;;MCaE,gBAAgB,CAAA;IAC3B,OAAO,OAAO,CAAC,gBAAkC,EAAA;QAC/C,OAAO;AACL,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA;gBACD,gBAAgB;gBAChB,cAAc;AACf,aAAA;SACF,CAAA;KACF;;6GAbU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;8GAAhB,gBAAgB,EAAA,YAAA,EAAA,CATZ,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAI/B,YAAY;AACZ,QAAA,gBAAgB,6BAJR,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAQjB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YALzB,YAAY;QACZ,gBAAgB;QAChB,WAAW,CAAC,OAAO,EAAE,CAAA,EAAA,CAAA,CAAA;2FAGZ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;oBAClC,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,gBAAgB;wBAChB,WAAW,CAAC,OAAO,EAAE;AACtB,qBAAA;AACF,iBAAA,CAAA;;;MCXY,oBAAoB,CAAA;AAI/B,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;AAE7C,QAAA,SAAS,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;KAEzE;IAEO,OAAO,eAAe,CAAC,GAAQ,EAAA;;AAErC,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;;AAID,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;QAGD,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;;AAID,QAAA,OAAO,KAAK,CAAC;KACd;;;IAKD,SAAS,CAAC,GAAqB,EAAE,IAAiB,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KAClE;;AAGO,IAAA,uBAAuB,CAAC,KAAa,EAAE,GAAqB,EAAE,IAAiB,EAAA;AACrF,QAAA,IAAI,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;AACzF,YAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;AACd,gBAAA,UAAU,EAAE;oBACV,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;AACjC,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACzB;AAEO,IAAA,iBAAiB,CAAC,GAAQ,EAAA;QAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;AAEpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAG,EAAA,WAAW,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC,EAAE;AAC3C,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;;;AAID,QAAA,OAAO,KAAK,CAAC;KACd;;iHAjEU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAApB,oBAAoB,EAAA,CAAA,CAAA;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;;ACLX;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"meshmakers-shared-auth.mjs","sources":["../../../../projects/meshmakers/shared-auth/src/lib/authorize.service.ts","../../../../projects/meshmakers/shared-auth/src/lib/login-menu/login-menu.component.ts","../../../../projects/meshmakers/shared-auth/src/lib/login-menu/login-menu.component.html","../../../../projects/meshmakers/shared-auth/src/lib/authorize.guard.ts","../../../../projects/meshmakers/shared-auth/src/lib/shared-auth.module.ts","../../../../projects/meshmakers/shared-auth/src/lib/authorize.interceptor.ts","../../../../projects/meshmakers/shared-auth/src/public-api.ts","../../../../projects/meshmakers/shared-auth/src/meshmakers-shared-auth.ts"],"sourcesContent":["import {Inject, Injectable} from '@angular/core';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {filter, map} from 'rxjs/operators';\r\nimport {AuthConfig, OAuthService} from \"angular-oauth2-oidc\";\r\n\r\nexport interface IUser {\r\n name: string;\r\n role: string[];\r\n}\r\n\r\nexport class AuthorizeOptions {\r\n wellKnownServiceUris: string[];\r\n // Url of the Identity Provider\r\n issuer: string;\r\n // URL of the SPA to redirect the user to after login\r\n redirectUri: string;\r\n postLogoutRedirectUri: string;\r\n // The SPA's id. The SPA is registered with this id at the auth-server\r\n clientId: string;\r\n // set the scope for the permissions the client should request\r\n // The first three are defined by OIDC. The 4th is a use case-specific one\r\n scope: string;\r\n showDebugInformation: boolean;\r\n sessionChecksEnabled: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthorizeService {\r\n private isAuthenticated: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isAdmin: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isDeveloper: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isManager: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private authority: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private accessToken: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private user: BehaviorSubject<IUser> = new BehaviorSubject(null);\r\n\r\n constructor(@Inject(AuthorizeOptions) private authorizeOptions: AuthorizeOptions, private oauthService: OAuthService) {\r\n console.debug(\"AuthorizeService::created\");\r\n this.getUser().subscribe(s => {\r\n this.isAuthenticated.next(!!s);\r\n this.isAdmin.next(!!s && (s.role.includes(\"Administrators\")));\r\n this.isDeveloper.next(!!s && (s.role.includes(\"Developers\")));\r\n this.isManager.next(!!s && s.role.includes(\"Managers\"));\r\n });\r\n }\r\n\r\n public getRoles(): Observable<Array<string>>{\r\n return this.getUser().pipe(\r\n map(u=> u.role)\r\n );\r\n }\r\n\r\n public getServiceUris(): Array<string> {\r\n return this.authorizeOptions.wellKnownServiceUris;\r\n }\r\n\r\n public getAuthority(): BehaviorSubject<string> {\r\n return this.authority;\r\n }\r\n\r\n public getIsAuthenticated(): BehaviorSubject<boolean> {\r\n return this.isAuthenticated;\r\n }\r\n\r\n public getIsAdmin(): BehaviorSubject<boolean> {\r\n return this.isAdmin;\r\n }\r\n\r\n public getIsDeveloper(): BehaviorSubject<boolean> {\r\n return this.isDeveloper;\r\n }\r\n\r\n public getIsManager(): BehaviorSubject<boolean> {\r\n return this.isManager;\r\n }\r\n\r\n public getAccessToken(): BehaviorSubject<string> {\r\n return this.accessToken;\r\n }\r\n\r\n public getUser(): BehaviorSubject<IUser> {\r\n return this.user;\r\n }\r\n\r\n public login() {\r\n this.oauthService.initImplicitFlow();\r\n }\r\n\r\n public logout() {\r\n this.oauthService.logOut(false);\r\n }\r\n\r\n\r\n public initialize() {\r\n\r\n console.debug(\"AuthorizeService::initialize::started\");\r\n\r\n const config: AuthConfig = {\r\n responseType: 'code',\r\n issuer: this.authorizeOptions.issuer,\r\n redirectUri: this.authorizeOptions.redirectUri,\r\n postLogoutRedirectUri: this.authorizeOptions.postLogoutRedirectUri,\r\n clientId: this.authorizeOptions.clientId,\r\n scope: this.authorizeOptions.scope,\r\n showDebugInformation: this.authorizeOptions.showDebugInformation,\r\n sessionChecksEnabled: this.authorizeOptions.sessionChecksEnabled\r\n };\r\n\r\n this.oauthService.configure(config);\r\n this.oauthService.setStorage(localStorage);\r\n this.oauthService.loadDiscoveryDocumentAndTryLogin();\r\n\r\n this.oauthService.setupAutomaticSilentRefresh();\r\n\r\n this.oauthService.events.subscribe(e => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('oauth/oidc event', e);\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'session_terminated'))\r\n .subscribe(_ => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('Your session has been terminated!');\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'token_received'))\r\n .subscribe(_ => {\r\n this.loadUser();\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'logout'))\r\n .subscribe(_ => {\r\n this.accessToken.next(null);\r\n this.user.next(null);\r\n });\r\n\r\n if (this.oauthService.hasValidAccessToken()) {\r\n this.loadUser();\r\n }\r\n\r\n this.authority.next(this.authorizeOptions.issuer);\r\n\r\n console.debug(\"AuthorizeService::initialize::done\");\r\n\r\n }\r\n\r\n private loadUser() {\r\n const claims = this.oauthService.getIdentityClaims();\r\n if (!claims) {\r\n console.error(\"claims where null when loading identity claims\");\r\n return;\r\n }\r\n\r\n const user = <IUser>claims;\r\n const accessToken = this.oauthService.getAccessToken();\r\n this.user.next(user);\r\n this.accessToken.next(accessToken);\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {AuthorizeService} from '../authorize.service';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login-menu',\r\n templateUrl: './login-menu.component.html',\r\n styleUrls: ['./login-menu.component.css']\r\n})\r\nexport class LoginMenuComponent implements OnInit {\r\n public isAuthenticated: BehaviorSubject<boolean>;\r\n public userName: Observable<string>;\r\n public isAdmin: Observable<boolean>;\r\n\r\n constructor(private authorizeService: AuthorizeService) {\r\n }\r\n\r\n ngOnInit() {\r\n const isIFrame = window.self !== window.top;\r\n\r\n console.log(\"app-login-menu::created\");\r\n\r\n this.isAuthenticated = this.authorizeService.getIsAuthenticated();\r\n this.userName = this.authorizeService.getUser().pipe(map(u => u && u.name));\r\n this.isAdmin = this.authorizeService.getIsAdmin();\r\n\r\n this.isAuthenticated.subscribe(x => {\r\n\r\n console.log(`isAuthenticated changed to ${x} (iframe ${isIFrame})`);\r\n });\r\n }\r\n\r\n public login() {\r\n this.authorizeService.login();\r\n }\r\n\r\n public logout() {\r\n this.authorizeService.logout();\r\n }\r\n\r\n public register() {\r\n\r\n }\r\n}\r\n","<ul *ngIf=\"isAuthenticated | async\" class=\"navbar-nav\">\r\n <li class=\"nav-item dropdown\">\r\n <a aria-expanded=\"false\" aria-haspopup=\"true\" class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"\r\n id=\"navbarDropdownLogin\" role=\"button\">\r\n {{ userName | async }} <b class=\"caret\"></b>\r\n </a>\r\n <div aria-labelledby=\"navbarDropdown\" class=\"dropdown-menu\">\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Grants\">Client Application Access</a>-->\r\n <!--<a class=\"dropdown-item\" [routerLink]='[\"/authentication/profile\"]' title=\"Manage\">Manage</a>-->\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Diagnostics\">Diagnostics</a>-->\r\n <div class=\"dropdown-divider\"></div>\r\n <a (click)='logout()' class=\"dropdown-item\" routerLink=\"\" title=\"Logout\">Logout</a>\r\n </div>\r\n </li>\r\n</ul>\r\n<ul *ngIf=\"!(isAuthenticated | async)\" class=\"navbar-nav\">\r\n <li class=\"nav-item\">\r\n <a (click)='register()' class=\"nav-link\" routerLink=\"\">Register</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a (click)='login()' class=\"nav-link\" routerLink=\"\">Login</a>\r\n </li>\r\n</ul>\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivate,\r\n CanActivateChild,\r\n CanDeactivate,\r\n CanLoad, Route,\r\n Router,\r\n RouterStateSnapshot, UrlSegment,\r\n UrlTree\r\n} from '@angular/router';\r\nimport {AuthorizeService} from './authorize.service';\r\nimport {firstValueFrom, lastValueFrom, Observable} from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate, CanActivateChild, CanDeactivate<unknown>, CanLoad {\r\n constructor(private authorize: AuthorizeService, private router: Router) {\r\n }\r\n\r\n canActivate(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n let url: string = state.url;\r\n return this.handleAuthorization(next, url);\r\n }\r\n\r\n canActivateChild(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return this.canActivate(next, state);\r\n }\r\n\r\n canDeactivate(\r\n component: unknown,\r\n currentRoute: ActivatedRouteSnapshot,\r\n currentState: RouterStateSnapshot,\r\n nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return true;\r\n }\r\n\r\n canLoad(\r\n route: Route,\r\n segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {\r\n return true;\r\n }\r\n\r\n private async handleAuthorization(route: ActivatedRouteSnapshot, url: any): Promise<boolean> {\r\n const isAuthenticated = await firstValueFrom(this.authorize.getIsAuthenticated());\r\n if (isAuthenticated) {\r\n const userRoles = await firstValueFrom(this.authorize.getRoles());\r\n if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {\r\n this.router.navigate(['']);\r\n return false;\r\n }\r\n return true;\r\n } else {\r\n this.authorize.login();\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {LoginMenuComponent} from \"./login-menu/login-menu.component\";\r\nimport {AuthorizeOptions, AuthorizeService} from \"./authorize.service\";\r\nimport {OAuthModule} from \"angular-oauth2-oidc\";\r\nimport {AuthorizeGuard} from \"./authorize.guard\";\r\n\r\n@NgModule({\r\n declarations: [LoginMenuComponent],\r\n exports: [LoginMenuComponent],\r\n providers: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n OAuthModule.forRoot()\r\n ]\r\n})\r\nexport class SharedAuthModule {\r\n static forRoot(authorizeOptions: AuthorizeOptions): ModuleWithProviders<SharedAuthModule> {\r\n return {\r\n ngModule: SharedAuthModule,\r\n providers: [\r\n {\r\n provide: AuthorizeOptions,\r\n useValue: authorizeOptions\r\n },\r\n AuthorizeService,\r\n AuthorizeGuard\r\n ]\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {AuthorizeService} from './authorize.service';\r\n\r\n@Injectable()\r\nexport class AuthorizeInterceptor implements HttpInterceptor {\r\n\r\n accessToken: string;\r\n\r\n constructor(private authorize: AuthorizeService) {\r\n\r\n authorize.getAccessToken().subscribe(value => this.accessToken = value);\r\n\r\n }\r\n\r\n private static isSameOriginUrl(req: any) {\r\n // It's an absolute url with the same origin.\r\n if (req.url.startsWith(`${window.location.origin}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a protocol relative url with the same origin.\r\n // For example: //www.example.com/api/Products\r\n if (req.url.startsWith(`//${window.location.host}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a relative url like /api/Products\r\n if (/^\\/[^\\/].*/.test(req.url)) {\r\n return true;\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n\r\n // Checks if there is an access_token available in the authorize service\r\n // and adds it to the request in case it's targeted at the same origin as the\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return this.processRequestWithToken(this.accessToken, req, next);\r\n }\r\n\r\n // single page application.\r\n private processRequestWithToken(token: string, req: HttpRequest<any>, next: HttpHandler) {\r\n if (!!token && (AuthorizeInterceptor.isSameOriginUrl(req) || this.isKnownServiceUri(req))) {\r\n req = req.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n\r\n private isKnownServiceUri(req: any) {\r\n\r\n const serviceUris = this.authorize.getServiceUris();\r\n\r\n for (let i = 0; i < serviceUris.length; i++) {\r\n if (req.url.startsWith(`${serviceUris[i]}`)) {\r\n return true;\r\n }\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of shared-auth\r\n */\r\n\r\nexport * from './lib/authorize.service';\r\nexport * from './lib/login-menu/login-menu.component';\r\nexport * from './lib/shared-auth.module';\r\nexport * from './lib/authorize.interceptor';\r\nexport * from './lib/authorize.guard';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthorizeService","i2"],"mappings":"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"}
|
package/lib/authorize.guard.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';
|
|
1
|
+
import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, CanDeactivate, CanLoad, Route, Router, RouterStateSnapshot, UrlSegment, UrlTree } from '@angular/router';
|
|
2
2
|
import { AuthorizeService } from './authorize.service';
|
|
3
|
+
import { Observable } from "rxjs";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class AuthorizeGuard implements CanActivate {
|
|
5
|
+
export declare class AuthorizeGuard implements CanActivate, CanActivateChild, CanDeactivate<unknown>, CanLoad {
|
|
5
6
|
private authorize;
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
private router;
|
|
8
|
+
constructor(authorize: AuthorizeService, router: Router);
|
|
9
|
+
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
10
|
+
canActivateChild(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
11
|
+
canDeactivate(component: unknown, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
12
|
+
canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean;
|
|
8
13
|
private handleAuthorization;
|
|
9
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<AuthorizeGuard, never>;
|
|
10
15
|
static ɵprov: i0.ɵɵInjectableDeclaration<AuthorizeGuard>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BehaviorSubject } from 'rxjs';
|
|
1
|
+
import { BehaviorSubject, Observable } from 'rxjs';
|
|
2
2
|
import { OAuthService } from "angular-oauth2-oidc";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export interface IUser {
|
|
@@ -26,6 +26,7 @@ export declare class AuthorizeService {
|
|
|
26
26
|
private accessToken;
|
|
27
27
|
private user;
|
|
28
28
|
constructor(authorizeOptions: AuthorizeOptions, oauthService: OAuthService);
|
|
29
|
+
getRoles(): Observable<Array<string>>;
|
|
29
30
|
getServiceUris(): Array<string>;
|
|
30
31
|
getAuthority(): BehaviorSubject<string>;
|
|
31
32
|
getIsAuthenticated(): BehaviorSubject<boolean>;
|