UNPKG

formioangular-colfuturo

Version:

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

202 lines 26.9 kB
import { Injectable } from "@angular/core"; import { Formio } from "formiojs-colfuturo"; import _intersection from "lodash/intersection"; import * as i0 from "@angular/core"; import * as i1 from "formioangular-colfuturo"; import * as i2 from "./form-manager.config"; import * as i3 from "formioangular-colfuturo/auth"; export class FormManagerService { appConfig; config; auth; formio; access; allAccessMap; ownAccessMap; ready; formReady; actionAllowed; form = null; formSrc = ""; perms = { delete: false, edit: false }; constructor(appConfig, config, auth) { this.appConfig = appConfig; this.config = config; this.auth = auth; if (this.appConfig && this.appConfig.appUrl) { Formio.setBaseUrl(this.appConfig.apiUrl); Formio.setProjectUrl(this.appConfig.appUrl); } else { console.error("You must provide an AppConfig within your application!"); } this.allAccessMap = { update_all: "formEdit", delete_all: "formDelete", }; this.ownAccessMap = { update_own: "formEdit", delete_own: "formDelete", }; this.actionAllowed = (action) => this.isActionAllowed(action); this.reset(); } isActionAllowed(action) { return this.access[action]; } setAccess() { this.access = { formCreate: true, formView: true, formSubmission: true, formEdit: true, formPermission: true, formDelete: true, projectSettings: true, userManagement: true, }; if (this.auth) { this.access = { formCreate: false, formView: false, formSubmission: false, formEdit: false, formPermission: false, formDelete: false, projectSettings: false, userManagement: false, }; this.ready = this.auth.ready.then(() => { let administrator = this.auth.roles["administrator"]; let formbuilder = this.auth.roles["formbuilder"]; let formadmin = this.auth.roles["formadmin"]; if (this.auth.user && this.auth.user.roles) { this.auth.user.roles.forEach((roleId) => { if (administrator._id === roleId) { this.access.formCreate = true; this.access.formView = true; this.access.formSubmission = true; this.access.formEdit = true; this.access.formPermission = true; this.access.formDelete = true; this.access.projectSettings = true; this.access.userManagement = true; } else { if (formadmin && formadmin._id === roleId) { this.access.formCreate = this.auth.formAccess.create_all.includes(roleId); this.access.formEdit = this.auth.formAccess.update_all.includes(roleId); this.access.formPermission = this.auth.formAccess.update_all.includes(roleId); this.access.formDelete = this.auth.formAccess.delete_all.includes(roleId); this.access.formView = this.auth.formAccess.read_all.includes(roleId); this.access.formSubmission = this.auth.formAccess.read_all.includes(roleId); } if (formbuilder && formbuilder._id === roleId) { this.access.formCreate = this.auth.formAccess.create_all.includes(roleId); this.access.formEdit = this.auth.formAccess.update_all.includes(roleId); this.access.formPermission = this.auth.formAccess.update_all.includes(roleId); this.access.formDelete = this.auth.formAccess.delete_all.includes(roleId); this.access.formView = this.auth.formAccess.read_all.includes(roleId); } } }); } }); } else { this.ready = Promise.resolve(false); } } reset(route) { if (route) { route.params.subscribe((params) => { if (params.id) { this.formio = new Formio(`${this.formio.formsUrl}/${params.id}`); } else { this.reset(); } }); } else { this.formio = new Formio(this.appConfig.appUrl); this.setAccess(); } } hasAccess(roles) { if (!this.auth.user) { return false; } return !!_intersection(roles, this.auth.user.roles).length; } setForm(form) { this.form = form; this.formSrc = this.appConfig.appUrl + "/" + form.path; if (form.access) { // Check if they have access here. form.access.forEach((access) => { // Check for all access. if (this.allAccessMap[access.type] && !this.access[this.allAccessMap[access.type]]) { this.access[this.allAccessMap[access.type]] = this.hasAccess(access.roles); } // Check for own access. if (this.auth && this.auth.user && form._id === this.auth.user._id && this.ownAccessMap[access.type] && !this.access[this.ownAccessMap[access.type]]) { this.access[this.ownAccessMap[access.type]] = this.hasAccess(access.roles); } }); } return form; } loadForm() { this.form = null; this.formReady = this.formio.loadForm().then((form) => this.setForm(form)); return this.formReady; } setSubmission(route) { return new Promise((resolve) => { route.params.subscribe((params) => { this.formio = new Formio(`${this.formio.submissionsUrl}/${params.id}`); resolve(this.formio); }); }); } submissionLoaded(submission) { this.auth.ready.then(() => { this.formio .userPermissions(this.auth.user, this.form, submission) .then((perms) => { this.perms.delete = perms.delete; this.perms.edit = perms.edit; }); }); } loadForms() { return this.formio.loadForms({ params: { tags: this.config.tag, }, }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerService, deps: [{ token: i1.FormioAppConfig }, { token: i2.FormManagerConfig }, { token: i3.FormioAuthService }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerService }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.FormioAppConfig }, { type: i2.FormManagerConfig }, { type: i3.FormioAuthService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWZvcm1pby9tYW5hZ2VyL3NyYy9mb3JtLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUc1QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFHaEQsTUFBTSxPQUFPLGtCQUFrQjtJQWFwQjtJQUNBO0lBQ0E7SUFkRixNQUFNLENBQVM7SUFDZixNQUFNLENBQU07SUFDWixZQUFZLENBQU07SUFDbEIsWUFBWSxDQUFNO0lBQ2xCLEtBQUssQ0FBZTtJQUNwQixTQUFTLENBQWU7SUFDeEIsYUFBYSxDQUFNO0lBQ25CLElBQUksR0FBRyxJQUFJLENBQUM7SUFDWixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2IsS0FBSyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFOUMsWUFDUyxTQUEwQixFQUMxQixNQUF5QixFQUN6QixJQUF1QjtRQUZ2QixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUU5QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2xCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFVBQVUsRUFBRSxZQUFZO1NBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2xCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFVBQVUsRUFBRSxZQUFZO1NBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBYztRQUM1QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLElBQUk7WUFDZCxjQUFjLEVBQUUsSUFBSTtZQUNwQixRQUFRLEVBQUUsSUFBSTtZQUNkLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLEdBQUc7Z0JBQ1osVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixRQUFRLEVBQUUsS0FBSztnQkFDZixjQUFjLEVBQUUsS0FBSztnQkFDckIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLGVBQWUsRUFBRSxLQUFLO2dCQUN0QixjQUFjLEVBQUUsS0FBSzthQUN0QixDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNyQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDckQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2pELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUU3QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBYyxFQUFFLEVBQUU7d0JBQzlDLElBQUksYUFBYSxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUUsQ0FBQzs0QkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDOzRCQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7NEJBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQzs0QkFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzRCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7NEJBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs0QkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDOzRCQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7d0JBQ3BDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dDQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7b0NBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0NBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtvQ0FDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQ0FDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjO29DQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7b0NBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0NBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtvQ0FDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQ0FDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjO29DQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNuRCxDQUFDOzRCQUNELElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7Z0NBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtvQ0FDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQ0FDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO29DQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWM7b0NBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0NBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtvQ0FDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQ0FDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO29DQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNuRCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsS0FBc0I7UUFDMUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdELENBQUM7SUFFRCxPQUFPLENBQUMsSUFBUztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzdCLHdCQUF3QjtnQkFDeEIsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQzlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUM1QyxDQUFDO29CQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUMxRCxNQUFNLENBQUMsS0FBSyxDQUNiLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCx3QkFBd0I7Z0JBQ3hCLElBQ0UsSUFBSSxDQUFDLElBQUk7b0JBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO29CQUNkLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRztvQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUM5QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDNUMsQ0FBQztvQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDMUQsTUFBTSxDQUFDLEtBQUssQ0FDYixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXFCO1FBQ2pDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFlO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU07aUJBQ1IsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO2lCQUN0RCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDM0IsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7YUFDdEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXpNVSxrQkFBa0I7NEdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtaW9BcHBDb25maWcgfSBmcm9tIFwiZm9ybWlvYW5ndWxhci1jb2xmdXR1cm9cIjtcclxuaW1wb3J0IHsgRm9ybU1hbmFnZXJDb25maWcgfSBmcm9tIFwiLi9mb3JtLW1hbmFnZXIuY29uZmlnXCI7XHJcbmltcG9ydCB7IEZvcm1pbyB9IGZyb20gXCJmb3JtaW9qcy1jb2xmdXR1cm9cIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEZvcm1pb0F1dGhTZXJ2aWNlIH0gZnJvbSBcImZvcm1pb2FuZ3VsYXItY29sZnV0dXJvL2F1dGhcIjtcclxuaW1wb3J0IF9pbnRlcnNlY3Rpb24gZnJvbSBcImxvZGFzaC9pbnRlcnNlY3Rpb25cIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEZvcm1NYW5hZ2VyU2VydmljZSB7XHJcbiAgcHVibGljIGZvcm1pbzogRm9ybWlvO1xyXG4gIHB1YmxpYyBhY2Nlc3M6IGFueTtcclxuICBwdWJsaWMgYWxsQWNjZXNzTWFwOiBhbnk7XHJcbiAgcHVibGljIG93bkFjY2Vzc01hcDogYW55O1xyXG4gIHB1YmxpYyByZWFkeTogUHJvbWlzZTxhbnk+O1xyXG4gIHB1YmxpYyBmb3JtUmVhZHk6IFByb21pc2U8YW55PjtcclxuICBwdWJsaWMgYWN0aW9uQWxsb3dlZDogYW55O1xyXG4gIHB1YmxpYyBmb3JtID0gbnVsbDtcclxuICBwdWJsaWMgZm9ybVNyYyA9IFwiXCI7XHJcbiAgcHVibGljIHBlcm1zID0geyBkZWxldGU6IGZhbHNlLCBlZGl0OiBmYWxzZSB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBhcHBDb25maWc6IEZvcm1pb0FwcENvbmZpZyxcclxuICAgIHB1YmxpYyBjb25maWc6IEZvcm1NYW5hZ2VyQ29uZmlnLFxyXG4gICAgcHVibGljIGF1dGg6IEZvcm1pb0F1dGhTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5hcHBDb25maWcgJiYgdGhpcy5hcHBDb25maWcuYXBwVXJsKSB7XHJcbiAgICAgIEZvcm1pby5zZXRCYXNlVXJsKHRoaXMuYXBwQ29uZmlnLmFwaVVybCk7XHJcbiAgICAgIEZvcm1pby5zZXRQcm9qZWN0VXJsKHRoaXMuYXBwQ29uZmlnLmFwcFVybCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiWW91IG11c3QgcHJvdmlkZSBhbiBBcHBDb25maWcgd2l0aGluIHlvdXIgYXBwbGljYXRpb24hXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWxsQWNjZXNzTWFwID0ge1xyXG4gICAgICB1cGRhdGVfYWxsOiBcImZvcm1FZGl0XCIsXHJcbiAgICAgIGRlbGV0ZV9hbGw6IFwiZm9ybURlbGV0ZVwiLFxyXG4gICAgfTtcclxuICAgIHRoaXMub3duQWNjZXNzTWFwID0ge1xyXG4gICAgICB1cGRhdGVfb3duOiBcImZvcm1FZGl0XCIsXHJcbiAgICAgIGRlbGV0ZV9vd246IFwiZm9ybURlbGV0ZVwiLFxyXG4gICAgfTtcclxuICAgIHRoaXMuYWN0aW9uQWxsb3dlZCA9IChhY3Rpb24pID0+IHRoaXMuaXNBY3Rpb25BbGxvd2VkKGFjdGlvbik7XHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuICBpc0FjdGlvbkFsbG93ZWQoYWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFjY2Vzc1thY3Rpb25dO1xyXG4gIH1cclxuXHJcbiAgc2V0QWNjZXNzKCkge1xyXG4gICAgdGhpcy5hY2Nlc3MgPSB7XHJcbiAgICAgIGZvcm1DcmVhdGU6IHRydWUsXHJcbiAgICAgIGZvcm1WaWV3OiB0cnVlLFxyXG4gICAgICBmb3JtU3VibWlzc2lvbjogdHJ1ZSxcclxuICAgICAgZm9ybUVkaXQ6IHRydWUsXHJcbiAgICAgIGZvcm1QZXJtaXNzaW9uOiB0cnVlLFxyXG4gICAgICBmb3JtRGVsZXRlOiB0cnVlLFxyXG4gICAgICBwcm9qZWN0U2V0dGluZ3M6IHRydWUsXHJcbiAgICAgIHVzZXJNYW5hZ2VtZW50OiB0cnVlLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmF1dGgpIHtcclxuICAgICAgdGhpcy5hY2Nlc3MgPSB7XHJcbiAgICAgICAgZm9ybUNyZWF0ZTogZmFsc2UsXHJcbiAgICAgICAgZm9ybVZpZXc6IGZhbHNlLFxyXG4gICAgICAgIGZvcm1TdWJtaXNzaW9uOiBmYWxzZSxcclxuICAgICAgICBmb3JtRWRpdDogZmFsc2UsXHJcbiAgICAgICAgZm9ybVBlcm1pc3Npb246IGZhbHNlLFxyXG4gICAgICAgIGZvcm1EZWxldGU6IGZhbHNlLFxyXG4gICAgICAgIHByb2plY3RTZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgdXNlck1hbmFnZW1lbnQ6IGZhbHNlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnJlYWR5ID0gdGhpcy5hdXRoLnJlYWR5LnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGxldCBhZG1pbmlzdHJhdG9yID0gdGhpcy5hdXRoLnJvbGVzW1wiYWRtaW5pc3RyYXRvclwiXTtcclxuICAgICAgICBsZXQgZm9ybWJ1aWxkZXIgPSB0aGlzLmF1dGgucm9sZXNbXCJmb3JtYnVpbGRlclwiXTtcclxuICAgICAgICBsZXQgZm9ybWFkbWluID0gdGhpcy5hdXRoLnJvbGVzW1wiZm9ybWFkbWluXCJdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRoLnVzZXIgJiYgdGhpcy5hdXRoLnVzZXIucm9sZXMpIHtcclxuICAgICAgICAgIHRoaXMuYXV0aC51c2VyLnJvbGVzLmZvckVhY2goKHJvbGVJZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChhZG1pbmlzdHJhdG9yLl9pZCA9PT0gcm9sZUlkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybUNyZWF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybVZpZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1TdWJtaXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybVBlcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1EZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWNjZXNzLnByb2plY3RTZXR0aW5ncyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MudXNlck1hbmFnZW1lbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChmb3JtYWRtaW4gJiYgZm9ybWFkbWluLl9pZCA9PT0gcm9sZUlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtQ3JlYXRlID1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoLmZvcm1BY2Nlc3MuY3JlYXRlX2FsbC5pbmNsdWRlcyhyb2xlSWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybUVkaXQgPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dGguZm9ybUFjY2Vzcy51cGRhdGVfYWxsLmluY2x1ZGVzKHJvbGVJZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtUGVybWlzc2lvbiA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aC5mb3JtQWNjZXNzLnVwZGF0ZV9hbGwuaW5jbHVkZXMocm9sZUlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1EZWxldGUgPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dGguZm9ybUFjY2Vzcy5kZWxldGVfYWxsLmluY2x1ZGVzKHJvbGVJZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtVmlldyA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aC5mb3JtQWNjZXNzLnJlYWRfYWxsLmluY2x1ZGVzKHJvbGVJZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtU3VibWlzc2lvbiA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aC5mb3JtQWNjZXNzLnJlYWRfYWxsLmluY2x1ZGVzKHJvbGVJZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChmb3JtYnVpbGRlciAmJiBmb3JtYnVpbGRlci5faWQgPT09IHJvbGVJZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybUNyZWF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aC5mb3JtQWNjZXNzLmNyZWF0ZV9hbGwuaW5jbHVkZXMocm9sZUlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzLmZvcm1FZGl0ID1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoLmZvcm1BY2Nlc3MudXBkYXRlX2FsbC5pbmNsdWRlcyhyb2xlSWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybVBlcm1pc3Npb24gPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dGguZm9ybUFjY2Vzcy51cGRhdGVfYWxsLmluY2x1ZGVzKHJvbGVJZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzcy5mb3JtRGVsZXRlID1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoLmZvcm1BY2Nlc3MuZGVsZXRlX2FsbC5pbmNsdWRlcyhyb2xlSWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3MuZm9ybVZpZXcgPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmF1dGguZm9ybUFjY2Vzcy5yZWFkX2FsbC5pbmNsdWRlcyhyb2xlSWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVhZHkgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQocm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSkge1xyXG4gICAgaWYgKHJvdXRlKSB7XHJcbiAgICAgIHJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICAgIGlmIChwYXJhbXMuaWQpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybWlvID0gbmV3IEZvcm1pbyhgJHt0aGlzLmZvcm1pby5mb3Jtc1VybH0vJHtwYXJhbXMuaWR9YCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtaW8gPSBuZXcgRm9ybWlvKHRoaXMuYXBwQ29uZmlnLmFwcFVybCk7XHJcbiAgICAgIHRoaXMuc2V0QWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNBY2Nlc3Mocm9sZXMpIHtcclxuICAgIGlmICghdGhpcy5hdXRoLnVzZXIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhX2ludGVyc2VjdGlvbihyb2xlcywgdGhpcy5hdXRoLnVzZXIucm9sZXMpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHNldEZvcm0oZm9ybTogYW55KSB7XHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtO1xyXG4gICAgdGhpcy5mb3JtU3JjID0gdGhpcy5hcHBDb25maWcuYXBwVXJsICsgXCIvXCIgKyBmb3JtLnBhdGg7XHJcbiAgICBpZiAoZm9ybS5hY2Nlc3MpIHtcclxuICAgICAgLy8gQ2hlY2sgaWYgdGhleSBoYXZlIGFjY2VzcyBoZXJlLlxyXG4gICAgICBmb3JtLmFjY2Vzcy5mb3JFYWNoKChhY2Nlc3MpID0+IHtcclxuICAgICAgICAvLyBDaGVjayBmb3IgYWxsIGFjY2Vzcy5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmFsbEFjY2Vzc01hcFthY2Nlc3MudHlwZV0gJiZcclxuICAgICAgICAgICF0aGlzLmFjY2Vzc1t0aGlzLmFsbEFjY2Vzc01hcFthY2Nlc3MudHlwZV1dXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmFjY2Vzc1t0aGlzLmFsbEFjY2Vzc01hcFthY2Nlc3MudHlwZV1dID0gdGhpcy5oYXNBY2Nlc3MoXHJcbiAgICAgICAgICAgIGFjY2Vzcy5yb2xlc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGZvciBvd24gYWNjZXNzLlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuYXV0aCAmJlxyXG4gICAgICAgICAgdGhpcy5hdXRoLnVzZXIgJiZcclxuICAgICAgICAgIGZvcm0uX2lkID09PSB0aGlzLmF1dGgudXNlci5faWQgJiZcclxuICAgICAgICAgIHRoaXMub3duQWNjZXNzTWFwW2FjY2Vzcy50eXBlXSAmJlxyXG4gICAgICAgICAgIXRoaXMuYWNjZXNzW3RoaXMub3duQWNjZXNzTWFwW2FjY2Vzcy50eXBlXV1cclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuYWNjZXNzW3RoaXMub3duQWNjZXNzTWFwW2FjY2Vzcy50eXBlXV0gPSB0aGlzLmhhc0FjY2VzcyhcclxuICAgICAgICAgICAgYWNjZXNzLnJvbGVzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG4gIGxvYWRGb3JtKCkge1xyXG4gICAgdGhpcy5mb3JtID0gbnVsbDtcclxuICAgIHRoaXMuZm9ybVJlYWR5ID0gdGhpcy5mb3JtaW8ubG9hZEZvcm0oKS50aGVuKChmb3JtKSA9PiB0aGlzLnNldEZvcm0oZm9ybSkpO1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybVJlYWR5O1xyXG4gIH1cclxuXHJcbiAgc2V0U3VibWlzc2lvbihyb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICByb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1pbyA9IG5ldyBGb3JtaW8oYCR7dGhpcy5mb3JtaW8uc3VibWlzc2lvbnNVcmx9LyR7cGFyYW1zLmlkfWApO1xyXG4gICAgICAgIHJlc29sdmUodGhpcy5mb3JtaW8pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3VibWlzc2lvbkxvYWRlZChzdWJtaXNzaW9uOiBhbnkpIHtcclxuICAgIHRoaXMuYXV0aC5yZWFkeS50aGVuKCgpID0+IHtcclxuICAgICAgdGhpcy5mb3JtaW9cclxuICAgICAgICAudXNlclBlcm1pc3Npb25zKHRoaXMuYXV0aC51c2VyLCB0aGlzLmZvcm0sIHN1Ym1pc3Npb24pXHJcbiAgICAgICAgLnRoZW4oKHBlcm1zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBlcm1zLmRlbGV0ZSA9IHBlcm1zLmRlbGV0ZTtcclxuICAgICAgICAgIHRoaXMucGVybXMuZWRpdCA9IHBlcm1zLmVkaXQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRGb3JtcygpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1pby5sb2FkRm9ybXMoe1xyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICB0YWdzOiB0aGlzLmNvbmZpZy50YWcsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19