UNPKG

ontimize-web-ngx

Version:
143 lines 20.2 kB
import { Injectable, Injector } from '@angular/core'; import { Router } from '@angular/router'; import { combineLatest, from, Observable } from 'rxjs'; import { AppConfig } from '../config/app-config'; import { Codes } from '../util/codes'; import { AuthService } from './auth.service'; import { LoginStorageService } from './login-storage.service'; import { OntimizeService } from './ontimize/ontimize.service'; import { PermissionsService } from './permissions/permissions.service'; import { ORemoteConfigurationService } from './remote-config.service'; import * as i0 from "@angular/core"; export class OntimizeAuthService extends AuthService { constructor(injector) { super(injector); this.injector = injector; this._config = this.injector.get(AppConfig).getConfiguration(); this.router = this.injector.get(Router); this.loginStorageService = this.injector.get(LoginStorageService); const sessionInfo = this.loginStorageService.getSessionInfo(); if (sessionInfo && sessionInfo.id && sessionInfo.user && sessionInfo.user.length > 0) { this._user = sessionInfo.user; } } get user() { return this._user; } get localStorageKey() { return this.loginStorageService._localStorageKey; } configureOntimizeAuthService(config) { this.ontService = this.injector.get(OntimizeService); const servConf = {}; servConf[Codes.SESSION_KEY] = this.loginStorageService.getSessionInfo(); this.ontService.configureService(servConf); } retrieveAuthService() { return new Promise(resolve => { if (this.ontService !== undefined) { resolve(this.ontService); } else { this.configureOntimizeAuthService(this._config); resolve(this.ontService); } }); } login(user, password) { this._user = user; const dataObservable = new Observable(observer => { this.retrieveAuthService().then(service => { service.startsession(user, password).subscribe(resp => { this.onLoginSuccess(resp); const permissionsService = this.injector.get(PermissionsService); const remoteConfigService = this.injector.get(ORemoteConfigurationService); const pendingArray = []; pendingArray.push(permissionsService.getUserPermissionsAsPromise()); pendingArray.push(remoteConfigService.initialize()); combineLatest(pendingArray).subscribe(() => { observer.next(resp); observer.complete(); }); }, error => { this.onLoginError(error); observer.error(error); }); }); }); return from(dataObservable.toPromise()); } onLoginSuccess(sessionId) { const session = { user: this._user, id: sessionId }; this.loginStorageService.storeSessionInfo(session); this.onLogin.next(session); } onLoginError(error) { this.alert('ERROR', 'MESSAGES.ERROR_LOGIN'); } logout() { this.onLogout.next(null); const sessionInfo = this.loginStorageService.getSessionInfo(); const dataObservable = new Observable(innerObserver => { this.retrieveAuthService().then(service => { service.endsession(sessionInfo.user, sessionInfo.id).subscribe(resp => { const remoteConfigService = this.injector.get(ORemoteConfigurationService); remoteConfigService.finalize().subscribe(() => { this.onLogoutSuccess(resp); innerObserver.next(resp); innerObserver.complete(); }); }, error => { this.onLogoutError(error); innerObserver.error(error); }); }); }); return from(dataObservable.toPromise()); } onLogoutSuccess(sessionId) { if (sessionId === 0) { this.clearSessionData(); this.restartPermission(); this.redirectLogin(false); } } onLogoutError(error) { console.error('Error on logout'); this.clearSessionData(); this.restartPermission(); this.redirectLogin(false); } clearSessionData() { this.loginStorageService.sessionExpired(); } isLoggedIn() { return this.loginStorageService.isLoggedIn(); } getSessionInfo() { return this.loginStorageService.getSessionInfo(); } storeSessionInfo(info) { this.loginStorageService.storeSessionInfo(info); } redirectLogin(sessionExpired = false) { const arg = {}; arg[Codes.SESSION_EXPIRED_KEY] = sessionExpired; const extras = {}; extras[Codes.QUERY_PARAMS] = arg; this.router.navigate([Codes.LOGIN_ROUTE], extras); } restartPermission() { const permissionsService = this.injector.get(PermissionsService); permissionsService.restart(); } } OntimizeAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeAuthService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); OntimizeAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeAuthService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeAuthService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i0.Injector }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hdXRoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvc2VydmljZXMvby1hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUd0RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBVztJQVFsRCxZQUFzQixRQUFrQjtRQUN0QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFESSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRXRDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLElB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LEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsSUFBaUI7UUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxhQUFhLENBQUMsaUJBQTBCLEtBQUs7UUFDM0MsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLGNBQWMsQ0FBQztRQUNoRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakUsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7aUhBbEpVLG1CQUFtQjtxSEFBbkIsbUJBQW1COzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXBwQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcnO1xuaW1wb3J0IHsgSUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9hdXRoLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZy50eXBlJztcbmltcG9ydCB7IFNlc3Npb25JbmZvIH0gZnJvbSAnLi4vdHlwZXMvc2Vzc2lvbi1pbmZvLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9naW5TdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9naW4tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9udGltaXplU2VydmljZSB9IGZyb20gJy4vb250aW1pemUvb250aW1pemUuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1JlbW90ZUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9yZW1vdGUtY29uZmlnLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT250aW1pemVBdXRoU2VydmljZSBleHRlbmRzIEF1dGhTZXJ2aWNlIHtcblxuICBwcml2YXRlIF91c2VyOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvbmZpZzogQ29uZmlnO1xuICBwcml2YXRlIHJvdXRlcjogUm91dGVyO1xuICBwcml2YXRlIG9udFNlcnZpY2U6IE9udGltaXplU2VydmljZTtcbiAgcHJpdmF0ZSBsb2dpblN0b3JhZ2VTZXJ2aWNlOiBMb2dpblN0b3JhZ2VTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwQ29uZmlnKS5nZXRDb25maWd1cmF0aW9uKCk7XG4gICAgdGhpcy5yb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIHRoaXMubG9naW5TdG9yYWdlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KExvZ2luU3RvcmFnZVNlcnZpY2UpO1xuICAgIGNvbnN0IHNlc3Npb25JbmZvID0gdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JbmZvKCk7XG4gICAgaWYgKHNlc3Npb25JbmZvICYmIHNlc3Npb25JbmZvLmlkICYmIHNlc3Npb25JbmZvLnVzZXIgJiYgc2Vzc2lvbkluZm8udXNlci5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl91c2VyID0gc2Vzc2lvbkluZm8udXNlcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHVzZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9jYWxTdG9yYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5fbG9jYWxTdG9yYWdlS2V5O1xuICB9XG5cbiAgcHVibGljIGNvbmZpZ3VyZU9udGltaXplQXV0aFNlcnZpY2UoY29uZmlnOiBvYmplY3QpOiB2b2lkIHtcbiAgICB0aGlzLm9udFNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPbnRpbWl6ZVNlcnZpY2UpO1xuICAgIGNvbnN0IHNlcnZDb25mID0ge307XG4gICAgc2VydkNvbmZbQ29kZXMuU0VTU0lPTl9LRVldID0gdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JbmZvKCk7XG4gICAgdGhpcy5vbnRTZXJ2aWNlLmNvbmZpZ3VyZVNlcnZpY2Uoc2VydkNvbmYpO1xuICB9XG5cbiAgcHVibGljIHJldHJpZXZlQXV0aFNlcnZpY2UoKTogUHJvbWlzZTxJQXV0aFNlcnZpY2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8SUF1dGhTZXJ2aWNlPihyZXNvbHZlID0+IHtcbiAgICAgIGlmICh0aGlzLm9udFNlcnZpY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvbHZlKHRoaXMub250U2VydmljZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZU9udGltaXplQXV0aFNlcnZpY2UodGhpcy5fY29uZmlnKTtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLm9udFNlcnZpY2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGxvZ2luKHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgdGhpcy5fdXNlciA9IHVzZXI7XG4gICAgY29uc3QgZGF0YU9ic2VydmFibGU6IE9ic2VydmFibGU8YW55PiA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMucmV0cmlldmVBdXRoU2VydmljZSgpLnRoZW4oc2VydmljZSA9PiB7XG4gICAgICAgIHNlcnZpY2Uuc3RhcnRzZXNzaW9uKHVzZXIsIHBhc3N3b3JkKS5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICAgICAgdGhpcy5vbkxvZ2luU3VjY2VzcyhyZXNwKTtcbiAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChQZXJtaXNzaW9uc1NlcnZpY2UpO1xuICAgICAgICAgIGNvbnN0IHJlbW90ZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPUmVtb3RlQ29uZmlndXJhdGlvblNlcnZpY2UpO1xuICAgICAgICAgIGNvbnN0IHBlbmRpbmdBcnJheSA9IFtdO1xuICAgICAgICAgIHBlbmRpbmdBcnJheS5wdXNoKHBlcm1pc3Npb25zU2VydmljZS5nZXRVc2VyUGVybWlzc2lvbnNBc1Byb21pc2UoKSk7XG4gICAgICAgICAgcGVuZGluZ0FycmF5LnB1c2gocmVtb3RlQ29uZmlnU2VydmljZS5pbml0aWFsaXplKCkpO1xuICAgICAgICAgIGNvbWJpbmVMYXRlc3QocGVuZGluZ0FycmF5KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLm9uTG9naW5FcnJvcihlcnJvcik7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmcm9tKGRhdGFPYnNlcnZhYmxlLnRvUHJvbWlzZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkxvZ2luU3VjY2VzcyhzZXNzaW9uSWQ6IHN0cmluZyB8IG51bWJlcik6IHZvaWQge1xuICAgIC8vIHNhdmUgdXNlciBhbmQgc2Vzc2lvbmlkIGludG8gbG9jYWwgc3RvcmFnZVxuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICB1c2VyOiB0aGlzLl91c2VyLFxuICAgICAgaWQ6IHNlc3Npb25JZFxuICAgIH07XG4gICAgdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLnN0b3JlU2Vzc2lvbkluZm8oc2Vzc2lvbik7XG4gICAgdGhpcy5vbkxvZ2luLm5leHQoc2Vzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgb25Mb2dpbkVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmFsZXJ0KCdFUlJPUicsICdNRVNTQUdFUy5FUlJPUl9MT0dJTicpO1xuICB9XG5cbiAgcHVibGljIGxvZ291dCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMub25Mb2dvdXQubmV4dChudWxsKTtcbiAgICBjb25zdCBzZXNzaW9uSW5mbyA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShpbm5lck9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMucmV0cmlldmVBdXRoU2VydmljZSgpLnRoZW4oc2VydmljZSA9PiB7XG4gICAgICAgIHNlcnZpY2UuZW5kc2Vzc2lvbihzZXNzaW9uSW5mby51c2VyLCBzZXNzaW9uSW5mby5pZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbW90ZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPUmVtb3RlQ29uZmlndXJhdGlvblNlcnZpY2UpO1xuICAgICAgICAgIHJlbW90ZUNvbmZpZ1NlcnZpY2UuZmluYWxpemUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkxvZ291dFN1Y2Nlc3MocmVzcCk7XG4gICAgICAgICAgICBpbm5lck9ic2VydmVyLm5leHQocmVzcCk7XG4gICAgICAgICAgICBpbm5lck9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLm9uTG9nb3V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIGlubmVyT2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmcm9tKGRhdGFPYnNlcnZhYmxlLnRvUHJvbWlzZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkxvZ291dFN1Y2Nlc3Moc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoc2Vzc2lvbklkID09PSAwKSB7XG4gICAgICB0aGlzLmNsZWFyU2Vzc2lvbkRhdGEoKTtcbiAgICAgIHRoaXMucmVzdGFydFBlcm1pc3Npb24oKTtcbiAgICAgIHRoaXMucmVkaXJlY3RMb2dpbihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uTG9nb3V0RXJyb3IoZXJyb3I6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9uIGxvZ291dCcpO1xuICAgIHRoaXMuY2xlYXJTZXNzaW9uRGF0YSgpO1xuICAgIHRoaXMucmVzdGFydFBlcm1pc3Npb24oKTtcbiAgICB0aGlzLnJlZGlyZWN0TG9naW4oZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU2Vzc2lvbkRhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLnNlc3Npb25FeHBpcmVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNMb2dnZWRJbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLmlzTG9nZ2VkSW4oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZXNzaW9uSW5mbygpOiBTZXNzaW9uSW5mbyB7XG4gICAgcmV0dXJuIHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICB9XG5cbiAgcHVibGljIHN0b3JlU2Vzc2lvbkluZm8oaW5mbzogU2Vzc2lvbkluZm8pOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2Uuc3RvcmVTZXNzaW9uSW5mbyhpbmZvKTtcbiAgfVxuXG4gIHJlZGlyZWN0TG9naW4oc2Vzc2lvbkV4cGlyZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IGFyZyA9IHt9O1xuICAgIGFyZ1tDb2Rlcy5TRVNTSU9OX0VYUElSRURfS0VZXSA9IHNlc3Npb25FeHBpcmVkO1xuICAgIGNvbnN0IGV4dHJhcyA9IHt9O1xuICAgIGV4dHJhc1tDb2Rlcy5RVUVSWV9QQVJBTVNdID0gYXJnO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtDb2Rlcy5MT0dJTl9ST1VURV0sIGV4dHJhcyk7XG4gIH1cblxuICBwdWJsaWMgcmVzdGFydFBlcm1pc3Npb24oKSB7XG4gICAgY29uc3QgcGVybWlzc2lvbnNTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoUGVybWlzc2lvbnNTZXJ2aWNlKTtcbiAgICBwZXJtaXNzaW9uc1NlcnZpY2UucmVzdGFydCgpO1xuICB9XG5cbn1cbiJdfQ==