@meshmakers/shared-auth 2.0.2303-3003 → 2.0.2304-13002
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/authorize.guard.mjs +10 -9
- package/esm2020/lib/authorize.interceptor.mjs +3 -3
- package/esm2020/lib/authorize.service.mjs +39 -28
- package/esm2020/lib/login-menu/login-menu.component.mjs +3 -3
- package/esm2020/lib/shared-auth.module.mjs +4 -4
- package/fesm2015/meshmakers-shared-auth.mjs +77 -63
- package/fesm2015/meshmakers-shared-auth.mjs.map +1 -1
- package/fesm2020/meshmakers-shared-auth.mjs +57 -45
- package/fesm2020/meshmakers-shared-auth.mjs.map +1 -1
- package/lib/authorize.guard.d.ts +2 -2
- package/lib/authorize.service.d.ts +3 -1
- package/lib/login-menu/login-menu.component.d.ts +1 -1
- package/package.json +2 -2
|
@@ -4,8 +4,8 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "./authorize.service";
|
|
5
5
|
import * as i2 from "@angular/router";
|
|
6
6
|
export class AuthorizeGuard {
|
|
7
|
-
constructor(
|
|
8
|
-
this.
|
|
7
|
+
constructor(authorizeService, router) {
|
|
8
|
+
this.authorizeService = authorizeService;
|
|
9
9
|
this.router = router;
|
|
10
10
|
}
|
|
11
11
|
canActivate(next, state) {
|
|
@@ -22,9 +22,10 @@ export class AuthorizeGuard {
|
|
|
22
22
|
return true;
|
|
23
23
|
}
|
|
24
24
|
async handleAuthorization(route, url) {
|
|
25
|
-
|
|
25
|
+
await this.authorizeService.initialize();
|
|
26
|
+
const isAuthenticated = await firstValueFrom(this.authorizeService.getIsAuthenticated());
|
|
26
27
|
if (isAuthenticated) {
|
|
27
|
-
const userRoles = await firstValueFrom(this.
|
|
28
|
+
const userRoles = await firstValueFrom(this.authorizeService.getRoles());
|
|
28
29
|
if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {
|
|
29
30
|
this.router.navigate(['']);
|
|
30
31
|
return false;
|
|
@@ -32,14 +33,14 @@ export class AuthorizeGuard {
|
|
|
32
33
|
return true;
|
|
33
34
|
}
|
|
34
35
|
else {
|
|
35
|
-
this.
|
|
36
|
+
this.authorizeService.login();
|
|
36
37
|
}
|
|
37
38
|
return false;
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
41
|
-
AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
41
|
+
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeGuard, deps: [{ token: i1.AuthorizeService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
42
|
+
AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeGuard });
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeGuard, decorators: [{
|
|
43
44
|
type: Injectable
|
|
44
45
|
}], ctorParameters: function () { return [{ type: i1.AuthorizeService }, { type: i2.Router }]; } });
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtYXV0aC9zcmMvbGliL2F1dGhvcml6ZS5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBWXpDLE9BQU8sRUFBQyxjQUFjLEVBQTRCLE1BQU0sTUFBTSxDQUFDOzs7O0FBRy9ELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLGdCQUFrQyxFQUFVLE1BQWM7UUFBMUQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDOUUsQ0FBQztJQUVELFdBQVcsQ0FDVCxJQUE0QixFQUM1QixLQUEwQjtRQUMxQixJQUFJLEdBQUcsR0FBVyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsSUFBNEIsRUFDNUIsS0FBMEI7UUFDMUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsYUFBYSxDQUNYLFNBQWtCLEVBQ2xCLFlBQW9DLEVBQ3BDLFlBQWlDLEVBQ2pDLFNBQStCO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sQ0FDTCxLQUFZLEVBQ1osUUFBc0I7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQTZCLEVBQUUsR0FBUTtRQUV2RSxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUV4QyxNQUFNLGVBQWUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksZUFBZSxFQUFFO1lBQ25CLE1BQU0sU0FBUyxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0IsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUMvQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7MkdBaERVLGNBQWM7K0dBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gIENhbkFjdGl2YXRlLFxyXG4gIENhbkFjdGl2YXRlQ2hpbGQsXHJcbiAgQ2FuRGVhY3RpdmF0ZSxcclxuICBDYW5Mb2FkLCBSb3V0ZSxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCwgVXJsU2VnbWVudCxcclxuICBVcmxUcmVlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtBdXRob3JpemVTZXJ2aWNlfSBmcm9tICcuL2F1dGhvcml6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbSwgbGFzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhvcml6ZUd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQsIENhbkRlYWN0aXZhdGU8dW5rbm93bj4sIENhbkxvYWQge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aG9yaXplU2VydmljZTogQXV0aG9yaXplU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGUoXHJcbiAgICBuZXh0OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHwgYm9vbGVhbiB8IFVybFRyZWUge1xyXG4gICAgbGV0IHVybDogc3RyaW5nID0gc3RhdGUudXJsO1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlQXV0aG9yaXphdGlvbihuZXh0LCB1cmwpO1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGVDaGlsZChcclxuICAgIG5leHQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFVybFRyZWU+IHwgUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT4gfCBib29sZWFuIHwgVXJsVHJlZSB7XHJcbiAgICByZXR1cm4gdGhpcy5jYW5BY3RpdmF0ZShuZXh0LCBzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBjYW5EZWFjdGl2YXRlKFxyXG4gICAgY29tcG9uZW50OiB1bmtub3duLFxyXG4gICAgY3VycmVudFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgY3VycmVudFN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxyXG4gICAgbmV4dFN0YXRlPzogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFVybFRyZWU+IHwgUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT4gfCBib29sZWFuIHwgVXJsVHJlZSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNhbkxvYWQoXHJcbiAgICByb3V0ZTogUm91dGUsXHJcbiAgICBzZWdtZW50czogVXJsU2VnbWVudFtdKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBdXRob3JpemF0aW9uKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCB1cmw6IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG5cclxuICAgIGF3YWl0IHRoaXMuYXV0aG9yaXplU2VydmljZS5pbml0aWFsaXplKClcclxuXHJcbiAgICBjb25zdCBpc0F1dGhlbnRpY2F0ZWQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGhvcml6ZVNlcnZpY2UuZ2V0SXNBdXRoZW50aWNhdGVkKCkpO1xyXG4gICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xyXG4gICAgICBjb25zdCB1c2VyUm9sZXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGhvcml6ZVNlcnZpY2UuZ2V0Um9sZXMoKSk7XHJcbiAgICAgIGlmIChyb3V0ZS5kYXRhLnJvbGVzICYmICFyb3V0ZS5kYXRhLnJvbGVzLmZpbHRlcih2YWx1ZSA9PiB1c2VyUm9sZXMuaW5jbHVkZXModmFsdWUpKSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXV0aG9yaXplU2VydmljZS5sb2dpbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -52,9 +52,9 @@ export class AuthorizeInterceptor {
|
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
AuthorizeInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
56
|
-
AuthorizeInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
57
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
55
|
+
AuthorizeInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeInterceptor, deps: [{ token: i1.AuthorizeService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
56
|
+
AuthorizeInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeInterceptor });
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeInterceptor, decorators: [{
|
|
58
58
|
type: Injectable
|
|
59
59
|
}], ctorParameters: function () { return [{ type: i1.AuthorizeService }]; } });
|
|
60
60
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtYXV0aC9zcmMvbGliL2F1dGhvcml6ZS5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7QUFNekMsTUFBTSxPQUFPLG9CQUFvQjtJQUkvQixZQUFvQixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUU3QyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUUxRSxDQUFDO0lBRU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFRO1FBQ3JDLDZDQUE2QztRQUM3QyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxxREFBcUQ7UUFDckQsOENBQThDO1FBQzlDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDcEQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELHlDQUF5QztRQUN6QyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxpREFBaUQ7UUFDakQsZ0NBQWdDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSw2RUFBNkU7SUFFN0UsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELDJCQUEyQjtJQUNuQix1QkFBdUIsQ0FBQyxLQUFhLEVBQUUsR0FBcUIsRUFBRSxJQUFpQjtRQUNyRixJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDekYsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2QsVUFBVSxFQUFFO29CQUNWLGFBQWEsRUFBRSxVQUFVLEtBQUssRUFBRTtpQkFDakM7YUFDRixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU8saUJBQWlCLENBQUMsR0FBUTtRQUVoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXBELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFFRCxpREFBaUQ7UUFDakQsZ0NBQWdDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7aUhBakVVLG9CQUFvQjtxSEFBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtBdXRob3JpemVTZXJ2aWNlfSBmcm9tICcuL2F1dGhvcml6ZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhvcml6ZUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuXHJcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRob3JpemU6IEF1dGhvcml6ZVNlcnZpY2UpIHtcclxuXHJcbiAgICBhdXRob3JpemUuZ2V0QWNjZXNzVG9rZW4oKS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5hY2Nlc3NUb2tlbiA9IHZhbHVlKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpc1NhbWVPcmlnaW5VcmwocmVxOiBhbnkpIHtcclxuICAgIC8vIEl0J3MgYW4gYWJzb2x1dGUgdXJsIHdpdGggdGhlIHNhbWUgb3JpZ2luLlxyXG4gICAgaWYgKHJlcS51cmwuc3RhcnRzV2l0aChgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9gKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJdCdzIGEgcHJvdG9jb2wgcmVsYXRpdmUgdXJsIHdpdGggdGhlIHNhbWUgb3JpZ2luLlxyXG4gICAgLy8gRm9yIGV4YW1wbGU6IC8vd3d3LmV4YW1wbGUuY29tL2FwaS9Qcm9kdWN0c1xyXG4gICAgaWYgKHJlcS51cmwuc3RhcnRzV2l0aChgLy8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9gKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJdCdzIGEgcmVsYXRpdmUgdXJsIGxpa2UgL2FwaS9Qcm9kdWN0c1xyXG4gICAgaWYgKC9eXFwvW15cXC9dLiovLnRlc3QocmVxLnVybCkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSXQncyBhbiBhYnNvbHV0ZSBvciBwcm90b2NvbCByZWxhdGl2ZSB1cmwgdGhhdFxyXG4gICAgLy8gZG9lc24ndCBoYXZlIHRoZSBzYW1lIG9yaWdpbi5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrcyBpZiB0aGVyZSBpcyBhbiBhY2Nlc3NfdG9rZW4gYXZhaWxhYmxlIGluIHRoZSBhdXRob3JpemUgc2VydmljZVxyXG4gIC8vIGFuZCBhZGRzIGl0IHRvIHRoZSByZXF1ZXN0IGluIGNhc2UgaXQncyB0YXJnZXRlZCBhdCB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlXHJcblxyXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RXaXRoVG9rZW4odGhpcy5hY2Nlc3NUb2tlbiwgcmVxLCBuZXh0KTtcclxuICB9XHJcblxyXG4gIC8vIHNpbmdsZSBwYWdlIGFwcGxpY2F0aW9uLlxyXG4gIHByaXZhdGUgcHJvY2Vzc1JlcXVlc3RXaXRoVG9rZW4odG9rZW46IHN0cmluZywgcmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xyXG4gICAgaWYgKCEhdG9rZW4gJiYgKEF1dGhvcml6ZUludGVyY2VwdG9yLmlzU2FtZU9yaWdpblVybChyZXEpIHx8IHRoaXMuaXNLbm93blNlcnZpY2VVcmkocmVxKSkpIHtcclxuICAgICAgcmVxID0gcmVxLmNsb25lKHtcclxuICAgICAgICBzZXRIZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YFxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzS25vd25TZXJ2aWNlVXJpKHJlcTogYW55KSB7XHJcblxyXG4gICAgY29uc3Qgc2VydmljZVVyaXMgPSB0aGlzLmF1dGhvcml6ZS5nZXRTZXJ2aWNlVXJpcygpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VydmljZVVyaXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHJlcS51cmwuc3RhcnRzV2l0aChgJHtzZXJ2aWNlVXJpc1tpXX1gKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSXQncyBhbiBhYnNvbHV0ZSBvciBwcm90b2NvbCByZWxhdGl2ZSB1cmwgdGhhdFxyXG4gICAgLy8gZG9lc24ndCBoYXZlIHRoZSBzYW1lIG9yaWdpbi5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
import { BehaviorSubject, firstValueFrom } from 'rxjs';
|
|
3
3
|
import { filter, map } from 'rxjs/operators';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "angular-oauth2-oidc";
|
|
@@ -16,6 +16,8 @@ export class AuthorizeService {
|
|
|
16
16
|
this.authority = new BehaviorSubject(null);
|
|
17
17
|
this.accessToken = new BehaviorSubject(null);
|
|
18
18
|
this.user = new BehaviorSubject(null);
|
|
19
|
+
this.isInitialized = new BehaviorSubject(false);
|
|
20
|
+
this.isInitializing = new BehaviorSubject(false);
|
|
19
21
|
console.debug("AuthorizeService::created");
|
|
20
22
|
this.getUser().subscribe(s => {
|
|
21
23
|
this.isAuthenticated.next(!!s);
|
|
@@ -23,6 +25,27 @@ export class AuthorizeService {
|
|
|
23
25
|
this.isDeveloper.next(!!s && (s.role.includes("Developers")));
|
|
24
26
|
this.isManager.next(!!s && s.role.includes("Managers"));
|
|
25
27
|
});
|
|
28
|
+
this.oauthService.events.subscribe(e => {
|
|
29
|
+
// tslint:disable-next-line:no-console
|
|
30
|
+
console.debug('oauth/oidc event', e);
|
|
31
|
+
});
|
|
32
|
+
this.oauthService.events
|
|
33
|
+
.pipe(filter(e => e.type === 'session_terminated'))
|
|
34
|
+
.subscribe(_ => {
|
|
35
|
+
// tslint:disable-next-line:no-console
|
|
36
|
+
console.debug('Your session has been terminated!');
|
|
37
|
+
});
|
|
38
|
+
this.oauthService.events
|
|
39
|
+
.pipe(filter(e => e.type === 'token_received'))
|
|
40
|
+
.subscribe(_ => {
|
|
41
|
+
this.loadUser();
|
|
42
|
+
});
|
|
43
|
+
this.oauthService.events
|
|
44
|
+
.pipe(filter(e => e.type === 'logout'))
|
|
45
|
+
.subscribe(_ => {
|
|
46
|
+
this.accessToken.next(null);
|
|
47
|
+
this.user.next(null);
|
|
48
|
+
});
|
|
26
49
|
}
|
|
27
50
|
getRoles() {
|
|
28
51
|
return this.getUser().pipe(map(u => u.role));
|
|
@@ -57,8 +80,15 @@ export class AuthorizeService {
|
|
|
57
80
|
logout() {
|
|
58
81
|
this.oauthService.logOut(false);
|
|
59
82
|
}
|
|
60
|
-
initialize() {
|
|
83
|
+
async initialize() {
|
|
61
84
|
console.debug("AuthorizeService::initialize::started");
|
|
85
|
+
if (await firstValueFrom(this.isInitializing)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (await firstValueFrom(this.isInitialized)) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.isInitializing.next(true);
|
|
62
92
|
const config = {
|
|
63
93
|
responseType: 'code',
|
|
64
94
|
issuer: this.authorizeOptions.issuer,
|
|
@@ -71,33 +101,14 @@ export class AuthorizeService {
|
|
|
71
101
|
};
|
|
72
102
|
this.oauthService.configure(config);
|
|
73
103
|
this.oauthService.setStorage(localStorage);
|
|
74
|
-
this.oauthService.loadDiscoveryDocumentAndTryLogin();
|
|
104
|
+
await this.oauthService.loadDiscoveryDocumentAndTryLogin();
|
|
75
105
|
this.oauthService.setupAutomaticSilentRefresh();
|
|
76
|
-
this.oauthService.events.subscribe(e => {
|
|
77
|
-
// tslint:disable-next-line:no-console
|
|
78
|
-
console.debug('oauth/oidc event', e);
|
|
79
|
-
});
|
|
80
|
-
this.oauthService.events
|
|
81
|
-
.pipe(filter(e => e.type === 'session_terminated'))
|
|
82
|
-
.subscribe(_ => {
|
|
83
|
-
// tslint:disable-next-line:no-console
|
|
84
|
-
console.debug('Your session has been terminated!');
|
|
85
|
-
});
|
|
86
|
-
this.oauthService.events
|
|
87
|
-
.pipe(filter(e => e.type === 'token_received'))
|
|
88
|
-
.subscribe(_ => {
|
|
89
|
-
this.loadUser();
|
|
90
|
-
});
|
|
91
|
-
this.oauthService.events
|
|
92
|
-
.pipe(filter(e => e.type === 'logout'))
|
|
93
|
-
.subscribe(_ => {
|
|
94
|
-
this.accessToken.next(null);
|
|
95
|
-
this.user.next(null);
|
|
96
|
-
});
|
|
97
106
|
if (this.oauthService.hasValidAccessToken()) {
|
|
98
107
|
this.loadUser();
|
|
99
108
|
}
|
|
100
109
|
this.authority.next(this.authorizeOptions.issuer);
|
|
110
|
+
this.isInitializing.next(false);
|
|
111
|
+
this.isInitialized.next(true);
|
|
101
112
|
console.debug("AuthorizeService::initialize::done");
|
|
102
113
|
}
|
|
103
114
|
loadUser() {
|
|
@@ -112,12 +123,12 @@ export class AuthorizeService {
|
|
|
112
123
|
this.accessToken.next(accessToken);
|
|
113
124
|
}
|
|
114
125
|
}
|
|
115
|
-
AuthorizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
116
|
-
AuthorizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
126
|
+
AuthorizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeService, deps: [{ token: AuthorizeOptions }, { token: i1.OAuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
127
|
+
AuthorizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeService });
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeService, decorators: [{
|
|
118
129
|
type: Injectable
|
|
119
130
|
}], ctorParameters: function () { return [{ type: AuthorizeOptions, decorators: [{
|
|
120
131
|
type: Inject,
|
|
121
132
|
args: [AuthorizeOptions]
|
|
122
133
|
}] }, { type: i1.OAuthService }]; } });
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC1hdXRoL3NyYy9saWIvYXV0aG9yaXplLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFRM0MsTUFBTSxPQUFPLGdCQUFnQjtDQWM1QjtBQUdELE1BQU0sT0FBTyxnQkFBZ0I7SUFTM0IsWUFBOEMsZ0JBQWtDLEVBQVUsWUFBMEI7UUFBdEUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBUjVHLG9CQUFlLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLFlBQU8sR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsZ0JBQVcsR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsY0FBUyxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxjQUFTLEdBQTRCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELGdCQUFXLEdBQTRCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLFNBQUksR0FBMkIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFHL0QsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQztJQUNwRCxDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVNLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBR00sVUFBVTtRQUVmLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUV2RCxNQUFNLE1BQU0sR0FBZTtZQUN6QixZQUFZLEVBQUUsTUFBTTtZQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU07WUFDcEMsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXO1lBQzlDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUI7WUFDbEUsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRO1lBQ3hDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSztZQUNsQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CO1lBQ2hFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0I7U0FDakUsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUVyRCxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JDLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLENBQUM7YUFDbEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2Isc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTthQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzlDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTthQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQzthQUN0QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsRCxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFFdEQsQ0FBQztJQUVPLFFBQVE7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUNoRSxPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBVSxNQUFNLENBQUM7UUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDOzs2R0FySVUsZ0JBQWdCLGtCQVNQLGdCQUFnQjtpSEFUekIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQVVJLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtBdXRoQ29uZmlnLCBPQXV0aFNlcnZpY2V9IGZyb20gXCJhbmd1bGFyLW9hdXRoMi1vaWRjXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcm9sZTogc3RyaW5nW107XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRob3JpemVPcHRpb25zIHtcclxuICB3ZWxsS25vd25TZXJ2aWNlVXJpczogc3RyaW5nW107XHJcbiAgLy8gVXJsIG9mIHRoZSBJZGVudGl0eSBQcm92aWRlclxyXG4gIGlzc3Vlcjogc3RyaW5nO1xyXG4gIC8vIFVSTCBvZiB0aGUgU1BBIHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIGFmdGVyIGxvZ2luXHJcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcclxuICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IHN0cmluZztcclxuICAvLyBUaGUgU1BBJ3MgaWQuIFRoZSBTUEEgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgaWQgYXQgdGhlIGF1dGgtc2VydmVyXHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuICAvLyBzZXQgdGhlIHNjb3BlIGZvciB0aGUgcGVybWlzc2lvbnMgdGhlIGNsaWVudCBzaG91bGQgcmVxdWVzdFxyXG4gIC8vIFRoZSBmaXJzdCB0aHJlZSBhcmUgZGVmaW5lZCBieSBPSURDLiBUaGUgNHRoIGlzIGEgdXNlIGNhc2Utc3BlY2lmaWMgb25lXHJcbiAgc2NvcGU6IHN0cmluZztcclxuICBzaG93RGVidWdJbmZvcm1hdGlvbjogYm9vbGVhbjtcclxuICBzZXNzaW9uQ2hlY2tzRW5hYmxlZDogYm9vbGVhbjtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXV0aG9yaXplU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBpc0F1dGhlbnRpY2F0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHByaXZhdGUgaXNBZG1pbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc0RldmVsb3BlcjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc01hbmFnZXI6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHByaXZhdGUgYXV0aG9yaXR5OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgcHJpdmF0ZSBhY2Nlc3NUb2tlbjogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gIHByaXZhdGUgdXNlcjogQmVoYXZpb3JTdWJqZWN0PElVc2VyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQXV0aG9yaXplT3B0aW9ucykgcHJpdmF0ZSBhdXRob3JpemVPcHRpb25zOiBBdXRob3JpemVPcHRpb25zLCBwcml2YXRlIG9hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlKSB7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6Y3JlYXRlZFwiKTtcclxuICAgIHRoaXMuZ2V0VXNlcigpLnN1YnNjcmliZShzID0+IHtcclxuICAgICAgdGhpcy5pc0F1dGhlbnRpY2F0ZWQubmV4dCghIXMpO1xyXG4gICAgICB0aGlzLmlzQWRtaW4ubmV4dCghIXMgJiYgKHMucm9sZS5pbmNsdWRlcyhcIkFkbWluaXN0cmF0b3JzXCIpKSk7XHJcbiAgICAgIHRoaXMuaXNEZXZlbG9wZXIubmV4dCghIXMgJiYgKHMucm9sZS5pbmNsdWRlcyhcIkRldmVsb3BlcnNcIikpKTtcclxuICAgICAgdGhpcy5pc01hbmFnZXIubmV4dCghIXMgJiYgcy5yb2xlLmluY2x1ZGVzKFwiTWFuYWdlcnNcIikpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Um9sZXMoKTogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PntcclxuICAgIHJldHVybiB0aGlzLmdldFVzZXIoKS5waXBlKFxyXG4gICAgICBtYXAodT0+IHUucm9sZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VydmljZVVyaXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRob3JpemVPcHRpb25zLndlbGxLbm93blNlcnZpY2VVcmlzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEF1dGhvcml0eSgpOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRob3JpdHk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNBdXRoZW50aWNhdGVkKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNBZG1pbigpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNBZG1pbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc0RldmVsb3BlcigpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNEZXZlbG9wZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNNYW5hZ2VyKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc01hbmFnZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZXNzVG9rZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VXNlcigpOiBCZWhhdmlvclN1YmplY3Q8SVVzZXI+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9naW4oKSB7XHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5pbml0SW1wbGljaXRGbG93KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KCkge1xyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UubG9nT3V0KGZhbHNlKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpIHtcclxuXHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6aW5pdGlhbGl6ZTo6c3RhcnRlZFwiKTtcclxuXHJcbiAgICBjb25zdCBjb25maWc6IEF1dGhDb25maWcgPSB7XHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2NvZGUnLFxyXG4gICAgICBpc3N1ZXI6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5pc3N1ZXIsXHJcbiAgICAgIHJlZGlyZWN0VXJpOiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMucmVkaXJlY3RVcmksXHJcbiAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogdGhpcy5hdXRob3JpemVPcHRpb25zLnBvc3RMb2dvdXRSZWRpcmVjdFVyaSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5jbGllbnRJZCxcclxuICAgICAgc2NvcGU6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5zY29wZSxcclxuICAgICAgc2hvd0RlYnVnSW5mb3JtYXRpb246IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5zaG93RGVidWdJbmZvcm1hdGlvbixcclxuICAgICAgc2Vzc2lvbkNoZWNrc0VuYWJsZWQ6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5zZXNzaW9uQ2hlY2tzRW5hYmxlZFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5jb25maWd1cmUoY29uZmlnKTtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLnNldFN0b3JhZ2UobG9jYWxTdG9yYWdlKTtcclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudEFuZFRyeUxvZ2luKCk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5kZWJ1Zygnb2F1dGgvb2lkYyBldmVudCcsIGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3Nlc3Npb25fdGVybWluYXRlZCcpKVxyXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnWW91ciBzZXNzaW9uIGhhcyBiZWVuIHRlcm1pbmF0ZWQhJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50c1xyXG4gICAgICAucGlwZShmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICd0b2tlbl9yZWNlaXZlZCcpKVxyXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZFVzZXIoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ2xvZ291dCcpKVxyXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIHRoaXMuYWNjZXNzVG9rZW4ubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnVzZXIubmV4dChudWxsKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICB0aGlzLmxvYWRVc2VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdXRob3JpdHkubmV4dCh0aGlzLmF1dGhvcml6ZU9wdGlvbnMuaXNzdWVyKTtcclxuXHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6aW5pdGlhbGl6ZTo6ZG9uZVwiKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRVc2VyKCkge1xyXG4gICAgY29uc3QgY2xhaW1zID0gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRlbnRpdHlDbGFpbXMoKTtcclxuICAgIGlmICghY2xhaW1zKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJjbGFpbXMgd2hlcmUgbnVsbCB3aGVuIGxvYWRpbmcgaWRlbnRpdHkgY2xhaW1zXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXNlciA9IDxJVXNlcj5jbGFpbXM7XHJcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XHJcbiAgICB0aGlzLnVzZXIubmV4dCh1c2VyKTtcclxuICAgIHRoaXMuYWNjZXNzVG9rZW4ubmV4dChhY2Nlc3NUb2tlbik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC1hdXRoL3NyYy9saWIvYXV0aG9yaXplLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLGVBQWUsRUFBRSxjQUFjLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBUTNDLE1BQU0sT0FBTyxnQkFBZ0I7Q0FjNUI7QUFHRCxNQUFNLE9BQU8sZ0JBQWdCO0lBVzNCLFlBQThDLGdCQUFrQyxFQUFVLFlBQTBCO1FBQXRFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQVY1RyxvQkFBZSxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxZQUFPLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9ELGdCQUFXLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25FLGNBQVMsR0FBNkIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsY0FBUyxHQUE0QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxnQkFBVyxHQUE0QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxTQUFJLEdBQTJCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELGtCQUFhLEdBQThCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLG1CQUFjLEdBQThCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRzdF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Z0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtBdXRoQ29uZmlnLCBPQXV0aFNlcnZpY2V9IGZyb20gXCJhbmd1bGFyLW9hdXRoMi1vaWRjXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcm9sZTogc3RyaW5nW107XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRob3JpemVPcHRpb25zIHtcclxuICB3ZWxsS25vd25TZXJ2aWNlVXJpczogc3RyaW5nW107XHJcbiAgLy8gVXJsIG9mIHRoZSBJZGVudGl0eSBQcm92aWRlclxyXG4gIGlzc3Vlcjogc3RyaW5nO1xyXG4gIC8vIFVSTCBvZiB0aGUgU1BBIHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIGFmdGVyIGxvZ2luXHJcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcclxuICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IHN0cmluZztcclxuICAvLyBUaGUgU1BBJ3MgaWQuIFRoZSBTUEEgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgaWQgYXQgdGhlIGF1dGgtc2VydmVyXHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuICAvLyBzZXQgdGhlIHNjb3BlIGZvciB0aGUgcGVybWlzc2lvbnMgdGhlIGNsaWVudCBzaG91bGQgcmVxdWVzdFxyXG4gIC8vIFRoZSBmaXJzdCB0aHJlZSBhcmUgZGVmaW5lZCBieSBPSURDLiBUaGUgNHRoIGlzIGEgdXNlIGNhc2Utc3BlY2lmaWMgb25lXHJcbiAgc2NvcGU6IHN0cmluZztcclxuICBzaG93RGVidWdJbmZvcm1hdGlvbjogYm9vbGVhbjtcclxuICBzZXNzaW9uQ2hlY2tzRW5hYmxlZDogYm9vbGVhbjtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXV0aG9yaXplU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBpc0F1dGhlbnRpY2F0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHByaXZhdGUgaXNBZG1pbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc0RldmVsb3BlcjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc01hbmFnZXI6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHByaXZhdGUgYXV0aG9yaXR5OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgcHJpdmF0ZSBhY2Nlc3NUb2tlbjogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG4gIHByaXZhdGUgdXNlcjogQmVoYXZpb3JTdWJqZWN0PElVc2VyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkIDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemluZyA6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEF1dGhvcml6ZU9wdGlvbnMpIHByaXZhdGUgYXV0aG9yaXplT3B0aW9uczogQXV0aG9yaXplT3B0aW9ucywgcHJpdmF0ZSBvYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSkge1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcIkF1dGhvcml6ZVNlcnZpY2U6OmNyZWF0ZWRcIik7XHJcblxyXG4gICAgdGhpcy5nZXRVc2VyKCkuc3Vic2NyaWJlKHMgPT4ge1xyXG4gICAgICB0aGlzLmlzQXV0aGVudGljYXRlZC5uZXh0KCEhcyk7XHJcbiAgICAgIHRoaXMuaXNBZG1pbi5uZXh0KCEhcyAmJiAocy5yb2xlLmluY2x1ZGVzKFwiQWRtaW5pc3RyYXRvcnNcIikpKTtcclxuICAgICAgdGhpcy5pc0RldmVsb3Blci5uZXh0KCEhcyAmJiAocy5yb2xlLmluY2x1ZGVzKFwiRGV2ZWxvcGVyc1wiKSkpO1xyXG4gICAgICB0aGlzLmlzTWFuYWdlci5uZXh0KCEhcyAmJiBzLnJvbGUuaW5jbHVkZXMoXCJNYW5hZ2Vyc1wiKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5ldmVudHMuc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmRlYnVnKCdvYXV0aC9vaWRjIGV2ZW50JywgZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5ldmVudHNcclxuICAgICAgLnBpcGUoZmlsdGVyKGUgPT4gZS50eXBlID09PSAnc2Vzc2lvbl90ZXJtaW5hdGVkJykpXHJcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCdZb3VyIHNlc3Npb24gaGFzIGJlZW4gdGVybWluYXRlZCEnKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3Rva2VuX3JlY2VpdmVkJykpXHJcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkVXNlcigpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5ldmVudHNcclxuICAgICAgLnBpcGUoZmlsdGVyKGUgPT4gZS50eXBlID09PSAnbG9nb3V0JykpXHJcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbi5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMudXNlci5uZXh0KG51bGwpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Um9sZXMoKTogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PntcclxuICAgIHJldHVybiB0aGlzLmdldFVzZXIoKS5waXBlKFxyXG4gICAgICBtYXAodT0+IHUucm9sZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VydmljZVVyaXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRob3JpemVPcHRpb25zLndlbGxLbm93blNlcnZpY2VVcmlzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEF1dGhvcml0eSgpOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hdXRob3JpdHk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNBdXRoZW50aWNhdGVkKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNBZG1pbigpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNBZG1pbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJc0RldmVsb3BlcigpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNEZXZlbG9wZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNNYW5hZ2VyKCk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc01hbmFnZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZXNzVG9rZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VXNlcigpOiBCZWhhdmlvclN1YmplY3Q8SVVzZXI+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9naW4oKSB7XHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5pbml0SW1wbGljaXRGbG93KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KCkge1xyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UubG9nT3V0KGZhbHNlKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcclxuXHJcbiAgICBjb25zb2xlLmRlYnVnKFwiQXV0aG9yaXplU2VydmljZTo6aW5pdGlhbGl6ZTo6c3RhcnRlZFwiKTtcclxuXHJcbiAgICBpZiAoYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5pc0luaXRpYWxpemluZykpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5pc0luaXRpYWxpemVkKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzSW5pdGlhbGl6aW5nLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgY29uc3QgY29uZmlnOiBBdXRoQ29uZmlnID0ge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdjb2RlJyxcclxuICAgICAgaXNzdWVyOiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMuaXNzdWVyLFxyXG4gICAgICByZWRpcmVjdFVyaTogdGhpcy5hdXRob3JpemVPcHRpb25zLnJlZGlyZWN0VXJpLFxyXG4gICAgICBwb3N0TG9nb3V0UmVkaXJlY3RVcmk6IHRoaXMuYXV0aG9yaXplT3B0aW9ucy5wb3N0TG9nb3V0UmVkaXJlY3RVcmksXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMuY2xpZW50SWQsXHJcbiAgICAgIHNjb3BlOiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMuc2NvcGUsXHJcbiAgICAgIHNob3dEZWJ1Z0luZm9ybWF0aW9uOiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMuc2hvd0RlYnVnSW5mb3JtYXRpb24sXHJcbiAgICAgIHNlc3Npb25DaGVja3NFbmFibGVkOiB0aGlzLmF1dGhvcml6ZU9wdGlvbnMuc2Vzc2lvbkNoZWNrc0VuYWJsZWRcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vYXV0aFNlcnZpY2UuY29uZmlndXJlKGNvbmZpZyk7XHJcbiAgICB0aGlzLm9hdXRoU2VydmljZS5zZXRTdG9yYWdlKGxvY2FsU3RvcmFnZSk7XHJcbiAgICBhd2FpdCB0aGlzLm9hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnRBbmRUcnlMb2dpbigpO1xyXG5cclxuICAgIHRoaXMub2F1dGhTZXJ2aWNlLnNldHVwQXV0b21hdGljU2lsZW50UmVmcmVzaCgpO1xyXG5cclxuICAgIGlmICh0aGlzLm9hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgdGhpcy5sb2FkVXNlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0aG9yaXR5Lm5leHQodGhpcy5hdXRob3JpemVPcHRpb25zLmlzc3Vlcik7XHJcbiAgICB0aGlzLmlzSW5pdGlhbGl6aW5nLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5pc0luaXRpYWxpemVkLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgY29uc29sZS5kZWJ1ZyhcIkF1dGhvcml6ZVNlcnZpY2U6OmluaXRpYWxpemU6OmRvbmVcIik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRVc2VyKCkge1xyXG4gICAgY29uc3QgY2xhaW1zID0gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRlbnRpdHlDbGFpbXMoKTtcclxuICAgIGlmICghY2xhaW1zKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJjbGFpbXMgd2hlcmUgbnVsbCB3aGVuIGxvYWRpbmcgaWRlbnRpdHkgY2xhaW1zXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXNlciA9IDxJVXNlcj5jbGFpbXM7XHJcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XHJcbiAgICB0aGlzLnVzZXIubmV4dCh1c2VyKTtcclxuICAgIHRoaXMuYWNjZXNzVG9rZW4ubmV4dChhY2Nlc3NUb2tlbik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -26,9 +26,9 @@ export class LoginMenuComponent {
|
|
|
26
26
|
register() {
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
LoginMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
30
|
-
LoginMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
29
|
+
LoginMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LoginMenuComponent, deps: [{ token: i1.AuthorizeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
LoginMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: LoginMenuComponent, selector: "app-login-menu", ngImport: i0, template: "<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", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LoginMenuComponent, decorators: [{
|
|
32
32
|
type: Component,
|
|
33
33
|
args: [{ selector: 'app-login-menu', template: "<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" }]
|
|
34
34
|
}], ctorParameters: function () { return [{ type: i1.AuthorizeService }]; } });
|
|
@@ -22,13 +22,13 @@ export class SharedAuthModule {
|
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
SharedAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
26
|
-
SharedAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
25
|
+
SharedAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
26
|
+
SharedAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, declarations: [LoginMenuComponent], imports: [CommonModule,
|
|
27
27
|
HttpClientModule, i1.OAuthModule], exports: [LoginMenuComponent] });
|
|
28
|
-
SharedAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
28
|
+
SharedAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, imports: [CommonModule,
|
|
29
29
|
HttpClientModule,
|
|
30
30
|
OAuthModule.forRoot()] });
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, decorators: [{
|
|
32
32
|
type: NgModule,
|
|
33
33
|
args: [{
|
|
34
34
|
declarations: [LoginMenuComponent],
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
import { __awaiter } from 'tslib';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
3
|
import { Injectable, Inject, Component, NgModule } from '@angular/core';
|
|
3
4
|
import { BehaviorSubject, firstValueFrom } from 'rxjs';
|
|
4
|
-
import {
|
|
5
|
+
import { filter, map } from 'rxjs/operators';
|
|
5
6
|
import * as i1 from 'angular-oauth2-oidc';
|
|
6
7
|
import { OAuthModule } from 'angular-oauth2-oidc';
|
|
7
8
|
import * as i2 from '@angular/common';
|
|
8
9
|
import { CommonModule } from '@angular/common';
|
|
9
10
|
import { HttpClientModule } from '@angular/common/http';
|
|
10
|
-
import { __awaiter } from 'tslib';
|
|
11
11
|
import * as i2$1 from '@angular/router';
|
|
12
12
|
|
|
13
13
|
class AuthorizeOptions {
|
|
@@ -23,6 +23,8 @@ class AuthorizeService {
|
|
|
23
23
|
this.authority = new BehaviorSubject(null);
|
|
24
24
|
this.accessToken = new BehaviorSubject(null);
|
|
25
25
|
this.user = new BehaviorSubject(null);
|
|
26
|
+
this.isInitialized = new BehaviorSubject(false);
|
|
27
|
+
this.isInitializing = new BehaviorSubject(false);
|
|
26
28
|
console.debug("AuthorizeService::created");
|
|
27
29
|
this.getUser().subscribe(s => {
|
|
28
30
|
this.isAuthenticated.next(!!s);
|
|
@@ -30,6 +32,27 @@ class AuthorizeService {
|
|
|
30
32
|
this.isDeveloper.next(!!s && (s.role.includes("Developers")));
|
|
31
33
|
this.isManager.next(!!s && s.role.includes("Managers"));
|
|
32
34
|
});
|
|
35
|
+
this.oauthService.events.subscribe(e => {
|
|
36
|
+
// tslint:disable-next-line:no-console
|
|
37
|
+
console.debug('oauth/oidc event', e);
|
|
38
|
+
});
|
|
39
|
+
this.oauthService.events
|
|
40
|
+
.pipe(filter(e => e.type === 'session_terminated'))
|
|
41
|
+
.subscribe(_ => {
|
|
42
|
+
// tslint:disable-next-line:no-console
|
|
43
|
+
console.debug('Your session has been terminated!');
|
|
44
|
+
});
|
|
45
|
+
this.oauthService.events
|
|
46
|
+
.pipe(filter(e => e.type === 'token_received'))
|
|
47
|
+
.subscribe(_ => {
|
|
48
|
+
this.loadUser();
|
|
49
|
+
});
|
|
50
|
+
this.oauthService.events
|
|
51
|
+
.pipe(filter(e => e.type === 'logout'))
|
|
52
|
+
.subscribe(_ => {
|
|
53
|
+
this.accessToken.next(null);
|
|
54
|
+
this.user.next(null);
|
|
55
|
+
});
|
|
33
56
|
}
|
|
34
57
|
getRoles() {
|
|
35
58
|
return this.getUser().pipe(map(u => u.role));
|
|
@@ -65,47 +88,37 @@ class AuthorizeService {
|
|
|
65
88
|
this.oauthService.logOut(false);
|
|
66
89
|
}
|
|
67
90
|
initialize() {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
.
|
|
89
|
-
.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
.
|
|
95
|
-
.
|
|
96
|
-
this.
|
|
97
|
-
|
|
98
|
-
this.oauthService.events
|
|
99
|
-
.pipe(filter(e => e.type === 'logout'))
|
|
100
|
-
.subscribe(_ => {
|
|
101
|
-
this.accessToken.next(null);
|
|
102
|
-
this.user.next(null);
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
console.debug("AuthorizeService::initialize::started");
|
|
93
|
+
if (yield firstValueFrom(this.isInitializing)) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (yield firstValueFrom(this.isInitialized)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.isInitializing.next(true);
|
|
100
|
+
const config = {
|
|
101
|
+
responseType: 'code',
|
|
102
|
+
issuer: this.authorizeOptions.issuer,
|
|
103
|
+
redirectUri: this.authorizeOptions.redirectUri,
|
|
104
|
+
postLogoutRedirectUri: this.authorizeOptions.postLogoutRedirectUri,
|
|
105
|
+
clientId: this.authorizeOptions.clientId,
|
|
106
|
+
scope: this.authorizeOptions.scope,
|
|
107
|
+
showDebugInformation: this.authorizeOptions.showDebugInformation,
|
|
108
|
+
sessionChecksEnabled: this.authorizeOptions.sessionChecksEnabled
|
|
109
|
+
};
|
|
110
|
+
this.oauthService.configure(config);
|
|
111
|
+
this.oauthService.setStorage(localStorage);
|
|
112
|
+
yield this.oauthService.loadDiscoveryDocumentAndTryLogin();
|
|
113
|
+
this.oauthService.setupAutomaticSilentRefresh();
|
|
114
|
+
if (this.oauthService.hasValidAccessToken()) {
|
|
115
|
+
this.loadUser();
|
|
116
|
+
}
|
|
117
|
+
this.authority.next(this.authorizeOptions.issuer);
|
|
118
|
+
this.isInitializing.next(false);
|
|
119
|
+
this.isInitialized.next(true);
|
|
120
|
+
console.debug("AuthorizeService::initialize::done");
|
|
103
121
|
});
|
|
104
|
-
if (this.oauthService.hasValidAccessToken()) {
|
|
105
|
-
this.loadUser();
|
|
106
|
-
}
|
|
107
|
-
this.authority.next(this.authorizeOptions.issuer);
|
|
108
|
-
console.debug("AuthorizeService::initialize::done");
|
|
109
122
|
}
|
|
110
123
|
loadUser() {
|
|
111
124
|
const claims = this.oauthService.getIdentityClaims();
|
|
@@ -119,9 +132,9 @@ class AuthorizeService {
|
|
|
119
132
|
this.accessToken.next(accessToken);
|
|
120
133
|
}
|
|
121
134
|
}
|
|
122
|
-
AuthorizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
123
|
-
AuthorizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
124
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
135
|
+
AuthorizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeService, deps: [{ token: AuthorizeOptions }, { token: i1.OAuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
136
|
+
AuthorizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeService });
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeService, decorators: [{
|
|
125
138
|
type: Injectable
|
|
126
139
|
}], ctorParameters: function () {
|
|
127
140
|
return [{ type: AuthorizeOptions, decorators: [{
|
|
@@ -153,16 +166,16 @@ class LoginMenuComponent {
|
|
|
153
166
|
register() {
|
|
154
167
|
}
|
|
155
168
|
}
|
|
156
|
-
LoginMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
157
|
-
LoginMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
158
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
169
|
+
LoginMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LoginMenuComponent, deps: [{ token: AuthorizeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
170
|
+
LoginMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: LoginMenuComponent, selector: "app-login-menu", ngImport: i0, template: "<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", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
|
|
171
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LoginMenuComponent, decorators: [{
|
|
159
172
|
type: Component,
|
|
160
173
|
args: [{ selector: 'app-login-menu', template: "<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" }]
|
|
161
174
|
}], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
|
|
162
175
|
|
|
163
176
|
class AuthorizeGuard {
|
|
164
|
-
constructor(
|
|
165
|
-
this.
|
|
177
|
+
constructor(authorizeService, router) {
|
|
178
|
+
this.authorizeService = authorizeService;
|
|
166
179
|
this.router = router;
|
|
167
180
|
}
|
|
168
181
|
canActivate(next, state) {
|
|
@@ -180,9 +193,10 @@ class AuthorizeGuard {
|
|
|
180
193
|
}
|
|
181
194
|
handleAuthorization(route, url) {
|
|
182
195
|
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
-
|
|
196
|
+
yield this.authorizeService.initialize();
|
|
197
|
+
const isAuthenticated = yield firstValueFrom(this.authorizeService.getIsAuthenticated());
|
|
184
198
|
if (isAuthenticated) {
|
|
185
|
-
const userRoles = yield firstValueFrom(this.
|
|
199
|
+
const userRoles = yield firstValueFrom(this.authorizeService.getRoles());
|
|
186
200
|
if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {
|
|
187
201
|
this.router.navigate(['']);
|
|
188
202
|
return false;
|
|
@@ -190,15 +204,15 @@ class AuthorizeGuard {
|
|
|
190
204
|
return true;
|
|
191
205
|
}
|
|
192
206
|
else {
|
|
193
|
-
this.
|
|
207
|
+
this.authorizeService.login();
|
|
194
208
|
}
|
|
195
209
|
return false;
|
|
196
210
|
});
|
|
197
211
|
}
|
|
198
212
|
}
|
|
199
|
-
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
200
|
-
AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
201
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
213
|
+
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeGuard, deps: [{ token: AuthorizeService }, { token: i2$1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
214
|
+
AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeGuard });
|
|
215
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeGuard, decorators: [{
|
|
202
216
|
type: Injectable
|
|
203
217
|
}], ctorParameters: function () { return [{ type: AuthorizeService }, { type: i2$1.Router }]; } });
|
|
204
218
|
|
|
@@ -217,13 +231,13 @@ class SharedAuthModule {
|
|
|
217
231
|
};
|
|
218
232
|
}
|
|
219
233
|
}
|
|
220
|
-
SharedAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
221
|
-
SharedAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
234
|
+
SharedAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
235
|
+
SharedAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, declarations: [LoginMenuComponent], imports: [CommonModule,
|
|
222
236
|
HttpClientModule, i1.OAuthModule], exports: [LoginMenuComponent] });
|
|
223
|
-
SharedAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
237
|
+
SharedAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, imports: [CommonModule,
|
|
224
238
|
HttpClientModule,
|
|
225
239
|
OAuthModule.forRoot()] });
|
|
226
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, decorators: [{
|
|
227
241
|
type: NgModule,
|
|
228
242
|
args: [{
|
|
229
243
|
declarations: [LoginMenuComponent],
|
|
@@ -288,9 +302,9 @@ class AuthorizeInterceptor {
|
|
|
288
302
|
return false;
|
|
289
303
|
}
|
|
290
304
|
}
|
|
291
|
-
AuthorizeInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
292
|
-
AuthorizeInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
293
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
305
|
+
AuthorizeInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeInterceptor, deps: [{ token: AuthorizeService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
306
|
+
AuthorizeInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeInterceptor });
|
|
307
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeInterceptor, decorators: [{
|
|
294
308
|
type: Injectable
|
|
295
309
|
}], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
|
|
296
310
|
|
|
@@ -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, Observable} from 'rxjs';\r\nimport {filter, map} from 'rxjs/operators';\r\nimport {AuthConfig, OAuthService} from \"angular-oauth2-oidc\";\r\n\r\nexport interface IUser {\r\n name: string;\r\n role: string[];\r\n}\r\n\r\nexport class AuthorizeOptions {\r\n wellKnownServiceUris: string[];\r\n // Url of the Identity Provider\r\n issuer: string;\r\n // URL of the SPA to redirect the user to after login\r\n redirectUri: string;\r\n postLogoutRedirectUri: string;\r\n // The SPA's id. The SPA is registered with this id at the auth-server\r\n clientId: string;\r\n // set the scope for the permissions the client should request\r\n // The first three are defined by OIDC. The 4th is a use case-specific one\r\n scope: string;\r\n showDebugInformation: boolean;\r\n sessionChecksEnabled: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthorizeService {\r\n private isAuthenticated: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isAdmin: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isDeveloper: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isManager: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private authority: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private accessToken: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private user: BehaviorSubject<IUser> = new BehaviorSubject(null);\r\n\r\n constructor(@Inject(AuthorizeOptions) private authorizeOptions: AuthorizeOptions, private oauthService: OAuthService) {\r\n console.debug(\"AuthorizeService::created\");\r\n this.getUser().subscribe(s => {\r\n this.isAuthenticated.next(!!s);\r\n this.isAdmin.next(!!s && (s.role.includes(\"Administrators\")));\r\n this.isDeveloper.next(!!s && (s.role.includes(\"Developers\")));\r\n this.isManager.next(!!s && s.role.includes(\"Managers\"));\r\n });\r\n }\r\n\r\n public getRoles(): Observable<Array<string>>{\r\n return this.getUser().pipe(\r\n map(u=> u.role)\r\n );\r\n }\r\n\r\n public getServiceUris(): Array<string> {\r\n return this.authorizeOptions.wellKnownServiceUris;\r\n }\r\n\r\n public getAuthority(): BehaviorSubject<string> {\r\n return this.authority;\r\n }\r\n\r\n public getIsAuthenticated(): BehaviorSubject<boolean> {\r\n return this.isAuthenticated;\r\n }\r\n\r\n public getIsAdmin(): BehaviorSubject<boolean> {\r\n return this.isAdmin;\r\n }\r\n\r\n public getIsDeveloper(): BehaviorSubject<boolean> {\r\n return this.isDeveloper;\r\n }\r\n\r\n public getIsManager(): BehaviorSubject<boolean> {\r\n return this.isManager;\r\n }\r\n\r\n public getAccessToken(): BehaviorSubject<string> {\r\n return this.accessToken;\r\n }\r\n\r\n public getUser(): BehaviorSubject<IUser> {\r\n return this.user;\r\n }\r\n\r\n public login() {\r\n this.oauthService.initImplicitFlow();\r\n }\r\n\r\n public logout() {\r\n this.oauthService.logOut(false);\r\n }\r\n\r\n\r\n public initialize() {\r\n\r\n console.debug(\"AuthorizeService::initialize::started\");\r\n\r\n const config: AuthConfig = {\r\n responseType: 'code',\r\n issuer: this.authorizeOptions.issuer,\r\n redirectUri: this.authorizeOptions.redirectUri,\r\n postLogoutRedirectUri: this.authorizeOptions.postLogoutRedirectUri,\r\n clientId: this.authorizeOptions.clientId,\r\n scope: this.authorizeOptions.scope,\r\n showDebugInformation: this.authorizeOptions.showDebugInformation,\r\n sessionChecksEnabled: this.authorizeOptions.sessionChecksEnabled\r\n };\r\n\r\n this.oauthService.configure(config);\r\n this.oauthService.setStorage(localStorage);\r\n this.oauthService.loadDiscoveryDocumentAndTryLogin();\r\n\r\n this.oauthService.setupAutomaticSilentRefresh();\r\n\r\n this.oauthService.events.subscribe(e => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('oauth/oidc event', e);\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'session_terminated'))\r\n .subscribe(_ => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('Your session has been terminated!');\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'token_received'))\r\n .subscribe(_ => {\r\n this.loadUser();\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'logout'))\r\n .subscribe(_ => {\r\n this.accessToken.next(null);\r\n this.user.next(null);\r\n });\r\n\r\n if (this.oauthService.hasValidAccessToken()) {\r\n this.loadUser();\r\n }\r\n\r\n this.authority.next(this.authorizeOptions.issuer);\r\n\r\n console.debug(\"AuthorizeService::initialize::done\");\r\n\r\n }\r\n\r\n private loadUser() {\r\n const claims = this.oauthService.getIdentityClaims();\r\n if (!claims) {\r\n console.error(\"claims where null when loading identity claims\");\r\n return;\r\n }\r\n\r\n const user = <IUser>claims;\r\n const accessToken = this.oauthService.getAccessToken();\r\n this.user.next(user);\r\n this.accessToken.next(accessToken);\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {AuthorizeService} from '../authorize.service';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login-menu',\r\n templateUrl: './login-menu.component.html',\r\n styleUrls: ['./login-menu.component.css']\r\n})\r\nexport class LoginMenuComponent implements OnInit {\r\n public isAuthenticated: BehaviorSubject<boolean>;\r\n public userName: Observable<string>;\r\n public isAdmin: Observable<boolean>;\r\n\r\n constructor(private authorizeService: AuthorizeService) {\r\n }\r\n\r\n ngOnInit() {\r\n const isIFrame = window.self !== window.top;\r\n\r\n console.log(\"app-login-menu::created\");\r\n\r\n this.isAuthenticated = this.authorizeService.getIsAuthenticated();\r\n this.userName = this.authorizeService.getUser().pipe(map(u => u && u.name));\r\n this.isAdmin = this.authorizeService.getIsAdmin();\r\n\r\n this.isAuthenticated.subscribe(x => {\r\n\r\n console.log(`isAuthenticated changed to ${x} (iframe ${isIFrame})`);\r\n });\r\n }\r\n\r\n public login() {\r\n this.authorizeService.login();\r\n }\r\n\r\n public logout() {\r\n this.authorizeService.logout();\r\n }\r\n\r\n public register() {\r\n\r\n }\r\n}\r\n","<ul *ngIf=\"isAuthenticated | async\" class=\"navbar-nav\">\r\n <li class=\"nav-item dropdown\">\r\n <a aria-expanded=\"false\" aria-haspopup=\"true\" class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"\r\n id=\"navbarDropdownLogin\" role=\"button\">\r\n {{ userName | async }} <b class=\"caret\"></b>\r\n </a>\r\n <div aria-labelledby=\"navbarDropdown\" class=\"dropdown-menu\">\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Grants\">Client Application Access</a>-->\r\n <!--<a class=\"dropdown-item\" [routerLink]='[\"/authentication/profile\"]' title=\"Manage\">Manage</a>-->\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Diagnostics\">Diagnostics</a>-->\r\n <div class=\"dropdown-divider\"></div>\r\n <a (click)='logout()' class=\"dropdown-item\" routerLink=\"\" title=\"Logout\">Logout</a>\r\n </div>\r\n </li>\r\n</ul>\r\n<ul *ngIf=\"!(isAuthenticated | async)\" class=\"navbar-nav\">\r\n <li class=\"nav-item\">\r\n <a (click)='register()' class=\"nav-link\" routerLink=\"\">Register</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a (click)='login()' class=\"nav-link\" routerLink=\"\">Login</a>\r\n </li>\r\n</ul>\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivate,\r\n CanActivateChild,\r\n CanDeactivate,\r\n CanLoad, Route,\r\n Router,\r\n RouterStateSnapshot, UrlSegment,\r\n UrlTree\r\n} from '@angular/router';\r\nimport {AuthorizeService} from './authorize.service';\r\nimport {firstValueFrom, lastValueFrom, Observable} from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate, CanActivateChild, CanDeactivate<unknown>, CanLoad {\r\n constructor(private authorize: AuthorizeService, private router: Router) {\r\n }\r\n\r\n canActivate(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n let url: string = state.url;\r\n return this.handleAuthorization(next, url);\r\n }\r\n\r\n canActivateChild(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return this.canActivate(next, state);\r\n }\r\n\r\n canDeactivate(\r\n component: unknown,\r\n currentRoute: ActivatedRouteSnapshot,\r\n currentState: RouterStateSnapshot,\r\n nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return true;\r\n }\r\n\r\n canLoad(\r\n route: Route,\r\n segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {\r\n return true;\r\n }\r\n\r\n private async handleAuthorization(route: ActivatedRouteSnapshot, url: any): Promise<boolean> {\r\n const isAuthenticated = await firstValueFrom(this.authorize.getIsAuthenticated());\r\n if (isAuthenticated) {\r\n const userRoles = await firstValueFrom(this.authorize.getRoles());\r\n if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {\r\n this.router.navigate(['']);\r\n return false;\r\n }\r\n return true;\r\n } else {\r\n this.authorize.login();\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {LoginMenuComponent} from \"./login-menu/login-menu.component\";\r\nimport {AuthorizeOptions, AuthorizeService} from \"./authorize.service\";\r\nimport {OAuthModule} from \"angular-oauth2-oidc\";\r\nimport {AuthorizeGuard} from \"./authorize.guard\";\r\n\r\n@NgModule({\r\n declarations: [LoginMenuComponent],\r\n exports: [LoginMenuComponent],\r\n providers: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n OAuthModule.forRoot()\r\n ]\r\n})\r\nexport class SharedAuthModule {\r\n static forRoot(authorizeOptions: AuthorizeOptions): ModuleWithProviders<SharedAuthModule> {\r\n return {\r\n ngModule: SharedAuthModule,\r\n providers: [\r\n {\r\n provide: AuthorizeOptions,\r\n useValue: authorizeOptions\r\n },\r\n AuthorizeService,\r\n AuthorizeGuard\r\n ]\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {AuthorizeService} from './authorize.service';\r\n\r\n@Injectable()\r\nexport class AuthorizeInterceptor implements HttpInterceptor {\r\n\r\n accessToken: string;\r\n\r\n constructor(private authorize: AuthorizeService) {\r\n\r\n authorize.getAccessToken().subscribe(value => this.accessToken = value);\r\n\r\n }\r\n\r\n private static isSameOriginUrl(req: any) {\r\n // It's an absolute url with the same origin.\r\n if (req.url.startsWith(`${window.location.origin}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a protocol relative url with the same origin.\r\n // For example: //www.example.com/api/Products\r\n if (req.url.startsWith(`//${window.location.host}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a relative url like /api/Products\r\n if (/^\\/[^\\/].*/.test(req.url)) {\r\n return true;\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n\r\n // Checks if there is an access_token available in the authorize service\r\n // and adds it to the request in case it's targeted at the same origin as the\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return this.processRequestWithToken(this.accessToken, req, next);\r\n }\r\n\r\n // single page application.\r\n private processRequestWithToken(token: string, req: HttpRequest<any>, next: HttpHandler) {\r\n if (!!token && (AuthorizeInterceptor.isSameOriginUrl(req) || this.isKnownServiceUri(req))) {\r\n req = req.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n\r\n private isKnownServiceUri(req: any) {\r\n\r\n const serviceUris = this.authorize.getServiceUris();\r\n\r\n for (let i = 0; i < serviceUris.length; i++) {\r\n if (req.url.startsWith(`${serviceUris[i]}`)) {\r\n return true;\r\n }\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of shared-auth\r\n */\r\n\r\nexport * from './lib/authorize.service';\r\nexport * from './lib/login-menu/login-menu.component';\r\nexport * from './lib/shared-auth.module';\r\nexport * from './lib/authorize.interceptor';\r\nexport * from './lib/authorize.guard';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthorizeService","i2"],"mappings":"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"}
|
|
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, firstValueFrom, 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 private isInitialized : BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isInitializing : BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n\r\n constructor(@Inject(AuthorizeOptions) private authorizeOptions: AuthorizeOptions, private oauthService: OAuthService) {\r\n console.debug(\"AuthorizeService::created\");\r\n\r\n this.getUser().subscribe(s => {\r\n this.isAuthenticated.next(!!s);\r\n this.isAdmin.next(!!s && (s.role.includes(\"Administrators\")));\r\n this.isDeveloper.next(!!s && (s.role.includes(\"Developers\")));\r\n this.isManager.next(!!s && s.role.includes(\"Managers\"));\r\n });\r\n\r\n 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 }\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 async initialize() {\r\n\r\n console.debug(\"AuthorizeService::initialize::started\");\r\n\r\n if (await firstValueFrom(this.isInitializing)) {\r\n return\r\n }\r\n if (await firstValueFrom(this.isInitialized)) {\r\n return;\r\n }\r\n this.isInitializing.next(true);\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 await this.oauthService.loadDiscoveryDocumentAndTryLogin();\r\n\r\n this.oauthService.setupAutomaticSilentRefresh();\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 this.isInitializing.next(false);\r\n this.isInitialized.next(true);\r\n\r\n console.debug(\"AuthorizeService::initialize::done\");\r\n }\r\n\r\n private loadUser() {\r\n const claims = this.oauthService.getIdentityClaims();\r\n if (!claims) {\r\n console.error(\"claims where null when loading identity claims\");\r\n return;\r\n }\r\n\r\n const user = <IUser>claims;\r\n const accessToken = this.oauthService.getAccessToken();\r\n this.user.next(user);\r\n this.accessToken.next(accessToken);\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {AuthorizeService} from '../authorize.service';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login-menu',\r\n templateUrl: './login-menu.component.html',\r\n styleUrls: ['./login-menu.component.css']\r\n})\r\nexport class LoginMenuComponent implements OnInit {\r\n public isAuthenticated: BehaviorSubject<boolean>;\r\n public userName: Observable<string>;\r\n public isAdmin: Observable<boolean>;\r\n\r\n constructor(private authorizeService: AuthorizeService) {\r\n }\r\n\r\n ngOnInit() {\r\n const isIFrame = window.self !== window.top;\r\n\r\n console.log(\"app-login-menu::created\");\r\n\r\n this.isAuthenticated = this.authorizeService.getIsAuthenticated();\r\n this.userName = this.authorizeService.getUser().pipe(map(u => u && u.name));\r\n this.isAdmin = this.authorizeService.getIsAdmin();\r\n\r\n this.isAuthenticated.subscribe(x => {\r\n\r\n console.log(`isAuthenticated changed to ${x} (iframe ${isIFrame})`);\r\n });\r\n }\r\n\r\n public login() {\r\n this.authorizeService.login();\r\n }\r\n\r\n public logout() {\r\n this.authorizeService.logout();\r\n }\r\n\r\n public register() {\r\n\r\n }\r\n}\r\n","<ul *ngIf=\"isAuthenticated | async\" class=\"navbar-nav\">\r\n <li class=\"nav-item dropdown\">\r\n <a aria-expanded=\"false\" aria-haspopup=\"true\" class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"\r\n id=\"navbarDropdownLogin\" role=\"button\">\r\n {{ userName | async }} <b class=\"caret\"></b>\r\n </a>\r\n <div aria-labelledby=\"navbarDropdown\" class=\"dropdown-menu\">\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Grants\">Client Application Access</a>-->\r\n <!--<a class=\"dropdown-item\" [routerLink]='[\"/authentication/profile\"]' title=\"Manage\">Manage</a>-->\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Diagnostics\">Diagnostics</a>-->\r\n <div class=\"dropdown-divider\"></div>\r\n <a (click)='logout()' class=\"dropdown-item\" routerLink=\"\" title=\"Logout\">Logout</a>\r\n </div>\r\n </li>\r\n</ul>\r\n<ul *ngIf=\"!(isAuthenticated | async)\" class=\"navbar-nav\">\r\n <li class=\"nav-item\">\r\n <a (click)='register()' class=\"nav-link\" routerLink=\"\">Register</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a (click)='login()' class=\"nav-link\" routerLink=\"\">Login</a>\r\n </li>\r\n</ul>\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivate,\r\n CanActivateChild,\r\n CanDeactivate,\r\n CanLoad, Route,\r\n Router,\r\n RouterStateSnapshot, UrlSegment,\r\n UrlTree\r\n} from '@angular/router';\r\nimport {AuthorizeService} from './authorize.service';\r\nimport {firstValueFrom, lastValueFrom, Observable} from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate, CanActivateChild, CanDeactivate<unknown>, CanLoad {\r\n constructor(private authorizeService: AuthorizeService, private router: Router) {\r\n }\r\n\r\n canActivate(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n let url: string = state.url;\r\n return this.handleAuthorization(next, url);\r\n }\r\n\r\n canActivateChild(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return this.canActivate(next, state);\r\n }\r\n\r\n canDeactivate(\r\n component: unknown,\r\n currentRoute: ActivatedRouteSnapshot,\r\n currentState: RouterStateSnapshot,\r\n nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return true;\r\n }\r\n\r\n canLoad(\r\n route: Route,\r\n segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {\r\n return true;\r\n }\r\n\r\n private async handleAuthorization(route: ActivatedRouteSnapshot, url: any): Promise<boolean> {\r\n\r\n await this.authorizeService.initialize()\r\n\r\n const isAuthenticated = await firstValueFrom(this.authorizeService.getIsAuthenticated());\r\n if (isAuthenticated) {\r\n const userRoles = await firstValueFrom(this.authorizeService.getRoles());\r\n if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {\r\n this.router.navigate(['']);\r\n return false;\r\n }\r\n return true;\r\n } else {\r\n this.authorizeService.login();\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {LoginMenuComponent} from \"./login-menu/login-menu.component\";\r\nimport {AuthorizeOptions, AuthorizeService} from \"./authorize.service\";\r\nimport {OAuthModule} from \"angular-oauth2-oidc\";\r\nimport {AuthorizeGuard} from \"./authorize.guard\";\r\n\r\n@NgModule({\r\n declarations: [LoginMenuComponent],\r\n exports: [LoginMenuComponent],\r\n providers: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n OAuthModule.forRoot()\r\n ]\r\n})\r\nexport class SharedAuthModule {\r\n static forRoot(authorizeOptions: AuthorizeOptions): ModuleWithProviders<SharedAuthModule> {\r\n return {\r\n ngModule: SharedAuthModule,\r\n providers: [\r\n {\r\n provide: AuthorizeOptions,\r\n useValue: authorizeOptions\r\n },\r\n AuthorizeService,\r\n AuthorizeGuard\r\n ]\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {AuthorizeService} from './authorize.service';\r\n\r\n@Injectable()\r\nexport class AuthorizeInterceptor implements HttpInterceptor {\r\n\r\n accessToken: string;\r\n\r\n constructor(private authorize: AuthorizeService) {\r\n\r\n authorize.getAccessToken().subscribe(value => this.accessToken = value);\r\n\r\n }\r\n\r\n private static isSameOriginUrl(req: any) {\r\n // It's an absolute url with the same origin.\r\n if (req.url.startsWith(`${window.location.origin}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a protocol relative url with the same origin.\r\n // For example: //www.example.com/api/Products\r\n if (req.url.startsWith(`//${window.location.host}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a relative url like /api/Products\r\n if (/^\\/[^\\/].*/.test(req.url)) {\r\n return true;\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n\r\n // Checks if there is an access_token available in the authorize service\r\n // and adds it to the request in case it's targeted at the same origin as the\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return this.processRequestWithToken(this.accessToken, req, next);\r\n }\r\n\r\n // single page application.\r\n private processRequestWithToken(token: string, req: HttpRequest<any>, next: HttpHandler) {\r\n if (!!token && (AuthorizeInterceptor.isSameOriginUrl(req) || this.isKnownServiceUri(req))) {\r\n req = req.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n\r\n private isKnownServiceUri(req: any) {\r\n\r\n const serviceUris = this.authorize.getServiceUris();\r\n\r\n for (let i = 0; i < serviceUris.length; i++) {\r\n if (req.url.startsWith(`${serviceUris[i]}`)) {\r\n return true;\r\n }\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of shared-auth\r\n */\r\n\r\nexport * from './lib/authorize.service';\r\nexport * from './lib/login-menu/login-menu.component';\r\nexport * from './lib/shared-auth.module';\r\nexport * from './lib/authorize.interceptor';\r\nexport * from './lib/authorize.guard';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthorizeService","i2"],"mappings":";;;;;;;;;;;;MAUa,gBAAgB,CAAA;AAc5B,CAAA;MAGY,gBAAgB,CAAA;IAW3B,WAA8C,CAAA,gBAAkC,EAAU,YAA0B,EAAA;AAAtE,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAAU,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAV5G,IAAA,CAAA,eAAe,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACvE,IAAA,CAAA,OAAO,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAA,CAAA,WAAW,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACnE,IAAA,CAAA,SAAS,GAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACjE,IAAA,CAAA,SAAS,GAA4B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAA,CAAA,WAAW,GAA4B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACjE,IAAA,CAAA,IAAI,GAA2B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACzD,IAAA,CAAA,aAAa,GAA8B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACtE,IAAA,CAAA,cAAc,GAA8B,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AAG7E,QAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAE3C,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAG;YAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAG;;AAErC,YAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC;aAClD,SAAS,CAAC,CAAC,IAAG;;AAEb,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,YAAY,CAAC,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;aAC9C,SAAS,CAAC,CAAC,IAAG;YACb,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,YAAY,CAAC,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;aACtC,SAAS,CAAC,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;KAEN;IAEM,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CACxB,GAAG,CAAC,CAAC,IAAG,CAAC,CAAC,IAAI,CAAC,CAChB,CAAC;KACH;IAEM,cAAc,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;KACnD;IAEM,YAAY,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAEM,kBAAkB,GAAA;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAEM,UAAU,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAEM,cAAc,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAEM,YAAY,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAEM,cAAc,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAEM,OAAO,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;KACtC;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACjC;IAGY,UAAU,GAAA;;AAErB,YAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAEvD,YAAA,IAAI,MAAM,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;gBAC7C,OAAM;AACP,aAAA;AACD,YAAA,IAAI,MAAM,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;gBAC5C,OAAO;AACR,aAAA;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE/B,YAAA,MAAM,MAAM,GAAe;AACzB,gBAAA,YAAY,EAAE,MAAM;AACpB,gBAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;AACpC,gBAAA,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW;AAC9C,gBAAA,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,qBAAqB;AAClE,gBAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ;AACxC,gBAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK;AAClC,gBAAA,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB;AAChE,gBAAA,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB;aACjE,CAAC;AAEF,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAC3C,YAAA,MAAM,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE,CAAC;AAE3D,YAAA,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,CAAC;AAEhD,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,EAAE;gBAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjB,aAAA;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE9B,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;SACrD,CAAA,CAAA;AAAA,KAAA;IAEO,QAAQ,GAAA;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO;AACR,SAAA;QAED,MAAM,IAAI,GAAU,MAAM,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACpC;;AAlJU,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,kBAWP,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHAXzB,gBAAgB,EAAA,CAAA,CAAA;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;;;8BAYI,MAAM;+BAAC,gBAAgB,CAAA;;;;MC5BzB,kBAAkB,CAAA;AAK7B,IAAA,WAAA,CAAoB,gBAAkC,EAAA;AAAlC,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;KACrD;IAED,QAAQ,GAAA;QACN,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC;AAE5C,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEvC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;AAElD,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAG;YAEjC,OAAO,CAAC,GAAG,CAAC,CAAA,2BAAA,EAA8B,CAAC,CAAY,SAAA,EAAA,QAAQ,CAAG,CAAA,CAAA,CAAC,CAAC;AACtE,SAAC,CAAC,CAAC;KACJ;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;KAC/B;IAEM,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;KAChC;IAEM,QAAQ,GAAA;KAEd;;+GAjCU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,sDCV/B,oyCAuBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDba,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,gBAAgB,EAAA,QAAA,EAAA,oyCAAA,EAAA,CAAA;;;MESf,cAAc,CAAA;IACzB,WAAoB,CAAA,gBAAkC,EAAU,MAAc,EAAA;AAA1D,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAAU,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAC7E;IAED,WAAW,CACT,IAA4B,EAC5B,KAA0B,EAAA;AAC1B,QAAA,IAAI,GAAG,GAAW,KAAK,CAAC,GAAG,CAAC;QAC5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC5C;IAED,gBAAgB,CACd,IAA4B,EAC5B,KAA0B,EAAA;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACtC;AAED,IAAA,aAAa,CACX,SAAkB,EAClB,YAAoC,EACpC,YAAiC,EACjC,SAA+B,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CACL,KAAY,EACZ,QAAsB,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC;KACb;IAEa,mBAAmB,CAAC,KAA6B,EAAE,GAAQ,EAAA;;AAEvE,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAA;AAExC,YAAA,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzF,YAAA,IAAI,eAAe,EAAE;AACnB,gBAAA,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACzE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;oBACpF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC/B,aAAA;AAED,YAAA,OAAO,KAAK,CAAC;SACd,CAAA,CAAA;AAAA,KAAA;;2GAhDU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;+GAAd,cAAc,EAAA,CAAA,CAAA;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;;;MCIE,gBAAgB,CAAA;IAC3B,OAAO,OAAO,CAAC,gBAAkC,EAAA;QAC/C,OAAO;AACL,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA;gBACD,gBAAgB;gBAChB,cAAc;AACf,aAAA;SACF,CAAA;KACF;;6GAbU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;8GAAhB,gBAAgB,EAAA,YAAA,EAAA,CATZ,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAI/B,YAAY;AACZ,QAAA,gBAAgB,6BAJR,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAQjB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YALzB,YAAY;QACZ,gBAAgB;AAChB,QAAA,WAAW,CAAC,OAAO,EAAE,CAAA,EAAA,CAAA,CAAA;2FAGZ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;oBAClC,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,gBAAgB;wBAChB,WAAW,CAAC,OAAO,EAAE;AACtB,qBAAA;iBACF,CAAA;;;MCXY,oBAAoB,CAAA;AAI/B,IAAA,WAAA,CAAoB,SAA2B,EAAA;AAA3B,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;AAE7C,QAAA,SAAS,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;KAEzE;IAEO,OAAO,eAAe,CAAC,GAAQ,EAAA;;AAErC,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;;AAID,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;QAGD,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;;AAID,QAAA,OAAO,KAAK,CAAC;KACd;;;IAKD,SAAS,CAAC,GAAqB,EAAE,IAAiB,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KAClE;;AAGO,IAAA,uBAAuB,CAAC,KAAa,EAAE,GAAqB,EAAE,IAAiB,EAAA;AACrF,QAAA,IAAI,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;AACzF,YAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;AACd,gBAAA,UAAU,EAAE;oBACV,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;AACjC,iBAAA;AACF,aAAA,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACzB;AAEO,IAAA,iBAAiB,CAAC,GAAQ,EAAA;QAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;AAEpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAG,EAAA,WAAW,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC,EAAE;AAC3C,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;;;AAID,QAAA,OAAO,KAAK,CAAC;KACd;;iHAjEU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAApB,oBAAoB,EAAA,CAAA,CAAA;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;;ACLX;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, Inject, Component, NgModule } from '@angular/core';
|
|
3
3
|
import { BehaviorSubject, firstValueFrom } from 'rxjs';
|
|
4
|
-
import {
|
|
4
|
+
import { filter, map } 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';
|
|
@@ -22,6 +22,8 @@ class AuthorizeService {
|
|
|
22
22
|
this.authority = new BehaviorSubject(null);
|
|
23
23
|
this.accessToken = new BehaviorSubject(null);
|
|
24
24
|
this.user = new BehaviorSubject(null);
|
|
25
|
+
this.isInitialized = new BehaviorSubject(false);
|
|
26
|
+
this.isInitializing = new BehaviorSubject(false);
|
|
25
27
|
console.debug("AuthorizeService::created");
|
|
26
28
|
this.getUser().subscribe(s => {
|
|
27
29
|
this.isAuthenticated.next(!!s);
|
|
@@ -29,6 +31,27 @@ class AuthorizeService {
|
|
|
29
31
|
this.isDeveloper.next(!!s && (s.role.includes("Developers")));
|
|
30
32
|
this.isManager.next(!!s && s.role.includes("Managers"));
|
|
31
33
|
});
|
|
34
|
+
this.oauthService.events.subscribe(e => {
|
|
35
|
+
// tslint:disable-next-line:no-console
|
|
36
|
+
console.debug('oauth/oidc event', e);
|
|
37
|
+
});
|
|
38
|
+
this.oauthService.events
|
|
39
|
+
.pipe(filter(e => e.type === 'session_terminated'))
|
|
40
|
+
.subscribe(_ => {
|
|
41
|
+
// tslint:disable-next-line:no-console
|
|
42
|
+
console.debug('Your session has been terminated!');
|
|
43
|
+
});
|
|
44
|
+
this.oauthService.events
|
|
45
|
+
.pipe(filter(e => e.type === 'token_received'))
|
|
46
|
+
.subscribe(_ => {
|
|
47
|
+
this.loadUser();
|
|
48
|
+
});
|
|
49
|
+
this.oauthService.events
|
|
50
|
+
.pipe(filter(e => e.type === 'logout'))
|
|
51
|
+
.subscribe(_ => {
|
|
52
|
+
this.accessToken.next(null);
|
|
53
|
+
this.user.next(null);
|
|
54
|
+
});
|
|
32
55
|
}
|
|
33
56
|
getRoles() {
|
|
34
57
|
return this.getUser().pipe(map(u => u.role));
|
|
@@ -63,8 +86,15 @@ class AuthorizeService {
|
|
|
63
86
|
logout() {
|
|
64
87
|
this.oauthService.logOut(false);
|
|
65
88
|
}
|
|
66
|
-
initialize() {
|
|
89
|
+
async initialize() {
|
|
67
90
|
console.debug("AuthorizeService::initialize::started");
|
|
91
|
+
if (await firstValueFrom(this.isInitializing)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (await firstValueFrom(this.isInitialized)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
this.isInitializing.next(true);
|
|
68
98
|
const config = {
|
|
69
99
|
responseType: 'code',
|
|
70
100
|
issuer: this.authorizeOptions.issuer,
|
|
@@ -77,33 +107,14 @@ class AuthorizeService {
|
|
|
77
107
|
};
|
|
78
108
|
this.oauthService.configure(config);
|
|
79
109
|
this.oauthService.setStorage(localStorage);
|
|
80
|
-
this.oauthService.loadDiscoveryDocumentAndTryLogin();
|
|
110
|
+
await this.oauthService.loadDiscoveryDocumentAndTryLogin();
|
|
81
111
|
this.oauthService.setupAutomaticSilentRefresh();
|
|
82
|
-
this.oauthService.events.subscribe(e => {
|
|
83
|
-
// tslint:disable-next-line:no-console
|
|
84
|
-
console.debug('oauth/oidc event', e);
|
|
85
|
-
});
|
|
86
|
-
this.oauthService.events
|
|
87
|
-
.pipe(filter(e => e.type === 'session_terminated'))
|
|
88
|
-
.subscribe(_ => {
|
|
89
|
-
// tslint:disable-next-line:no-console
|
|
90
|
-
console.debug('Your session has been terminated!');
|
|
91
|
-
});
|
|
92
|
-
this.oauthService.events
|
|
93
|
-
.pipe(filter(e => e.type === 'token_received'))
|
|
94
|
-
.subscribe(_ => {
|
|
95
|
-
this.loadUser();
|
|
96
|
-
});
|
|
97
|
-
this.oauthService.events
|
|
98
|
-
.pipe(filter(e => e.type === 'logout'))
|
|
99
|
-
.subscribe(_ => {
|
|
100
|
-
this.accessToken.next(null);
|
|
101
|
-
this.user.next(null);
|
|
102
|
-
});
|
|
103
112
|
if (this.oauthService.hasValidAccessToken()) {
|
|
104
113
|
this.loadUser();
|
|
105
114
|
}
|
|
106
115
|
this.authority.next(this.authorizeOptions.issuer);
|
|
116
|
+
this.isInitializing.next(false);
|
|
117
|
+
this.isInitialized.next(true);
|
|
107
118
|
console.debug("AuthorizeService::initialize::done");
|
|
108
119
|
}
|
|
109
120
|
loadUser() {
|
|
@@ -118,9 +129,9 @@ class AuthorizeService {
|
|
|
118
129
|
this.accessToken.next(accessToken);
|
|
119
130
|
}
|
|
120
131
|
}
|
|
121
|
-
AuthorizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
122
|
-
AuthorizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
123
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
132
|
+
AuthorizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeService, deps: [{ token: AuthorizeOptions }, { token: i1.OAuthService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
133
|
+
AuthorizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeService });
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeService, decorators: [{
|
|
124
135
|
type: Injectable
|
|
125
136
|
}], ctorParameters: function () { return [{ type: AuthorizeOptions, decorators: [{
|
|
126
137
|
type: Inject,
|
|
@@ -150,16 +161,16 @@ class LoginMenuComponent {
|
|
|
150
161
|
register() {
|
|
151
162
|
}
|
|
152
163
|
}
|
|
153
|
-
LoginMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
154
|
-
LoginMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
155
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
164
|
+
LoginMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LoginMenuComponent, deps: [{ token: AuthorizeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
165
|
+
LoginMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: LoginMenuComponent, selector: "app-login-menu", ngImport: i0, template: "<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", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
|
|
166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LoginMenuComponent, decorators: [{
|
|
156
167
|
type: Component,
|
|
157
168
|
args: [{ selector: 'app-login-menu', template: "<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" }]
|
|
158
169
|
}], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
|
|
159
170
|
|
|
160
171
|
class AuthorizeGuard {
|
|
161
|
-
constructor(
|
|
162
|
-
this.
|
|
172
|
+
constructor(authorizeService, router) {
|
|
173
|
+
this.authorizeService = authorizeService;
|
|
163
174
|
this.router = router;
|
|
164
175
|
}
|
|
165
176
|
canActivate(next, state) {
|
|
@@ -176,9 +187,10 @@ class AuthorizeGuard {
|
|
|
176
187
|
return true;
|
|
177
188
|
}
|
|
178
189
|
async handleAuthorization(route, url) {
|
|
179
|
-
|
|
190
|
+
await this.authorizeService.initialize();
|
|
191
|
+
const isAuthenticated = await firstValueFrom(this.authorizeService.getIsAuthenticated());
|
|
180
192
|
if (isAuthenticated) {
|
|
181
|
-
const userRoles = await firstValueFrom(this.
|
|
193
|
+
const userRoles = await firstValueFrom(this.authorizeService.getRoles());
|
|
182
194
|
if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {
|
|
183
195
|
this.router.navigate(['']);
|
|
184
196
|
return false;
|
|
@@ -186,14 +198,14 @@ class AuthorizeGuard {
|
|
|
186
198
|
return true;
|
|
187
199
|
}
|
|
188
200
|
else {
|
|
189
|
-
this.
|
|
201
|
+
this.authorizeService.login();
|
|
190
202
|
}
|
|
191
203
|
return false;
|
|
192
204
|
}
|
|
193
205
|
}
|
|
194
|
-
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
195
|
-
AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
196
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
206
|
+
AuthorizeGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeGuard, deps: [{ token: AuthorizeService }, { token: i2$1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
207
|
+
AuthorizeGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeGuard });
|
|
208
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeGuard, decorators: [{
|
|
197
209
|
type: Injectable
|
|
198
210
|
}], ctorParameters: function () { return [{ type: AuthorizeService }, { type: i2$1.Router }]; } });
|
|
199
211
|
|
|
@@ -212,13 +224,13 @@ class SharedAuthModule {
|
|
|
212
224
|
};
|
|
213
225
|
}
|
|
214
226
|
}
|
|
215
|
-
SharedAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
216
|
-
SharedAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
227
|
+
SharedAuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
228
|
+
SharedAuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, declarations: [LoginMenuComponent], imports: [CommonModule,
|
|
217
229
|
HttpClientModule, i1.OAuthModule], exports: [LoginMenuComponent] });
|
|
218
|
-
SharedAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
230
|
+
SharedAuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, imports: [CommonModule,
|
|
219
231
|
HttpClientModule,
|
|
220
232
|
OAuthModule.forRoot()] });
|
|
221
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SharedAuthModule, decorators: [{
|
|
222
234
|
type: NgModule,
|
|
223
235
|
args: [{
|
|
224
236
|
declarations: [LoginMenuComponent],
|
|
@@ -283,9 +295,9 @@ class AuthorizeInterceptor {
|
|
|
283
295
|
return false;
|
|
284
296
|
}
|
|
285
297
|
}
|
|
286
|
-
AuthorizeInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
287
|
-
AuthorizeInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
288
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
298
|
+
AuthorizeInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeInterceptor, deps: [{ token: AuthorizeService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
299
|
+
AuthorizeInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeInterceptor });
|
|
300
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthorizeInterceptor, decorators: [{
|
|
289
301
|
type: Injectable
|
|
290
302
|
}], ctorParameters: function () { return [{ type: AuthorizeService }]; } });
|
|
291
303
|
|
|
@@ -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, Observable} from 'rxjs';\r\nimport {filter, map} from 'rxjs/operators';\r\nimport {AuthConfig, OAuthService} from \"angular-oauth2-oidc\";\r\n\r\nexport interface IUser {\r\n name: string;\r\n role: string[];\r\n}\r\n\r\nexport class AuthorizeOptions {\r\n wellKnownServiceUris: string[];\r\n // Url of the Identity Provider\r\n issuer: string;\r\n // URL of the SPA to redirect the user to after login\r\n redirectUri: string;\r\n postLogoutRedirectUri: string;\r\n // The SPA's id. The SPA is registered with this id at the auth-server\r\n clientId: string;\r\n // set the scope for the permissions the client should request\r\n // The first three are defined by OIDC. The 4th is a use case-specific one\r\n scope: string;\r\n showDebugInformation: boolean;\r\n sessionChecksEnabled: boolean;\r\n}\r\n\r\n@Injectable()\r\nexport class AuthorizeService {\r\n private isAuthenticated: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isAdmin: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isDeveloper: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isManager: BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private authority: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private accessToken: BehaviorSubject<string> = new BehaviorSubject(null);\r\n private user: BehaviorSubject<IUser> = new BehaviorSubject(null);\r\n\r\n constructor(@Inject(AuthorizeOptions) private authorizeOptions: AuthorizeOptions, private oauthService: OAuthService) {\r\n console.debug(\"AuthorizeService::created\");\r\n this.getUser().subscribe(s => {\r\n this.isAuthenticated.next(!!s);\r\n this.isAdmin.next(!!s && (s.role.includes(\"Administrators\")));\r\n this.isDeveloper.next(!!s && (s.role.includes(\"Developers\")));\r\n this.isManager.next(!!s && s.role.includes(\"Managers\"));\r\n });\r\n }\r\n\r\n public getRoles(): Observable<Array<string>>{\r\n return this.getUser().pipe(\r\n map(u=> u.role)\r\n );\r\n }\r\n\r\n public getServiceUris(): Array<string> {\r\n return this.authorizeOptions.wellKnownServiceUris;\r\n }\r\n\r\n public getAuthority(): BehaviorSubject<string> {\r\n return this.authority;\r\n }\r\n\r\n public getIsAuthenticated(): BehaviorSubject<boolean> {\r\n return this.isAuthenticated;\r\n }\r\n\r\n public getIsAdmin(): BehaviorSubject<boolean> {\r\n return this.isAdmin;\r\n }\r\n\r\n public getIsDeveloper(): BehaviorSubject<boolean> {\r\n return this.isDeveloper;\r\n }\r\n\r\n public getIsManager(): BehaviorSubject<boolean> {\r\n return this.isManager;\r\n }\r\n\r\n public getAccessToken(): BehaviorSubject<string> {\r\n return this.accessToken;\r\n }\r\n\r\n public getUser(): BehaviorSubject<IUser> {\r\n return this.user;\r\n }\r\n\r\n public login() {\r\n this.oauthService.initImplicitFlow();\r\n }\r\n\r\n public logout() {\r\n this.oauthService.logOut(false);\r\n }\r\n\r\n\r\n public initialize() {\r\n\r\n console.debug(\"AuthorizeService::initialize::started\");\r\n\r\n const config: AuthConfig = {\r\n responseType: 'code',\r\n issuer: this.authorizeOptions.issuer,\r\n redirectUri: this.authorizeOptions.redirectUri,\r\n postLogoutRedirectUri: this.authorizeOptions.postLogoutRedirectUri,\r\n clientId: this.authorizeOptions.clientId,\r\n scope: this.authorizeOptions.scope,\r\n showDebugInformation: this.authorizeOptions.showDebugInformation,\r\n sessionChecksEnabled: this.authorizeOptions.sessionChecksEnabled\r\n };\r\n\r\n this.oauthService.configure(config);\r\n this.oauthService.setStorage(localStorage);\r\n this.oauthService.loadDiscoveryDocumentAndTryLogin();\r\n\r\n this.oauthService.setupAutomaticSilentRefresh();\r\n\r\n this.oauthService.events.subscribe(e => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('oauth/oidc event', e);\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'session_terminated'))\r\n .subscribe(_ => {\r\n // tslint:disable-next-line:no-console\r\n console.debug('Your session has been terminated!');\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'token_received'))\r\n .subscribe(_ => {\r\n this.loadUser();\r\n });\r\n\r\n this.oauthService.events\r\n .pipe(filter(e => e.type === 'logout'))\r\n .subscribe(_ => {\r\n this.accessToken.next(null);\r\n this.user.next(null);\r\n });\r\n\r\n if (this.oauthService.hasValidAccessToken()) {\r\n this.loadUser();\r\n }\r\n\r\n this.authority.next(this.authorizeOptions.issuer);\r\n\r\n console.debug(\"AuthorizeService::initialize::done\");\r\n\r\n }\r\n\r\n private loadUser() {\r\n const claims = this.oauthService.getIdentityClaims();\r\n if (!claims) {\r\n console.error(\"claims where null when loading identity claims\");\r\n return;\r\n }\r\n\r\n const user = <IUser>claims;\r\n const accessToken = this.oauthService.getAccessToken();\r\n this.user.next(user);\r\n this.accessToken.next(accessToken);\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {AuthorizeService} from '../authorize.service';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login-menu',\r\n templateUrl: './login-menu.component.html',\r\n styleUrls: ['./login-menu.component.css']\r\n})\r\nexport class LoginMenuComponent implements OnInit {\r\n public isAuthenticated: BehaviorSubject<boolean>;\r\n public userName: Observable<string>;\r\n public isAdmin: Observable<boolean>;\r\n\r\n constructor(private authorizeService: AuthorizeService) {\r\n }\r\n\r\n ngOnInit() {\r\n const isIFrame = window.self !== window.top;\r\n\r\n console.log(\"app-login-menu::created\");\r\n\r\n this.isAuthenticated = this.authorizeService.getIsAuthenticated();\r\n this.userName = this.authorizeService.getUser().pipe(map(u => u && u.name));\r\n this.isAdmin = this.authorizeService.getIsAdmin();\r\n\r\n this.isAuthenticated.subscribe(x => {\r\n\r\n console.log(`isAuthenticated changed to ${x} (iframe ${isIFrame})`);\r\n });\r\n }\r\n\r\n public login() {\r\n this.authorizeService.login();\r\n }\r\n\r\n public logout() {\r\n this.authorizeService.logout();\r\n }\r\n\r\n public register() {\r\n\r\n }\r\n}\r\n","<ul *ngIf=\"isAuthenticated | async\" class=\"navbar-nav\">\r\n <li class=\"nav-item dropdown\">\r\n <a aria-expanded=\"false\" aria-haspopup=\"true\" class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"\r\n id=\"navbarDropdownLogin\" role=\"button\">\r\n {{ userName | async }} <b class=\"caret\"></b>\r\n </a>\r\n <div aria-labelledby=\"navbarDropdown\" class=\"dropdown-menu\">\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Grants\">Client Application Access</a>-->\r\n <!--<a class=\"dropdown-item\" [routerLink]='[\"/authentication/profile\"]' title=\"Manage\">Manage</a>-->\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Diagnostics\">Diagnostics</a>-->\r\n <div class=\"dropdown-divider\"></div>\r\n <a (click)='logout()' class=\"dropdown-item\" routerLink=\"\" title=\"Logout\">Logout</a>\r\n </div>\r\n </li>\r\n</ul>\r\n<ul *ngIf=\"!(isAuthenticated | async)\" class=\"navbar-nav\">\r\n <li class=\"nav-item\">\r\n <a (click)='register()' class=\"nav-link\" routerLink=\"\">Register</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a (click)='login()' class=\"nav-link\" routerLink=\"\">Login</a>\r\n </li>\r\n</ul>\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivate,\r\n CanActivateChild,\r\n CanDeactivate,\r\n CanLoad, Route,\r\n Router,\r\n RouterStateSnapshot, UrlSegment,\r\n UrlTree\r\n} from '@angular/router';\r\nimport {AuthorizeService} from './authorize.service';\r\nimport {firstValueFrom, lastValueFrom, Observable} from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate, CanActivateChild, CanDeactivate<unknown>, CanLoad {\r\n constructor(private authorize: AuthorizeService, private router: Router) {\r\n }\r\n\r\n canActivate(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n let url: string = state.url;\r\n return this.handleAuthorization(next, url);\r\n }\r\n\r\n canActivateChild(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return this.canActivate(next, state);\r\n }\r\n\r\n canDeactivate(\r\n component: unknown,\r\n currentRoute: ActivatedRouteSnapshot,\r\n currentState: RouterStateSnapshot,\r\n nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return true;\r\n }\r\n\r\n canLoad(\r\n route: Route,\r\n segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {\r\n return true;\r\n }\r\n\r\n private async handleAuthorization(route: ActivatedRouteSnapshot, url: any): Promise<boolean> {\r\n const isAuthenticated = await firstValueFrom(this.authorize.getIsAuthenticated());\r\n if (isAuthenticated) {\r\n const userRoles = await firstValueFrom(this.authorize.getRoles());\r\n if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {\r\n this.router.navigate(['']);\r\n return false;\r\n }\r\n return true;\r\n } else {\r\n this.authorize.login();\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {LoginMenuComponent} from \"./login-menu/login-menu.component\";\r\nimport {AuthorizeOptions, AuthorizeService} from \"./authorize.service\";\r\nimport {OAuthModule} from \"angular-oauth2-oidc\";\r\nimport {AuthorizeGuard} from \"./authorize.guard\";\r\n\r\n@NgModule({\r\n declarations: [LoginMenuComponent],\r\n exports: [LoginMenuComponent],\r\n providers: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n OAuthModule.forRoot()\r\n ]\r\n})\r\nexport class SharedAuthModule {\r\n static forRoot(authorizeOptions: AuthorizeOptions): ModuleWithProviders<SharedAuthModule> {\r\n return {\r\n ngModule: SharedAuthModule,\r\n providers: [\r\n {\r\n provide: AuthorizeOptions,\r\n useValue: authorizeOptions\r\n },\r\n AuthorizeService,\r\n AuthorizeGuard\r\n ]\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {AuthorizeService} from './authorize.service';\r\n\r\n@Injectable()\r\nexport class AuthorizeInterceptor implements HttpInterceptor {\r\n\r\n accessToken: string;\r\n\r\n constructor(private authorize: AuthorizeService) {\r\n\r\n authorize.getAccessToken().subscribe(value => this.accessToken = value);\r\n\r\n }\r\n\r\n private static isSameOriginUrl(req: any) {\r\n // It's an absolute url with the same origin.\r\n if (req.url.startsWith(`${window.location.origin}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a protocol relative url with the same origin.\r\n // For example: //www.example.com/api/Products\r\n if (req.url.startsWith(`//${window.location.host}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a relative url like /api/Products\r\n if (/^\\/[^\\/].*/.test(req.url)) {\r\n return true;\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n\r\n // Checks if there is an access_token available in the authorize service\r\n // and adds it to the request in case it's targeted at the same origin as the\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return this.processRequestWithToken(this.accessToken, req, next);\r\n }\r\n\r\n // single page application.\r\n private processRequestWithToken(token: string, req: HttpRequest<any>, next: HttpHandler) {\r\n if (!!token && (AuthorizeInterceptor.isSameOriginUrl(req) || this.isKnownServiceUri(req))) {\r\n req = req.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n\r\n private isKnownServiceUri(req: any) {\r\n\r\n const serviceUris = this.authorize.getServiceUris();\r\n\r\n for (let i = 0; i < serviceUris.length; i++) {\r\n if (req.url.startsWith(`${serviceUris[i]}`)) {\r\n return true;\r\n }\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of shared-auth\r\n */\r\n\r\nexport * from './lib/authorize.service';\r\nexport * from './lib/login-menu/login-menu.component';\r\nexport * from './lib/shared-auth.module';\r\nexport * from './lib/authorize.interceptor';\r\nexport * from './lib/authorize.guard';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthorizeService","i2"],"mappings":"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"}
|
|
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, firstValueFrom, 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 private isInitialized : BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n private isInitializing : BehaviorSubject<boolean> = new BehaviorSubject(false);\r\n\r\n constructor(@Inject(AuthorizeOptions) private authorizeOptions: AuthorizeOptions, private oauthService: OAuthService) {\r\n console.debug(\"AuthorizeService::created\");\r\n\r\n this.getUser().subscribe(s => {\r\n this.isAuthenticated.next(!!s);\r\n this.isAdmin.next(!!s && (s.role.includes(\"Administrators\")));\r\n this.isDeveloper.next(!!s && (s.role.includes(\"Developers\")));\r\n this.isManager.next(!!s && s.role.includes(\"Managers\"));\r\n });\r\n\r\n 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 }\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 async initialize() {\r\n\r\n console.debug(\"AuthorizeService::initialize::started\");\r\n\r\n if (await firstValueFrom(this.isInitializing)) {\r\n return\r\n }\r\n if (await firstValueFrom(this.isInitialized)) {\r\n return;\r\n }\r\n this.isInitializing.next(true);\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 await this.oauthService.loadDiscoveryDocumentAndTryLogin();\r\n\r\n this.oauthService.setupAutomaticSilentRefresh();\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 this.isInitializing.next(false);\r\n this.isInitialized.next(true);\r\n\r\n console.debug(\"AuthorizeService::initialize::done\");\r\n }\r\n\r\n private loadUser() {\r\n const claims = this.oauthService.getIdentityClaims();\r\n if (!claims) {\r\n console.error(\"claims where null when loading identity claims\");\r\n return;\r\n }\r\n\r\n const user = <IUser>claims;\r\n const accessToken = this.oauthService.getAccessToken();\r\n this.user.next(user);\r\n this.accessToken.next(accessToken);\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\r\nimport {AuthorizeService} from '../authorize.service';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login-menu',\r\n templateUrl: './login-menu.component.html',\r\n styleUrls: ['./login-menu.component.css']\r\n})\r\nexport class LoginMenuComponent implements OnInit {\r\n public isAuthenticated: BehaviorSubject<boolean>;\r\n public userName: Observable<string>;\r\n public isAdmin: Observable<boolean>;\r\n\r\n constructor(private authorizeService: AuthorizeService) {\r\n }\r\n\r\n ngOnInit() {\r\n const isIFrame = window.self !== window.top;\r\n\r\n console.log(\"app-login-menu::created\");\r\n\r\n this.isAuthenticated = this.authorizeService.getIsAuthenticated();\r\n this.userName = this.authorizeService.getUser().pipe(map(u => u && u.name));\r\n this.isAdmin = this.authorizeService.getIsAdmin();\r\n\r\n this.isAuthenticated.subscribe(x => {\r\n\r\n console.log(`isAuthenticated changed to ${x} (iframe ${isIFrame})`);\r\n });\r\n }\r\n\r\n public login() {\r\n this.authorizeService.login();\r\n }\r\n\r\n public logout() {\r\n this.authorizeService.logout();\r\n }\r\n\r\n public register() {\r\n\r\n }\r\n}\r\n","<ul *ngIf=\"isAuthenticated | async\" class=\"navbar-nav\">\r\n <li class=\"nav-item dropdown\">\r\n <a aria-expanded=\"false\" aria-haspopup=\"true\" class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"\r\n id=\"navbarDropdownLogin\" role=\"button\">\r\n {{ userName | async }} <b class=\"caret\"></b>\r\n </a>\r\n <div aria-labelledby=\"navbarDropdown\" class=\"dropdown-menu\">\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Grants\">Client Application Access</a>-->\r\n <!--<a class=\"dropdown-item\" [routerLink]='[\"/authentication/profile\"]' title=\"Manage\">Manage</a>-->\r\n <!--<a class=\"dropdown-item\" asp-action=\"Index\" asp-area=\"Authentication\" asp-controller=\"Diagnostics\">Diagnostics</a>-->\r\n <div class=\"dropdown-divider\"></div>\r\n <a (click)='logout()' class=\"dropdown-item\" routerLink=\"\" title=\"Logout\">Logout</a>\r\n </div>\r\n </li>\r\n</ul>\r\n<ul *ngIf=\"!(isAuthenticated | async)\" class=\"navbar-nav\">\r\n <li class=\"nav-item\">\r\n <a (click)='register()' class=\"nav-link\" routerLink=\"\">Register</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a (click)='login()' class=\"nav-link\" routerLink=\"\">Login</a>\r\n </li>\r\n</ul>\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivate,\r\n CanActivateChild,\r\n CanDeactivate,\r\n CanLoad, Route,\r\n Router,\r\n RouterStateSnapshot, UrlSegment,\r\n UrlTree\r\n} from '@angular/router';\r\nimport {AuthorizeService} from './authorize.service';\r\nimport {firstValueFrom, lastValueFrom, Observable} from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate, CanActivateChild, CanDeactivate<unknown>, CanLoad {\r\n constructor(private authorizeService: AuthorizeService, private router: Router) {\r\n }\r\n\r\n canActivate(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n let url: string = state.url;\r\n return this.handleAuthorization(next, url);\r\n }\r\n\r\n canActivateChild(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return this.canActivate(next, state);\r\n }\r\n\r\n canDeactivate(\r\n component: unknown,\r\n currentRoute: ActivatedRouteSnapshot,\r\n currentState: RouterStateSnapshot,\r\n nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return true;\r\n }\r\n\r\n canLoad(\r\n route: Route,\r\n segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean {\r\n return true;\r\n }\r\n\r\n private async handleAuthorization(route: ActivatedRouteSnapshot, url: any): Promise<boolean> {\r\n\r\n await this.authorizeService.initialize()\r\n\r\n const isAuthenticated = await firstValueFrom(this.authorizeService.getIsAuthenticated());\r\n if (isAuthenticated) {\r\n const userRoles = await firstValueFrom(this.authorizeService.getRoles());\r\n if (route.data.roles && !route.data.roles.filter(value => userRoles.includes(value))) {\r\n this.router.navigate(['']);\r\n return false;\r\n }\r\n return true;\r\n } else {\r\n this.authorizeService.login();\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {HttpClientModule} from \"@angular/common/http\";\r\nimport {LoginMenuComponent} from \"./login-menu/login-menu.component\";\r\nimport {AuthorizeOptions, AuthorizeService} from \"./authorize.service\";\r\nimport {OAuthModule} from \"angular-oauth2-oidc\";\r\nimport {AuthorizeGuard} from \"./authorize.guard\";\r\n\r\n@NgModule({\r\n declarations: [LoginMenuComponent],\r\n exports: [LoginMenuComponent],\r\n providers: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n OAuthModule.forRoot()\r\n ]\r\n})\r\nexport class SharedAuthModule {\r\n static forRoot(authorizeOptions: AuthorizeOptions): ModuleWithProviders<SharedAuthModule> {\r\n return {\r\n ngModule: SharedAuthModule,\r\n providers: [\r\n {\r\n provide: AuthorizeOptions,\r\n useValue: authorizeOptions\r\n },\r\n AuthorizeService,\r\n AuthorizeGuard\r\n ]\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {AuthorizeService} from './authorize.service';\r\n\r\n@Injectable()\r\nexport class AuthorizeInterceptor implements HttpInterceptor {\r\n\r\n accessToken: string;\r\n\r\n constructor(private authorize: AuthorizeService) {\r\n\r\n authorize.getAccessToken().subscribe(value => this.accessToken = value);\r\n\r\n }\r\n\r\n private static isSameOriginUrl(req: any) {\r\n // It's an absolute url with the same origin.\r\n if (req.url.startsWith(`${window.location.origin}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a protocol relative url with the same origin.\r\n // For example: //www.example.com/api/Products\r\n if (req.url.startsWith(`//${window.location.host}/`)) {\r\n return true;\r\n }\r\n\r\n // It's a relative url like /api/Products\r\n if (/^\\/[^\\/].*/.test(req.url)) {\r\n return true;\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n\r\n // Checks if there is an access_token available in the authorize service\r\n // and adds it to the request in case it's targeted at the same origin as the\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return this.processRequestWithToken(this.accessToken, req, next);\r\n }\r\n\r\n // single page application.\r\n private processRequestWithToken(token: string, req: HttpRequest<any>, next: HttpHandler) {\r\n if (!!token && (AuthorizeInterceptor.isSameOriginUrl(req) || this.isKnownServiceUri(req))) {\r\n req = req.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n\r\n private isKnownServiceUri(req: any) {\r\n\r\n const serviceUris = this.authorize.getServiceUris();\r\n\r\n for (let i = 0; i < serviceUris.length; i++) {\r\n if (req.url.startsWith(`${serviceUris[i]}`)) {\r\n return true;\r\n }\r\n }\r\n\r\n // It's an absolute or protocol relative url that\r\n // doesn't have the same origin.\r\n return false;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of shared-auth\r\n */\r\n\r\nexport * from './lib/authorize.service';\r\nexport * from './lib/login-menu/login-menu.component';\r\nexport * from './lib/shared-auth.module';\r\nexport * from './lib/authorize.interceptor';\r\nexport * from './lib/authorize.guard';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AuthorizeService","i2"],"mappings":"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"}
|
package/lib/authorize.guard.d.ts
CHANGED
|
@@ -3,9 +3,9 @@ import { AuthorizeService } from './authorize.service';
|
|
|
3
3
|
import { Observable } from "rxjs";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class AuthorizeGuard implements CanActivate, CanActivateChild, CanDeactivate<unknown>, CanLoad {
|
|
6
|
-
private
|
|
6
|
+
private authorizeService;
|
|
7
7
|
private router;
|
|
8
|
-
constructor(
|
|
8
|
+
constructor(authorizeService: AuthorizeService, router: Router);
|
|
9
9
|
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
10
10
|
canActivateChild(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
11
11
|
canDeactivate(component: unknown, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
|
@@ -25,6 +25,8 @@ export declare class AuthorizeService {
|
|
|
25
25
|
private authority;
|
|
26
26
|
private accessToken;
|
|
27
27
|
private user;
|
|
28
|
+
private isInitialized;
|
|
29
|
+
private isInitializing;
|
|
28
30
|
constructor(authorizeOptions: AuthorizeOptions, oauthService: OAuthService);
|
|
29
31
|
getRoles(): Observable<Array<string>>;
|
|
30
32
|
getServiceUris(): Array<string>;
|
|
@@ -37,7 +39,7 @@ export declare class AuthorizeService {
|
|
|
37
39
|
getUser(): BehaviorSubject<IUser>;
|
|
38
40
|
login(): void;
|
|
39
41
|
logout(): void;
|
|
40
|
-
initialize(): void
|
|
42
|
+
initialize(): Promise<void>;
|
|
41
43
|
private loadUser;
|
|
42
44
|
static ɵfac: i0.ɵɵFactoryDeclaration<AuthorizeService, never>;
|
|
43
45
|
static ɵprov: i0.ɵɵInjectableDeclaration<AuthorizeService>;
|
|
@@ -13,5 +13,5 @@ export declare class LoginMenuComponent implements OnInit {
|
|
|
13
13
|
logout(): void;
|
|
14
14
|
register(): void;
|
|
15
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<LoginMenuComponent, never>;
|
|
16
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LoginMenuComponent, "app-login-menu", never, {}, {}, never, never, false>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LoginMenuComponent, "app-login-menu", never, {}, {}, never, never, false, never>;
|
|
17
17
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshmakers/shared-auth",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2304-13002",
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"tslib": "^2.
|
|
5
|
+
"tslib": "^2.5.0"
|
|
6
6
|
},
|
|
7
7
|
"module": "fesm2015/meshmakers-shared-auth.mjs",
|
|
8
8
|
"es2020": "fesm2020/meshmakers-shared-auth.mjs",
|