reset-password.component.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /**
  2. * @fileoverview added by tsickle
  3. * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  4. */
  5. import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core';
  6. import { Router } from '@angular/router';
  7. import { NB_AUTH_OPTIONS, NbAuthService } from '@nebular/auth';
  8. import { getDeepFromObject } from '@nebular/auth/helpers';
  9. import { LoginLangService } from '../login-lang.service';
  10. export class ResetPasswordComponent {
  11. /**
  12. * @param {?} service
  13. * @param {?} langService
  14. * @param {?=} options
  15. * @param {?=} cd
  16. * @param {?=} router
  17. */
  18. constructor(service, langService, options = {}, cd, router) {
  19. this.service = service;
  20. this.langService = langService;
  21. this.options = options;
  22. this.cd = cd;
  23. this.router = router;
  24. this.redirectDelay = 0;
  25. this.showMessages = {};
  26. this.strategy = '';
  27. this.submitted = false;
  28. this.errors = [];
  29. this.messages = [];
  30. this.user = {};
  31. this.redirectDelay = this.getConfigValue('forms.resetPassword.redirectDelay');
  32. this.showMessages = this.getConfigValue('forms.resetPassword.showMessages');
  33. this.strategy = this.getConfigValue('forms.resetPassword.strategy');
  34. }
  35. /**
  36. * @return {?}
  37. */
  38. resetPass() {
  39. this.errors = this.messages = [];
  40. this.submitted = true;
  41. this.service.resetPassword(this.strategy, this.user).subscribe((result) => {
  42. this.submitted = false;
  43. if (result.isSuccess()) {
  44. this.messages = result.getMessages();
  45. }
  46. else {
  47. this.errors = result.getErrors();
  48. }
  49. /** @type {?} */
  50. const redirect = result.getRedirect();
  51. if (redirect) {
  52. setTimeout(() => {
  53. return this.router.navigateByUrl(redirect);
  54. }, this.redirectDelay);
  55. }
  56. this.cd.detectChanges();
  57. });
  58. }
  59. /**
  60. * @param {?} key
  61. * @return {?}
  62. */
  63. getConfigValue(key) {
  64. return getDeepFromObject(this.options, key, null);
  65. }
  66. }
  67. ResetPasswordComponent.decorators = [
  68. { type: Component, args: [{
  69. selector: 'auth-reset-password-page',
  70. template: "<h1 id=\"title\" class=\"title\" translate>\u4FEE\u6539\u5BC6\u7801</h1>\r\n<p class=\"sub-title\" translate>\u8BF7\u8BBE\u7F6E\u60A8\u7684\u65B0\u5BC6\u7801</p>\r\n\r\n<nb-alert *ngIf=\"showMessages.error && errors?.length && !submitted\" outline=\"danger\" role=\"alert\">\r\n <p class=\"alert-title\"><b translate>\u9519\u8BEF!</b></p>\r\n <ul class=\"alert-message-list\">\r\n <li *ngFor=\"let error of errors\" class=\"alert-message\">{{ error }}</li>\r\n </ul>\r\n</nb-alert>\r\n\r\n<nb-alert *ngIf=\"showMessages.success && messages?.length && !submitted\" outline=\"success\" role=\"alert\">\r\n <p class=\"alert-title\"><b translate>\u6210\u529F!</b></p>\r\n <ul class=\"alert-message-list\">\r\n <li *ngFor=\"let message of messages\" class=\"alert-message\">{{ message }}</li>\r\n </ul>\r\n</nb-alert>\r\n\r\n<form (ngSubmit)=\"resetPass()\" #resetPassForm=\"ngForm\" aria-labelledby=\"title\">\r\n\r\n <div class=\"form-control-group\">\r\n <label class=\"label\" for=\"input-old-password\" translate>\u65E7\u5BC6\u7801:</label>\r\n <input nbInput\r\n [(ngModel)]=\"user.loginPasswordOld\"\r\n #oldPassword=\"ngModel\"\r\n type=\"password\"\r\n id=\"input-old-password\"\r\n name=\"oldPassword\"\r\n class=\"first\"\r\n placeholder=\"{{'\u65B0\u5BC6\u7801'| translate}}\"\r\n autofocus\r\n fullWidth\r\n [status]=\"oldPassword.dirty ? (oldPassword.invalid ? 'danger' : 'success') : ''\"\r\n [required]=\"getConfigValue('forms.validation.password.required')\"\r\n [minlength]=\"getConfigValue('forms.validation.password.minLength')\"\r\n [maxlength]=\"getConfigValue('forms.validation.password.maxLength')\"\r\n [attr.aria-invalid]=\"oldPassword.invalid && oldPassword.touched ? true : null\">\r\n <ng-container *ngIf=\"oldPassword.invalid && oldPassword.touched\">\r\n <p class=\"error-message\" *ngIf=\"oldPassword.errors?.required\" translate=\"\u65E7\u5BC6\u7801\u662F\u5FC5\u586B\u7684!\">\r\n\r\n </p>\r\n <p class=\"error-message\" *ngIf=\"oldPassword.errors?.minlength || oldPassword.errors?.maxlength\"\r\n translate=\"\u5BC6\u7801\u89C4\u5219\u63D0\u793A\" [translateParams]=\"{minLength: getConfigValue('forms.validation.password.minLength'), maxLength:getConfigValue('forms.validation.password.maxLength')}\">\r\n \u5BC6\u7801\u5E94\u8BE5\u5305\u542B\r\n \u6700\u5C0F\u957F\u5EA6 {{ getConfigValue('forms.validation.password.minLength') }}\r\n \u6700\u5927\u957F\u5EA6 {{ getConfigValue('forms.validation.password.maxLength') }}\r\n \u4E2A\u5B57\u7B26\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-control-group\">\r\n <label class=\"label\" for=\"input-new-password\" translate>\u65B0\u5BC6\u7801:</label>\r\n <input nbInput\r\n [(ngModel)]=\"user.loginPasswordNew\"\r\n #newPassword=\"ngModel\"\r\n type=\"password\"\r\n id=\"input-new-password\"\r\n name=\"newPassword\"\r\n class=\"first\"\r\n placeholder=\"{{'\u65B0\u5BC6\u7801'| translate}}\"\r\n autofocus\r\n fullWidth\r\n [status]=\"newPassword.dirty ? (newPassword.invalid ? 'danger' : 'success') : ''\"\r\n [required]=\"getConfigValue('forms.validation.password.required')\"\r\n [minlength]=\"getConfigValue('forms.validation.password.minLength')\"\r\n [maxlength]=\"getConfigValue('forms.validation.password.maxLength')\"\r\n [attr.aria-invalid]=\"newPassword.invalid && newPassword.touched ? true : null\">\r\n <ng-container *ngIf=\"newPassword.invalid && newPassword.touched\">\r\n <p class=\"error-message\" *ngIf=\"newPassword.errors?.required\" translate=\"\u65B0\u5BC6\u7801\u662F\u5FC5\u586B\u7684!\">\r\n\r\n </p>\r\n <p class=\"error-message\" *ngIf=\"newPassword.errors?.minlength || newPassword.errors?.maxlength\"\r\n translate=\"\u5BC6\u7801\u89C4\u5219\u63D0\u793A\"\r\n [translateParams]=\"{minLength: getConfigValue('forms.validation.password.minLength'), maxLength:getConfigValue('forms.validation.password.maxLength')}\">\r\n\r\n \u5BC6\u7801\u5E94\u8BE5\u5305\u542B\r\n \u6700\u5C0F\u957F\u5EA6 {{ getConfigValue('forms.validation.password.minLength') }}\r\n \u6700\u5927\u957F\u5EA6 {{ getConfigValue('forms.validation.password.maxLength') }}\r\n \u4E2A\u5B57\u7B26\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"label\" for=\"input-re-password\" translate>\u786E\u8BA4\u5BC6\u7801:</label>\r\n <input nbInput\r\n [(ngModel)]=\"user.confirmPassword\"\r\n #rePass=\"ngModel\"\r\n id=\"input-re-password\"\r\n name=\"rePass\"\r\n type=\"password\"\r\n class=\"last\"\r\n placeholder=\"{{'\u786E\u8BA4\u5BC6\u7801'| translate}}\"\r\n fullWidth\r\n [status]=\"rePass.touched\r\n ? (rePass.invalid || newPassword.value != rePass.value ? 'danger' : 'success')\r\n : ''\"\r\n [required]=\"getConfigValue('forms.validation.password.required')\"\r\n [attr.aria-invalid]=\"rePass.invalid && rePass.touched ? true : null\">\r\n <ng-container *ngIf=\"rePass.touched\">\r\n <p class=\"error-message\" *ngIf=\"rePass.invalid && rePass.errors?.required\" translate=\"\u786E\u8BA4\u5BC6\u7801\u662F\u5FC5\u586B\u7684!\">\r\n\r\n </p>\r\n <p class=\"error-message\" *ngIf=\"newPassword.value != rePass.value && !rePass.errors?.required\" translate=\"\u4E0E\u7B2C\u4E00\u6B21\u8F93\u5165\u4E0D\u7B26\u5408\"></p>\r\n </ng-container>\r\n </div>\r\n\r\n <button nbButton\r\n status=\"success\"\r\n fullWidth\r\n [disabled]=\"submitted || !resetPassForm.valid\"\r\n [class.btn-pulse]=\"submitted\" translate=\"\u4FEE\u6539\u5BC6\u7801\">\r\n </button>\r\n</form>\r\n\r\n<!--<section class=\"sign-in-or-up\" aria-label=\"Sign in or sign up\">-->\r\n <!--<p><a class=\"text-link\" routerLink=\"../login\">Back to Log In</a></p>-->\r\n <!--<p><a class=\"text-link\" routerLink=\"../register\">Register</a></p>-->\r\n<!--</section>-->\r\n",
  71. changeDetection: ChangeDetectionStrategy.OnPush,
  72. styles: [":host .form-group:last-of-type{margin-bottom:3rem}"]
  73. }] }
  74. ];
  75. /** @nocollapse */
  76. ResetPasswordComponent.ctorParameters = () => [
  77. { type: NbAuthService },
  78. { type: LoginLangService },
  79. { type: undefined, decorators: [{ type: Inject, args: [NB_AUTH_OPTIONS,] }] },
  80. { type: ChangeDetectorRef },
  81. { type: Router }
  82. ];
  83. if (false) {
  84. /** @type {?} */
  85. ResetPasswordComponent.prototype.redirectDelay;
  86. /** @type {?} */
  87. ResetPasswordComponent.prototype.showMessages;
  88. /** @type {?} */
  89. ResetPasswordComponent.prototype.strategy;
  90. /** @type {?} */
  91. ResetPasswordComponent.prototype.submitted;
  92. /** @type {?} */
  93. ResetPasswordComponent.prototype.errors;
  94. /** @type {?} */
  95. ResetPasswordComponent.prototype.messages;
  96. /** @type {?} */
  97. ResetPasswordComponent.prototype.user;
  98. /**
  99. * @type {?}
  100. * @protected
  101. */
  102. ResetPasswordComponent.prototype.service;
  103. /**
  104. * @type {?}
  105. * @protected
  106. */
  107. ResetPasswordComponent.prototype.langService;
  108. /**
  109. * @type {?}
  110. * @protected
  111. */
  112. ResetPasswordComponent.prototype.options;
  113. /**
  114. * @type {?}
  115. * @protected
  116. */
  117. ResetPasswordComponent.prototype.cd;
  118. /**
  119. * @type {?}
  120. * @protected
  121. */
  122. ResetPasswordComponent.prototype.router;
  123. }
  124. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZXQtcGFzc3dvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZ2UtYWRtaW4tYXV0aC8iLCJzb3VyY2VzIjpbImxpYi9yZXNldC1wYXNzd29yZC9yZXNldC1wYXNzd29yZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFRekQsTUFBTSxPQUFPLHNCQUFzQjs7Ozs7Ozs7SUFXakMsWUFBc0IsT0FBc0IsRUFBWSxXQUE2QixFQUNoRCxVQUFVLEVBQUUsRUFDckMsRUFBcUIsRUFDckIsTUFBYztRQUhKLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDaEQsWUFBTyxHQUFQLE9BQU8sQ0FBSztRQUNyQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBWjFCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFFZCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUN4QixTQUFJLEdBQVEsRUFBRSxDQUFDO1FBT2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDdEUsQ0FBQzs7OztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQW9CLEVBQUUsRUFBRTtZQUN0RixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDdEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDbEM7O2tCQUVLLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQ3JDLElBQUksUUFBUSxFQUFFO2dCQUNaLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDN0MsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN4QjtZQUNELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs7OztJQUVELGNBQWMsQ0FBQyxHQUFXO1FBQ3hCLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7O1lBbkRGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2dCQUVwQyxrc01BQThDO2dCQUM5QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7Ozs7WUFUdUMsYUFBYTtZQUU1QyxnQkFBZ0I7NENBb0JwQixNQUFNLFNBQUMsZUFBZTtZQXhCTyxpQkFBaUI7WUFDMUMsTUFBTTs7OztJQWFiLCtDQUFrQjs7SUFDbEIsOENBQXVCOztJQUN2QiwwQ0FBYzs7SUFFZCwyQ0FBa0I7O0lBQ2xCLHdDQUFzQjs7SUFDdEIsMENBQXdCOztJQUN4QixzQ0FBZTs7Ozs7SUFFSCx5Q0FBZ0M7Ozs7O0lBQUUsNkNBQXVDOzs7OztJQUNuRix5Q0FBK0M7Ozs7O0lBQy9DLG9DQUErQjs7Ozs7SUFDL0Isd0NBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOQl9BVVRIX09QVElPTlMsIE5iQXV0aFJlc3VsdCwgTmJBdXRoU2VydmljZSB9IGZyb20gJ0BuZWJ1bGFyL2F1dGgnO1xyXG5pbXBvcnQgeyBnZXREZWVwRnJvbU9iamVjdCB9IGZyb20gJ0BuZWJ1bGFyL2F1dGgvaGVscGVycyc7XHJcbmltcG9ydCB7IExvZ2luTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi9sb2dpbi1sYW5nLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdXRoLXJlc2V0LXBhc3N3b3JkLXBhZ2UnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc2V0LXBhc3N3b3JkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc2V0LXBhc3N3b3JkLmNvbXBvbmVudC5odG1sJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzZXRQYXNzd29yZENvbXBvbmVudCB7XHJcblxyXG4gIHJlZGlyZWN0RGVsYXkgPSAwO1xyXG4gIHNob3dNZXNzYWdlczogYW55ID0ge307XHJcbiAgc3RyYXRlZ3kgPSAnJztcclxuXHJcbiAgc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHVzZXI6IGFueSA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc2VydmljZTogTmJBdXRoU2VydmljZSwgcHJvdGVjdGVkIGxhbmdTZXJ2aWNlOiBMb2dpbkxhbmdTZXJ2aWNlLFxyXG4gICAgQEluamVjdChOQl9BVVRIX09QVElPTlMpIHByb3RlY3RlZCBvcHRpb25zID0ge30sXHJcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyKSB7XHJcblxyXG4gICAgdGhpcy5yZWRpcmVjdERlbGF5ID0gdGhpcy5nZXRDb25maWdWYWx1ZSgnZm9ybXMucmVzZXRQYXNzd29yZC5yZWRpcmVjdERlbGF5Jyk7XHJcbiAgICB0aGlzLnNob3dNZXNzYWdlcyA9IHRoaXMuZ2V0Q29uZmlnVmFsdWUoJ2Zvcm1zLnJlc2V0UGFzc3dvcmQuc2hvd01lc3NhZ2VzJyk7XHJcbiAgICB0aGlzLnN0cmF0ZWd5ID0gdGhpcy5nZXRDb25maWdWYWx1ZSgnZm9ybXMucmVzZXRQYXNzd29yZC5zdHJhdGVneScpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRQYXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lcnJvcnMgPSB0aGlzLm1lc3NhZ2VzID0gW107XHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5zZXJ2aWNlLnJlc2V0UGFzc3dvcmQodGhpcy5zdHJhdGVneSwgdGhpcy51c2VyKS5zdWJzY3JpYmUoKHJlc3VsdDogTmJBdXRoUmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gcmVzdWx0LmdldE1lc3NhZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lcnJvcnMgPSByZXN1bHQuZ2V0RXJyb3JzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHJlZGlyZWN0ID0gcmVzdWx0LmdldFJlZGlyZWN0KCk7XHJcbiAgICAgIGlmIChyZWRpcmVjdCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocmVkaXJlY3QpO1xyXG4gICAgICAgIH0sIHRoaXMucmVkaXJlY3REZWxheSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENvbmZpZ1ZhbHVlKGtleTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBnZXREZWVwRnJvbU9iamVjdCh0aGlzLm9wdGlvbnMsIGtleSwgbnVsbCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==