forked from sh-edraft.de/sh_discord_bot
		
	Improved auth views and imrpoved default settings handling #70
This commit is contained in:
		
							
								
								
									
										3
									
								
								kdb-web/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								kdb-web/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -41,3 +41,6 @@ testem.log | ||||
| # System files | ||||
| .DS_Store | ||||
| Thumbs.db | ||||
|  | ||||
| ignore | ||||
| ignore/* | ||||
							
								
								
									
										607
									
								
								kdb-web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										607
									
								
								kdb-web/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,4 +1,6 @@ | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { TranslateService } from '@ngx-translate/core'; | ||||
| import { PrimeNGConfig } from 'primeng/api'; | ||||
| import { AuthService } from './services/auth/auth.service'; | ||||
| import { SocketService } from './services/socket/socket.service'; | ||||
| import { ThemeService } from './services/theme/theme.service'; | ||||
| @@ -18,10 +20,10 @@ export class AppComponent implements OnInit { | ||||
|   constructor( | ||||
|     private authService: AuthService, | ||||
|     private themeService: ThemeService, | ||||
|     private socket: SocketService | ||||
|   ) { } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     private socket: SocketService, | ||||
|     private translateService: TranslateService, | ||||
|     private config: PrimeNGConfig | ||||
|   ) { | ||||
|     this.themeService.sidebarWidth$.subscribe(value => { | ||||
|       this.sidebarWidth = value; | ||||
|     }); | ||||
| @@ -31,11 +33,33 @@ export class AppComponent implements OnInit { | ||||
|     this.authService.isLoggedIn$.subscribe(value => { | ||||
|       this.isLoggedIn = value; | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     this.translateService.setDefaultLang('en'); | ||||
|  | ||||
|     this.themeService.loadTheme(); | ||||
|     this.socket.startSocket(); | ||||
|   } | ||||
|  | ||||
|   loadLang(): void { | ||||
|     let lang = localStorage.getItem(`default_lang`); | ||||
|     if (!lang) { | ||||
|       lang = 'en'; | ||||
|       this.setLang(lang); | ||||
|     } | ||||
|     this.translate(lang); | ||||
|   } | ||||
|  | ||||
|   setLang(lang: string): void { | ||||
|     localStorage.setItem(`default_lang`, lang); | ||||
|   } | ||||
|  | ||||
|   translate(lang: string) { | ||||
|     this.translateService.use(lang); | ||||
|     this.translateService.get('primeng').subscribe(res => this.config.setTranslation(res)); | ||||
|   } | ||||
|  | ||||
|  | ||||
|   setSideWidth($event: any): void { | ||||
|     this.themeService.setSideWidth($event); | ||||
|   | ||||
| @@ -29,7 +29,6 @@ export class HeaderComponent implements OnInit { | ||||
|   ) { } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     this.translateService.setDefaultLang('en'); | ||||
|     this.initMenuLists(); | ||||
|     this.loadLang(); | ||||
|     this.translateService.onLangChange.subscribe((event: LangChangeEvent) => { | ||||
|   | ||||
| @@ -1,18 +1,20 @@ | ||||
| import { NgModule } from '@angular/core'; | ||||
| import { CommonModule } from '@angular/common'; | ||||
| import { NgModule } from '@angular/core'; | ||||
|  | ||||
| import { SharedModule } from '../shared/shared.module'; | ||||
| import { AuthRoutingModule } from './auth-routing.module'; | ||||
| import { AuthHeaderComponent } from './components/auth-header/auth-header.component'; | ||||
| import { ForgetPasswordComponent } from './components/forget-password/forget-password.component'; | ||||
| import { LoginComponent } from './components/login/login.component'; | ||||
| import { RegistrationComponent } from './components/registration/registration.component'; | ||||
| import { SharedModule } from '../shared/shared.module'; | ||||
|  | ||||
|  | ||||
| @NgModule({ | ||||
|   declarations: [ | ||||
|     ForgetPasswordComponent, | ||||
|     LoginComponent, | ||||
|     RegistrationComponent | ||||
|     RegistrationComponent, | ||||
|     AuthHeaderComponent | ||||
|   ], | ||||
|   imports: [ | ||||
|     CommonModule, | ||||
|   | ||||
| @@ -0,0 +1,10 @@ | ||||
| <div class="auth-header"> | ||||
|     <div class="logo-button-wrapper"> | ||||
|         <button type="button" pButton icon="pi pi-globe" class="btn icon-btn p-button-text" (click)="authLangMenu.toggle($event)"></button> | ||||
|         <p-menu #authLangMenu [popup]="true" [model]="langList" class="lang-menu"></p-menu> | ||||
|     </div> | ||||
|     <div class="logo-button-wrapper"> | ||||
|         <button type="button" pButton icon="pi pi-palette" class="btn icon-btn p-button-text" (click)="authThemeMenu.toggle($event)"></button> | ||||
|         <p-menu #authThemeMenu [popup]="true" [model]="themeList" class="theme-menu"></p-menu> | ||||
|     </div> | ||||
| </div> | ||||
| @@ -0,0 +1,23 @@ | ||||
| import { ComponentFixture, TestBed } from '@angular/core/testing'; | ||||
|  | ||||
| import { AuthHeaderComponent } from './auth-header.component'; | ||||
|  | ||||
| describe('AuthHeaderComponent', () => { | ||||
|   let component: AuthHeaderComponent; | ||||
|   let fixture: ComponentFixture<AuthHeaderComponent>; | ||||
|  | ||||
|   beforeEach(async () => { | ||||
|     await TestBed.configureTestingModule({ | ||||
|       declarations: [ AuthHeaderComponent ] | ||||
|     }) | ||||
|     .compileComponents(); | ||||
|  | ||||
|     fixture = TestBed.createComponent(AuthHeaderComponent); | ||||
|     component = fixture.componentInstance; | ||||
|     fixture.detectChanges(); | ||||
|   }); | ||||
|  | ||||
|   it('should create', () => { | ||||
|     expect(component).toBeTruthy(); | ||||
|   }); | ||||
| }); | ||||
| @@ -0,0 +1,83 @@ | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { Router } from '@angular/router'; | ||||
| import { TranslateService, LangChangeEvent } from '@ngx-translate/core'; | ||||
| import { MenuItem, PrimeNGConfig } from 'primeng/api'; | ||||
| import { catchError } from 'rxjs'; | ||||
| import { AuthService } from 'src/app/services/auth/auth.service'; | ||||
| import { SettingsService } from 'src/app/services/settings/settings.service'; | ||||
| import { SpinnerService } from 'src/app/services/spinner/spinner.service'; | ||||
| import { ThemeService } from 'src/app/services/theme/theme.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-auth-header', | ||||
|   templateUrl: './auth-header.component.html', | ||||
|   styleUrls: ['./auth-header.component.scss'] | ||||
| }) | ||||
| export class AuthHeaderComponent implements OnInit { | ||||
|   langList: MenuItem[] = []; | ||||
|   themeList: MenuItem[] = []; | ||||
|   userMenuList!: MenuItem[]; | ||||
|  | ||||
|   constructor( | ||||
|     private router: Router, | ||||
|     private themeService: ThemeService, | ||||
|     private spinnerService: SpinnerService, | ||||
|     private settings: SettingsService, | ||||
|     private translateService: TranslateService, | ||||
|     private config: PrimeNGConfig | ||||
|   ) { } | ||||
|  | ||||
|   ngOnInit(): void { | ||||
|     this.initMenuLists(); | ||||
|     this.loadLang(); | ||||
|   } | ||||
|  | ||||
|   initMenuLists(): void { | ||||
|     this.langList = [ | ||||
|       { | ||||
|         label: 'English', command: () => { | ||||
|           this.translate('en'); | ||||
|           this.setLang('en'); | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         label: 'Deutsch', command: () => { | ||||
|           this.translate('de'); | ||||
|           this.setLang('de'); | ||||
|         }, | ||||
|       }, | ||||
|     ]; | ||||
|  | ||||
|     this.settings.getThemes()?.forEach(theme => { | ||||
|       this.themeList.push({ | ||||
|         label: theme.Label, | ||||
|         command: () => { | ||||
|           this.changeTheme(theme.Name); | ||||
|         } | ||||
|       }); | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   changeTheme(name: string): void { | ||||
|     this.themeService.setTheme(name, true); | ||||
|   } | ||||
|  | ||||
|   translate(lang: string) { | ||||
|     this.translateService.use(lang); | ||||
|     this.translateService.get('primeng').subscribe(res => this.config.setTranslation(res)); | ||||
|   } | ||||
|  | ||||
|   loadLang(): void { | ||||
|     let lang = localStorage.getItem(`default_lang`); | ||||
|     if (!lang) { | ||||
|       lang = 'en'; | ||||
|       this.setLang(lang); | ||||
|     } | ||||
|     this.translate(lang); | ||||
|   } | ||||
|  | ||||
|   setLang(lang: string): void { | ||||
|     localStorage.setItem(`default_lang`, lang); | ||||
|   } | ||||
|  | ||||
| } | ||||
| @@ -5,24 +5,26 @@ | ||||
|                 <form [formGroup]="emailForm"> | ||||
|                     <h1>{{'auth.header' | translate}}</h1> | ||||
|                     <div *ngIf="!ready" class="input-field"> | ||||
|                         <input type="email" pInputText formControlName="email" placeholder="{{'auth.forgot_password.e_mail' | translate}}" | ||||
|                             autocomplete="username email"> | ||||
|                         <input type="email" pInputText formControlName="email" | ||||
|                             placeholder="{{'auth.forgot_password.e_mail' | translate}}" autocomplete="username email"> | ||||
|                     </div> | ||||
|                     <div *ngIf="ready" class="input-field-info-text"> | ||||
|                         {{'auth.forgot_password.send_confirmation_url' | translate}} | ||||
|                     </div> | ||||
|                     <div class="login-form-submit"> | ||||
|                         <button pButton label="{{'auth.forgot_password.reset_password' | translate}}" class="btn login-form-submit-btn" | ||||
|                             (click)="forgotPassword()" [disabled]="emailForm.invalid || ready"></button> | ||||
|                         <button pButton label="{{'auth.forgot_password.reset_password' | translate}}" | ||||
|                             class="btn login-form-submit-btn" (click)="forgotPassword()" | ||||
|                             [disabled]="emailForm.invalid || ready"></button> | ||||
|                     </div> | ||||
|  | ||||
|                     <div class="login-form-sub-button-wrapper"> | ||||
|                         <div class="login-form-sub-btn-wrapper"> | ||||
|                             <button pButton label="{{'auth.forgot_password.login' | translate}}" class="btn login-form-sub-btn" (click)="login()"></button> | ||||
|                             <button pButton label="{{'auth.forgot_password.login' | translate}}" | ||||
|                                 class="btn login-form-sub-btn" (click)="login()"></button> | ||||
|                         </div> | ||||
|                         <div class="login-form-sub-btn-wrapper"> | ||||
|                             <button pButton label="{{'auth.forgot_password.register' | translate}}" class="btn login-form-sub-btn" | ||||
|                                 (click)="register()"></button> | ||||
|                             <button pButton label="{{'auth.forgot_password.register' | translate}}" | ||||
|                                 class="btn login-form-sub-btn" (click)="register()"></button> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </form> | ||||
| @@ -33,8 +35,8 @@ | ||||
|                     <h1>{{'auth.header' | translate}}</h1> | ||||
|  | ||||
|                     <div class="input-field"> | ||||
|                         <input type="password" pInputText formControlName="password" placeholder="{{'auth.forgot_password.password' | translate}}" | ||||
|                             autocomplete="new-password"> | ||||
|                         <input type="password" pInputText formControlName="password" | ||||
|                             placeholder="{{'auth.forgot_password.password' | translate}}" autocomplete="new-password"> | ||||
|                     </div> | ||||
|  | ||||
|                     <div class="input-field"> | ||||
| @@ -42,16 +44,20 @@ | ||||
|                             placeholder="{{'auth.forgot_password.repeat_password' | translate}}" | ||||
|                             [ngClass]="{ 'invalid-feedback-input': submitted && repeatErrors.password}"> | ||||
|                         <div *ngIf="submitted" class="invalid-feedback"> | ||||
|                             <div *ngIf="repeatErrors.password">{{'auth.forgot_password.passwords_do_not_match' | translate}}</div> | ||||
|                             <div *ngIf="repeatErrors.password">{{'auth.forgot_password.passwords_do_not_match' | | ||||
|                                 translate}}</div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|  | ||||
|                     <div class="login-form-submit"> | ||||
|                         <button pButton label="{{'auth.forgot_password.reset_password' | translate}}" class="btn login-form-submit-btn" | ||||
|                             (click)="resetPassword()" [disabled]="passwordForm.invalid || ready"></button> | ||||
|                         <button pButton label="{{'auth.forgot_password.reset_password' | translate}}" | ||||
|                             class="btn login-form-submit-btn" (click)="resetPassword()" | ||||
|                             [disabled]="passwordForm.invalid || ready"></button> | ||||
|                     </div> | ||||
|                 </form> | ||||
|             </ng-template> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <app-auth-header></app-auth-header> | ||||
| </section> | ||||
| @@ -4,7 +4,7 @@ | ||||
|             <form [formGroup]="loginForm"> | ||||
|                 <h1>sh-edraft.de</h1> | ||||
|                 <div class="input-field"> | ||||
|                     <input type="email" pInputText formControlName="email" placeholder="E-Mail" [ngClass]="{ 'invalid-feedback-input': submitted && ( | ||||
|                     <input type="email" pInputText formControlName="email" placeholder="{{'auth.login.e_mail' | translate}}" [ngClass]="{ 'invalid-feedback-input': submitted && ( | ||||
|                             (loginForm.controls.email.errors && loginForm.controls.email.errors['required'] || authUserAtrErrors.email.required) || | ||||
|                             (authUserAtrErrors.email.wrongData) || | ||||
|                             (authUserAtrErrors.email.notConfirmed) | ||||
| @@ -12,9 +12,9 @@ | ||||
|                     <div *ngIf="submitted" class="invalid-feedback"> | ||||
|                         <div | ||||
|                             *ngIf="loginForm.controls.email.errors && loginForm.controls.email.errors['required'] || authUserAtrErrors.email.required"> | ||||
|                             E-Mail wird benötigt</div> | ||||
|                         <div *ngIf="authUserAtrErrors.email.wrongData">Benutzer nicht gefunden</div> | ||||
|                         <div *ngIf="authUserAtrErrors.email.notConfirmed">E-Mail wurde nicht bestätigt</div> | ||||
|                             {{'auth.login.e_mail_required' | translate}}</div> | ||||
|                         <div *ngIf="authUserAtrErrors.email.wrongData">{{'auth.login.user_not_found' | translate}}</div> | ||||
|                         <div *ngIf="authUserAtrErrors.email.notConfirmed">{{'auth.login.e_mail_not_confirmed' | translate}}</div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="input-field"> | ||||
| @@ -24,7 +24,7 @@ | ||||
|                         styleClass="p-password p-component p-inputwrapper p-input-icon-right" | ||||
|                         Remove after update! | ||||
|                     --> | ||||
|                     <p-password type="password" formControlName="password" placeholder="Passwort" [ngClass]="{ 'invalid-feedback-input': submitted && ( | ||||
|                     <p-password type="password" formControlName="password" placeholder="{{'auth.login.password' | translate}}" [ngClass]="{ 'invalid-feedback-input': submitted && ( | ||||
|                             (loginForm.controls.password.errors && loginForm.controls.password.errors['required'] || authUserAtrErrors.password.required) || | ||||
|                             (authUserAtrErrors.password.wrongData) | ||||
|                         )}" autocomplete="current-password" [toggleMask]="true" [feedback]="false" | ||||
| @@ -33,21 +33,21 @@ | ||||
|                     <div *ngIf="submitted" class="invalid-feedback"> | ||||
|                         <div | ||||
|                             *ngIf="loginForm.controls.password.errors && loginForm.controls.password.errors['required'] || authUserAtrErrors.password.required"> | ||||
|                             Password wird benötigt</div> | ||||
|                         <div *ngIf="authUserAtrErrors.password.wrongData">Falsches passwort</div> | ||||
|                             {{'auth.login.password_required' | translate}}</div> | ||||
|                         <div *ngIf="authUserAtrErrors.password.wrongData">{{'auth.login.wrong_password' | translate}}</div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="login-form-submit"> | ||||
|                     <button pButton label="Anmelden" class="btn login-form-submit-btn" (click)="login()" | ||||
|                     <button pButton label="{{'auth.login.login' | translate}}" class="btn login-form-submit-btn" (click)="login()" | ||||
|                         [disabled]="loginForm.invalid"></button> | ||||
|                 </div> | ||||
|                 <div class="login-form-sub-button-wrapper"> | ||||
|                     <div class="login-form-sub-btn-wrapper"> | ||||
|                         <button pButton label="Registrieren" class="btn login-form-sub-btn" | ||||
|                         <button pButton label="{{'auth.login.register' | translate}}" class="btn login-form-sub-btn" | ||||
|                             (click)="register()"></button> | ||||
|                     </div> | ||||
|                     <div class="login-form-sub-btn-wrapper"> | ||||
|                         <button pButton label="Passwort vergessen?" | ||||
|                         <button pButton label="{{'auth.login.forgot_password' | translate}}" | ||||
|                             class="btn login-form-sub-btn login-form-sub-login-btn p-button-text" | ||||
|                             (click)="forgotPassword()"></button> | ||||
|                     </div> | ||||
| @@ -55,4 +55,6 @@ | ||||
|             </form> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <app-auth-header></app-auth-header> | ||||
| </section> | ||||
| @@ -4,80 +4,82 @@ | ||||
|             <form [formGroup]="loginForm"> | ||||
|                 <h1>sh-edraft.de</h1> | ||||
|                 <div class="input-field"> | ||||
|                     <input type="text" pInputText formControlName="firstName" placeholder="Vorname" | ||||
|                     <input type="text" pInputText formControlName="firstName" placeholder="{{'auth.register.first_name' | translate}}" | ||||
|                         autocomplete="given-name"> | ||||
|                     <div *ngIf="submitted" class="invalid-feedback"> | ||||
|                         <div | ||||
|                             *ngIf="loginForm.controls.firstName.errors && loginForm.controls.firstName.errors['required'] || authUserAtrErrors.firstName.required"> | ||||
|                             Vorname wird benötigt</div> | ||||
|                         <div *ngIf="authUserAtrErrors.firstName.wrongData">Vorname ist ungültig</div> | ||||
|                             {{'auth.register.first_name_required' | translate}}</div> | ||||
|                         <div *ngIf="authUserAtrErrors.firstName.wrongData">{{'auth.register.first_name_invalid' | translate}}</div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="input-field"> | ||||
|                     <input type="text" pInputText formControlName="lastName" placeholder="Nachname" | ||||
|                     <input type="text" pInputText formControlName="lastName" placeholder="{{'auth.register.last_name' | translate}}" | ||||
|                         autocomplete="family-name"> | ||||
|                     <div *ngIf="submitted" class="invalid-feedback"> | ||||
|                         <div | ||||
|                             *ngIf="loginForm.controls.lastName.errors && loginForm.controls.lastName.errors['required'] || authUserAtrErrors.lastName.required"> | ||||
|                             Nachname wird benötigt</div> | ||||
|                         <div *ngIf="authUserAtrErrors.lastName.wrongData">Nachname ist ungültig</div> | ||||
|                             {{'auth.register.last_name_required' | translate}}</div> | ||||
|                         <div *ngIf="authUserAtrErrors.lastName.wrongData">{{'auth.register.last_name_invalid' | translate}}</div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="input-field"> | ||||
|                     <input type="email" pInputText formControlName="email" placeholder="E-Mail" | ||||
|                     <input type="email" pInputText formControlName="email" placeholder="{{'auth.register.e_mail' | translate}}" | ||||
|                         [ngClass]="{ 'invalid-feedback-input': submitted && (authUserAtrErrors.email.wrongData || loginForm.controls.email.errors && loginForm.controls.email.errors['required'] || authUserAtrErrors.email.required)}" | ||||
|                         autocomplete="username email"> | ||||
|                     <div *ngIf="submitted" class="invalid-feedback"> | ||||
|                         <div | ||||
|                             *ngIf="loginForm.controls.email.errors && loginForm.controls.email.errors['required'] || authUserAtrErrors.email.required"> | ||||
|                             E-Mail wird benötigt</div> | ||||
|                         <div *ngIf="authUserAtrErrors.email.wrongData">Benutzer existiert bereits</div> | ||||
|                             {{'auth.register.e_mail_required' | translate}}</div> | ||||
|                         <div *ngIf="authUserAtrErrors.email.wrongData">{{'auth.register.user_already_exists' | translate}}</div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="input-field"> | ||||
|                     <input type="email" pInputText formControlName="emailRepeat" placeholder="E-Mail wiederholen" | ||||
|                     <input type="email" pInputText formControlName="emailRepeat" placeholder="{{'auth.register.repeat_e_mail' | translate}}" | ||||
|                         [ngClass]="{ 'invalid-feedback-input': submitted && repeatErrors.email}"> | ||||
|                     <div *ngIf="submitted" class="invalid-feedback"> | ||||
|                         <div *ngIf="repeatErrors.email">Die E-Mails stimmen nicht überein</div> | ||||
|                         <div *ngIf="repeatErrors.email">{{'auth.register.e_mails_not_match' | translate}}</div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="input-field"> | ||||
|                     <p-password type="password" formControlName="password" placeholder="Passwort" | ||||
|                     <p-password type="password" formControlName="password" placeholder="{{'auth.register.password' | translate}}" | ||||
|                         ngClass="{ 'invalid-feedback': submitted && loginForm.controls.password.errors && loginForm.controls.password.errors['required'] || authUserAtrErrors.password.required}" | ||||
|                         autocomplete="new-password" [toggleMask]="true" [feedback]="false" | ||||
|                         styleClass="p-password p-component p-inputwrapper p-input-icon-right"></p-password> | ||||
|                     <div *ngIf="submitted" class="invalid-feedback"> | ||||
|                         <div | ||||
|                             *ngIf="loginForm.controls.password.errors && loginForm.controls.password.errors['required'] || authUserAtrErrors.password.required"> | ||||
|                             Password wird benötigt</div> | ||||
|                             {{'auth.register.password_required' | translate}}</div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="input-field"> | ||||
|                     <p-password type="password" formControlName="passwordRepeat" placeholder="Passwort wiederholen" | ||||
|                     <p-password type="password" formControlName="passwordRepeat" placeholder="{{'auth.register.repeat_password' | translate}}" | ||||
|                         [ngClass]="{ 'invalid-feedback-input': submitted && repeatErrors.password}" [toggleMask]="true" | ||||
|                         [feedback]="false" styleClass="p-password p-component p-inputwrapper p-input-icon-right"> | ||||
|                     </p-password> | ||||
|                     <div *ngIf="submitted" class="invalid-feedback"> | ||||
|                         <div *ngIf="repeatErrors.password">Die Passwörter stimmen nicht überein</div> | ||||
|                         <div *ngIf="repeatErrors.password">{{'auth.register.passwords_not_match' | translate}}</div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="login-form-submit"> | ||||
|                     <button pButton label="Registrieren" class="btn login-form-submit-btn" (click)="register()" | ||||
|                     <button pButton label="{{'auth.register.register' | translate}}" class="btn login-form-submit-btn" (click)="register()" | ||||
|                         [disabled]="loginForm.invalid"></button> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="login-form-sub-button-wrapper"> | ||||
|                     <div class="login-form-sub-btn-wrapper"> | ||||
|                         <button pButton label="Einloggen" class="btn login-form-sub-btn" (click)="login()"></button> | ||||
|                         <button pButton label="{{'auth.register.login' | translate}}" class="btn login-form-sub-btn" (click)="login()"></button> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </form> | ||||
|         </div> | ||||
|     </div> | ||||
|  | ||||
|     <app-auth-header></app-auth-header> | ||||
| </section> | ||||
| @@ -41,7 +41,7 @@ export class ThemeService { | ||||
|     const mail = this.authService.getEMailFromDecodedToken(token); | ||||
|  | ||||
|     let defaultThemeName = localStorage.getItem(`default_themeName`); | ||||
|     if (!defaultThemeName || defaultThemeName != Themes.Default) { | ||||
|     if (!defaultThemeName) { | ||||
|       defaultThemeName = Themes.Default; | ||||
|     } | ||||
|  | ||||
| @@ -58,7 +58,13 @@ export class ThemeService { | ||||
|     this.setTheme(userThemeName); | ||||
|   } | ||||
|  | ||||
|   setTheme(name: string): void { | ||||
|   setTheme(name: string, isDefault: boolean = false): void { | ||||
|     if (isDefault) { | ||||
|       localStorage.setItem(`default_themeName`, name); | ||||
|       this.themeName$.next(name); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     this.authService.isUserLoggedInAsync().then(result => { | ||||
|       if (!result) { | ||||
|         localStorage.setItem(`default_themeName`, Themes.Default); | ||||
|   | ||||
| @@ -89,8 +89,37 @@ | ||||
|     }, | ||||
|     "auth": { | ||||
|         "header": "Krümmelmonster WI", | ||||
|         "login": {}, | ||||
|         "register": {}, | ||||
|         "login": { | ||||
|             "e_mail": "E-Mail", | ||||
|             "password": "Passwort", | ||||
|             "login": "Einloggen", | ||||
|             "register": "Registrieren", | ||||
|             "forgot_password": "Passwort vergessen?", | ||||
|             "e_mail_required": "E-Mail benötigt", | ||||
|             "user_not_found": "Benutzer nicht gefunden", | ||||
|             "e_mail_not_confirmed": "E-Mail nicht bestätigt", | ||||
|             "password_required": "Passwort benötigt", | ||||
|             "wrong_password": "Falsches passwort" | ||||
|         }, | ||||
|         "register": { | ||||
|             "first_name": "Vorname", | ||||
|             "last_name": "Nachname", | ||||
|             "e_mail": "E-Mail", | ||||
|             "repeat_e_mail": "E-mail wiederholen", | ||||
|             "password": "Password", | ||||
|             "repeat_password": "password wiederholen", | ||||
|             "register": "Registrieren", | ||||
|             "login": "Einloggen", | ||||
|             "user_already_exists": "Benutzer existiert bereits", | ||||
|             "passwords_not_match": "Passwörter sitmmen nicht überein", | ||||
|             "e_mails_not_match": "E-Mails sitmmen nicht überein", | ||||
|             "first_name_required": "Vorname benötigt", | ||||
|             "last_name_required": "Nachname benötigt", | ||||
|             "e_mail_required": "E-Mail benötigt", | ||||
|             "password_required": "Passwort benötigt", | ||||
|             "first_name_invalid": "Vorname ungültig", | ||||
|             "last_name_invalid": "Nachname ungültig" | ||||
|         }, | ||||
|         "forgot_password": { | ||||
|             "e_mail": "E-Mail", | ||||
|             "send_confirmation_url": "Falls ein Benutzer mit der E-Mail gefunden wurde, wurde Betstätigungslink versendet", | ||||
|   | ||||
| @@ -92,7 +92,7 @@ | ||||
|             "password": "Password", | ||||
|             "login": "Login", | ||||
|             "register": "Register", | ||||
|             "forgot_password": "Forgot password", | ||||
|             "forgot_password": "Forgot password?", | ||||
|             "e_mail_required": "E-Mail required", | ||||
|             "user_not_found": "User not found", | ||||
|             "e_mail_not_confirmed": "Email was not confirmed", | ||||
| @@ -114,7 +114,7 @@ | ||||
|             "first_name_required": "Forename required", | ||||
|             "last_name_required": "Surname required", | ||||
|             "e_mail_required": "E-Mail required", | ||||
|             "password_required": "Passwort required", | ||||
|             "password_required": "Password required", | ||||
|             "first_name_invalid": "Forename invalid", | ||||
|             "last_name_invalid": "Surname invalid" | ||||
|         }, | ||||
|   | ||||
| @@ -68,6 +68,12 @@ header { | ||||
|     } | ||||
| } | ||||
|  | ||||
| .auth-header { | ||||
|     .p-menu-overlay { | ||||
|         width: 180px !important; | ||||
|     } | ||||
| } | ||||
|  | ||||
| .app { | ||||
|     height: 100%; | ||||
|     display: flex; | ||||
| @@ -361,8 +367,11 @@ footer { | ||||
|     display: flex; | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
|     flex-direction: column; | ||||
|     gap: 15px; | ||||
|  | ||||
|     .login-form-wrapper { | ||||
|     .login-form-wrapper, | ||||
|     .auth-header { | ||||
|         width: 350px; | ||||
|         height: 350px; | ||||
|  | ||||
| @@ -418,6 +427,11 @@ footer { | ||||
|     .register-confirm-form-wrapper { | ||||
|         height: 250px; | ||||
|     } | ||||
|  | ||||
|     .auth-header { | ||||
|         width: 350px; | ||||
|         height: 75px; | ||||
|     } | ||||
| } | ||||
|  | ||||
| .input-field { | ||||
|   | ||||
| @@ -23,8 +23,11 @@ | ||||
|     } | ||||
| } | ||||
|  | ||||
| .p-menu-overlay { | ||||
|     top: $headerHeight !important; | ||||
| header, | ||||
| .app { | ||||
|     .p-menu-overlay { | ||||
|         top: $headerHeight !important; | ||||
|     } | ||||
| } | ||||
|  | ||||
| .p-panelmenu { | ||||
|   | ||||
| @@ -194,7 +194,8 @@ | ||||
|     .login-wrapper { | ||||
|         background-color: $secondaryBackgroundColor; | ||||
|  | ||||
|         .login-form-wrapper { | ||||
|         .login-form-wrapper, | ||||
|         .auth-header { | ||||
|             background-color: $primaryBackgroundColor; | ||||
|  | ||||
|             .login-form { | ||||
| @@ -424,7 +425,7 @@ | ||||
|     } | ||||
|  | ||||
|     input, | ||||
|     .p-password { | ||||
|     .p-password input { | ||||
|         border-radius: 10px; | ||||
|         border: $default-border; | ||||
|  | ||||
|   | ||||
| @@ -194,7 +194,8 @@ | ||||
|     .login-wrapper { | ||||
|         background-color: $secondaryBackgroundColor; | ||||
|  | ||||
|         .login-form-wrapper { | ||||
|         .login-form-wrapper, | ||||
|         .auth-header { | ||||
|             background-color: $primaryBackgroundColor; | ||||
|  | ||||
|             .login-form { | ||||
| @@ -424,7 +425,7 @@ | ||||
|     } | ||||
|  | ||||
|     input, | ||||
|     .p-password { | ||||
|     .p-password input { | ||||
|         border-radius: 10px; | ||||
|         border: $default-border; | ||||
|  | ||||
|   | ||||
| @@ -196,7 +196,8 @@ | ||||
|     .login-wrapper { | ||||
|         background-color: $secondaryBackgroundColor; | ||||
|  | ||||
|         .login-form-wrapper { | ||||
|         .login-form-wrapper, | ||||
|         .auth-header { | ||||
|             background-color: $primaryBackgroundColor; | ||||
|  | ||||
|             .login-form { | ||||
| @@ -426,7 +427,7 @@ | ||||
|     } | ||||
|  | ||||
|     input, | ||||
|     .p-password { | ||||
|     .p-password input { | ||||
|         border-radius: 10px; | ||||
|         border: $default-border; | ||||
|  | ||||
|   | ||||
| @@ -194,7 +194,8 @@ | ||||
|     .login-wrapper { | ||||
|         background-color: $secondaryBackgroundColor; | ||||
|  | ||||
|         .login-form-wrapper { | ||||
|         .login-form-wrapper, | ||||
|         .auth-header { | ||||
|             background-color: $primaryBackgroundColor; | ||||
|  | ||||
|             .login-form { | ||||
| @@ -424,7 +425,7 @@ | ||||
|     } | ||||
|  | ||||
|     input, | ||||
|     .p-password { | ||||
|     .p-password input { | ||||
|         border-radius: 10px; | ||||
|         border: $default-border; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user