ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
143 lines • 20.2 kB
JavaScript
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();
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();
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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QztJQUVNLGdCQUFnQixDQUFDLElBQWlCO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsYUFBYSxDQUFDLGlCQUEwQixLQUFLO1FBQzNDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxjQUFjLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pFLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQy9CLENBQUM7O2lIQWxKVSxtQkFBbUI7cUhBQW5CLG1CQUFtQjs0RkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB7IElBdXRoU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvYXV0aC1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi90eXBlcy9jb25maWcudHlwZSc7XG5pbXBvcnQgeyBTZXNzaW9uSW5mbyB9IGZyb20gJy4uL3R5cGVzL3Nlc3Npb24taW5mby50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2luU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xvZ2luLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2UgfSBmcm9tICcuL29udGltaXplL29udGltaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IE9SZW1vdGVDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vcmVtb3RlLWNvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9udGltaXplQXV0aFNlcnZpY2UgZXh0ZW5kcyBBdXRoU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfdXNlcjogc3RyaW5nO1xuICBwcml2YXRlIF9jb25maWc6IENvbmZpZztcbiAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcjtcbiAgcHJpdmF0ZSBvbnRTZXJ2aWNlOiBPbnRpbWl6ZVNlcnZpY2U7XG4gIHByaXZhdGUgbG9naW5TdG9yYWdlU2VydmljZTogTG9naW5TdG9yYWdlU2VydmljZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcENvbmZpZykuZ2V0Q29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMucm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChMb2dpblN0b3JhZ2VTZXJ2aWNlKTtcbiAgICBjb25zdCBzZXNzaW9uSW5mbyA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIGlmIChzZXNzaW9uSW5mbyAmJiBzZXNzaW9uSW5mby5pZCAmJiBzZXNzaW9uSW5mby51c2VyICYmIHNlc3Npb25JbmZvLnVzZXIubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fdXNlciA9IHNlc3Npb25JbmZvLnVzZXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB1c2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvY2FsU3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UuX2xvY2FsU3RvcmFnZUtleTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWd1cmVPbnRpbWl6ZUF1dGhTZXJ2aWNlKGNvbmZpZzogb2JqZWN0KTogdm9pZCB7XG4gICAgdGhpcy5vbnRTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT250aW1pemVTZXJ2aWNlKTtcbiAgICBjb25zdCBzZXJ2Q29uZiA9IHt9O1xuICAgIHNlcnZDb25mW0NvZGVzLlNFU1NJT05fS0VZXSA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIHRoaXMub250U2VydmljZS5jb25maWd1cmVTZXJ2aWNlKHNlcnZDb25mKTtcbiAgfVxuXG4gIHB1YmxpYyByZXRyaWV2ZUF1dGhTZXJ2aWNlKCk6IFByb21pc2U8SUF1dGhTZXJ2aWNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPElBdXRoU2VydmljZT4ocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAodGhpcy5vbnRTZXJ2aWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLm9udFNlcnZpY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmVPbnRpbWl6ZUF1dGhTZXJ2aWNlKHRoaXMuX2NvbmZpZyk7XG4gICAgICAgIHJlc29sdmUodGhpcy5vbnRTZXJ2aWNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBsb2dpbih1c2VyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMuX3VzZXIgPSB1c2VyO1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICB0aGlzLnJldHJpZXZlQXV0aFNlcnZpY2UoKS50aGVuKHNlcnZpY2UgPT4ge1xuICAgICAgICBzZXJ2aWNlLnN0YXJ0c2Vzc2lvbih1c2VyLCBwYXNzd29yZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgIHRoaXMub25Mb2dpblN1Y2Nlc3MocmVzcCk7XG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbnNTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoUGVybWlzc2lvbnNTZXJ2aWNlKTtcbiAgICAgICAgICBjb25zdCByZW1vdGVDb25maWdTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1JlbW90ZUNvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgICAgICAgICBjb25zdCBwZW5kaW5nQXJyYXkgPSBbXTtcbiAgICAgICAgICBwZW5kaW5nQXJyYXkucHVzaChwZXJtaXNzaW9uc1NlcnZpY2UuZ2V0VXNlclBlcm1pc3Npb25zQXNQcm9taXNlKCkpO1xuICAgICAgICAgIHBlbmRpbmdBcnJheS5wdXNoKHJlbW90ZUNvbmZpZ1NlcnZpY2UuaW5pdGlhbGl6ZSgpKTtcbiAgICAgICAgICBjb21iaW5lTGF0ZXN0KHBlbmRpbmdBcnJheSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLm9uTG9naW5FcnJvcihlcnJvcik7XG4gICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmcm9tKGRhdGFPYnNlcnZhYmxlLnRvUHJvbWlzZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkxvZ2luU3VjY2VzcyhzZXNzaW9uSWQ6IHN0cmluZyB8IG51bWJlcik6IHZvaWQge1xuICAgIC8vIHNhdmUgdXNlciBhbmQgc2Vzc2lvbmlkIGludG8gbG9jYWwgc3RvcmFnZVxuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICB1c2VyOiB0aGlzLl91c2VyLFxuICAgICAgaWQ6IHNlc3Npb25JZFxuICAgIH07XG4gICAgdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLnN0b3JlU2Vzc2lvbkluZm8oc2Vzc2lvbik7XG4gICAgdGhpcy5vbkxvZ2luLm5leHQoc2Vzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgb25Mb2dpbkVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmFsZXJ0KCdFUlJPUicsICdNRVNTQUdFUy5FUlJPUl9MT0dJTicpO1xuICB9XG5cbiAgcHVibGljIGxvZ291dCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMub25Mb2dvdXQubmV4dChudWxsKTtcbiAgICBjb25zdCBzZXNzaW9uSW5mbyA9IHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSW5mbygpO1xuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPSBuZXcgT2JzZXJ2YWJsZShpbm5lck9ic2VydmVyID0+IHtcbiAgICAgIHRoaXMucmV0cmlldmVBdXRoU2VydmljZSgpLnRoZW4oc2VydmljZSA9PiB7XG4gICAgICAgIHNlcnZpY2UuZW5kc2Vzc2lvbihzZXNzaW9uSW5mby51c2VyLCBzZXNzaW9uSW5mby5pZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbW90ZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPUmVtb3RlQ29uZmlndXJhdGlvblNlcnZpY2UpO1xuICAgICAgICAgIHJlbW90ZUNvbmZpZ1NlcnZpY2UuZmluYWxpemUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkxvZ291dFN1Y2Nlc3MocmVzcCk7XG4gICAgICAgICAgICBpbm5lck9ic2VydmVyLm5leHQoKTtcbiAgICAgICAgICAgIGlubmVyT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMub25Mb2dvdXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgaW5uZXJPYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZyb20oZGF0YU9ic2VydmFibGUudG9Qcm9taXNlKCkpO1xuICB9XG5cbiAgcHVibGljIG9uTG9nb3V0U3VjY2VzcyhzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChzZXNzaW9uSWQgPT09IDApIHtcbiAgICAgIHRoaXMuY2xlYXJTZXNzaW9uRGF0YSgpO1xuICAgICAgdGhpcy5yZXN0YXJ0UGVybWlzc2lvbigpO1xuICAgICAgdGhpcy5yZWRpcmVjdExvZ2luKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Mb2dvdXRFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3Igb24gbG9nb3V0Jyk7XG4gICAgdGhpcy5jbGVhclNlc3Npb25EYXRhKCk7XG4gICAgdGhpcy5yZXN0YXJ0UGVybWlzc2lvbigpO1xuICAgIHRoaXMucmVkaXJlY3RMb2dpbihmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJTZXNzaW9uRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2Uuc2Vzc2lvbkV4cGlyZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0xvZ2dlZEluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvZ2luU3RvcmFnZVNlcnZpY2UuaXNMb2dnZWRJbigpO1xuICB9XG5cbiAgcHVibGljIGdldFNlc3Npb25JbmZvKCk6IFNlc3Npb25JbmZvIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JbmZvKCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcmVTZXNzaW9uSW5mbyhpbmZvOiBTZXNzaW9uSW5mbyk6IHZvaWQge1xuICAgIHRoaXMubG9naW5TdG9yYWdlU2VydmljZS5zdG9yZVNlc3Npb25JbmZvKGluZm8pO1xuICB9XG5cbiAgcmVkaXJlY3RMb2dpbihzZXNzaW9uRXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgYXJnID0ge307XG4gICAgYXJnW0NvZGVzLlNFU1NJT05fRVhQSVJFRF9LRVldID0gc2Vzc2lvbkV4cGlyZWQ7XG4gICAgY29uc3QgZXh0cmFzID0ge307XG4gICAgZXh0cmFzW0NvZGVzLlFVRVJZX1BBUkFNU10gPSBhcmc7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW0NvZGVzLkxPR0lOX1JPVVRFXSwgZXh0cmFzKTtcbiAgfVxuXG4gIHB1YmxpYyByZXN0YXJ0UGVybWlzc2lvbigpIHtcbiAgICBjb25zdCBwZXJtaXNzaW9uc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChQZXJtaXNzaW9uc1NlcnZpY2UpO1xuICAgIHBlcm1pc3Npb25zU2VydmljZS5yZXN0YXJ0KCk7XG4gIH1cblxufVxuIl19