UNPKG

@universis/common

Version:

Universis - common directives and services

83 lines (82 loc) 10.7 kB
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==