@meshmakers/shared-auth 2.0.2212-1003 → 2.0.2212-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.
@@ -1,24 +1,43 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { tap } from 'rxjs/operators';
3
2
  import * as i0 from "@angular/core";
4
3
  import * as i1 from "./authorize.service";
4
+ import * as i2 from "@angular/router";
5
5
  export class AuthorizeGuard {
6
- constructor(authorize) {
6
+ constructor(authorize, router) {
7
7
  this.authorize = authorize;
8
+ this.router = router;
8
9
  }
9
- canActivate(_next, state) {
10
- return this.authorize.getIsAuthenticated()
11
- .pipe(tap(isAuthenticated => this.handleAuthorization(isAuthenticated)));
10
+ canActivate(next, state) {
11
+ let url = state.url;
12
+ return this.handleAuthorization(next, url);
12
13
  }
13
- handleAuthorization(isAuthenticated) {
14
- if (!isAuthenticated) {
14
+ canActivateChild(next, state) {
15
+ return this.canActivate(next, state);
16
+ }
17
+ canDeactivate(component, currentRoute, currentState, nextState) {
18
+ return true;
19
+ }
20
+ canLoad(route, segments) {
21
+ return true;
22
+ }
23
+ handleAuthorization(route, url) {
24
+ if (this.authorize.getIsAuthenticated()) {
25
+ const userRole = this.authorize.getRoles();
26
+ if (route.data.role && route.data.role.indexOf(userRole) === -1) {
27
+ this.router.navigate(['']);
28
+ return false;
29
+ }
30
+ return true;
31
+ }
32
+ else {
15
33
  this.authorize.login();
16
34
  }
35
+ return false;
17
36
  }
18
37
  }
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 });
38
+ 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
39
  AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard });
21
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, decorators: [{
22
41
  type: Injectable
23
- }], ctorParameters: function () { return [{ type: i1.AuthorizeService }]; } });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtYXV0aC9zcmMvbGliL2F1dGhvcml6ZS5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBR25DLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQy9DLENBQUM7SUFFRCxXQUFXLENBQ1QsS0FBNkIsRUFDN0IsS0FBMEI7UUFDMUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFO2FBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxlQUF3QjtRQUNsRCxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDOzsyR0FmVSxjQUFjOytHQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGUsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7QXV0aG9yaXplU2VydmljZX0gZnJvbSAnLi9hdXRob3JpemUuc2VydmljZSc7XHJcbmltcG9ydCB7dGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRob3JpemVHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhvcml6ZTogQXV0aG9yaXplU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGUoXHJcbiAgICBfbmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmF1dGhvcml6ZS5nZXRJc0F1dGhlbnRpY2F0ZWQoKVxyXG4gICAgICAucGlwZSh0YXAoaXNBdXRoZW50aWNhdGVkID0+IHRoaXMuaGFuZGxlQXV0aG9yaXphdGlvbihpc0F1dGhlbnRpY2F0ZWQpKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUF1dGhvcml6YXRpb24oaXNBdXRoZW50aWNhdGVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICB0aGlzLmF1dGhvcml6ZS5sb2dpbigpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
42
+ }], ctorParameters: function () { return [{ type: i1.AuthorizeService }, { type: i2.Router }]; } });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtYXV0aC9zcmMvbGliL2F1dGhvcml6ZS5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7O0FBZ0J6QyxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUFvQixTQUEyQixFQUFVLE1BQWM7UUFBbkQsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ3ZFLENBQUM7SUFFRCxXQUFXLENBQ1QsSUFBNEIsRUFDNUIsS0FBMEI7UUFDMUIsSUFBSSxHQUFHLEdBQVcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQixDQUNkLElBQTRCLEVBQzVCLEtBQTBCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGFBQWEsQ0FDWCxTQUFrQixFQUNsQixZQUFvQyxFQUNwQyxZQUFpQyxFQUNqQyxTQUErQjtRQUMvQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLENBQ0wsS0FBWSxFQUNaLFFBQXNCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQTZCLEVBQUUsR0FBUTtRQUNqRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtZQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3hCO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzsyR0E1Q1UsY0FBYzsrR0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgQ2FuQWN0aXZhdGUsXHJcbiAgQ2FuQWN0aXZhdGVDaGlsZCxcclxuICBDYW5EZWFjdGl2YXRlLFxyXG4gIENhbkxvYWQsIFJvdXRlLFxyXG4gIFJvdXRlcixcclxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBVcmxTZWdtZW50LFxyXG4gIFVybFRyZWVcclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0F1dGhvcml6ZVNlcnZpY2V9IGZyb20gJy4vYXV0aG9yaXplLnNlcnZpY2UnO1xyXG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRob3JpemVHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkLCBDYW5EZWFjdGl2YXRlPHVua25vd24+LCBDYW5Mb2FkIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhvcml6ZTogQXV0aG9yaXplU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGUoXHJcbiAgICBuZXh0OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHwgYm9vbGVhbiB8IFVybFRyZWUge1xyXG4gICAgbGV0IHVybDogc3RyaW5nID0gc3RhdGUudXJsO1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlQXV0aG9yaXphdGlvbihuZXh0LCB1cmwpO1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGVDaGlsZChcclxuICAgIG5leHQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFVybFRyZWU+IHwgUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT4gfCBib29sZWFuIHwgVXJsVHJlZSB7XHJcbiAgICByZXR1cm4gdGhpcy5jYW5BY3RpdmF0ZShuZXh0LCBzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBjYW5EZWFjdGl2YXRlKFxyXG4gICAgY29tcG9uZW50OiB1bmtub3duLFxyXG4gICAgY3VycmVudFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgY3VycmVudFN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxyXG4gICAgbmV4dFN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFVybFRyZWU+IHwgUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT4gfCBib29sZWFuIHwgVXJsVHJlZSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNhbkxvYWQoXHJcbiAgICByb3V0ZTogUm91dGUsXHJcbiAgICBzZWdtZW50czogVXJsU2VnbWVudFtdKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVBdXRob3JpemF0aW9uKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCB1cmw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuYXV0aG9yaXplLmdldElzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgIGNvbnN0IHVzZXJSb2xlID0gdGhpcy5hdXRob3JpemUuZ2V0Um9sZXMoKTtcclxuICAgICAgaWYgKHJvdXRlLmRhdGEucm9sZSAmJiByb3V0ZS5kYXRhLnJvbGUuaW5kZXhPZih1c2VyUm9sZSkgPT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnXSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hdXRob3JpemUubG9naW4oKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -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 {
@@ -24,6 +24,9 @@ export class AuthorizeService {
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(e => {
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(e => {
88
+ .subscribe(_ => {
86
89
  this.loadUser();
87
90
  });
88
91
  this.oauthService.events
89
92
  .pipe(filter(e => e.type === 'logout'))
90
- .subscribe(e => {
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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QVksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsRCxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFFdEQsQ0FBQztJQUVPLFFBQVE7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUNoRSxPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBVSxNQUFNLENBQUM7UUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDOzs2R0FySVUsZ0JBQWdCLGtCQVNQLGdCQUFnQjtpSEFUekIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQVVJLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtBdXRoQ29uZmlnLCBPQXV0aFNlcnZpY2V9IGZyb20gXCJhbmd1bGFyLW9hdXRoMi1vaWRjXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcm9sZTogc3RyaW5nW107XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRob3JpemVPcHRpb25zIHtcclxuICB3ZWxsS25vd25TZXJ2aWNlVXJpczogc3RyaW5nW107XHJcbiAgLy8gVXJsIG9mIHRoZSBJZGVudGl0eSBQcm92aWRlclxyXG4gIGlzc3Vlcjogc3RyaW5nO1xyXG4gIC8vIFVSTCBvZiB0aGUgU1BBIHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIGFmdGVyIGxvZ2luXHJcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcclxuICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IHN0cmluZztcclxuICAvLyBUaGUgU1BBJ3MgaWQuIFRoZSBTUEEgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgaWQgYXQgdGhlIGF1dGgtc2VydmVyXHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuICAvLyBzZXQgdGhlIHNjb3BlIGZvciB0aGUgcGVybWlzc2lvbnMgdGhlIGNsaWVudCBzaG91bGQgcmVxdWVzdFxyXG4gIC8vIFRoZSBmaXJzdCB0aHJlZSBhcmUgZGVmaW5lZCBieSBPSURDLiBUaGUgNHRoIGlzIGEgdXNlIGNhc2Utc3BlY2lmaWMgb25lXHJcbiAgc2NvcGU6IHN0cmluZztcclxuICBzaG93RGVidWdJbmZvcm1hdGlvbjogYm9vbGVhbjtcclxuICBzZXNzaW9uQ2hlY2tzRW5hYmxlZDogYm9vbGVhbjtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXV0aG9yaXplU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBpc0F1dGhlbnRpY2F0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHByaXZhdGUgaXNBZG1pbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc0RldmVsb3BlcjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc01hbmFnZXI6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHByaXZhdGUgYXV0aG9yaXR5OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgcHJpdmF0ZSBhY2Nlc3NUb2tlbjogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gIHByaXZhdGUgdXNlcjogQmVoYXZpb3JTdWJqZWN0PElVc2VyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQXV0aG9yaXplT3B0aW9ucykgcHJpdmF0ZSBhdXRob3JpemVPcHRpb25zOiBBdXRob3JpemVPcHRpb25zLCBwcml2YXRlIG9hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlKSB7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6Y3JlYXRlZFwiKTtcclxuICAgIHRoaXMuZ2V0VXNlcigpLnN1YnNjcmliZShzID0+IHtcclxuICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQubmV4dCghIXMpO1xyXG4gICAgICB0aGlzLmlzQWRtaW4ubmV4dCghIXMgJiYgKHMucm9sZS5pbmNsdWRlcyhcIkFkbWluaXN0cmF0b3JzXCIpfHwgcy5yb2xlLmluY2x1ZGVzKFwiRGV2ZWxvcGVyc1wiKXx8IHMucm9sZS5pbmNsdWRlcyhcIk1hbmFnZXJzXCIpKSk7XHJcbiAgICAgIHRoaXMuaXNEZXZlbG9wZXIubmV4dCghIXMgJiYgKHMucm9sZS5pbmNsdWRlcyhcIkRldmVsb3BlcnNcIikgfHwgcy5yb2xlLmluY2x1ZGVzKFwiTWFuYWdlcnNcIikpKTtcclxuICAgICAgdGhpcy5pc01hbmFnZXIubmV4dCghIXMgJiYgcy5yb2xlLmluY2x1ZGVzKFwiTWFuYWdlcnNcIikpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Um9sZXMoKTogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PntcclxuICAgIHJldHVybiB0aGlzLmdldFVzZXIoKS5waXBlKFxyXG4gICAgICBtYXAodT0+IHUucm9sZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VydmljZVVyaXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRob3JpemVPcHRpb25zLndlbGxLbm93blNlcnZpY2VVcmlzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEF1dGhvcml0eSgpOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRob3JpdHk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNBdXRoZW50aWNhdGVkKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNBZG1pbigpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNBZG1pbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc0RldmVsb3BlcigpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNEZXZlbG9wZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNNYW5hZ2VyKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc01hbmFnZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZXNzVG9rZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VXNlcigpOiBCZWhhdmlvclN1YmplY3Q8SVVzZXI+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9naW4oKSB7XHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5pbml0SW1wbGljaXRGbG93KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KCkge1xyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UubG9nT3V0KGZhbHNlKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpIHtcclxuXHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6aW5pdGlhbGl6ZTo6c3RhcnRlZFwiKTtcclxuXHJcbiAgICBjb25zdCBjb25maWc6IEF1dGhDb25maWcgPSB7XHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2NvZGUnLFxyXG4gICAgICBpc3N1ZXI6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5pc3N1ZXIsXHJcbiAgICAgIHJlZGlyZWN0VXJpOiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMucmVkaXJlY3RVcmksXHJcbiAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogdGhpcy5hdXRob3JpemVPcHRpb25zLnBvc3RMb2dvdXRSZWRpcmVjdFVyaSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5jbGllbnRJZCxcclxuICAgICAgc2NvcGU6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5zY29wZSxcclxuICAgICAgc2hvd0RlYnVnSW5mb3JtYXRpb246IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5zaG93RGVidWdJbmZvcm1hdGlvbixcclxuICAgICAgc2Vzc2lvbkNoZWNrc0VuYWJsZWQ6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5zZXNzaW9uQ2hlY2tzRW5hYmxlZFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5jb25maWd1cmUoY29uZmlnKTtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLnNldFN0b3JhZ2UobG9jYWxTdG9yYWdlKTtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudEFuZFRyeUxvZ2luKCk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5kZWJ1Zygnb2F1dGgvb2lkYyBldmVudCcsIGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3Nlc3Npb25fdGVybWluYXRlZCcpKVxyXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnWW91ciBzZXNzaW9uIGhhcyBiZWVuIHRlcm1pbmF0ZWQhJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50c1xyXG4gICAgICAucGlwZShmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICd0b2tlbl9yZWNlaXZlZCcpKVxyXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZFVzZXIoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ2xvZ291dCcpKVxyXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIHRoaXMuYWNjZXNzVG9rZW4ubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnVzZXIubmV4dChudWxsKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICB0aGlzLmxvYWRVc2VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdXRob3JpdHkubmV4dCh0aGlzLmF1dGhvcml6ZU9wdGlvbnMuaXNzdWVyKTtcclxuXHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6aW5pdGlhbGl6ZTo6ZG9uZVwiKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRVc2VyKCkge1xyXG4gICAgY29uc3QgY2xhaW1zID0gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRlbnRpdHlDbGFpbXMoKTtcclxuICAgIGlmICghY2xhaW1zKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJjbGFpbXMgd2hlcmUgbnVsbCB3aGVuIGxvYWRpbmcgaWRlbnRpdHkgY2xhaW1zXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXNlciA9IDxJVXNlcj5jbGFpbXM7XHJcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XHJcbiAgICB0aGlzLnVzZXIubmV4dCh1c2VyKTtcclxuICAgIHRoaXMuYWNjZXNzVG9rZW4ubmV4dChhY2Nlc3NUb2tlbik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,12 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, Inject, Component, NgModule } from '@angular/core';
3
3
  import { BehaviorSubject } from 'rxjs';
4
- import { filter, map, tap } from 'rxjs/operators';
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
  }
@@ -29,6 +30,9 @@ class AuthorizeService {
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(e => {
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(e => {
94
+ .subscribe(_ => {
91
95
  this.loadUser();
92
96
  });
93
97
  this.oauthService.events
94
98
  .pipe(filter(e => e.type === 'logout'))
95
- .subscribe(e => {
99
+ .subscribe(_ => {
96
100
  this.accessToken.next(null);
97
101
  this.user.next(null);
98
102
  });
@@ -156,24 +160,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImpor
156
160
  }], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
157
161
 
158
162
  class AuthorizeGuard {
159
- constructor(authorize) {
163
+ constructor(authorize, router) {
160
164
  this.authorize = authorize;
165
+ this.router = router;
166
+ }
167
+ canActivate(next, state) {
168
+ let url = state.url;
169
+ return this.handleAuthorization(next, url);
170
+ }
171
+ canActivateChild(next, state) {
172
+ return this.canActivate(next, state);
173
+ }
174
+ canDeactivate(component, currentRoute, currentState, nextState) {
175
+ return true;
161
176
  }
162
- canActivate(_next, state) {
163
- return this.authorize.getIsAuthenticated()
164
- .pipe(tap(isAuthenticated => this.handleAuthorization(isAuthenticated)));
177
+ canLoad(route, segments) {
178
+ return true;
165
179
  }
166
- handleAuthorization(isAuthenticated) {
167
- if (!isAuthenticated) {
180
+ handleAuthorization(route, url) {
181
+ if (this.authorize.getIsAuthenticated()) {
182
+ const userRole = this.authorize.getRoles();
183
+ if (route.data.role && route.data.role.indexOf(userRole) === -1) {
184
+ this.router.navigate(['']);
185
+ return false;
186
+ }
187
+ return true;
188
+ }
189
+ else {
168
190
  this.authorize.login();
169
191
  }
192
+ return false;
170
193
  }
171
194
  }
172
- AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, deps: [{ token: AuthorizeService }], target: i0.ɵɵFactoryTarget.Injectable });
195
+ 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
196
  AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard });
174
197
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, decorators: [{
175
198
  type: Injectable
176
- }], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
199
+ }], ctorParameters: function () { return [{ type: AuthorizeService }, { type: i2$1.Router }]; } });
177
200
 
178
201
  class SharedAuthModule {
179
202
  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\")|| 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 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 {tap} from 'rxjs/operators';\r\nimport {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 handleAuthorization(route: ActivatedRouteSnapshot, url: any): boolean {\r\n if (this.authorize.getIsAuthenticated()) {\r\n const userRole = this.authorize.getRoles();\r\n if (route.data.role && route.data.role.indexOf(userRole) === -1) {\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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"}
@@ -1,12 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, Inject, Component, NgModule } from '@angular/core';
3
3
  import { BehaviorSubject } from 'rxjs';
4
- import { filter, map, tap } from 'rxjs/operators';
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
  }
@@ -29,6 +30,9 @@ class AuthorizeService {
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(e => {
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(e => {
94
+ .subscribe(_ => {
91
95
  this.loadUser();
92
96
  });
93
97
  this.oauthService.events
94
98
  .pipe(filter(e => e.type === 'logout'))
95
- .subscribe(e => {
99
+ .subscribe(_ => {
96
100
  this.accessToken.next(null);
97
101
  this.user.next(null);
98
102
  });
@@ -154,24 +158,43 @@ 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
- canActivate(_next, state) {
161
- return this.authorize.getIsAuthenticated()
162
- .pipe(tap(isAuthenticated => this.handleAuthorization(isAuthenticated)));
175
+ canLoad(route, segments) {
176
+ return true;
163
177
  }
164
- handleAuthorization(isAuthenticated) {
165
- if (!isAuthenticated) {
178
+ handleAuthorization(route, url) {
179
+ if (this.authorize.getIsAuthenticated()) {
180
+ const userRole = this.authorize.getRoles();
181
+ if (route.data.role && route.data.role.indexOf(userRole) === -1) {
182
+ this.router.navigate(['']);
183
+ return false;
184
+ }
185
+ return true;
186
+ }
187
+ else {
166
188
  this.authorize.login();
167
189
  }
190
+ return false;
168
191
  }
169
192
  }
170
- AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, deps: [{ token: AuthorizeService }], target: i0.ɵɵFactoryTarget.Injectable });
193
+ 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
194
  AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard });
172
195
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: AuthorizeGuard, decorators: [{
173
196
  type: Injectable
174
- }], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
197
+ }], ctorParameters: function () { return [{ type: AuthorizeService }, { type: i2$1.Router }]; } });
175
198
 
176
199
  class SharedAuthModule {
177
200
  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\")|| 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 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 {tap} from 'rxjs/operators';\r\nimport {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 handleAuthorization(route: ActivatedRouteSnapshot, url: any): boolean {\r\n if (this.authorize.getIsAuthenticated()) {\r\n const userRole = this.authorize.getRoles();\r\n if (route.data.role && route.data.role.indexOf(userRole) === -1) {\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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"}
@@ -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
- constructor(authorize: AuthorizeService);
7
- canActivate(_next: ActivatedRouteSnapshot, state: RouterStateSnapshot): any;
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>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshmakers/shared-auth",
3
- "version": "2.0.2212-1003",
3
+ "version": "2.0.2212-12001",
4
4
  "dependencies": {
5
5
  "tslib": "^2.4.0"
6
6
  },