From 37cdddab1a0e9d1c275c0459047795873d7d9438 Mon Sep 17 00:00:00 2001 From: Chneemann Date: Fri, 18 Apr 2025 06:48:21 +0200 Subject: [PATCH] feat: move guest login credentials to environment and prevent guest data change via password reset --- .../login/forgot-pw/forgot-pw.component.html | 4 ++- .../login/forgot-pw/forgot-pw.component.ts | 27 ++++++++++++++++--- .../forgot-pw/pw-reset/pw-reset.component.ts | 4 +-- src/app/components/login/login.component.ts | 8 +++--- .../login/register/register.component.ts | 3 ++- src/assets/i18n/de.json | 3 ++- src/assets/i18n/en.json | 1 + src/environments/environment.example.ts | 6 +++++ 8 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/app/components/login/forgot-pw/forgot-pw.component.html b/src/app/components/login/forgot-pw/forgot-pw.component.html index 6b7d8ee..cded837 100644 --- a/src/app/components/login/forgot-pw/forgot-pw.component.html +++ b/src/app/components/login/forgot-pw/forgot-pw.component.html @@ -43,7 +43,9 @@ } @else { @if (mail.touched && !isEmailValid(pwResetData.mail.toLowerCase())) {

{{ "register.errorMail1" | translate }}

- } } + } } @if(errorMessage) { +

{{ "forgotPW.guestPwChange" | translate }}

+ }
diff --git a/src/app/components/login/forgot-pw/forgot-pw.component.ts b/src/app/components/login/forgot-pw/forgot-pw.component.ts index 83094bc..edc8db0 100644 --- a/src/app/components/login/forgot-pw/forgot-pw.component.ts +++ b/src/app/components/login/forgot-pw/forgot-pw.component.ts @@ -8,6 +8,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { BtnBackComponent } from '../../../shared/components/buttons/btn-back/btn-back.component'; import { ButtonStateService } from '../../../services/button-state.service'; import { AuthService } from '../../../services/auth.service'; +import { environment } from '../../../../environments/environment'; @Component({ selector: 'app-forgot-pw', @@ -25,6 +26,7 @@ import { AuthService } from '../../../services/auth.service'; styleUrl: './forgot-pw.component.scss', }) export class ForgotPwComponent { + errorMessage = false; pwResetData = { mail: '', }; @@ -34,27 +36,44 @@ export class ForgotPwComponent { private authService: AuthService ) {} - async onSubmit(ngForm: NgForm) { + async onSubmit(ngForm: NgForm): Promise { this.buttonStateService.disableButton(); + if (this.checkGuestEmail()) return; + if (ngForm.submitted && ngForm.form.valid) { try { await this.authService.resetPassword( this.pwResetData.mail.toLowerCase() ); - this.buttonStateService.enableButton(); } catch (error) { this.buttonStateService.enableButton(); + } finally { + this.buttonStateService.enableButton(); } } else { this.buttonStateService.enableButton(); } } - isButtonDisabled() { + checkGuestEmail(): boolean { + this.errorMessage = false; + + if ( + this.pwResetData.mail.toLowerCase() === + environment.guestEmail.toLowerCase() + ) { + this.errorMessage = true; + this.buttonStateService.enableButton(); + return true; + } + return false; + } + + isButtonDisabled(): boolean { return this.buttonStateService.isButtonDisabled; } - isEmailValid(emailValue: string) { + isEmailValid(emailValue: string): boolean { return /^[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}$/.test(emailValue); } } diff --git a/src/app/components/login/forgot-pw/pw-reset/pw-reset.component.ts b/src/app/components/login/forgot-pw/pw-reset/pw-reset.component.ts index 2f38432..ce7501b 100644 --- a/src/app/components/login/forgot-pw/pw-reset/pw-reset.component.ts +++ b/src/app/components/login/forgot-pw/pw-reset/pw-reset.component.ts @@ -68,16 +68,16 @@ export class PwResetComponent implements OnInit, OnDestroy { this.buttonStateService.disableButton(); if (ngForm.submitted && ngForm.form.valid) { try { - console.log(this.uidb64, this.token); await this.authService.resetPasswordConfirm( this.pwResetData.password, this.uidb64, this.token ); - this.buttonStateService.enableButton(); } catch (error: any) { this.errorHttpMessage = error.message; this.buttonStateService.enableButton(); + } finally { + this.buttonStateService.enableButton(); } } else { this.buttonStateService.enableButton(); diff --git a/src/app/components/login/login.component.ts b/src/app/components/login/login.component.ts index 15e148a..3969f39 100644 --- a/src/app/components/login/login.component.ts +++ b/src/app/components/login/login.component.ts @@ -13,6 +13,7 @@ import { TokenService } from '../../services/token.service'; import { ButtonStateService } from '../../services/button-state.service'; import { PasswordVisibilityService } from '../../services/password-visibility.service'; import { Subject, takeUntil } from 'rxjs'; +import { environment } from '../../../environments/environment'; @Component({ selector: 'app-login', @@ -86,9 +87,10 @@ export class LoginComponent implements OnInit, OnDestroy { this.loginData.email = this.loginData.email.toLowerCase(); try { await this.authService.login(this.loginData, this.checkboxRememberMe); - this.buttonStateService.enableButton(); } catch (error) { this.buttonStateService.enableButton(); + } finally { + this.buttonStateService.enableButton(); } } else { this.buttonStateService.enableButton(); @@ -96,8 +98,8 @@ export class LoginComponent implements OnInit, OnDestroy { } guestLogin() { - this.loginData.email = 'guest@guestaccount.com'; - this.loginData.password = 'guest@guestaccount.com'; + this.loginData.email = environment.guestEmail.toLowerCase(); + this.loginData.password = environment.guestPassword.toLowerCase(); this.isPasswordIconVisible = !this.isPasswordIconVisible; this.onSubmit({ submitted: true, form: { valid: true } } as NgForm); } diff --git a/src/app/components/login/register/register.component.ts b/src/app/components/login/register/register.component.ts index d4bc443..a179ca0 100644 --- a/src/app/components/login/register/register.component.ts +++ b/src/app/components/login/register/register.component.ts @@ -56,10 +56,11 @@ export class RegisterComponent { this.registerData.email = this.registerData.email.toLowerCase(); try { await this.authService.register(this.registerData); - this.buttonStateService.enableButton(); } catch (error: any) { this.errorHttpMessage = error.message; this.buttonStateService.enableButton(); + } finally { + this.buttonStateService.enableButton(); } } else { this.buttonStateService.enableButton(); diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 8f95678..42d40cc 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -20,6 +20,7 @@ "email": "Ihre E-Mail", "sendMail": "E-Mail senden", "pwChange": "Passwort ändern", + "guestPwChange": "Das Passwort für das Gastkonto kann nicht geändert werden", "invalidLink": "Dieser Link zum Zurücksetzen Ihres Passworts ist ungültig", "notice": "Wir senden Ihnen eine E-Mail, über die Sie Ihr Passwort ändern können" }, @@ -153,7 +154,7 @@ "categorySelection": "Kategorie wählen", "subtask": "Unteraufgaben", "subtaskFormField": "Unteraufgabe hinzufügen", - "edit": "Barbeiten", + "edit": "Bearbeiten", "clear": "Leeren", "delete": "Löschen", "update": "Aktualisieren", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 7dc89da..e82049e 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -20,6 +20,7 @@ "email": "Your Email", "sendMail": "Send Mail", "pwChange": "Change Password", + "guestPwChange": "Guest account password cannot be changed", "invalidLink": "This link to reset your password is invalid", "notice": "We will send you an email to change your password." }, diff --git a/src/environments/environment.example.ts b/src/environments/environment.example.ts index 6fab359..fd80f6f 100755 --- a/src/environments/environment.example.ts +++ b/src/environments/environment.example.ts @@ -10,4 +10,10 @@ export const environment = { * For example: 'http://localhost:8000' or 'https://api.example.com' */ apiUrl: 'https://your-api-url.here', + + /** + * Default email and password for guest accounts. + */ + guestEmail: 'guest@guestaccount.com', + guestPassword: 'guest@guestaccount.com', };