UNPKG

@jamarsto/kiunzi-micro-frontend-tools

Version:
122 lines 16.4 kB
import { Injectable } from '@angular/core'; import { of } from 'rxjs'; import { map, mergeMap } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "angular-auth-oidc-client"; import * as i2 from "@angular/router"; export class AutoLoginAllRoutesWithRoleGuard { constructor(oidcSecurityService, router, autoLoginAllRoutesGuard) { this.oidcSecurityService = oidcSecurityService; this.router = router; this.autoLoginAllRoutesGuard = autoLoginAllRoutesGuard; } canActivate(next, state) { return this .autoLoginAllRoutesGuard .canActivate(next, state) .pipe(mergeMap(result => this.checkRoleForActivate(result, next))); } canActivateChild(next, state) { return this .autoLoginAllRoutesGuard .canActivateChild(next, state) .pipe(mergeMap(result => this.checkRoleForActivateChild(result, next))); } canLoad(route, url) { return this .autoLoginAllRoutesGuard .canLoad() .pipe(mergeMap(result => this.checkRoleForLoad(result, route, url))); } checkRoleForActivate(isAuthenticated, next) { if (typeof isAuthenticated !== 'boolean' || isAuthenticated !== true) { return of(isAuthenticated); } return this .isInRole(next.data['role']) .pipe(map(isInRole => { if (isInRole === true) { return true; } return this.router.parseUrl('/unauthorized'); })); } checkRoleForActivateChild(isAuthenticated, next) { if (typeof isAuthenticated !== 'boolean' || isAuthenticated !== true) { return of(isAuthenticated); } const data = next.parent != null ? next.parent.data : next.data; return this .isInRole(data['role']) .pipe(map(isInRole => { if (isInRole === true) { return true; } return this.router.parseUrl('/unauthorized'); })); } checkRoleForLoad(isAuthenticated, next, url) { if (typeof isAuthenticated !== 'boolean' || isAuthenticated !== true || typeof next.data === 'undefined') { return of(isAuthenticated); } return this .isInRole(next.data['role']) .pipe(map(isInRole => { if (isInRole === true) { return true; } return this.router.parseUrl('/unauthorized'); })); } isInRole(role) { if (typeof role === 'object') { return this.isInRoleArray(role); } return this.isInRoleString(role); } isInRoleArray(role) { if (role.length === 0) { return of(true); } return this .oidcSecurityService .userData$ .pipe(map(({ userData }) => { const roles = userData.roles; if (typeof roles !== 'undefined' && roles != null) { var matchedAll = true; role.forEach((strRole) => { if (!(typeof strRole === 'undefined' || strRole === null || strRole.trim() === '' || roles.indexOf(strRole) >= 0)) { matchedAll = false; } }); return matchedAll; } return false; })); } isInRoleString(role) { if (typeof role === 'undefined' || role === null || role.trim() === '') { return of(true); } return this .oidcSecurityService .userData$ .pipe(map(({ userData }) => { const roles = userData.roles; if (typeof roles !== 'undefined' && roles != null && roles.indexOf(role) >= 0) { return true; } return false; })); } } AutoLoginAllRoutesWithRoleGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.10", ngImport: i0, type: AutoLoginAllRoutesWithRoleGuard, deps: [{ token: i1.OidcSecurityService }, { token: i2.Router }, { token: i1.AutoLoginAllRoutesGuard }], target: i0.ɵɵFactoryTarget.Injectable }); AutoLoginAllRoutesWithRoleGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.10", ngImport: i0, type: AutoLoginAllRoutesWithRoleGuard, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.10", ngImport: i0, type: AutoLoginAllRoutesWithRoleGuard, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.OidcSecurityService }, { type: i2.Router }, { type: i1.AutoLoginAllRoutesGuard }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsLXJvdXRlcy1ndWFyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l1bnppLW1pY3JvLWZyb250ZW5kLXRvb2xzL3NyYy9saWIvc2VydmljZS9hbGwtcm91dGVzLWd1YXJkL2FsbC1yb3V0ZXMtZ3VhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU0vQyxNQUFNLE9BQU8sK0JBQStCO0lBQzFDLFlBQ1UsbUJBQXdDLEVBQ3hDLE1BQWMsRUFDZCx1QkFBZ0Q7UUFGaEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtJQUN0RCxDQUFDO0lBRUwsV0FBVyxDQUNQLElBQTRCLEVBQzVCLEtBQTBCO1FBQzVCLE9BQU8sSUFBSTthQUNOLHVCQUF1QjthQUN2QixXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQzthQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGdCQUFnQixDQUNaLElBQTRCLEVBQzVCLEtBQTBCO1FBQzVCLE9BQU8sSUFBSTthQUNOLHVCQUF1QjthQUN2QixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMs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V0FBVyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzVFLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDOzs2SEF0SFUsK0JBQStCO2lJQUEvQiwrQkFBK0IsY0FGOUIsTUFBTTs0RkFFUCwrQkFBK0I7a0JBSDNDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQsIENhbkxvYWQsIFJvdXRlLCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3QsIFVybFNlZ21lbnQsIFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPaWRjU2VjdXJpdHlTZXJ2aWNlLCBBdXRvTG9naW5BbGxSb3V0ZXNHdWFyZCB9IGZyb20gJ2FuZ3VsYXItYXV0aC1vaWRjLWNsaWVudCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9Mb2dpbkFsbFJvdXRlc1dpdGhSb2xlR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSwgQ2FuQWN0aXZhdGVDaGlsZCwgQ2FuTG9hZCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb2lkY1NlY3VyaXR5U2VydmljZTogT2lkY1NlY3VyaXR5U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYXV0b0xvZ2luQWxsUm91dGVzR3VhcmQ6IEF1dG9Mb2dpbkFsbFJvdXRlc0d1YXJkLFxuICApIHsgfVxuXG4gIGNhbkFjdGl2YXRlKFxuICAgICAgbmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4gfCBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IGJvb2xlYW4gfCBVcmxUcmVlIHtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgICAuYXV0b0xvZ2luQWxsUm91dGVzR3VhcmRcbiAgICAgICAgLmNhbkFjdGl2YXRlKG5leHQsIHN0YXRlKVxuICAgICAgICAucGlwZShtZXJnZU1hcChyZXN1bHQgPT4gdGhpcy5jaGVja1JvbGVGb3JBY3RpdmF0ZShyZXN1bHQsIG5leHQpKSk7XG4gIH1cblxuICBjYW5BY3RpdmF0ZUNoaWxkKFxuICAgICAgbmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4gfCBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IGJvb2xlYW4gfCBVcmxUcmVlIHtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgICAuYXV0b0xvZ2luQWxsUm91dGVzR3VhcmRcbiAgICAgICAgLmNhbkFjdGl2YXRlQ2hpbGQobmV4dCwgc3RhdGUpXG4gICAgICAgIC5waXBlKG1lcmdlTWFwKHJlc3VsdCA9PiB0aGlzLmNoZWNrUm9sZUZvckFjdGl2YXRlQ2hpbGQocmVzdWx0LCBuZXh0KSkpO1xuICB9XG5cbiAgY2FuTG9hZChyb3V0ZTogUm91dGUsIHVybDogVXJsU2VnbWVudFtdKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4gfCBQcm9taXNlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IGJvb2xlYW4gfCBVcmxUcmVlIHtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgICAuYXV0b0xvZ2luQWxsUm91dGVzR3VhcmRcbiAgICAgICAgLmNhbkxvYWQoKVxuICAgICAgICAucGlwZShtZXJnZU1hcChyZXN1bHQgPT4gdGhpcy5jaGVja1JvbGVGb3JMb2FkKHJlc3VsdCwgcm91dGUsIHVybCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tSb2xlRm9yQWN0aXZhdGUoaXNBdXRoZW50aWNhdGVkOiBib29sZWFuIHwgVXJsVHJlZSwgbmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFVybFRyZWU+IHtcbiAgICBpZih0eXBlb2YgaXNBdXRoZW50aWNhdGVkICE9PSAnYm9vbGVhbicgfHwgaXNBdXRoZW50aWNhdGVkICE9PSB0cnVlKSB7XG4gICAgICByZXR1cm4gb2YoaXNBdXRoZW50aWNhdGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgICAgICAgLmlzSW5Sb2xlKG5leHQuZGF0YVsncm9sZSddKVxuICAgICAgICAucGlwZShtYXAoaXNJblJvbGUgPT4ge1xuICAgICAgICAgIGlmKGlzSW5Sb2xlID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLnBhcnNlVXJsKCcvdW5hdXRob3JpemVkJyk7XG4gICAgICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tSb2xlRm9yQWN0aXZhdGVDaGlsZChpc0F1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4gfCBVcmxUcmVlLCBuZXh0OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4ge1xuICAgIGlmKHR5cGVvZiBpc0F1dGhlbnRpY2F0ZWQgIT09ICdib29sZWFuJyB8fCBpc0F1dGhlbnRpY2F0ZWQgIT09IHRydWUpIHtcbiAgICAgIHJldHVybiBvZihpc0F1dGhlbnRpY2F0ZWQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gbmV4dC5wYXJlbnQgIT0gbnVsbCA/IG5leHQucGFyZW50LmRhdGEgOiBuZXh0LmRhdGE7XG4gICAgcmV0dXJuIHRoaXNcbiAgICAgICAgLmlzSW5Sb2xlKGRhdGFbJ3JvbGUnXSlcbiAgICAgICAgLnBpcGUobWFwKGlzSW5Sb2xlID0+IHtcbiAgICAgICAgICBpZihpc0luUm9sZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5wYXJzZVVybCgnL3VuYXV0aG9yaXplZCcpO1xuICAgICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrUm9sZUZvckxvYWQoaXNBdXRoZW50aWNhdGVkOiBib29sZWFuIHwgVXJsVHJlZSwgbmV4dDogUm91dGUsIHVybDogVXJsU2VnbWVudFtdKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4ge1xuICAgIGlmKHR5cGVvZiBpc0F1dGhlbnRpY2F0ZWQgIT09ICdib29sZWFuJyB8fCBpc0F1dGhlbnRpY2F0ZWQgIT09IHRydWUgfHwgdHlwZW9mIG5leHQuZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBvZihpc0F1dGhlbnRpY2F0ZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICAgICAgICAuaXNJblJvbGUobmV4dC5kYXRhWydyb2xlJ10pXG4gICAgICAgIC5waXBlKG1hcChpc0luUm9sZSA9PiB7XG4gICAgICAgICAgaWYoaXNJblJvbGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIucGFyc2VVcmwoJy91bmF1dGhvcml6ZWQnKTtcbiAgICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0luUm9sZShyb2xlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmKHR5cGVvZiByb2xlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNJblJvbGVBcnJheShyb2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNJblJvbGVTdHJpbmcocm9sZSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5Sb2xlQXJyYXkocm9sZTogc3RyaW5nW10pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBpZihyb2xlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICAgICAgICAub2lkY1NlY3VyaXR5U2VydmljZVxuICAgICAgICAudXNlckRhdGEkXG4gICAgICAgIC5waXBlKG1hcCgoeyB1c2VyRGF0YSB9KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm9sZXM6IHN0cmluZ1tdID0gdXNlckRhdGEucm9sZXM7XG4gICAgICAgICAgaWYodHlwZW9mIHJvbGVzICE9PSAndW5kZWZpbmVkJyAmJiByb2xlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlZEFsbDogYm9vbGVhbiA9IHRydWU7XG4gICAgICAgICAgICByb2xlLmZvckVhY2goKHN0clJvbGUpID0+IHtcbiAgICAgICAgICAgICAgaWYoISh0eXBlb2Ygc3RyUm9sZSA9PT0gJ3VuZGVmaW5lZCcgfHwgc3RyUm9sZSA9PT0gbnVsbCB8fCBzdHJSb2xlLnRyaW0oKSA9PT0gJycgfHwgcm9sZXMuaW5kZXhPZihzdHJSb2xlKSA+PSAwKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRBbGwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlZEFsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5Sb2xlU3RyaW5nKHJvbGU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmKHR5cGVvZiByb2xlID09PSAndW5kZWZpbmVkJyB8fCByb2xlID09PSBudWxsIHx8IHJvbGUudHJpbSgpID09PSAnJykge1xuICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICAgICAgICAub2lkY1NlY3VyaXR5U2VydmljZVxuICAgICAgICAudXNlckRhdGEkXG4gICAgICAgIC5waXBlKG1hcCgoeyB1c2VyRGF0YSB9KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm9sZXM6IHN0cmluZ1tdID0gdXNlckRhdGEucm9sZXM7XG4gICAgICAgICAgaWYodHlwZW9mIHJvbGVzICE9PSAndW5kZWZpbmVkJyAmJiByb2xlcyAhPSBudWxsICYmIHJvbGVzLmluZGV4T2Yocm9sZSkgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSkpO1xuICB9XG59XG4iXX0=