@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
119 lines • 17.2 kB
JavaScript
import { passwordValidator } from '../models/password.validator';
import { Validators } from '@angular/forms';
import { Component, EventEmitter, Inject, Optional, Output } from '@angular/core';
import { LoadingEmitter } from "../../utility/loading-emitter";
import { take } from "rxjs/operators";
import { encodeBase64 } from '../../utility/base64';
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 "@angular/forms";
import * as i2 from "../../authentication/profile/services/profile.service";
import * as i3 from "../../user/services/user.service";
import * as i4 from "../../logger/services/logger.service";
import * as i5 from "@ngx-translate/core";
export const OLD_PASSWORD = 'oldPassword';
export const PASSWORD = 'password';
export const CONFIRM_PASSWORD = 'confirmPassword';
export class AbstractChangePasswordComponent {
formBuilder;
profileService;
user;
_log;
_translate;
minPasswordLength;
rootFormGroup;
hideOldPassword;
hidePassword;
hideRepeatPassword;
formSubmit;
changePassword;
loadingSubmit;
constructor(formBuilder, profileService, user, _log, _translate, minPasswordLength) {
this.formBuilder = formBuilder;
this.profileService = profileService;
this.user = user;
this._log = _log;
this._translate = _translate;
this.minPasswordLength = minPasswordLength;
this.minPasswordLength = minPasswordLength ?? NAE_DEFAULT_MIN_PASSWORD_LENGTH;
this.hidePassword = true;
this.hideOldPassword = true;
this.hideRepeatPassword = true;
this.formSubmit = new EventEmitter();
this.changePassword = new EventEmitter();
this.loadingSubmit = new LoadingEmitter(false);
this.rootFormGroup = formBuilder.group({
oldPassword: ['', [Validators.required, Validators.minLength(1)]],
password: ['', [Validators.required, Validators.minLength(this.minPasswordLength)]],
confirmPassword: ['', [Validators.required, Validators.minLength(this.minPasswordLength)]]
}, { validator: passwordValidator });
}
isFieldValid(formControlName) {
return this.rootFormGroup.get(formControlName).valid;
}
createRequestBody() {
return {
login: this.user.user.email,
password: encodeBase64(this.rootFormGroup.controls[OLD_PASSWORD].value),
newPassword: encodeBase64(this.rootFormGroup.controls[PASSWORD].value)
};
}
getErrorMessage(formControlName) {
const errors = this.rootFormGroup.get(formControlName).errors;
if (errors === null) {
return;
}
switch (Object.keys(errors)[0]) {
case 'mismatchedPassword':
return this._translate.instant('forms.register.passwordsMustMatch');
case 'minlength':
return this._translate.instant('dataField.validations.minLength', { length: this.minPasswordLength });
case 'required':
return this._translate.instant('dataField.validations.required');
}
}
onSubmit() {
if (!this.rootFormGroup.valid) {
return;
}
const request = this.createRequestBody();
this.formSubmit.emit(request);
this.loadingSubmit.on();
this.profileService.changePassword(request).pipe(take(1)).subscribe(message => {
if (message.error) {
this.changePassword.emit({ error: message.error });
}
else {
this.changePassword.emit({ success: message.success });
}
this.loadingSubmit.off();
}, error => {
this.changePassword.emit({ error });
this.loadingSubmit.off();
});
}
ngOnDestroy() {
this.formSubmit.complete();
this.changePassword.complete();
this.loadingSubmit.complete();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractChangePasswordComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ProfileService }, { token: i3.UserService }, { token: i4.LoggerService }, { token: i5.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: AbstractChangePasswordComponent, selector: "ncc-abstract-change-password", outputs: { formSubmit: "formSubmit", changePassword: "changePassword" }, ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractChangePasswordComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-change-password',
template: ''
}]
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ProfileService }, { type: i3.UserService }, { type: i4.LoggerService }, { type: i5.TranslateService }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NAE_MIN_PASSWORD_LENGTH]
}] }], propDecorators: { formSubmit: [{
type: Output
}], changePassword: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtY2hhbmdlLXBhc3N3b3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZm9ybXMvY2hhbmdlLXBhc3N3b3JkL2Fic3RyYWN0LWNoYW5nZS1wYXNzd29yZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFL0QsT0FBTyxFQUF5QixVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSXBDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsK0JBQStCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7OztBQUV0RyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7QUFNbEQsTUFBTSxPQUFnQiwrQkFBK0I7SUFhakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUM2QztJQWhCdEUsYUFBYSxDQUFZO0lBQ3pCLGVBQWUsQ0FBVTtJQUV6QixZQUFZLENBQVU7SUFDdEIsa0JBQWtCLENBQVU7SUFFbEIsVUFBVSxDQUFnQztJQUMxQyxjQUFjLENBQWdDO0lBRXhELGFBQWEsQ0FBaUI7SUFFckMs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K0JBQStCLG1LQWtCUCx1QkFBdUI7NEZBbEIvQywrQkFBK0IsNklBRnZDLEVBQUU7OzRGQUVNLCtCQUErQjtrQkFKcEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBbUIwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHVCQUF1Qjt5Q0FWaEQsVUFBVTtzQkFBMUIsTUFBTTtnQkFDVSxjQUFjO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwYXNzd29yZFZhbGlkYXRvcn0gZnJvbSAnLi4vbW9kZWxzL3Bhc3N3b3JkLnZhbGlkYXRvcic7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgT25EZXN0cm95LCBPcHRpb25hbCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybVN1Ym1pdEV2ZW50LCBIYXNGb3JtfSBmcm9tIFwiLi4vaGFzLWZvcm1cIjtcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gXCIuLi8uLi91dGlsaXR5L2xvYWRpbmctZW1pdHRlclwiO1xuaW1wb3J0IHt0YWtlfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7VXNlckNoYW5nZVBhc3N3b3JkUmVxdWVzdH0gZnJvbSBcIi4uLy4uL2F1dGhlbnRpY2F0aW9uL3Byb2ZpbGUvbW9kZWxzL3VzZXItY2hhbmdlLXBhc3N3b3JkLXJlcXVlc3RcIjtcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9hdXRoZW50aWNhdGlvbi9wcm9maWxlL3NlcnZpY2VzL3Byb2ZpbGUuc2VydmljZVwiO1xuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlXCI7XG5pbXBvcnQge2VuY29kZUJhc2U2NH0gZnJvbSAnLi4vLi4vdXRpbGl0eS9iYXNlNjQnO1xuaW1wb3J0IHtOQUVfREVGQVVMVF9NSU5fUEFTU1dPUkRfTEVOR1RILCBOQUVfTUlOX1BBU1NXT1JEX0xFTkdUSH0gZnJvbSBcIi4uL21pbi1wYXNzd29yZC1sZW5ndGgtdG9rZW5cIjtcblxuZXhwb3J0IGNvbnN0IE9MRF9QQVNTV09SRCA9ICdvbGRQYXNzd29yZCc7XG5leHBvcnQgY29uc3QgUEFTU1dPUkQgPSAncGFzc3dvcmQnO1xuZXhwb3J0IGNvbnN0IENPTkZJUk1fUEFTU1dPUkQgPSAnY29uZmlybVBhc3N3b3JkJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3QtY2hhbmdlLXBhc3N3b3JkJyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDaGFuZ2VQYXNzd29yZENvbXBvbmVudCBpbXBsZW1lbnRzIEhhc0Zvcm0sIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgcm9vdEZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBoaWRlT2xkUGFzc3dvcmQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgaGlkZVBhc3N3b3JkOiBib29sZWFuO1xuICAgIHB1YmxpYyBoaWRlUmVwZWF0UGFzc3dvcmQ6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIGZvcm1TdWJtaXQ6IEV2ZW50RW1pdHRlcjxGb3JtU3VibWl0RXZlbnQ+O1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlUGFzc3dvcmQ6IEV2ZW50RW1pdHRlcjxNZXNzYWdlUmVzb3VyY2U+O1xuXG4gICAgcHVibGljIGxvYWRpbmdTdWJtaXQ6IExvYWRpbmdFbWl0dGVyO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCB1c2VyOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9NSU5fUEFTU1dPUkRfTEVOR1RIKSBwcm90ZWN0ZWQgbWluUGFzc3dvcmRMZW5ndGg6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm1pblBhc3N3b3JkTGVuZ3RoID0gbWluUGFzc3dvcmRMZW5ndGggPz8gTkFFX0RFRkFVTFRfTUlOX1BBU1NXT1JEX0xFTkdUSDtcbiAgICAgICAgdGhpcy5oaWRlUGFzc3dvcmQgPSB0cnVlO1xuICAgICAgICB0aGlzLmhpZGVPbGRQYXNzd29yZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaGlkZVJlcGVhdFBhc3N3b3JkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtU3VibWl0RXZlbnQ+KCk7XG4gICAgICAgIHRoaXMuY2hhbmdlUGFzc3dvcmQgPSBuZXcgRXZlbnRFbWl0dGVyPE1lc3NhZ2VSZXNvdXJjZT4oKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3VibWl0ID0gbmV3IExvYWRpbmdFbWl0dGVyKGZhbHNlKTtcbiAgICAgICAgdGhpcy5yb290Rm9ybUdyb3VwID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgb2xkUGFzc3dvcmQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpXV0sXG4gICAgICAgICAgICBwYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5QYXNzd29yZExlbmd0aCldXSxcbiAgICAgICAgICAgIGNvbmZpcm1QYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5QYXNzd29yZExlbmd0aCldXVxuICAgICAgICB9LCB7dmFsaWRhdG9yOiBwYXNzd29yZFZhbGlkYXRvcn0pO1xuICAgIH1cblxuXG4gICAgcHVibGljIGlzRmllbGRWYWxpZChmb3JtQ29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290Rm9ybUdyb3VwLmdldChmb3JtQ29udHJvbE5hbWUpLnZhbGlkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVSZXF1ZXN0Qm9keSgpOiBVc2VyQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvZ2luOiB0aGlzLnVzZXIudXNlci5lbWFpbCxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBlbmNvZGVCYXNlNjQodGhpcy5yb290Rm9ybUdyb3VwLmNvbnRyb2xzW09MRF9QQVNTV09SRF0udmFsdWUpLFxuICAgICAgICAgICAgbmV3UGFzc3dvcmQ6IGVuY29kZUJhc2U2NCh0aGlzLnJvb3RGb3JtR3JvdXAuY29udHJvbHNbUEFTU1dPUkRdLnZhbHVlKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFcnJvck1lc3NhZ2UoZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLnJvb3RGb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sTmFtZSkuZXJyb3JzO1xuICAgICAgICBpZiAoZXJyb3JzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChPYmplY3Qua2V5cyhlcnJvcnMpWzBdKSB7XG4gICAgICAgICAgICBjYXNlICdtaXNtYXRjaGVkUGFzc3dvcmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZm9ybXMucmVnaXN0ZXIucGFzc3dvcmRzTXVzdE1hdGNoJyk7XG4gICAgICAgICAgICBjYXNlICdtaW5sZW5ndGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnZhbGlkYXRpb25zLm1pbkxlbmd0aCcsIHtsZW5ndGg6IHRoaXMubWluUGFzc3dvcmRMZW5ndGh9KTtcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC52YWxpZGF0aW9ucy5yZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucm9vdEZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNyZWF0ZVJlcXVlc3RCb2R5KCk7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHJlcXVlc3QpO1xuXG4gICAgICAgIHRoaXMubG9hZGluZ1N1Ym1pdC5vbigpO1xuICAgICAgICB0aGlzLnByb2ZpbGVTZXJ2aWNlLmNoYW5nZVBhc3N3b3JkKHJlcXVlc3QpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhc3N3b3JkLmVtaXQoe2Vycm9yOiBtZXNzYWdlLmVycm9yfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFzc3dvcmQuZW1pdCh7c3VjY2VzczogbWVzc2FnZS5zdWNjZXNzfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJtaXQub2ZmKCk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFzc3dvcmQuZW1pdCh7ZXJyb3J9KTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1Ym1pdC5vZmYoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmNoYW5nZVBhc3N3b3JkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1Ym1pdC5jb21wbGV0ZSgpO1xuICAgIH1cblxufVxuIl19