UNPKG

formioangular-colfuturo

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.

203 lines 25.8 kB
import { EventEmitter, Injectable } from "@angular/core"; import { get, each } from "lodash"; import { Formio } from "formiojs-colfuturo"; import * as i0 from "@angular/core"; import * as i1 from "formioangular-colfuturo"; import * as i2 from "./auth.config"; export class FormioAuthService { appConfig; config; user; authenticated = false; loginForm; onLogin; onLogout; registerForm; onRegister; onUser; onError; resetPassForm; onResetPass; ready; readyResolve; readyReject; projectReady; accessReady; userReady; formAccess = {}; submissionAccess = {}; roles; is = {}; constructor(appConfig, config) { this.appConfig = appConfig; this.config = config; this.user = null; if (this.appConfig && this.appConfig.appUrl) { Formio.setBaseUrl(this.appConfig.apiUrl); Formio.setProjectUrl(this.appConfig.appUrl); Formio.formOnly = !!this.appConfig.formOnly; } else { console.error("You must provide an AppConfig within your application!"); } this.loginForm = this.appConfig.appUrl + "/" + get(this.config, "login.form", "user/login"); this.registerForm = this.appConfig.appUrl + "/" + get(this.config, "register.form", "user/register"); this.resetPassForm = this.appConfig.appUrl + "/" + get(this.config, "resetpass.form", "resetpass"); this.onLogin = new EventEmitter(); this.onLogout = new EventEmitter(); this.onRegister = new EventEmitter(); this.onUser = new EventEmitter(); this.onError = new EventEmitter(); this.ready = new Promise((resolve, reject) => { this.readyResolve = resolve; this.readyReject = reject; }); // Register for the core events. Formio.events.on("formio.badToken", () => this.logoutError()); Formio.events.on("formio.sessionExpired", () => this.logoutError()); if (!this.config.delayAuth) { this.init(); } } onLoginSubmit(submission) { this.setUser(submission); this.onLogin.emit(submission); } onRegisterSubmit(submission) { this.setUser(submission); this.onRegister.emit(submission); } onResetPassSubmit(submission) { this.onResetPass.emit(submission); } init() { this.projectReady = Formio.makeStaticRequest(this.appConfig.appUrl).then((project) => { each(project.access, (access) => { this.formAccess[access.type] = access.roles; }); }, () => { this.formAccess = {}; return null; }); // Get the access for this project. this.accessReady = Formio.makeStaticRequest(this.appConfig.appUrl + "/access") .then((access) => { each(access.forms, (form) => { this.submissionAccess[form.name] = {}; form.submissionAccess.forEach((subAccess) => { this.submissionAccess[form.name][subAccess.type] = subAccess.roles; }); }); this.roles = access.roles; return access; }) .catch((err) => { if (err === "Token Expired" || err === "Bad Token") { this.setUser(null); } this.roles = {}; return null; }); let currentUserPromise; if (this.config.oauth) { // Make a fix to the hash to remove starting "/" that angular might put there. if (window.location.hash && window.location.hash.match(/^#\/access_token/)) { history.pushState(null, null, window.location.hash.replace(/^#\/access_token/, "#access_token")); } // Initiate the SSO if they provide oauth settings. currentUserPromise = Formio.ssoInit(this.config.oauth.type, this.config.oauth.options); } else { currentUserPromise = Formio.currentUser(null, { ignoreCache: true, }); } this.userReady = currentUserPromise .then((user) => { this.setUser(user); return user; }) .catch((err) => { this.setUser(null); throw err; }); // Trigger we are redy when all promises have resolved. if (this.accessReady) { this.accessReady .then(() => this.projectReady) .then(() => this.userReady) .then(() => this.readyResolve(true)) .catch((err) => this.readyReject(err)); } } setUser(user) { const namespace = Formio.namespace || "formio"; if (user) { this.user = user; localStorage.setItem(`${namespace}AppUser`, JSON.stringify(user)); this.setUserRoles(); Formio.setUser(user); } else { this.user = null; this.is = {}; localStorage.removeItem(`${namespace}AppUser`); Formio.clearCache(); Formio.setUser(null); } this.authenticated = !!Formio.getToken(); this.onUser.emit(this.user); } setUserRoles() { if (this.accessReady) { this.accessReady.then(() => { each(this.roles, (role, roleName) => { if (this.user.roles.indexOf(role._id) !== -1) { this.is[roleName] = true; } }); }); } } logoutError() { this.setUser(null); const namespace = Formio.namespace || "formio"; localStorage.removeItem(`${namespace}Token`); this.onError.emit(); } logout() { const namespace = Formio.namespace || "formio"; const tokenName = `${namespace}Token`; localStorage.removeItem(tokenName); if (Formio.tokens && Formio.tokens.hasOwnProperty(tokenName)) { delete Formio.tokens[tokenName]; } Formio.logout() .then(() => { this.setUser(null); if (localStorage.getItem(`${namespace}LogoutAuthUrl`)) { window.open(localStorage.getItem(`${namespace}LogoutAuthUrl`), null, "width=1020,height=618"); localStorage.removeItem(`${namespace}LogoutAuthUrl`); } this.onLogout.emit(); }) .catch(() => this.logoutError()); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormioAuthService, deps: [{ token: i1.FormioAppConfig }, { token: i2.FormioAuthConfig }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormioAuthService }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormioAuthService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.FormioAppConfig }, { type: i2.FormioAuthConfig }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vYXV0aC9zcmMvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc1QyxNQUFNLE9BQU8saUJBQWlCO0lBNkJuQjtJQUNBO0lBN0JGLElBQUksQ0FBTTtJQUNWLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFdEIsU0FBUyxDQUFTO0lBQ2xCLE9BQU8sQ0FBdUI7SUFDOUIsUUFBUSxDQUF1QjtJQUUvQixZQUFZLENBQVM7SUFDckIsVUFBVSxDQUF1QjtJQUNqQyxNQUFNLENBQXVCO0lBQzdCLE9BQU8sQ0FBb0I7SUFFM0IsYUFBYSxDQUFTO0lBQ3RCLFdBQVcsQ0FBdUI7SUFFbEMsS0FBSyxDQUFtQjtJQUN4QixZQUFZLENBQU07SUFDbEIsV0FBVyxDQUFNO0lBRWpCLFlBQVksQ0FBZ0I7SUFDNUIsV0FBVyxDQUFnQjtJQUMzQixTQUFTLENBQWdCO0lBQ3pCLFVBQVUsR0FBUSxFQUFFLENBQUM7SUFDckIsZ0JBQWdCLEdBQVEsRUFBRSxDQUFDO0lBQzNCLEtBQUssQ0FBTTtJQUNYLEVBQUUsR0FBUSxFQUFFLENBQUM7SUFFcEIsWUFDUyxTQUEwQixFQUMxQixNQUF3QjtRQUR4QixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUUvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUVqQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUs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QWMsQ0FBQyxTQUFTLENBQUMsRUFDaEQsQ0FBQztZQUNELE9BQVEsTUFBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsTUFBTSxDQUFDLE1BQU0sRUFBRTthQUNaLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsTUFBTSxDQUFDLElBQUksQ0FDVCxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxlQUFlLENBQUMsRUFDakQsSUFBSSxFQUNKLHVCQUF1QixDQUN4QixDQUFDO2dCQUNGLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO3dHQXZPVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1pb0F1dGhDb25maWcgfSBmcm9tIFwiLi9hdXRoLmNvbmZpZ1wiO1xuaW1wb3J0IHsgRm9ybWlvQXBwQ29uZmlnIH0gZnJvbSBcImZvcm1pb2FuZ3VsYXItY29sZnV0dXJvXCI7XG5pbXBvcnQgeyBnZXQsIGVhY2ggfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgeyBGb3JtaW8gfSBmcm9tIFwiZm9ybWlvanMtY29sZnV0dXJvXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGb3JtaW9BdXRoU2VydmljZSB7XG4gIHB1YmxpYyB1c2VyOiBhbnk7XG4gIHB1YmxpYyBhdXRoZW50aWNhdGVkID0gZmFsc2U7XG5cbiAgcHVibGljIGxvZ2luRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgb25Mb2dpbjogRXZlbnRFbWl0dGVyPG9iamVjdD47XG4gIHB1YmxpYyBvbkxvZ291dDogRXZlbnRFbWl0dGVyPG9iamVjdD47XG5cbiAgcHVibGljIHJlZ2lzdGVyRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgb25SZWdpc3RlcjogRXZlbnRFbWl0dGVyPG9iamVjdD47XG4gIHB1YmxpYyBvblVzZXI6IEV2ZW50RW1pdHRlcjxvYmplY3Q+O1xuICBwdWJsaWMgb25FcnJvcjogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgcHVibGljIHJlc2V0UGFzc0Zvcm06IHN0cmluZztcbiAgcHVibGljIG9uUmVzZXRQYXNzOiBFdmVudEVtaXR0ZXI8b2JqZWN0PjtcblxuICBwdWJsaWMgcmVhZHk6IFByb21pc2U8Ym9vbGVhbj47XG4gIHB1YmxpYyByZWFkeVJlc29sdmU6IGFueTtcbiAgcHVibGljIHJlYWR5UmVqZWN0OiBhbnk7XG5cbiAgcHVibGljIHByb2plY3RSZWFkeT86IFByb21pc2U8YW55PjtcbiAgcHVibGljIGFjY2Vzc1JlYWR5PzogUHJvbWlzZTxhbnk+O1xuICBwdWJsaWMgdXNlclJlYWR5PzogUHJvbWlzZTxhbnk+O1xuICBwdWJsaWMgZm9ybUFjY2VzczogYW55ID0ge307XG4gIHB1YmxpYyBzdWJtaXNzaW9uQWNjZXNzOiBhbnkgPSB7fTtcbiAgcHVibGljIHJvbGVzOiBhbnk7XG4gIHB1YmxpYyBpczogYW55ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFwcENvbmZpZzogRm9ybWlvQXBwQ29uZmlnLFxuICAgIHB1YmxpYyBjb25maWc6IEZvcm1pb0F1dGhDb25maWdcbiAgKSB7XG4gICAgdGhpcy51c2VyID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmFwcENvbmZpZyAmJiB0aGlzLmFwcENvbmZpZy5hcHBVcmwpIHtcbiAgICAgIEZvcm1pby5zZXRCYXNlVXJsKHRoaXMuYXBwQ29uZmlnLmFwaVVybCk7XG4gICAgICBGb3JtaW8uc2V0UHJvamVjdFVybCh0aGlzLmFwcENvbmZpZy5hcHBVcmwpO1xuICAgICAgRm9ybWlvLmZvcm1Pbmx5ID0gISF0aGlzLmFwcENvbmZpZy5mb3JtT25seTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcIllvdSBtdXN0IHByb3ZpZGUgYW4gQXBwQ29uZmlnIHdpdGhpbiB5b3VyIGFwcGxpY2F0aW9uIVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2luRm9ybSA9XG4gICAgICB0aGlzLmFwcENvbmZpZy5hcHBVcmwgK1xuICAgICAgXCIvXCIgK1xuICAgICAgZ2V0KHRoaXMuY29uZmlnLCBcImxvZ2luLmZvcm1cIiwgXCJ1c2VyL2xvZ2luXCIpO1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtID1cbiAgICAgIHRoaXMuYXBwQ29uZmlnLmFwcFVybCArXG4gICAgICBcIi9cIiArXG4gICAgICBnZXQodGhpcy5jb25maWcsIFwicmVnaXN0ZXIuZm9ybVwiLCBcInVzZXIvcmVnaXN0ZXJcIik7XG4gICAgdGhpcy5yZXNldFBhc3NGb3JtID1cbiAgICAgIHRoaXMuYXBwQ29uZmlnLmFwcFVybCArXG4gICAgICBcIi9cIiArXG4gICAgICBnZXQodGhpcy5jb25maWcsIFwicmVzZXRwYXNzLmZvcm1cIiwgXCJyZXNldHBhc3NcIik7XG4gICAgdGhpcy5vbkxvZ2luID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMub25Mb2dvdXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5vblJlZ2lzdGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMub25Vc2VyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMub25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMucmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55LCByZWplY3Q6IGFueSkgPT4ge1xuICAgICAgdGhpcy5yZWFkeVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgdGhpcy5yZWFkeVJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcblxuICAgIC8vIFJlZ2lzdGVyIGZvciB0aGUgY29yZSBldmVudHMuXG4gICAgRm9ybWlvLmV2ZW50cy5vbihcImZvcm1pby5iYWRUb2tlblwiLCAoKSA9PiB0aGlzLmxvZ291dEVycm9yKCkpO1xuICAgIEZvcm1pby5ldmVudHMub24oXCJmb3JtaW8uc2Vzc2lvbkV4cGlyZWRcIiwgKCkgPT4gdGhpcy5sb2dvdXRFcnJvcigpKTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRlbGF5QXV0aCkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgb25Mb2dpblN1Ym1pdChzdWJtaXNzaW9uOiBvYmplY3QpIHtcbiAgICB0aGlzLnNldFVzZXIoc3VibWlzc2lvbik7XG4gICAgdGhpcy5vbkxvZ2luLmVtaXQoc3VibWlzc2lvbik7XG4gIH1cblxuICBvblJlZ2lzdGVyU3VibWl0KHN1Ym1pc3Npb246IG9iamVjdCkge1xuICAgIHRoaXMuc2V0VXNlcihzdWJtaXNzaW9uKTtcbiAgICB0aGlzLm9uUmVnaXN0ZXIuZW1pdChzdWJtaXNzaW9uKTtcbiAgfVxuXG4gIG9uUmVzZXRQYXNzU3VibWl0KHN1Ym1pc3Npb246IG9iamVjdCkge1xuICAgIHRoaXMub25SZXNldFBhc3MuZW1pdChzdWJtaXNzaW9uKTtcbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgdGhpcy5wcm9qZWN0UmVhZHkgPSBGb3JtaW8ubWFrZVN0YXRpY1JlcXVlc3QodGhpcy5hcHBDb25maWcuYXBwVXJsKS50aGVuKFxuICAgICAgKHByb2plY3Q6IGFueSkgPT4ge1xuICAgICAgICBlYWNoKHByb2plY3QuYWNjZXNzLCAoYWNjZXNzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmZvcm1BY2Nlc3NbYWNjZXNzLnR5cGVdID0gYWNjZXNzLnJvbGVzO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAoKTogYW55ID0+IHtcbiAgICAgICAgdGhpcy5mb3JtQWNjZXNzID0ge307XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBHZXQgdGhlIGFjY2VzcyBmb3IgdGhpcyBwcm9qZWN0LlxuICAgIHRoaXMuYWNjZXNzUmVhZHkgPSBGb3JtaW8ubWFrZVN0YXRpY1JlcXVlc3QoXG4gICAgICB0aGlzLmFwcENvbmZpZy5hcHBVcmwgKyBcIi9hY2Nlc3NcIlxuICAgIClcbiAgICAgIC50aGVuKChhY2Nlc3M6IGFueSkgPT4ge1xuICAgICAgICBlYWNoKGFjY2Vzcy5mb3JtcywgKGZvcm06IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkFjY2Vzc1tmb3JtLm5hbWVdID0ge307XG4gICAgICAgICAgZm9ybS5zdWJtaXNzaW9uQWNjZXNzLmZvckVhY2goKHN1YkFjY2VzczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25BY2Nlc3NbZm9ybS5uYW1lXVtzdWJBY2Nlc3MudHlwZV0gPSBzdWJBY2Nlc3Mucm9sZXM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvbGVzID0gYWNjZXNzLnJvbGVzO1xuICAgICAgICByZXR1cm4gYWNjZXNzO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKTogYW55ID0+IHtcbiAgICAgICAgaWYgKGVyciA9PT0gXCJUb2tlbiBFeHBpcmVkXCIgfHwgZXJyID09PSBcIkJhZCBUb2tlblwiKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9sZXMgPSB7fTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcblxuICAgIGxldCBjdXJyZW50VXNlclByb21pc2U6IFByb21pc2U8YW55PjtcbiAgICBpZiAodGhpcy5jb25maWcub2F1dGgpIHtcbiAgICAgIC8vIE1ha2UgYSBmaXggdG8gdGhlIGhhc2ggdG8gcmVtb3ZlIHN0YXJ0aW5nIFwiL1wiIHRoYXQgYW5ndWxhciBtaWdodCBwdXQgdGhlcmUuXG4gICAgICBpZiAoXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoICYmXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoLm1hdGNoKC9eI1xcL2FjY2Vzc190b2tlbi8pXG4gICAgICApIHtcbiAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoL14jXFwvYWNjZXNzX3Rva2VuLywgXCIjYWNjZXNzX3Rva2VuXCIpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEluaXRpYXRlIHRoZSBTU08gaWYgdGhleSBwcm92aWRlIG9hdXRoIHNldHRpbmdzLlxuICAgICAgY3VycmVudFVzZXJQcm9taXNlID0gRm9ybWlvLnNzb0luaXQoXG4gICAgICAgIHRoaXMuY29uZmlnLm9hdXRoLnR5cGUsXG4gICAgICAgIHRoaXMuY29uZmlnLm9hdXRoLm9wdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRVc2VyUHJvbWlzZSA9IEZvcm1pby5jdXJyZW50VXNlcihudWxsLCB7XG4gICAgICAgIGlnbm9yZUNhY2hlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyUmVhZHkgPSBjdXJyZW50VXNlclByb21pc2VcbiAgICAgIC50aGVuKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpO1xuICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICB0aGlzLnNldFVzZXIobnVsbCk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH0pO1xuXG4gICAgLy8gVHJpZ2dlciB3ZSBhcmUgcmVkeSB3aGVuIGFsbCBwcm9taXNlcyBoYXZlIHJlc29sdmVkLlxuICAgIGlmICh0aGlzLmFjY2Vzc1JlYWR5KSB7XG4gICAgICB0aGlzLmFjY2Vzc1JlYWR5XG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMucHJvamVjdFJlYWR5KVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLnVzZXJSZWFkeSlcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5yZWFkeVJlc29sdmUodHJ1ZSkpXG4gICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHRoaXMucmVhZHlSZWplY3QoZXJyKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0VXNlcih1c2VyOiBhbnkpIHtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBGb3JtaW8ubmFtZXNwYWNlIHx8IFwiZm9ybWlvXCI7XG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHtuYW1lc3BhY2V9QXBwVXNlcmAsIEpTT04uc3RyaW5naWZ5KHVzZXIpKTtcbiAgICAgIHRoaXMuc2V0VXNlclJvbGVzKCk7XG4gICAgICBGb3JtaW8uc2V0VXNlcih1c2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VyID0gbnVsbDtcbiAgICAgIHRoaXMuaXMgPSB7fTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke25hbWVzcGFjZX1BcHBVc2VyYCk7XG4gICAgICBGb3JtaW8uY2xlYXJDYWNoZSgpO1xuICAgICAgRm9ybWlvLnNldFVzZXIobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5hdXRoZW50aWNhdGVkID0gISFGb3JtaW8uZ2V0VG9rZW4oKTtcbiAgICB0aGlzLm9uVXNlci5lbWl0KHRoaXMudXNlcik7XG4gIH1cblxuICBzZXRVc2VyUm9sZXMoKSB7XG4gICAgaWYgKHRoaXMuYWNjZXNzUmVhZHkpIHtcbiAgICAgIHRoaXMuYWNjZXNzUmVhZHkudGhlbigoKSA9PiB7XG4gICAgICAgIGVhY2godGhpcy5yb2xlcywgKHJvbGU6IGFueSwgcm9sZU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXIucm9sZXMuaW5kZXhPZihyb2xlLl9pZCkgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmlzW3JvbGVOYW1lXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvZ291dEVycm9yKCkge1xuICAgIHRoaXMuc2V0VXNlcihudWxsKTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBGb3JtaW8ubmFtZXNwYWNlIHx8IFwiZm9ybWlvXCI7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7bmFtZXNwYWNlfVRva2VuYCk7XG4gICAgdGhpcy5vbkVycm9yLmVtaXQoKTtcbiAgfVxuXG4gIGxvZ291dCgpIHtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBGb3JtaW8ubmFtZXNwYWNlIHx8IFwiZm9ybWlvXCI7XG4gICAgY29uc3QgdG9rZW5OYW1lID0gYCR7bmFtZXNwYWNlfVRva2VuYDtcblxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRva2VuTmFtZSk7XG4gICAgaWYgKFxuICAgICAgKEZvcm1pbyBhcyBhbnkpLnRva2VucyAmJlxuICAgICAgKEZvcm1pbyBhcyBhbnkpLnRva2Vucy5oYXNPd25Qcm9wZXJ0eSh0b2tlbk5hbWUpXG4gICAgKSB7XG4gICAgICBkZWxldGUgKEZvcm1pbyBhcyBhbnkpLnRva2Vuc1t0b2tlbk5hbWVdO1xuICAgIH1cblxuICAgIEZvcm1pby5sb2dvdXQoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFVzZXIobnVsbCk7XG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtuYW1lc3BhY2V9TG9nb3V0QXV0aFVybGApKSB7XG4gICAgICAgICAgd2luZG93Lm9wZW4oXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtuYW1lc3BhY2V9TG9nb3V0QXV0aFVybGApLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIFwid2lkdGg9MTAyMCxoZWlnaHQ9NjE4XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke25hbWVzcGFjZX1Mb2dvdXRBdXRoVXJsYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkxvZ291dC5lbWl0KCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHRoaXMubG9nb3V0RXJyb3IoKSk7XG4gIH1cbn1cbiJdfQ==