UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

139 lines 18.3 kB
import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core'; import { LoadingEmitter } from '../../utility/loading-emitter'; import { take } from 'rxjs/operators'; import { NAE_DEFAULT_MIN_PASSWORD_LENGTH, NAE_MIN_PASSWORD_LENGTH } from "../min-password-length-token"; import * as i0 from "@angular/core"; import * as i1 from "../../authentication/sign-up/services/sign-up.service"; import * as i2 from "../../logger/services/logger.service"; import * as i3 from "@ngx-translate/core"; /** * Holds the logic that is shared between `RegistrationFormComponent` and `ForgottenPasswordFormComponent`. */ export class AbstractRegistrationComponent { _signupService; _log; _translate; minPasswordLength; rootFormGroup; hidePassword; hideRepeatPassword; formSubmit; register; /** * Emits whenever the provided token gets resolved as invalid */ invalidToken; _token; _tokenVerified; loadingToken; loadingSubmit; userEmail; constructor(_signupService, _log, _translate, minPasswordLength) { this._signupService = _signupService; this._log = _log; this._translate = _translate; this.minPasswordLength = minPasswordLength; this.minPasswordLength = minPasswordLength ?? NAE_DEFAULT_MIN_PASSWORD_LENGTH; this.hidePassword = true; this.hideRepeatPassword = true; this.formSubmit = new EventEmitter(); this.register = new EventEmitter(); this.invalidToken = new EventEmitter(); this._tokenVerified = false; this.loadingToken = new LoadingEmitter(true); this.loadingSubmit = new LoadingEmitter(false); } ngOnDestroy() { this.formSubmit.complete(); this.register.complete(); this.invalidToken.complete(); this.loadingToken.complete(); this.loadingSubmit.complete(); } set token(token) { this._token = token; if (!this._token) { this._tokenVerified = false; return; } this.loadingToken.on(); this._signupService.verify(this._token).pipe(take(1)).subscribe(message => { this._log.info('Token ' + this._token + ' has been successfully verified'); if (message.success) { this.userEmail = message.success; } this._tokenVerified = true; this.loadingToken.off(); }, (error) => { this._log.error(error.message); this._tokenVerified = false; this.loadingToken.off(); this.invalidToken.emit(); }); } get token() { return this._token; } get tokenVerified() { return this._tokenVerified; } onSubmit() { if (!this.rootFormGroup.valid) { return; } const request = this.createRequestBody(); this.formSubmit.emit(request); if (!this._tokenVerified) { this.register.emit({ error: 'Provided token ' + this._token + ' is not valid' }); return; } request.token = this._token; this.loadingSubmit.on(); this.callRegistration(request).pipe(take(1)).subscribe(message => { this.register.emit(message); this.loadingSubmit.off(); }, error => { this.register.emit({ error }); this.loadingSubmit.off(); }); } isFieldValid(formControlName) { return this.rootFormGroup.get(formControlName).valid; } getErrorMessage(formControlName) { const errors = this.rootFormGroup.get(formControlName).errors; if (errors === null) return; switch (Object.keys(errors)[0]) { case 'required': return this._translate.instant('dataField.validations.required'); case 'minlength': return this._translate.instant('dataField.validations.minLength', { length: this.minPasswordLength }); case 'mismatchedPassword': return this._translate.instant('forms.register.passwordsMustMatch'); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractRegistrationComponent, deps: [{ token: i1.SignUpService }, { token: i2.LoggerService }, { token: i3.TranslateService }, { token: NAE_MIN_PASSWORD_LENGTH, optional: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractRegistrationComponent, selector: "ncc-abstract-registration", inputs: { token: "token" }, outputs: { formSubmit: "formSubmit", register: "register", invalidToken: "invalidToken" }, ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractRegistrationComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-registration', template: '' }] }], ctorParameters: () => [{ type: i1.SignUpService }, { type: i2.LoggerService }, { type: i3.TranslateService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_MIN_PASSWORD_LENGTH] }] }], propDecorators: { formSubmit: [{ type: Output }], register: [{ type: Output }], invalidToken: [{ type: Output }], token: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtcmVnaXN0cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZm9ybXMvbW9kZWxzL2Fic3RyYWN0LXJlZ2lzdHJhdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSWxHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQU03RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEMsT0FBTyxFQUFDLCtCQUErQixFQUFFLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBRXRHOztHQUVHO0FBS0gsTUFBTSxPQUFnQiw2QkFBNkI7SUFtQmY7SUFDQTtJQUNBO0lBQzZDO0lBcEJ0RSxhQUFhLENBQVk7SUFDekIsWUFBWSxDQUFVO0lBQ3RCLGtCQUFrQixDQUFVO0lBRWxCLFVBQVUsQ0FBZ0M7SUFDMUMsUUFBUSxDQUFnQztJQUN6RDs7T0FFRztJQUNjLFlBQVksQ0FBcUI7SUFFMUMsTUFBTSxDQUFTO0lBQ2YsY0FBYyxDQUFVO0lBQ3pCLFlBQVksQ0FBaUI7SUFDN0IsYUFBYSxDQUFpQjtJQUM5QixTQUFTLENBQVM7SUFFekIsWUFBZ0MsY0FBNkIsRUFDN0IsSUFBbUIsRUFDbkIsVUFBNEIsRUFDaUIsaUJBQXFDO1FBSGxGLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLFNBQUksR0FBSixJQUFJLENBQWU7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDaUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFvQjtRQUM5RyxJQUFJLENBQUMsaUJBQWlCLEdBQUcs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TyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUMsQ0FBQyxDQUFDO1lBQ3hHLEtBQUssb0JBQW9CO2dCQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7U0FDM0U7SUFDTCxDQUFDO3dHQS9HaUIsNkJBQTZCLDRHQXNCTCx1QkFBdUI7NEZBdEIvQyw2QkFBNkIsd0xBRnJDLEVBQUU7OzRGQUVNLDZCQUE2QjtrQkFKbEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBdUIwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHVCQUF1Qjt5Q0FoQmhELFVBQVU7c0JBQTFCLE1BQU07Z0JBQ1UsUUFBUTtzQkFBeEIsTUFBTTtnQkFJVSxZQUFZO3NCQUE1QixNQUFNO2dCQWdDSCxLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtU3VibWl0RXZlbnQsIEhhc0Zvcm19IGZyb20gJy4uL2hhcy1mb3JtJztcbmltcG9ydCB7Rm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge01lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7U2lnblVwU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aGVudGljYXRpb24vc2lnbi11cC9zZXJ2aWNlcy9zaWduLXVwLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtVc2VyUmVnaXN0cmF0aW9uUmVxdWVzdH0gZnJvbSAnLi4vLi4vYXV0aGVudGljYXRpb24vc2lnbi11cC9tb2RlbHMvdXNlci1yZWdpc3RyYXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOQUVfREVGQVVMVF9NSU5fUEFTU1dPUkRfTEVOR1RILCBOQUVfTUlOX1BBU1NXT1JEX0xFTkdUSH0gZnJvbSBcIi4uL21pbi1wYXNzd29yZC1sZW5ndGgtdG9rZW5cIjtcblxuLyoqXG4gKiBIb2xkcyB0aGUgbG9naWMgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiBgUmVnaXN0cmF0aW9uRm9ybUNvbXBvbmVudGAgYW5kIGBGb3Jnb3R0ZW5QYXNzd29yZEZvcm1Db21wb25lbnRgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1yZWdpc3RyYXRpb24nLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFJlZ2lzdHJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEhhc0Zvcm0sIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgcm9vdEZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBoaWRlUGFzc3dvcmQ6IGJvb2xlYW47XG4gICAgcHVibGljIGhpZGVSZXBlYXRQYXNzd29yZDogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgZm9ybVN1Ym1pdDogRXZlbnRFbWl0dGVyPEZvcm1TdWJtaXRFdmVudD47XG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWdpc3RlcjogRXZlbnRFbWl0dGVyPE1lc3NhZ2VSZXNvdXJjZT47XG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIHRva2VuIGdldHMgcmVzb2x2ZWQgYXMgaW52YWxpZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgaW52YWxpZFRva2VuOiBFdmVudEVtaXR0ZXI8dm9pZD47XG5cbiAgICBwcml2YXRlIF90b2tlbjogc3RyaW5nO1xuICAgIHByaXZhdGUgX3Rva2VuVmVyaWZpZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIGxvYWRpbmdUb2tlbjogTG9hZGluZ0VtaXR0ZXI7XG4gICAgcHVibGljIGxvYWRpbmdTdWJtaXQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIHB1YmxpYyB1c2VyRW1haWw6IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3NpZ251cFNlcnZpY2U6IFNpZ25VcFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChOQUVfTUlOX1BBU1NXT1JEX0xFTkdUSCkgcHJvdGVjdGVkIG1pblBhc3N3b3JkTGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5taW5QYXNzd29yZExlbmd0aCA9IG1pblBhc3N3b3JkTGVuZ3RoID8/IE5BRV9ERUZBVUxUX01JTl9QQVNTV09SRF9MRU5HVEg7XG4gICAgICAgIHRoaXMuaGlkZVBhc3N3b3JkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oaWRlUmVwZWF0UGFzc3dvcmQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1TdWJtaXRFdmVudD4oKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlciA9IG5ldyBFdmVudEVtaXR0ZXI8TWVzc2FnZVJlc291cmNlPigpO1xuICAgICAgICB0aGlzLmludmFsaWRUb2tlbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAgICAgdGhpcy5fdG9rZW5WZXJpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmdUb2tlbiA9IG5ldyBMb2FkaW5nRW1pdHRlcih0cnVlKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3VibWl0ID0gbmV3IExvYWRpbmdFbWl0dGVyKGZhbHNlKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtU3VibWl0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXIuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5pbnZhbGlkVG9rZW4uY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nVG9rZW4uY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3VibWl0LmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgdG9rZW4odG9rZW46IHN0cmluZykge1xuICAgICAgICB0aGlzLl90b2tlbiA9IHRva2VuO1xuICAgICAgICBpZiAoIXRoaXMuX3Rva2VuKSB7XG4gICAgICAgICAgICB0aGlzLl90b2tlblZlcmlmaWVkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkaW5nVG9rZW4ub24oKTtcbiAgICAgICAgdGhpcy5fc2lnbnVwU2VydmljZS52ZXJpZnkodGhpcy5fdG9rZW4pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmluZm8oJ1Rva2VuICcgKyB0aGlzLl90b2tlbiArICcgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHZlcmlmaWVkJyk7XG4gICAgICAgICAgICBpZiAobWVzc2FnZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyRW1haWwgPSBtZXNzYWdlLnN1Y2Nlc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90b2tlblZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rva2VuLm9mZigpO1xuICAgICAgICB9LCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB0aGlzLl90b2tlblZlcmlmaWVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdUb2tlbi5vZmYoKTtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZFRva2VuLmVtaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IHRva2VuKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbjtcbiAgICB9XG5cbiAgICBnZXQgdG9rZW5WZXJpZmllZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuVmVyaWZpZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucm9vdEZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNyZWF0ZVJlcXVlc3RCb2R5KCk7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHJlcXVlc3QpO1xuXG4gICAgICAgIGlmICghdGhpcy5fdG9rZW5WZXJpZmllZCkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlci5lbWl0KHtlcnJvcjogJ1Byb3ZpZGVkIHRva2VuICcgKyB0aGlzLl90b2tlbiArICcgaXMgbm90IHZhbGlkJ30pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3QudG9rZW4gPSB0aGlzLl90b2tlbjtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3VibWl0Lm9uKCk7XG4gICAgICAgIHRoaXMuY2FsbFJlZ2lzdHJhdGlvbihyZXF1ZXN0KS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShtZXNzYWdlID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIuZW1pdChtZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1Ym1pdC5vZmYoKTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlci5lbWl0KHtlcnJvcn0pO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3VibWl0Lm9mZigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNGaWVsZFZhbGlkKGZvcm1Db250cm9sTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3RGb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sTmFtZSkudmFsaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVycm9yTWVzc2FnZShmb3JtQ29udHJvbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMucm9vdEZvcm1Hcm91cC5nZXQoZm9ybUNvbnRyb2xOYW1lKS5lcnJvcnM7XG4gICAgICAgIGlmIChlcnJvcnMgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN3aXRjaCAoT2JqZWN0LmtleXMoZXJyb3JzKVswXSkge1xuICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnZhbGlkYXRpb25zLnJlcXVpcmVkJyk7XG4gICAgICAgICAgICBjYXNlICdtaW5sZW5ndGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnZhbGlkYXRpb25zLm1pbkxlbmd0aCcsIHtsZW5ndGg6IHRoaXMubWluUGFzc3dvcmRMZW5ndGh9KTtcbiAgICAgICAgICAgIGNhc2UgJ21pc21hdGNoZWRQYXNzd29yZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdmb3Jtcy5yZWdpc3Rlci5wYXNzd29yZHNNdXN0TWF0Y2gnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVSZXF1ZXN0Qm9keSgpOiBVc2VyUmVnaXN0cmF0aW9uUmVxdWVzdDtcblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBjYWxsUmVnaXN0cmF0aW9uKHJlcXVlc3RCb2R5OiBVc2VyUmVnaXN0cmF0aW9uUmVxdWVzdCk6IE9ic2VydmFibGU8TWVzc2FnZVJlc291cmNlPjtcbn1cbiJdfQ==