@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
94 lines • 11.3 kB
JavaScript
import { Injectable } from '@angular/core';
import { PasswordStrength } from '@c8y/client';
import { filter } from 'lodash-es';
import { gettext } from '../i18n/gettext';
import { PasswordConfirmModalComponent } from './password-confirm-modal.component';
import { BsModalService } from 'ngx-bootstrap/modal';
import { take } from 'rxjs/operators';
import { CurrentPasswordModalComponent } from './current-password-modal.component';
import * as i0 from "@angular/core";
import * as i1 from "ngx-bootstrap/modal";
export class PasswordService {
constructor(modalService) {
this.modalService = modalService;
this.DEFAULT_PASSWORD_MIN_LENGTH = 8;
this.GREEN = {
colorName: 'green',
color: 'rgb(0, 128, 0)',
description: gettext('strong'),
passwordStrength: PasswordStrength.GREEN
};
this.YELLOW = {
colorName: 'yellow',
color: 'rgb(255, 204, 51)',
description: gettext('medium'),
passwordStrength: PasswordStrength.YELLOW
};
this.RED = {
colorName: 'red',
color: 'rgb(170, 0, 51)',
description: gettext('weak'),
passwordStrength: PasswordStrength.RED
};
}
confirmPassword() {
const modalInstance = this.modalService.show(PasswordConfirmModalComponent, {
ariaDescribedby: 'modal-body',
ariaLabelledBy: 'modal-title'
});
const passwordConfirmedEmitter = modalInstance.content.passwordConfirmedEmitter;
return passwordConfirmedEmitter.pipe(take(1));
}
/**
* Returns an observable with the password provided by user:
* - `string` when user provided a value
* - `null` when user cancelled the modal
*/
currentPassword() {
const modalInstance = this.modalService.show(CurrentPasswordModalComponent, {
class: 'modal-sm',
ariaDescribedby: 'modal-body',
ariaLabelledBy: 'modal-title'
});
const currentPasswordEmitter = modalInstance.content.currentPasswordEmitter;
return currentPasswordEmitter.pipe(take(1));
}
hasLowerCase(password) {
return password.search(/[a-z]/) !== -1;
}
hasUpperCase(password) {
return password.search(/[A-Z]/) !== -1;
}
hasNumbers(password) {
return password.search(/[0-9]/) !== -1;
}
hasSpecialChars(password) {
return password.search(/[^0-9a-zA-Z]+/) !== -1;
}
getStrengthColor(password) {
const passwordStrength = filter([
this.hasLowerCase(password),
this.hasUpperCase(password),
this.hasNumbers(password),
this.hasSpecialChars(password)
]).length;
if (passwordStrength > 3) {
return this.GREEN;
}
else if (passwordStrength >= 3) {
return this.YELLOW;
}
else {
return this.RED;
}
}
getDefaultPasswordMinLength() {
return this.DEFAULT_PASSWORD_MIN_LENGTH;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PasswordService, deps: [{ token: i1.BsModalService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PasswordService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PasswordService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.BsModalService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYXV0aGVudGljYXRpb24vcGFzc3dvcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBR25GLE1BQU0sT0FBTyxlQUFlO0lBc0IxQixZQUFvQixZQUE0QjtRQUE1QixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFyQnhDLGdDQUEyQixHQUFHLENBQUMsQ0FBQztRQUVoQyxVQUFLLEdBQTBCO1lBQ3JDLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLEtBQUssRUFBRSxnQkFBZ0I7WUFDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDOUIsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztTQUN6QyxDQUFDO1FBQ00sV0FBTSxHQUEwQjtZQUN0QyxTQUFTLEVBQUUsUUFBUTtZQUNuQixLQUFLLEVBQUUsbUJBQW1CO1lBQzFCLFdBQVcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzlCLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLE1BQU07U0FDMUMsQ0FBQztRQUNNLFFBQUcsR0FBMEI7WUFDbkMsU0FBUyxFQUFFLEtBQUs7WUFDaEIsS0FBSyxFQUFFLGlCQUFpQjtZQUN4QixXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUM1QixnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO1NBQ3ZDLENBQUM7SUFFaUQsQ0FBQztJQUVwRCxlQUFlO1FBQ2IsTUFBTSxhQUFhLEdBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDL0UsZUFBZSxFQUFFLFlBQVk7WUFDN0IsY0FBYyxFQUFFLGFBQWE7U0FDOUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSx3QkFBd0IsR0FDNUIsYUFBYSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztRQUNqRCxPQUFPLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGVBQWU7UUFDYixNQUFNLGFBQWEsR0FBUSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtZQUMvRSxLQUFLLEVBQUUsVUFBVTtZQUNqQixlQUFlLEVBQUUsWUFBWTtZQUM3QixjQUFjLEVBQUUsYUFBYTtTQUM5QixDQUFDLENBQUM7UUFDSCxNQUFNLHNCQUFzQixHQUMxQixhQUFhLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1FBQy9DLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBZ0I7UUFDM0IsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBZ0I7UUFDM0IsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBZ0I7UUFDekIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBZ0I7UUFDOUIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUMvQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztTQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDO1FBRVYsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQzthQUFNLElBQUksZ0JBQWdCLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsMkJBQTJCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDO0lBQzFDLENBQUM7K0dBckZVLGVBQWU7bUhBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFzc3dvcmRTdHJlbmd0aCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBQYXNzd29yZFN0cmVuZ3RoQ29sb3IgfSBmcm9tICcuL3Bhc3N3b3JkLm1vZGVsJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2dldHRleHQnO1xuaW1wb3J0IHsgUGFzc3dvcmRDb25maXJtTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkLWNvbmZpcm0tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ3VycmVudFBhc3N3b3JkTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2N1cnJlbnQtcGFzc3dvcmQtbW9kYWwuY29tcG9uZW50JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkU2VydmljZSB7XG4gIHByaXZhdGUgREVGQVVMVF9QQVNTV09SRF9NSU5fTEVOR1RIID0gODtcblxuICBwcml2YXRlIEdSRUVOOiBQYXNzd29yZFN0cmVuZ3RoQ29sb3IgPSB7XG4gICAgY29sb3JOYW1lOiAnZ3JlZW4nLFxuICAgIGNvbG9yOiAncmdiKDAsIDEyOCwgMCknLFxuICAgIGRlc2NyaXB0aW9uOiBnZXR0ZXh0KCdzdHJvbmcnKSxcbiAgICBwYXNzd29yZFN0cmVuZ3RoOiBQYXNzd29yZFN0cmVuZ3RoLkdSRUVOXG4gIH07XG4gIHByaXZhdGUgWUVMTE9XOiBQYXNzd29yZFN0cmVuZ3RoQ29sb3IgPSB7XG4gICAgY29sb3JOYW1lOiAneWVsbG93JyxcbiAgICBjb2xvcjogJ3JnYigyNTUsIDIwNCwgNTEpJyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnbWVkaXVtJyksXG4gICAgcGFzc3dvcmRTdHJlbmd0aDogUGFzc3dvcmRTdHJlbmd0aC5ZRUxMT1dcbiAgfTtcbiAgcHJpdmF0ZSBSRUQ6IFBhc3N3b3JkU3RyZW5ndGhDb2xvciA9IHtcbiAgICBjb2xvck5hbWU6ICdyZWQnLFxuICAgIGNvbG9yOiAncmdiKDE3MCwgMCwgNTEpJyxcbiAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnd2VhaycpLFxuICAgIHBhc3N3b3JkU3RyZW5ndGg6IFBhc3N3b3JkU3RyZW5ndGguUkVEXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlKSB7fVxuXG4gIGNvbmZpcm1QYXNzd29yZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtb2RhbEluc3RhbmNlOiBhbnkgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KFBhc3N3b3JkQ29uZmlybU1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnXG4gICAgfSk7XG4gICAgY29uc3QgcGFzc3dvcmRDb25maXJtZWRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgICAgbW9kYWxJbnN0YW5jZS5jb250ZW50LnBhc3N3b3JkQ29uZmlybWVkRW1pdHRlcjtcbiAgICByZXR1cm4gcGFzc3dvcmRDb25maXJtZWRFbWl0dGVyLnBpcGUodGFrZSgxKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHdpdGggdGhlIHBhc3N3b3JkIHByb3ZpZGVkIGJ5IHVzZXI6XG4gICAqIC0gYHN0cmluZ2Agd2hlbiB1c2VyIHByb3ZpZGVkIGEgdmFsdWVcbiAgICogLSBgbnVsbGAgd2hlbiB1c2VyIGNhbmNlbGxlZCB0aGUgbW9kYWxcbiAgICovXG4gIGN1cnJlbnRQYXNzd29yZCgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCBtb2RhbEluc3RhbmNlOiBhbnkgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KEN1cnJlbnRQYXNzd29yZE1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZSdcbiAgICB9KTtcbiAgICBjb25zdCBjdXJyZW50UGFzc3dvcmRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4gPVxuICAgICAgbW9kYWxJbnN0YW5jZS5jb250ZW50LmN1cnJlbnRQYXNzd29yZEVtaXR0ZXI7XG4gICAgcmV0dXJuIGN1cnJlbnRQYXNzd29yZEVtaXR0ZXIucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIGhhc0xvd2VyQ2FzZShwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhc3N3b3JkLnNlYXJjaCgvW2Etel0vKSAhPT0gLTE7XG4gIH1cblxuICBoYXNVcHBlckNhc2UocGFzc3dvcmQ6IHN0cmluZykge1xuICAgIHJldHVybiBwYXNzd29yZC5zZWFyY2goL1tBLVpdLykgIT09IC0xO1xuICB9XG5cbiAgaGFzTnVtYmVycyhwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhc3N3b3JkLnNlYXJjaCgvWzAtOV0vKSAhPT0gLTE7XG4gIH1cblxuICBoYXNTcGVjaWFsQ2hhcnMocGFzc3dvcmQ6IHN0cmluZykge1xuICAgIHJldHVybiBwYXNzd29yZC5zZWFyY2goL1teMC05YS16QS1aXSsvKSAhPT0gLTE7XG4gIH1cblxuICBnZXRTdHJlbmd0aENvbG9yKHBhc3N3b3JkOiBzdHJpbmcpOiBQYXNzd29yZFN0cmVuZ3RoQ29sb3Ige1xuICAgIGNvbnN0IHBhc3N3b3JkU3RyZW5ndGggPSBmaWx0ZXIoW1xuICAgICAgdGhpcy5oYXNMb3dlckNhc2UocGFzc3dvcmQpLFxuICAgICAgdGhpcy5oYXNVcHBlckNhc2UocGFzc3dvcmQpLFxuICAgICAgdGhpcy5oYXNOdW1iZXJzKHBhc3N3b3JkKSxcbiAgICAgIHRoaXMuaGFzU3BlY2lhbENoYXJzKHBhc3N3b3JkKVxuICAgIF0pLmxlbmd0aDtcblxuICAgIGlmIChwYXNzd29yZFN0cmVuZ3RoID4gMykge1xuICAgICAgcmV0dXJuIHRoaXMuR1JFRU47XG4gICAgfSBlbHNlIGlmIChwYXNzd29yZFN0cmVuZ3RoID49IDMpIHtcbiAgICAgIHJldHVybiB0aGlzLllFTExPVztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuUkVEO1xuICAgIH1cbiAgfVxuXG4gIGdldERlZmF1bHRQYXNzd29yZE1pbkxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5ERUZBVUxUX1BBU1NXT1JEX01JTl9MRU5HVEg7XG4gIH1cbn1cbiJdfQ==