style: format HTML and TypeScript files for consistency
All checks were successful
CI / Get Changed Files (pull_request) Successful in 10s
CI / oxlint (pull_request) Successful in 26s
CI / Docker frontend validation (pull_request) Successful in 29s
CI / eslint (pull_request) Successful in 38s
CI / prettier (pull_request) Successful in 41s
CI / test-build (pull_request) Successful in 1m6s
CI / Checkstyle Main (pull_request) Successful in 1m29s
CI / Docker backend validation (pull_request) Successful in 1m27s

This commit is contained in:
csimonis 2025-05-15 12:34:28 +02:00 committed by Phan Huy Tran
commit d049048206
4 changed files with 51 additions and 37 deletions

View file

@ -84,16 +84,16 @@
</form> </form>
<div class="mt-6 text-center"> <div class="mt-6 text-center">
<p class="text-sm text-text-secondary"> <p class="text-sm text-text-secondary">
Passwort vergessen? Passwort vergessen?
<button <button
(click)="switchToForgotPassword()" (click)="switchToForgotPassword()"
class="font-medium text-emerald hover:text-emerald-light transition-all duration-200" class="font-medium text-emerald hover:text-emerald-light transition-all duration-200"
> >
Passwort zurücksetzen Passwort zurücksetzen
</button> </button>
</p> </p>
</div> </div>
<div class="mt-6 text-center"> <div class="mt-6 text-center">
<p class="text-sm text-text-secondary"> <p class="text-sm text-text-secondary">

View file

@ -22,7 +22,11 @@
</button> </button>
<h2 class="modal-heading text-center"> <h2 class="modal-heading text-center">
@if (isResetMode()) {Passwort zurücksetzen} @else {Passwort vergessen} @if (isResetMode()) {
Passwort zurücksetzen
} @else {
Passwort vergessen
}
</h2> </h2>
@if (errorMessage()) { @if (errorMessage()) {
@ -42,10 +46,11 @@
<form [formGroup]="emailForm" (ngSubmit)="onSubmitEmail()" class="space-y-4"> <form [formGroup]="emailForm" (ngSubmit)="onSubmitEmail()" class="space-y-4">
<div class="mb-6"> <div class="mb-6">
<p class="text-text-secondary text-sm mb-4"> <p class="text-text-secondary text-sm mb-4">
Gib deine E-Mail-Adresse ein, und wir senden dir einen Link zum Zurücksetzen deines Passworts. Gib deine E-Mail-Adresse ein, und wir senden dir einen Link zum Zurücksetzen deines
Passworts.
</p> </p>
</div> </div>
<div> <div>
<label for="email" class="text-text-secondary text-sm font-medium mb-1 block"> <label for="email" class="text-text-secondary text-sm font-medium mb-1 block">
E-Mail E-Mail
@ -86,11 +91,9 @@
<!-- Reset Password Form --> <!-- Reset Password Form -->
<form [formGroup]="resetPasswordForm" (ngSubmit)="onSubmitReset()" class="space-y-4"> <form [formGroup]="resetPasswordForm" (ngSubmit)="onSubmitReset()" class="space-y-4">
<div class="mb-6"> <div class="mb-6">
<p class="text-text-secondary text-sm mb-4"> <p class="text-text-secondary text-sm mb-4">Gib dein neues Passwort ein.</p>
Gib dein neues Passwort ein.
</p>
</div> </div>
<div> <div>
<label for="password" class="text-text-secondary text-sm font-medium mb-1 block"> <label for="password" class="text-text-secondary text-sm font-medium mb-1 block">
Neues Passwort Neues Passwort
@ -127,7 +130,11 @@
placeholder="Bestätige dein neues Passwort" placeholder="Bestätige dein neues Passwort"
/> />
@if (resetFormControls['confirmPassword'].touched && (resetFormControls['confirmPassword'].errors || resetPasswordForm.errors?.['passwordMismatch'])) { @if (
resetFormControls['confirmPassword'].touched &&
(resetFormControls['confirmPassword'].errors ||
resetPasswordForm.errors?.['passwordMismatch'])
) {
<div class="text-accent-red mt-1 text-sm"> <div class="text-accent-red mt-1 text-sm">
@if (resetFormControls['confirmPassword'].errors?.['required']) { @if (resetFormControls['confirmPassword'].errors?.['required']) {
<span>Passwortbestätigung ist erforderlich</span> <span>Passwortbestätigung ist erforderlich</span>
@ -153,7 +160,10 @@
<div class="mt-6 text-center"> <div class="mt-6 text-center">
<p class="text-sm text-text-secondary"> <p class="text-sm text-text-secondary">
<a routerLink="/" class="font-medium text-emerald hover:text-emerald-light transition-all duration-200"> <a
routerLink="/"
class="font-medium text-emerald hover:text-emerald-light transition-all duration-200"
>
Zurück zur Startseite Zurück zur Startseite
</a> </a>
</p> </p>

View file

@ -7,10 +7,7 @@ import { AuthService } from '@service/auth.service';
@Component({ @Component({
selector: 'app-recover-password', selector: 'app-recover-password',
standalone: true, standalone: true,
imports: [ imports: [CommonModule, ReactiveFormsModule],
CommonModule,
ReactiveFormsModule,
],
templateUrl: './recover-password.component.html', templateUrl: './recover-password.component.html',
}) })
export class RecoverPasswordComponent { export class RecoverPasswordComponent {
@ -31,18 +28,21 @@ export class RecoverPasswordComponent {
private route: ActivatedRoute private route: ActivatedRoute
) { ) {
this.emailForm = this.fb.group({ this.emailForm = this.fb.group({
email: ['', [Validators.required, Validators.email]] email: ['', [Validators.required, Validators.email]],
}); });
this.resetPasswordForm = this.fb.group({ this.resetPasswordForm = this.fb.group(
password: ['', [Validators.required, Validators.minLength(8)]], {
confirmPassword: ['', [Validators.required]] password: ['', [Validators.required, Validators.minLength(8)]],
}, { confirmPassword: ['', [Validators.required]],
validators: this.passwordMatchValidator },
}); {
validators: this.passwordMatchValidator,
}
);
// Check if we're in reset mode // Check if we're in reset mode
this.route.queryParamMap.subscribe(params => { this.route.queryParamMap.subscribe((params) => {
const token = params.get('token'); const token = params.get('token');
if (token) { if (token) {
this.token = token; this.token = token;
@ -79,7 +79,9 @@ export class RecoverPasswordComponent {
this.authService.recoverPassword(email).subscribe({ this.authService.recoverPassword(email).subscribe({
next: () => { next: () => {
this.isLoading.set(false); this.isLoading.set(false);
this.successMessage.set('Wenn ein Konto mit dieser E-Mail existiert, wird eine E-Mail mit weiteren Anweisungen gesendet.'); this.successMessage.set(
'Wenn ein Konto mit dieser E-Mail existiert, wird eine E-Mail mit weiteren Anweisungen gesendet.'
);
this.emailForm.reset(); this.emailForm.reset();
}, },
error: (err) => { error: (err) => {
@ -87,7 +89,7 @@ export class RecoverPasswordComponent {
this.errorMessage.set( this.errorMessage.set(
err.error?.message || 'Ein Fehler ist aufgetreten. Bitte versuche es später erneut.' err.error?.message || 'Ein Fehler ist aufgetreten. Bitte versuche es später erneut.'
); );
} },
}); });
} }
@ -105,7 +107,9 @@ export class RecoverPasswordComponent {
this.authService.resetPassword(this.token, password).subscribe({ this.authService.resetPassword(this.token, password).subscribe({
next: () => { next: () => {
this.isLoading.set(false); this.isLoading.set(false);
this.successMessage.set('Dein Passwort wurde erfolgreich zurückgesetzt. Du kannst dich jetzt anmelden.'); this.successMessage.set(
'Dein Passwort wurde erfolgreich zurückgesetzt. Du kannst dich jetzt anmelden.'
);
setTimeout(() => { setTimeout(() => {
this.router.navigate([''], { queryParams: { login: true } }); this.router.navigate([''], { queryParams: { login: true } });
}, 3000); }, 3000);
@ -115,7 +119,7 @@ export class RecoverPasswordComponent {
this.errorMessage.set( this.errorMessage.set(
err.error?.message || 'Ein Fehler ist aufgetreten. Bitte versuche es später erneut.' err.error?.message || 'Ein Fehler ist aufgetreten. Bitte versuche es später erneut.'
); );
} },
}); });
} }
} }

View file

@ -77,11 +77,11 @@ export class AuthService {
public verifyEmail(token: string): Observable<unknown> { public verifyEmail(token: string): Observable<unknown> {
return this.http.post<unknown>(`${this.authUrl}/verify?token=${token}`, null); return this.http.post<unknown>(`${this.authUrl}/verify?token=${token}`, null);
} }
public recoverPassword(email: string): Observable<unknown> { public recoverPassword(email: string): Observable<unknown> {
return this.http.post<unknown>(`${this.authUrl}/recover-password?email=${email}`, null); return this.http.post<unknown>(`${this.authUrl}/recover-password?email=${email}`, null);
} }
public resetPassword(token: string, password: string): Observable<unknown> { public resetPassword(token: string, password: string): Observable<unknown> {
return this.http.post<unknown>(`${this.authUrl}/reset-password`, { token, password }); return this.http.post<unknown>(`${this.authUrl}/reset-password`, { token, password });
} }