UNPKG

@universis/common

Version:

Universis - common directives and services

115 lines 15.2 kB
import { Inject, Injectable, InjectionToken } from '@angular/core'; import { Router } from '@angular/router'; import { UserService } from '../services/user.service'; import { Observable } from 'rxjs'; import { ErrorService } from '../../error/error.service'; import { ConfigurationService } from '../../shared/services/configuration.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "../../error/error.service"; import * as i3 from "../../shared/services/configuration.service"; import * as i4 from "../services/user.service"; export let APP_LOCATIONS = new InjectionToken('app.locations'); export const DEFAULT_APP_LOCATIONS = [{ privilege: 'Location', target: { url: '^/auth/' }, mask: 1 }, { privilege: 'Location', target: { url: '^/error' }, mask: 1 } ]; export class AuthGuard { constructor(_router, _locations, _errorService, _configurationService, _userService) { this._router = _router; this._locations = _locations; this._errorService = _errorService; this._configurationService = _configurationService; this._userService = _userService; // merge app locations, if any if (this._configurationService.settings && this._configurationService.settings.auth) { // get extra locations const appLocations = this._configurationService.settings.auth.locations; if (Array.isArray(appLocations)) { // get APP_LOCATIONS if (this._locations) { this._locations.unshift.apply(this._locations, appLocations); } } } this._locations.forEach((x) => { if (typeof x.target.pattern === 'undefined' || x.target.pattern === null) { x.target.pattern = new RegExp(x.target.url, 'i'); } }); } canActivateLocation(path, user) { let groups = []; if (user && user.groups) { groups = user.groups.map((x) => { return x.name; }); } return this._locations.find((x) => { return x.target?.pattern?.test(path) && (typeof x.account === 'undefined' || groups.indexOf(x.account.name) >= 0) && (x.mask === 0 || (typeof x.mask === 'number' && (x.mask & 1) === 1)) && user; }); } canActivate(route, state) { return this._canActivate(state); } canActivateChild(childRoute, state) { return this._canActivate(state); } _canActivate(state) { return new Observable(resolve => { this._userService.getUser().then((res) => { const location = this.canActivateLocation(state.url, res); if (location && (typeof location.account === 'undefined')) { return resolve.next(true); } if (res) { if (location && typeof location.mask === 'number' && (location.mask & 1) === 1) { return resolve.next(true); } else { if (location && location.redirectTo) { void this._router.navigate([location.redirectTo]); return resolve.next(false); } // noinspection JSIgnoredPromiseFromCall this._router.navigate(['/error/403.1'], { queryParams: { action: 'Error.LoginAsDifferentUser', continue: '/auth/loginAs' } }); return resolve.next(false); } } // noinspection JSIgnoredPromiseFromCall this._router.navigate(['/auth/login'], { queryParams: { continue: state.url } }); return resolve.next(false); }); }); } } AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Router }, { token: APP_LOCATIONS }, { token: i2.ErrorService }, { token: i3.ConfigurationService }, { token: i4.UserService }], target: i0.ɵɵFactoryTarget.Injectable }); AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthGuard }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthGuard, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.Router }, { type: Array, decorators: [{ type: Inject, args: [APP_LOCATIONS] }] }, { type: i2.ErrorService }, { type: i3.ConfigurationService }, { type: i4.UserService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRoL2d1YXJkcy9hdXRoLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQXdELE1BQU0sRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7Ozs7OztBQUdqRixNQUFNLENBQUMsSUFBSSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQztRQUNsQyxTQUFTLEVBQUUsVUFBVTtRQUNyQixNQUFNLEVBQUU7WUFDSixHQUFHLEVBQUUsU0FBUztTQUNqQjtRQUNELElBQUksRUFBRSxDQUFDO0tBQ1I7SUFDRDtRQUNFLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLE1BQU0sRUFBRTtZQUNKLEdBQUcsRUFBRSxTQUFTO1NBQ2pCO1FBQ0QsSUFBSSxFQUFFLENBQUM7S0FDUjtDQUNGLENBQUM7QUFHRixNQUFNLE9BQU8sU0FBUztJQUVwQixZQUFvQixPQUFlLEVBQ0YsVUFBcUMsRUFDNUQsYUFBMkIsRUFDM0IscUJBQTJDLEVBQzNDLFlBQXlCO1FBSmYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNGLGVBQVUsR0FBVixVQUFVLENBQTJCO1FBQzVELGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFD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ckIsVUFBVTs7MEJBSU4sTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQsIFJvdXRlciwgUm91dGVyU3RhdGVTbmFwc2hvdH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uL2Vycm9yL2Vycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0xvY2F0aW9uUGVybWlzc2lvbn0gZnJvbSAnLi9hdXRoLmd1YXJkLmludGVyZmFjZXMnO1xuXG5leHBvcnQgbGV0IEFQUF9MT0NBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2FwcC5sb2NhdGlvbnMnKTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVBQX0xPQ0FUSU9OUyA9IFt7XG4gICAgcHJpdmlsZWdlOiAnTG9jYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgICB1cmw6ICdeL2F1dGgvJ1xuICAgIH0sXG4gICAgbWFzazogMVxuICB9LFxuICB7XG4gICAgcHJpdmlsZWdlOiAnTG9jYXRpb24nLFxuICAgIHRhcmdldDoge1xuICAgICAgICB1cmw6ICdeL2Vycm9yJ1xuICAgIH0sXG4gICAgbWFzazogMVxuICB9XG5dO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aEd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoQVBQX0xPQ0FUSU9OUykgcHJpdmF0ZSBfbG9jYXRpb25zOiBBcnJheTxMb2NhdGlvblBlcm1pc3Npb24+LFxuICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UpIHtcblxuICAgIC8vIG1lcmdlIGFwcCBsb2NhdGlvbnMsIGlmIGFueVxuICAgIGlmICh0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5zZXR0aW5ncyAmJiB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5zZXR0aW5ncy5hdXRoKSB7XG4gICAgICAvLyBnZXQgZXh0cmEgbG9jYXRpb25zXG4gICAgICBjb25zdCBhcHBMb2NhdGlvbnMgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5zZXR0aW5ncy5hdXRoLmxvY2F0aW9ucztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFwcExvY2F0aW9ucykpIHtcbiAgICAgICAgLy8gZ2V0IEFQUF9MT0NBVElPTlNcbiAgICAgICAgaWYgKHRoaXMuX2xvY2F0aW9ucykge1xuICAgICAgICAgIHRoaXMuX2xvY2F0aW9ucy51bnNoaWZ0LmFwcGx5KHRoaXMuX2xvY2F0aW9ucywgYXBwTG9jYXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9sb2NhdGlvbnMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB4LnRhcmdldC5wYXR0ZXJuID09PSAndW5kZWZpbmVkJyB8fCB4LnRhcmdldC5wYXR0ZXJuID09PSBudWxsKSB7XG4gICAgICAgIHgudGFyZ2V0LnBhdHRlcm4gPSBuZXcgUmVnRXhwKHgudGFyZ2V0LnVybCwgJ2knKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5BY3RpdmF0ZUxvY2F0aW9uKHBhdGg6IHN0cmluZywgdXNlcjogYW55KTogTG9jYXRpb25QZXJtaXNzaW9uIHwgdW5kZWZpbmVkIHtcblxuICAgIGxldCBncm91cHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHVzZXIgJiYgdXNlci5ncm91cHMpIHtcbiAgICAgIGdyb3VwcyA9IHVzZXIuZ3JvdXBzLm1hcCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geC5uYW1lO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbnMuZmluZCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHgudGFyZ2V0Py5wYXR0ZXJuPy50ZXN0KHBhdGgpXG4gICAgICAgICYmICh0eXBlb2YgeC5hY2NvdW50ID09PSAndW5kZWZpbmVkJyB8fCBncm91cHMuaW5kZXhPZih4LmFjY291bnQubmFtZSkgPj0gMClcbiAgICAgICAgJiYgKHgubWFzayA9PT0gMCB8fCAodHlwZW9mIHgubWFzayA9PT0gJ251bWJlcicgJiYgKHgubWFzayAmIDEpID09PSAxKSlcbiAgICAgICAgJiYgdXNlcjtcbiAgICB9KTtcblxuICB9XG5cblxuICBjYW5BY3RpdmF0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbkFjdGl2YXRlKHN0YXRlKTtcbiAgfVxuXG4gIGNhbkFjdGl2YXRlQ2hpbGQoY2hpbGRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jYW5BY3RpdmF0ZShzdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9jYW5BY3RpdmF0ZShzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLl91c2VyU2VydmljZS5nZXRVc2VyKCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5jYW5BY3RpdmF0ZUxvY2F0aW9uKHN0YXRlLnVybCwgcmVzKTtcbiAgICAgICAgaWYgKGxvY2F0aW9uICYmICh0eXBlb2YgbG9jYXRpb24uYWNjb3VudCA9PT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgaWYgKGxvY2F0aW9uICYmIHR5cGVvZiBsb2NhdGlvbi5tYXNrID09PSAnbnVtYmVyJyAmJiAobG9jYXRpb24ubWFzayAmIDEpID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZS5uZXh0KHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24ucmVkaXJlY3RUbykge1xuICAgICAgICAgICAgICB2b2lkIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbbG9jYXRpb24ucmVkaXJlY3RUb10pO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU0lnbm9yZWRQcm9taXNlRnJvbUNhbGxcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJy9lcnJvci80MDMuMSddLCB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnRXJyb3IuTG9naW5Bc0RpZmZlcmVudFVzZXInLFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAnL2F1dGgvbG9naW5BcydcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTSWdub3JlZFByb21pc2VGcm9tQ2FsbFxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycvYXV0aC9sb2dpbiddLCB7IHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICBjb250aW51ZTogc3RhdGUudXJsXG4gICAgICAgICAgfX0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZS5uZXh0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=