@universis/common
Version:
Universis - common directives and services
114 lines (113 loc) • 14.1 kB
JavaScript
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';
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 || ((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 && (location.mask & 1) === 1) {
return resolve.next(true);
}
else {
if (location && location.redirectTo) {
this._router.navigate([location.redirectTo]);
return resolve.next(false);
}
// noinspection JSIgnoredPromiseFromCall
this._router.navigate(['/error/403.1'], {
queryParams: {
action: 'Error.LoginAsDiffrentUser',
continue: '/auth/loginAs'
}
});
return resolve.next(false);
}
}
// noinspection JSIgnoredPromiseFromCall
this._router.navigate(['/auth/login'], { queryParams: {
continue: state.url
} });
return resolve.next(false);
});
});
}
}
AuthGuard.decorators = [
{ type: Injectable }
];
/** @nocollapse */
AuthGuard.ctorParameters = () => [
{ type: Router },
{ type: Array, decorators: [{ type: Inject, args: [APP_LOCATIONS,] }] },
{ type: ErrorService },
{ type: ConfigurationService },
{ type: UserService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvY29tbW9uLyIsInNvdXJjZXMiOlsiYXV0aC9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUF3RCxNQUFNLEVBQXNCLE1BQU0saUJBQWlCLENBQUM7QUFDbkgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBR2pGLE1BQU0sQ0FBQyxJQUFJLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDO1FBQ2xDLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLE1BQU0sRUFBRTtZQUNKLEdBQUcsRUFBRSxTQUFTO1NBQ2pCO1FBQ0QsSUFBSSxFQUFFLENBQUM7S0FDUjtJQUNEO1FBQ0UsU0FBUyxFQUFFLFVBQVU7UUFDckIsTUFBTSxFQUFFO1lBQ0osR0FBRyxFQUFFLFNBQVM7U0FDakI7UUFDRCxJQUFJLEVBQUUsQ0FBQztLQUNSO0NBQ0YsQ0FBQztBQUdGLE1BQU07SUFFSixZQUFvQixPQUFlLEVBQ0YsVUFBcUMsRUFDNUQsYUFBMkIsRUFDM0IscUJBQTJDLEVBQzNDLFlBQXlCO1FBSmYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNGLGVBQVUsR0FBVixVQUFVLENBQTJCO1FBQzVELGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0MsaUJBQVks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bmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkLCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9lcnJvci9lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2NhdGlvblBlcm1pc3Npb259IGZyb20gJy4vYXV0aC5ndWFyZC5pbnRlcmZhY2VzJztcblxuZXhwb3J0IGxldCBBUFBfTE9DQVRJT05TID0gbmV3IEluamVjdGlvblRva2VuKCdhcHAubG9jYXRpb25zJyk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FQUF9MT0NBVElPTlMgPSBbe1xuICAgIHByaXZpbGVnZTogJ0xvY2F0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgICAgdXJsOiAnXi9hdXRoLydcbiAgICB9LFxuICAgIG1hc2s6IDFcbiAgfSxcbiAge1xuICAgIHByaXZpbGVnZTogJ0xvY2F0aW9uJyxcbiAgICB0YXJnZXQ6IHtcbiAgICAgICAgdXJsOiAnXi9lcnJvcidcbiAgICB9LFxuICAgIG1hc2s6IDFcbiAgfVxuXTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBASW5qZWN0KEFQUF9MT0NBVElPTlMpIHByaXZhdGUgX2xvY2F0aW9uczogQXJyYXk8TG9jYXRpb25QZXJtaXNzaW9uPixcbiAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIF9jb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlKSB7XG5cbiAgICAvLyBtZXJnZSBhcHAgbG9jYXRpb25zLCBpZiBhbnlcbiAgICBpZiAodGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2Uuc2V0dGluZ3MgJiYgdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2Uuc2V0dGluZ3MuYXV0aCkge1xuICAgICAgLy8gZ2V0IGV4dHJhIGxvY2F0aW9uc1xuICAgICAgY29uc3QgYXBwTG9jYXRpb25zID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2Uuc2V0dGluZ3MuYXV0aC5sb2NhdGlvbnM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcHBMb2NhdGlvbnMpKSB7XG4gICAgICAgIC8vIGdldCBBUFBfTE9DQVRJT05TXG4gICAgICAgIGlmICh0aGlzLl9sb2NhdGlvbnMpIHtcbiAgICAgICAgICB0aGlzLl9sb2NhdGlvbnMudW5zaGlmdC5hcHBseSh0aGlzLl9sb2NhdGlvbnMsIGFwcExvY2F0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fbG9jYXRpb25zLmZvckVhY2goKHgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgeC50YXJnZXQucGF0dGVybiA9PT0gJ3VuZGVmaW5lZCcgfHwgeC50YXJnZXQucGF0dGVybiA9PT0gbnVsbCkge1xuICAgICAgICB4LnRhcmdldC5wYXR0ZXJuID0gbmV3IFJlZ0V4cCh4LnRhcmdldC51cmwsICdpJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2FuQWN0aXZhdGVMb2NhdGlvbihwYXRoOiBzdHJpbmcsIHVzZXI6IGFueSk6IExvY2F0aW9uUGVybWlzc2lvbiB7XG5cbiAgICBsZXQgZ3JvdXBzID0gW107XG4gICAgaWYgKHVzZXIgJiYgdXNlci5ncm91cHMpIHtcbiAgICAgIGdyb3VwcyA9IHVzZXIuZ3JvdXBzLm1hcCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geC5uYW1lO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbnMuZmluZCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHgudGFyZ2V0LnBhdHRlcm4udGVzdChwYXRoKVxuICAgICAgICAmJiAodHlwZW9mIHguYWNjb3VudCA9PT0gJ3VuZGVmaW5lZCcgfHwgZ3JvdXBzLmluZGV4T2YoeC5hY2NvdW50Lm5hbWUpID49IDApXG4gICAgICAgICYmICh4Lm1hc2sgPT09IDAgfHwgKCh4Lm1hc2sgJiAxKSA9PT0gMSkpXG4gICAgICAgICYmIHVzZXI7XG4gICAgfSk7XG5cbiAgfVxuXG5cbiAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jYW5BY3RpdmF0ZShzdGF0ZSk7XG4gIH1cblxuICBjYW5BY3RpdmF0ZUNoaWxkKGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2FuQWN0aXZhdGUoc3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FuQWN0aXZhdGUoc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGJvb2xlYW4+KHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlcigpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuY2FuQWN0aXZhdGVMb2NhdGlvbihzdGF0ZS51cmwsIHJlcyk7XG4gICAgICAgIGlmIChsb2NhdGlvbiAmJiAodHlwZW9mIGxvY2F0aW9uLmFjY291bnQgPT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlLm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGlmIChsb2NhdGlvbiAmJiAobG9jYXRpb24ubWFzayAmIDEpID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZS5uZXh0KHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24ucmVkaXJlY3RUbykge1xuICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW2xvY2F0aW9uLnJlZGlyZWN0VG9dKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub2luc3BlY3Rpb24gSlNJZ25vcmVkUHJvbWlzZUZyb21DYWxsXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycvZXJyb3IvNDAzLjEnXSwge1xuICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ0Vycm9yLkxvZ2luQXNEaWZmcmVudFVzZXInLFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAnL2F1dGgvbG9naW5BcydcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZS5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTSWdub3JlZFByb21pc2VGcm9tQ2FsbFxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycvYXV0aC9sb2dpbiddLCB7IHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICBjb250aW51ZTogc3RhdGUudXJsXG4gICAgICAgICAgfX0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZS5uZXh0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=