@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
139 lines • 18.3 kB
JavaScript
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==