@universis/common
Version:
Universis - common directives and services
83 lines (82 loc) • 10.7 kB
JavaScript
import { Component, ViewEncapsulation, } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { AuthenticationService } from './services/authentication.service';
import { UserService } from './services/user.service';
import { ErrorService } from '../error/error.service';
import { AES, enc } from 'crypto-js';
export class AuthCallbackComponent {
constructor(_router, _userService, _route, _errorService, _authService) {
this._router = _router;
this._userService = _userService;
this._route = _route;
this._errorService = _errorService;
this._authService = _authService;
}
ngOnDestroy() {
if (this.queryMapSubscription) {
this.queryMapSubscription.unsubscribe();
}
}
ngOnInit() {
// validate code
this.queryMapSubscription = this._route.queryParamMap.subscribe((paramMap) => {
const params = paramMap.keys.reduce((obj, currentValue, currentIndex) => {
const values = paramMap.getAll(currentValue);
Object.defineProperty(obj, currentValue, {
enumerable: true,
configurable: true,
writable: true,
value: values.length > 1 ? values : values[0]
});
return obj;
}, {});
this._authService.callback(params).then((res) => {
if (typeof res === 'object') {
// try to get state parameter
let navigateURL = '/';
const state = paramMap.get('state');
// get code verifier
if (state && res.token && res.token.code_verifier) {
// try to decrypt state parameter
try {
// get hex bytes
const hex = enc.Hex.parse(state);
// convert hex to base64
const b64 = hex.toString(enc.Base64);
// decrypt state parameter
const stateURL = AES.decrypt(b64, res.token.code_verifier).toString(enc.Utf8);
// if stateURL is a relative URL
if (stateURL && /^\//.test(stateURL)) {
// set navigate to state URL
navigateURL = stateURL;
}
}
catch (err) {
console.error('AUTH', 'STATE', err);
}
}
// and finally navigate client
return this._router.navigate([navigateURL]);
}
}).catch(err => {
return this._errorService.navigateToError(err);
});
});
}
}
AuthCallbackComponent.decorators = [
{ type: Component, args: [{
selector: 'universis-auth-callback',
template: '<div></div>',
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
AuthCallbackComponent.ctorParameters = () => [
{ type: Router },
{ type: UserService },
{ type: ActivatedRoute },
{ type: ErrorService },
{ type: AuthenticationService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1jYWxsYmFjay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL2NvbW1vbi8iLCJzb3VyY2VzIjpbImF1dGgvYXV0aC1jYWxsYmFjay5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFNVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBU3JDLE1BQU07SUFHSixZQUNVLE9BQWUsRUFDZixZQUF5QixFQUN6QixNQUFzQixFQUN0QixhQUEyQixFQUMzQixZQUFtQztRQUpuQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsaUJBQVksR0FBWixZQUFZLENBQXVCO0lBQzdDLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixnQkFBZ0I7UUFFaEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWtCLEVBQUUsRUFBRTtZQUNyRixNQUFNLE1BQU0sR0FBUSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUU7Z0JBQzNFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRTtvQkFDdkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFlBQVksRUFBRSxJQUFJO29CQUNsQixRQUFRLEVBQUUsSUFBSTtvQkFDZCxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDOUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBRTlDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO29CQUMzQiw2QkFBNkI7b0JBQzdCLElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQztvQkFFdEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEMsb0JBQW9CO29CQUNwQixJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO3dCQUNqRCxpQ0FBaUM7d0JBQ2pDLElBQUk7NEJBQ0YsZ0JBQWdCOzRCQUNoQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDakMsd0JBQXdCOzRCQUN4QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDckMsMEJBQTBCOzRCQUMxQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzlFLGdDQUFnQzs0QkFDaEMsSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQ0FDcEMsNEJBQTRCO2dDQUM1QixXQUFXLEdBQUcsUUFBUSxDQUFDOzZCQUN4Qjt5QkFDRjt3QkFBQyxPQUFPLEdBQUcsRUFBRTs0QkFDWixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7eUJBQ3JDO3FCQUNGO29CQUNELDhCQUE4QjtvQkFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7aUJBQzdDO1lBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OztZQXJFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7O1lBWHdCLE1BQU07WUFFdEIsV0FBVztZQUZYLGNBQWM7WUFHZixZQUFZO1lBRlgscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFBhcmFtTWFwIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7RXJyb3JTZXJ2aWNlfSBmcm9tICcuLi9lcnJvci9lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFFUywgZW5jIH0gZnJvbSAnY3J5cHRvLWpzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1bml2ZXJzaXMtYXV0aC1jYWxsYmFjaycsXG4gIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcblxuZXhwb3J0IGNsYXNzIEF1dGhDYWxsYmFja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBxdWVyeU1hcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSkge1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnF1ZXJ5TWFwU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXJ5TWFwU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gdmFsaWRhdGUgY29kZVxuXG4gICAgdGhpcy5xdWVyeU1hcFN1YnNjcmlwdGlvbiA9IHRoaXMuX3JvdXRlLnF1ZXJ5UGFyYW1NYXAuc3Vic2NyaWJlKChwYXJhbU1hcDogUGFyYW1NYXApID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtczogYW55ID0gcGFyYW1NYXAua2V5cy5yZWR1Y2UoKG9iaiwgY3VycmVudFZhbHVlLCBjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gcGFyYW1NYXAuZ2V0QWxsKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGN1cnJlbnRWYWx1ZSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZXMubGVuZ3RoID4gMSA/IHZhbHVlcyA6IHZhbHVlc1swXVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sIHt9KTtcbiAgICAgIHRoaXMuX2F1dGhTZXJ2aWNlLmNhbGxiYWNrKHBhcmFtcykudGhlbigocmVzKSA9PiB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIGdldCBzdGF0ZSBwYXJhbWV0ZXJcbiAgICAgICAgICBsZXQgbmF2aWdhdGVVUkwgPSAnLyc7XG5cbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHBhcmFtTWFwLmdldCgnc3RhdGUnKTtcbiAgICAgICAgICAvLyBnZXQgY29kZSB2ZXJpZmllclxuICAgICAgICAgIGlmIChzdGF0ZSAmJiByZXMudG9rZW4gJiYgcmVzLnRva2VuLmNvZGVfdmVyaWZpZXIpIHtcbiAgICAgICAgICAgIC8vIHRyeSB0byBkZWNyeXB0IHN0YXRlIHBhcmFtZXRlclxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gZ2V0IGhleCBieXRlc1xuICAgICAgICAgICAgICBjb25zdCBoZXggPSBlbmMuSGV4LnBhcnNlKHN0YXRlKTtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBoZXggdG8gYmFzZTY0XG4gICAgICAgICAgICAgIGNvbnN0IGI2NCA9IGhleC50b1N0cmluZyhlbmMuQmFzZTY0KTtcbiAgICAgICAgICAgICAgLy8gZGVjcnlwdCBzdGF0ZSBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdGVVUkwgPSBBRVMuZGVjcnlwdChiNjQsIHJlcy50b2tlbi5jb2RlX3ZlcmlmaWVyKS50b1N0cmluZyhlbmMuVXRmOCk7XG4gICAgICAgICAgICAgIC8vIGlmIHN0YXRlVVJMIGlzIGEgcmVsYXRpdmUgVVJMXG4gICAgICAgICAgICAgIGlmIChzdGF0ZVVSTCAmJiAvXlxcLy8udGVzdChzdGF0ZVVSTCkpIHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbmF2aWdhdGUgdG8gc3RhdGUgVVJMXG4gICAgICAgICAgICAgICAgbmF2aWdhdGVVUkwgPSBzdGF0ZVVSTDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FVVEgnLCAnU1RBVEUnLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhbmQgZmluYWxseSBuYXZpZ2F0ZSBjbGllbnRcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtuYXZpZ2F0ZVVSTF0pO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaCggZXJyID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yU2VydmljZS5uYXZpZ2F0ZVRvRXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==