feat: rewrite setup wizard
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
import {Component} from '@angular/core';
|
||||
import {FormBuilder, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms";
|
||||
import {FormBuilder, FormGroup, ReactiveFormsModule, ValidatorFn, Validators} from "@angular/forms";
|
||||
import {NavigationService} from "@service/navigation.service";
|
||||
import {passwordMatchValidator} from '@service/password-match.validator';
|
||||
import SetupService from "@api/v1/setup.service";
|
||||
@ -9,6 +9,10 @@ import {MatInput} from "@angular/material/input";
|
||||
import {MatTooltip} from "@angular/material/tooltip";
|
||||
import {MatIconButton} from "@angular/material/button";
|
||||
import {MatIcon} from "@angular/material/icon";
|
||||
import AuthApiService from "@api/v1/authApiService";
|
||||
import {PasswordPolicy} from "@model/passwordPolicy";
|
||||
import {OAuthProviders} from "@component/OAuthProviders/OAuthProviders";
|
||||
import {OAuthProvider} from "@model/oAuthProvider";
|
||||
|
||||
@Component({
|
||||
selector: 'app-create-admin',
|
||||
@ -20,15 +24,19 @@ import {MatIcon} from "@angular/material/icon";
|
||||
MatInput,
|
||||
MatTooltip,
|
||||
MatIconButton,
|
||||
MatIcon
|
||||
MatIcon,
|
||||
OAuthProviders
|
||||
],
|
||||
templateUrl: './create-admin.component.html'
|
||||
templateUrl: './create-admin.component.html',
|
||||
providers: [AuthApiService]
|
||||
})
|
||||
|
||||
export class CreateAdminComponent {
|
||||
protected createAdminForm!: FormGroup;
|
||||
protected hidePass = true;
|
||||
protected hideRetypePass = true;
|
||||
protected policy!: PasswordPolicy;
|
||||
protected activatedProviders: OAuthProvider[] = [];
|
||||
|
||||
constructor(
|
||||
private navigationService: NavigationService, private formBuilder: FormBuilder, private api: SetupService) {
|
||||
@ -41,12 +49,6 @@ export class CreateAdminComponent {
|
||||
{validators: passwordMatchValidator('password', 'retype')}
|
||||
);
|
||||
|
||||
this.createAdminForm.get('password')?.setValidators([Validators.required,
|
||||
Validators.pattern(/[A-Z]/),
|
||||
Validators.pattern(/[!@#$%^&*]/),
|
||||
Validators.minLength(8)
|
||||
]);
|
||||
|
||||
this.navigationService.setNextButtonState(false);
|
||||
this.createAdminForm.valueChanges.subscribe(() => {
|
||||
this.navigationService.setNextButtonState(this.createAdminForm.valid);
|
||||
@ -60,6 +62,44 @@ export class CreateAdminComponent {
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
this.api.passwordPolicyConfiguration().subscribe(policy => {
|
||||
this.policy = policy;
|
||||
const passwordValidators = this.createPasswordValidators(policy);
|
||||
this.createAdminForm.get('password')?.setValidators(passwordValidators);
|
||||
this.createAdminForm.get('password')?.updateValueAndValidity();
|
||||
});
|
||||
|
||||
this.api.adminConfiguration().subscribe(configuration => {
|
||||
if (configuration) {
|
||||
this.createAdminForm.get('email')?.setValue(configuration.email);
|
||||
this.createAdminForm.get('user')?.setValue(configuration.username);
|
||||
|
||||
this.activatedProviders = configuration.usedOAuthProviders;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private createPasswordValidators(policy: PasswordPolicy): ValidatorFn[] {
|
||||
const validators: ValidatorFn[] = [Validators.required];
|
||||
|
||||
if (policy.minimumLength) {
|
||||
validators.push(Validators.minLength(policy.minimumLength));
|
||||
}
|
||||
|
||||
if (policy.requireLettersDifferentCase) {
|
||||
validators.push(Validators.pattern(/(?=.*[a-z])(?=.*[A-Z])/));
|
||||
} else if (policy.requireLetter) {
|
||||
validators.push(Validators.pattern(/[A-Za-z]/));
|
||||
} else if (policy.requireDigit) {
|
||||
validators.push(Validators.pattern(/\d/));
|
||||
}
|
||||
|
||||
if (policy.requireSpecialCharacter) {
|
||||
validators.push(Validators.pattern(/[!@#$%^&*(),.?":{}|<>]/));
|
||||
}
|
||||
|
||||
return validators;
|
||||
}
|
||||
|
||||
protected togglePassword(event: MouseEvent) {
|
||||
|
Reference in New Issue
Block a user