UNPKG

@linid-dm/directory-manager-client-core

Version:

Core package by providing a set of angular components for the Directory Manager app.

148 lines 21.5 kB
/** * Copyright (C) 2020-2024 Linagora * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version, provided you comply with the Additional Terms applicable for * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU * Affero General Public License, subsections (b), (c), and (e), pursuant to * which these Appropriate Legal Notices must notably (i) retain the display of * the "LinID™" trademark/logo at the top of the interface window, the display * of the “You are using the Open Source and free version of LinID™, powered by * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise * offer!” infobox and in the e-mails sent with the Program, notice appended to * any type of outbound messages (e.g. e-mail and meeting requests) as well as * in the LinID Directory Manager user interface, (ii) retain all hypertext * links between LinID Directory Manager and https://linid.org/, as well as * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA * intellectual property rights over its trademarks and commercial brands. Other * Additional Terms apply, see <http://www.linagora.com/licenses/> for more * details. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License and * its applicable Additional Terms for LinID Directory Manager along with this * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero * General Public License version 3 and <http://www.linagora.com/licenses/> for * the Additional Terms applicable to the LinID Directory Manager software. */ import { Injectable } from '@angular/core'; import { first, of, switchMap } from 'rxjs'; import { HomepageGuard } from './features/homepage/homepage.guard'; import { DataDetailGuard } from './features/homepage/resource-page/data-detail/data-detail.guard'; import { LoginGuard } from './features/login/login.guard'; import * as i0 from "@angular/core"; import * as i1 from "@ngxs/store"; import * as i2 from "ngx-toastr"; import * as i3 from "@angular/router"; import * as i4 from "angular-oauth2-oidc"; import * as i5 from "../../shared"; import * as i6 from "./features/homepage/resource-page/resource-page.guard"; import * as i7 from "./features/homepage/resource-page/data-detail/data-detail.guard"; export const GUARDS = { LoginGuard: 'LoginGuard', HomepageGuard: 'HomepageGuard', ResourcePageGuard: 'ResourcePageGuard', DataDetailGuard: 'DataDetailGuard', }; export class AppGuard { // you may need to include dependencies of individual guards if specified in guard constructor constructor(_store$, _actions$, _toastrService, _router, _oauthService, _env, _resourcePageGuard, _dataDetailGuard) { this._store$ = _store$; this._actions$ = _actions$; this._toastrService = _toastrService; this._router = _router; this._oauthService = _oauthService; this._env = _env; this._resourcePageGuard = _resourcePageGuard; this._dataDetailGuard = _dataDetailGuard; } // This method gets triggered when the route is hit canActivate(route, state) { this._route = route; this._state = state; if (!route.data) { of(true); return; } // this.route.data.guards is an array of strings set in routing configuration if (!this._route.data.canActivateGuards || !this._route.data.canActivateGuards.length) { of(true); return; } return this.executeGuards('canActivateGuards'); } canDeactivate(component, route, state, nextState) { this._route = route; this._state = state; this._component = component; this._nextState = nextState; if (!route.data) { of(true); return; } // this.route.data.guards is an array of strings set in routing configuration if (!this._route.data.canDeactivateGuards || !this._route.data.canDeactivateGuards.length) { of(true); return; } return this.executeGuards('canDeactivateGuards'); } // Execute the guards sent in the route data executeGuards(guardType, guardIndex = 0) { return this.activateGuard(guardType, this._route.data[guardType][guardIndex]).pipe(first(), switchMap((guardResponse) => { if (guardResponse && guardIndex < this._route.data[guardType].length - 1) { return this.executeGuards(guardType, guardIndex + 1); } else { return of(guardResponse); } })); } // Create an instance of the guard and fire canActivate method returning a promise activateGuard(guardType, guardKey) { let guard; switch (guardKey) { case GUARDS.LoginGuard: guard = new LoginGuard(this._router, this._store$, this._oauthService, this._env); break; case GUARDS.HomepageGuard: guard = new HomepageGuard(this._store$, this._actions$, this._toastrService); break; case GUARDS.ResourcePageGuard: this._resourcePageGuard.resetGuardProperties(); guard = this._resourcePageGuard; break; case GUARDS.DataDetailGuard: this._dataDetailGuard.resetGuardProperties(); guard = this._dataDetailGuard; break; default: break; } if (guardType === 'canActivateGuards') { return guard.canActivate(this._route, this._state); } else if (guardType === 'canDeactivateGuards' && guard instanceof DataDetailGuard) { return guard.canDeactivate(this._component, this._route, this._state, this._nextState); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: AppGuard, deps: [{ token: i1.Store }, { token: i1.Actions }, { token: i2.ToastrService }, { token: i3.Router }, { token: i4.OAuthService }, { token: i5.EnvService }, { token: i6.ResourcePageGuard }, { token: i7.DataDetailGuard }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: AppGuard, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: AppGuard, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: () => [{ type: i1.Store }, { type: i1.Actions }, { type: i2.ToastrService }, { type: i3.Router }, { type: i4.OAuthService }, { type: i5.EnvService }, { type: i6.ResourcePageGuard }, { type: i7.DataDetailGuard }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGlicy9jbGllbnQtY29yZS9zcmMvbGliL2RtLWNvcmUvYXBwL2FwcC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBWTNDLE9BQU8sRUFBYyxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBRWxHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7O0FBRTFELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixVQUFVLEVBQUUsWUFBWTtJQUN4QixhQUFhLEVBQUUsZUFBZTtJQUM5QixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsZUFBZSxFQUFFLGlCQUFpQjtDQUNuQyxDQUFDO0FBS0YsTUFBTSxPQUFPLFFBQVE7SUFDbkIsOEZBQThGO0lBQzlGLFlBQ1UsT0FBYyxFQUNkLFNBQWtCLEVBQ2xCLGNBQTZCLEVBQzdCLE9BQWUsRUFDZixhQUEyQixFQUMzQixJQUFnQixFQUNoQixrQkFBcUMsRUFDckMsZ0JBQWlDO1FBUGpDLFlBQU8sR0FBUCxPQUFPLENBQU87UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQ2xCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FB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YTtnQkFDdkIsS0FBSyxHQUFHLElBQUksYUFBYSxDQUN2QixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FDcEIsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxNQUFNLENBQUMsaUJBQWlCO2dCQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDL0MsS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEMsTUFBTTtZQUNSLEtBQUssTUFBTSxDQUFDLGVBQWU7Z0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM3QyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUM5QixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7UUFDRCxJQUFJLFNBQVMsS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sSUFDTCxTQUFTLEtBQUsscUJBQXFCO1lBQ25DLEtBQUssWUFBWSxlQUFlLEVBQ2hDLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQyxhQUFhLENBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzs4R0E3SVUsUUFBUTtrSEFBUixRQUFRLGNBRlAsTUFBTTs7MkZBRVAsUUFBUTtrQkFIcEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoQykgMjAyMC0yMDI0IExpbmFnb3JhXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXJcbiAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZVxuICogU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnlcbiAqIGxhdGVyIHZlcnNpb24sIHByb3ZpZGVkIHlvdSBjb21wbHkgd2l0aCB0aGUgQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIGZvclxuICogTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgc29mdHdhcmUgYnkgTElOQUdPUkEgcHVyc3VhbnQgdG8gU2VjdGlvbiA3IG9mIHRoZSBHTlVcbiAqIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBzdWJzZWN0aW9ucyAoYiksIChjKSwgYW5kIChlKSwgcHVyc3VhbnQgdG9cbiAqIHdoaWNoIHRoZXNlIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMgbXVzdCBub3RhYmx5IChpKSByZXRhaW4gdGhlIGRpc3BsYXkgb2ZcbiAqIHRoZSBcIkxpbklE4oSiXCIgdHJhZGVtYXJrL2xvZ28gYXQgdGhlIHRvcCBvZiB0aGUgaW50ZXJmYWNlIHdpbmRvdywgdGhlIGRpc3BsYXlcbiAqIG9mIHRoZSDigJxZb3UgYXJlIHVzaW5nIHRoZSBPcGVuIFNvdXJjZSBhbmQgZnJlZSB2ZXJzaW9uIG9mIExpbklE4oSiLCBwb3dlcmVkIGJ5XG4gKiBMaW5hZ29yYSDCqSAyMDA54oCTMjAxMy4gQ29udHJpYnV0ZSB0byBMaW5JRCBSJkQgYnkgc3Vic2NyaWJpbmcgdG8gYW4gRW50ZXJwcmlzZVxuICogb2ZmZXIh4oCdIGluZm9ib3ggYW5kIGluIHRoZSBlLW1haWxzIHNlbnQgd2l0aCB0aGUgUHJvZ3JhbSwgbm90aWNlIGFwcGVuZGVkIHRvXG4gKiBhbnkgdHlwZSBvZiBvdXRib3VuZCBtZXNzYWdlcyAoZS5nLiBlLW1haWwgYW5kIG1lZXRpbmcgcmVxdWVzdHMpIGFzIHdlbGwgYXNcbiAqIGluIHRoZSBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciB1c2VyIGludGVyZmFjZSwgKGlpKSByZXRhaW4gYWxsIGh5cGVydGV4dFxuICogbGlua3MgYmV0d2VlbiBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBhbmQgaHR0cHM6Ly9saW5pZC5vcmcvLCBhcyB3ZWxsIGFzXG4gKiBiZXR3ZWVuIExJTkFHT1JBIGFuZCBMSU5BR09SQS5jb20sIGFuZCAoaWlpKSByZWZyYWluIGZyb20gaW5mcmluZ2luZyBMSU5BR09SQVxuICogaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdmVyIGl0cyB0cmFkZW1hcmtzIGFuZCBjb21tZXJjaWFsIGJyYW5kcy4gT3RoZXJcbiAqIEFkZGl0aW9uYWwgVGVybXMgYXBwbHksIHNlZSA8aHR0cDovL3d3dy5saW5hZ29yYS5jb20vbGljZW5zZXMvPiBmb3IgbW9yZVxuICogZGV0YWlscy5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVRcbiAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTXG4gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlXG4gKiBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmRcbiAqIGl0cyBhcHBsaWNhYmxlIEFkZGl0aW9uYWwgVGVybXMgZm9yIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIGFsb25nIHdpdGggdGhpc1xuICogcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+IGZvciB0aGUgR05VIEFmZmVyb1xuICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgYW5kIDxodHRwOi8vd3d3LmxpbmFnb3JhLmNvbS9saWNlbnNlcy8+IGZvclxuICogdGhlIEFkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgc29mdHdhcmUuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgQ2FuQWN0aXZhdGUsXG4gIENhbkRlYWN0aXZhdGUsXG4gIFJvdXRlcixcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcbiAgVXJsVHJlZSxcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFjdGlvbnMsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmaXJzdCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW52U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBIb21lcGFnZUd1YXJkIH0gZnJvbSAnLi9mZWF0dXJlcy9ob21lcGFnZS9ob21lcGFnZS5ndWFyZCc7XG5pbXBvcnQgeyBEYXRhRGV0YWlsR3VhcmQgfSBmcm9tICcuL2ZlYXR1cmVzL2hvbWVwYWdlL3Jlc291cmNlLXBhZ2UvZGF0YS1kZXRhaWwvZGF0YS1kZXRhaWwuZ3VhcmQnO1xuaW1wb3J0IHsgUmVzb3VyY2VQYWdlR3VhcmQgfSBmcm9tICcuL2ZlYXR1cmVzL2hvbWVwYWdlL3Jlc291cmNlLXBhZ2UvcmVzb3VyY2UtcGFnZS5ndWFyZCc7XG5pbXBvcnQgeyBMb2dpbkd1YXJkIH0gZnJvbSAnLi9mZWF0dXJlcy9sb2dpbi9sb2dpbi5ndWFyZCc7XG5cbmV4cG9ydCBjb25zdCBHVUFSRFMgPSB7XG4gIExvZ2luR3VhcmQ6ICdMb2dpbkd1YXJkJyxcbiAgSG9tZXBhZ2VHdWFyZDogJ0hvbWVwYWdlR3VhcmQnLFxuICBSZXNvdXJjZVBhZ2VHdWFyZDogJ1Jlc291cmNlUGFnZUd1YXJkJyxcbiAgRGF0YURldGFpbEd1YXJkOiAnRGF0YURldGFpbEd1YXJkJyxcbn07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBHdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlLCBDYW5EZWFjdGl2YXRlPHVua25vd24+IHtcbiAgLy8geW91IG1heSBuZWVkIHRvIGluY2x1ZGUgZGVwZW5kZW5jaWVzIG9mIGluZGl2aWR1YWwgZ3VhcmRzIGlmIHNwZWNpZmllZCBpbiBndWFyZCBjb25zdHJ1Y3RvclxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdG9yZSQ6IFN0b3JlLFxuICAgIHByaXZhdGUgX2FjdGlvbnMkOiBBY3Rpb25zLFxuICAgIHByaXZhdGUgX3RvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBfb2F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZW52OiBFbnZTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3Jlc291cmNlUGFnZUd1YXJkOiBSZXNvdXJjZVBhZ2VHdWFyZCxcbiAgICBwcml2YXRlIF9kYXRhRGV0YWlsR3VhcmQ6IERhdGFEZXRhaWxHdWFyZFxuICApIHt9XG5cbiAgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIHByaXZhdGUgX3N0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90O1xuICBwcml2YXRlIF9uZXh0U3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3Q7XG4gIHByaXZhdGUgX2NvbXBvbmVudDogdW5rbm93bjtcblxuICAvLyBUaGlzIG1ldGhvZCBnZXRzIHRyaWdnZXJlZCB3aGVuIHRoZSByb3V0ZSBpcyBoaXRcbiAgcHVibGljIGNhbkFjdGl2YXRlKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFVybFRyZWU+IHtcbiAgICB0aGlzLl9yb3V0ZSA9IHJvdXRlO1xuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG5cbiAgICBpZiAoIXJvdXRlLmRhdGEpIHtcbiAgICAgIG9mKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRoaXMucm91dGUuZGF0YS5ndWFyZHMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBzZXQgaW4gcm91dGluZyBjb25maWd1cmF0aW9uXG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5fcm91dGUuZGF0YS5jYW5BY3RpdmF0ZUd1YXJkcyB8fFxuICAgICAgIXRoaXMuX3JvdXRlLmRhdGEuY2FuQWN0aXZhdGVHdWFyZHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBvZih0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUd1YXJkcygnY2FuQWN0aXZhdGVHdWFyZHMnKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5EZWFjdGl2YXRlKFxuICAgIGNvbXBvbmVudDogdW5rbm93bixcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCxcbiAgICBuZXh0U3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4ge1xuICAgIHRoaXMuX3JvdXRlID0gcm91dGU7XG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLl9jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgdGhpcy5fbmV4dFN0YXRlID0gbmV4dFN0YXRlO1xuXG4gICAgaWYgKCFyb3V0ZS5kYXRhKSB7XG4gICAgICBvZih0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB0aGlzLnJvdXRlLmRhdGEuZ3VhcmRzIGlzIGFuIGFycmF5IG9mIHN0cmluZ3Mgc2V0IGluIHJvdXRpbmcgY29uZmlndXJhdGlvblxuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuX3JvdXRlLmRhdGEuY2FuRGVhY3RpdmF0ZUd1YXJkcyB8fFxuICAgICAgIXRoaXMuX3JvdXRlLmRhdGEuY2FuRGVhY3RpdmF0ZUd1YXJkcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIG9mKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlR3VhcmRzKCdjYW5EZWFjdGl2YXRlR3VhcmRzJyk7XG4gIH1cblxuICAvLyBFeGVjdXRlIHRoZSBndWFyZHMgc2VudCBpbiB0aGUgcm91dGUgZGF0YVxuICBwcml2YXRlIGV4ZWN1dGVHdWFyZHMoXG4gICAgZ3VhcmRUeXBlOiBzdHJpbmcsXG4gICAgZ3VhcmRJbmRleCA9IDBcbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2YXRlR3VhcmQoXG4gICAgICBndWFyZFR5cGUsXG4gICAgICB0aGlzLl9yb3V0ZS5kYXRhW2d1YXJkVHlwZV1bZ3VhcmRJbmRleF1cbiAgICApLnBpcGUoXG4gICAgICBmaXJzdCgpLFxuICAgICAgc3dpdGNoTWFwKChndWFyZFJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBndWFyZFJlc3BvbnNlICYmXG4gICAgICAgICAgZ3VhcmRJbmRleCA8IHRoaXMuX3JvdXRlLmRhdGFbZ3VhcmRUeXBlXS5sZW5ndGggLSAxXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVHdWFyZHMoZ3VhcmRUeXBlLCBndWFyZEluZGV4ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9mKGd1YXJkUmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvLyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGd1YXJkIGFuZCBmaXJlIGNhbkFjdGl2YXRlIG1ldGhvZCByZXR1cm5pbmcgYSBwcm9taXNlXG4gIHByaXZhdGUgYWN0aXZhdGVHdWFyZChcbiAgICBndWFyZFR5cGU6IHN0cmluZyxcbiAgICBndWFyZEtleTogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFVybFRyZWU+IHtcbiAgICBsZXQgZ3VhcmQ6IExvZ2luR3VhcmQgfCBIb21lcGFnZUd1YXJkIHwgUmVzb3VyY2VQYWdlR3VhcmQgfCBEYXRhRGV0YWlsR3VhcmQ7XG5cbiAgICBzd2l0Y2ggKGd1YXJkS2V5KSB7XG4gICAgICBjYXNlIEdVQVJEUy5Mb2dpbkd1YXJkOlxuICAgICAgICBndWFyZCA9IG5ldyBMb2dpbkd1YXJkKFxuICAgICAgICAgIHRoaXMuX3JvdXRlcixcbiAgICAgICAgICB0aGlzLl9zdG9yZSQsXG4gICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLFxuICAgICAgICAgIHRoaXMuX2VudlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgR1VBUkRTLkhvbWVwYWdlR3VhcmQ6XG4gICAgICAgIGd1YXJkID0gbmV3IEhvbWVwYWdlR3VhcmQoXG4gICAgICAgICAgdGhpcy5fc3RvcmUkLFxuICAgICAgICAgIHRoaXMuX2FjdGlvbnMkLFxuICAgICAgICAgIHRoaXMuX3RvYXN0clNlcnZpY2VcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEdVQVJEUy5SZXNvdXJjZVBhZ2VHdWFyZDpcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VQYWdlR3VhcmQucmVzZXRHdWFyZFByb3BlcnRpZXMoKTtcbiAgICAgICAgZ3VhcmQgPSB0aGlzLl9yZXNvdXJjZVBhZ2VHdWFyZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEdVQVJEUy5EYXRhRGV0YWlsR3VhcmQ6XG4gICAgICAgIHRoaXMuX2RhdGFEZXRhaWxHdWFyZC5yZXNldEd1YXJkUHJvcGVydGllcygpO1xuICAgICAgICBndWFyZCA9IHRoaXMuX2RhdGFEZXRhaWxHdWFyZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKGd1YXJkVHlwZSA9PT0gJ2NhbkFjdGl2YXRlR3VhcmRzJykge1xuICAgICAgcmV0dXJuIGd1YXJkLmNhbkFjdGl2YXRlKHRoaXMuX3JvdXRlLCB0aGlzLl9zdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGd1YXJkVHlwZSA9PT0gJ2NhbkRlYWN0aXZhdGVHdWFyZHMnICYmXG4gICAgICBndWFyZCBpbnN0YW5jZW9mIERhdGFEZXRhaWxHdWFyZFxuICAgICkge1xuICAgICAgcmV0dXJuIGd1YXJkLmNhbkRlYWN0aXZhdGUoXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudCxcbiAgICAgICAgdGhpcy5fcm91dGUsXG4gICAgICAgIHRoaXMuX3N0YXRlLFxuICAgICAgICB0aGlzLl9uZXh0U3RhdGVcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=