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
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:
parent
2305e83647
commit
d049048206
4 changed files with 51 additions and 37 deletions
|
@ -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">
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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.'
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 });
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue