-
+
+
+
diff --git a/kdb-web/src/app/modules/auth/components/registration/registration.component.ts b/kdb-web/src/app/modules/auth/components/registration/registration.component.ts
index 3cd29c14..09becb44 100644
--- a/kdb-web/src/app/modules/auth/components/registration/registration.component.ts
+++ b/kdb-web/src/app/modules/auth/components/registration/registration.component.ts
@@ -1,19 +1,21 @@
-import { Component, OnInit } from '@angular/core';
-import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
-import { ActivatedRoute, Router } from '@angular/router';
-import { catchError } from 'rxjs/operators';
-import { AuthErrorMessages } from 'src/app/models/auth/auth-error-messages.enum';
-import { AuthUserDTO } from 'src/app/models/auth/auth-user.dto';
-import { AuthUserAtrErrors } from 'src/app/models/auth/auth-user-atr-errors';
-import { ErrorDTO } from 'src/app/models/error/error-dto';
-import { ServiceErrorCode } from 'src/app/models/error/service-error-code.enum';
-import { AuthService } from 'src/app/services/auth/auth.service';
-import { SpinnerService } from 'src/app/services/spinner/spinner.service';
+import { Component, OnInit } from "@angular/core";
+import { FormBuilder, FormControl, FormGroup, Validators } from "@angular/forms";
+import { ActivatedRoute, Router } from "@angular/router";
+import { catchError, finalize } from "rxjs/operators";
+import { AuthErrorMessages } from "src/app/models/auth/auth-error-messages.enum";
+import { AuthUserDTO } from "src/app/models/auth/auth-user.dto";
+import { AuthUserAtrErrors } from "src/app/models/auth/auth-user-atr-errors";
+import { ErrorDTO } from "src/app/models/error/error-dto";
+import { ServiceErrorCode } from "src/app/models/error/service-error-code.enum";
+import { AuthService } from "src/app/services/auth/auth.service";
+import { SpinnerService } from "src/app/services/spinner/spinner.service";
+import { throwError } from "rxjs";
+import { OAuthDTO } from "../../../../models/auth/oauth.dto";
@Component({
- selector: 'app-registration',
- templateUrl: './registration.component.html',
- styleUrls: ['./registration.component.scss']
+ selector: "app-registration",
+ templateUrl: "./registration.component.html",
+ styleUrls: ["./registration.component.scss"]
})
export class RegistrationComponent implements OnInit {
@@ -35,6 +37,11 @@ export class RegistrationComponent implements OnInit {
showEMailConfirmation = false;
showEMailConfirmationError = false;
+ code!: string;
+ state!: string;
+ user!: AuthUserDTO;
+ oAuthId!: string;
+
constructor(
private authService: AuthService,
private formBuilder: FormBuilder,
@@ -45,16 +52,64 @@ export class RegistrationComponent implements OnInit {
this.spinnerService.showSpinner();
this.authService.isUserLoggedInAsync().then(res => {
if (res) {
- this.router.navigate(['/dashboard']);
+ this.router.navigate(["/dashboard"]);
}
this.spinnerService.hideSpinner();
});
}
ngOnInit(): void {
+ this.initData();
+ this.spinnerService.showSpinner();
+ this.route.queryParams.pipe(catchError(err => {
+ this.spinnerService.hideSpinner();
+ this.router.navigate(["auth", "login"]).then(() => {
+ });
+ return throwError(() => err);
+ })).subscribe(params => {
+ if (!params["code"] || !params["state"]) {
+ this.spinnerService.hideSpinner();
+ return;
+ }
+
+ if (this.user) {
+ this.spinnerService.hideSpinner();
+ return;
+ }
+
+ this.code = params["code"];
+ this.state = params["state"];
+ this.authService.discordCreateUser(this.code, this.state).pipe(catchError(err => {
+ this.spinnerService.hideSpinner();
+ this.router.navigate(["auth", "login"]).then(() => {
+ });
+ return throwError(() => err);
+ })).subscribe(oAuthDTO => {
+ if (oAuthDTO) {
+ this.user = oAuthDTO.user;
+ this.oAuthId = oAuthDTO.oAuthId;
+ }
+ if (this.user && !this.oAuthId) {
+ this.router.navigate(["auth", "login"]).then(() => {
+ });
+ return;
+ }
+
+ this.router.navigate(["auth", "register"]).then(() => {
+ });
+ this.initData();
+ }
+ );
+ this.initData();
+ }
+ );
+ }
+
+ initData() {
this.initLoginForm();
this.resetStateFlags();
this.confirmEMail();
+ this.spinnerService.hideSpinner();
}
resetStateFlags(): void {
@@ -66,18 +121,23 @@ export class RegistrationComponent implements OnInit {
}
login(): void {
- this.router.navigate(['/auth/login']);
+ this.router.navigate(["/auth/login"]);
}
initLoginForm(): void {
this.loginForm = this.formBuilder.group({
- firstName: ['', Validators.required],
- lastName: ['', Validators.required],
- email: ['', [Validators.required, Validators.email]],
- emailRepeat: ['', [Validators.required, Validators.email]],
- password: ['', [Validators.required, Validators.minLength(8)]],
- passwordRepeat: ['', [Validators.required, Validators.minLength(8)]]
+ firstName: [this.user ? this.user.firstName : "", Validators.required],
+ lastName: [this.user ? this.user.lastName : "", Validators.required],
+ email: [this.user ? this.user.email : "", [Validators.required, Validators.email]],
+ emailRepeat: [this.user ? this.user.email : "", [Validators.required, Validators.email]],
+ password: [this.user ? this.user.password : "", [Validators.required, Validators.minLength(8)]],
+ passwordRepeat: [this.user ? this.user.password : "", [Validators.required, Validators.minLength(8)]]
});
+
+ if (this.user) {
+ this.loginForm.controls.email.disable();
+ this.loginForm.controls.emailRepeat.disable();
+ }
}
register(): void {
@@ -100,13 +160,49 @@ export class RegistrationComponent implements OnInit {
}
this.spinnerService.showSpinner();
+ if (this.user && this.oAuthId) {
+ this.registerWithOAuth();
+ return;
+ }
+
+ this.registerLocal();
+ }
+
+ private registerWithOAuth() {
+ const oAuthDTO: OAuthDTO = {
+ user: {
+ firstName: this.loginForm.value.firstName ?? this.user.firstName,
+ lastName: this.loginForm.value.lastName ?? this.user.lastName,
+ email: this.loginForm.value.email ?? this.user.email,
+ password: this.loginForm.value.password ?? null
+ },
+ oAuthId: this.oAuthId
+ };
+ this.authService.discordRegister(oAuthDTO)
+ .pipe(catchError(error => {
+ if (error.error !== null) {
+ const err: ErrorDTO = error.error;
+
+ if (err.errorCode === ServiceErrorCode.InvalidUser && err.message === AuthErrorMessages.UserAlreadyExists) {
+ this.authUserAtrErrors.email.wrongData = true;
+ }
+ }
+ this.spinnerService.hideSpinner();
+ throw error;
+ }))
+ .subscribe(resp => {
+ this.spinnerService.hideSpinner();
+ this.router.navigate(["/auth/login"]);
+ });
+ }
+
+ private registerLocal() {
const user: AuthUserDTO = {
firstName: this.loginForm.value.firstName ?? null,
lastName: this.loginForm.value.lastName ?? null,
email: this.loginForm.value.email ?? null,
password: this.loginForm.value.password ?? null
};
-
this.authService.register(user)
.pipe(catchError(error => {
if (error.error !== null) {
@@ -121,24 +217,30 @@ export class RegistrationComponent implements OnInit {
}))
.subscribe(resp => {
this.spinnerService.hideSpinner();
- this.router.navigate(['/auth/login']);
+ this.router.navigate(["/auth/login"]);
});
}
confirmEMail(): void {
- const id = this.route.snapshot.params['id'];
+ const id = this.route.snapshot.params["id"];
if (id) {
this.spinnerService.showSpinner();
this.authService.confirmEMail(id)
.pipe(catchError(error => {
- this.router.navigate(['/auth/login']);
+ this.router.navigate(["/auth/login"]);
this.spinnerService.hideSpinner();
throw error;
}))
.subscribe(resp => {
this.spinnerService.hideSpinner();
- this.router.navigate(['/auth/login']);
+ this.router.navigate(["/auth/login"]);
});
}
}
+
+ discordLogin() {
+ this.authService.getDiscordAuthURL().subscribe(url => {
+ window.location.href = url.loginUrl;
+ });
+ }
}
diff --git a/kdb-web/src/app/services/auth/auth.service.ts b/kdb-web/src/app/services/auth/auth.service.ts
index b882a7ee..a19195db 100644
--- a/kdb-web/src/app/services/auth/auth.service.ts
+++ b/kdb-web/src/app/services/auth/auth.service.ts
@@ -1,20 +1,22 @@
-import { HttpClient, HttpHeaders } from '@angular/common/http';
-import { Injectable } from '@angular/core';
-import { Router } from '@angular/router';
-import { JwtHelperService } from '@auth0/angular-jwt';
-import { firstValueFrom, Observable, Subject, Subscription } from 'rxjs';
-import { catchError } from 'rxjs/operators';
-import { AdminUpdateUserDTO } from 'src/app/models/auth/admin-update-user.dto';
-import { AuthRoles } from 'src/app/models/auth/auth-roles.enum';
-import { AuthUserDTO } from 'src/app/models/auth/auth-user.dto';
-import { EMailStringDTO } from 'src/app/models/auth/email-string.dto';
-import { ResetPasswordDTO } from 'src/app/models/auth/reset-password.dto';
-import { TokenDTO } from 'src/app/models/auth/token.dto';
-import { UpdateUserDTO } from 'src/app/models/auth/update-user.dto';
-import { AuthUserSelectCriterion } from 'src/app/models/selection/auth-user/auth-user-select-criterion.dto';
-import { GetFilteredAuthUsersResultDTO } from 'src/app/models/selection/auth-user/get-filtered-auth-users-result.dto';
-import { SettingsService } from '../settings/settings.service';
-import { SpinnerService } from '../spinner/spinner.service';
+import { HttpClient, HttpHeaders } from "@angular/common/http";
+import { Injectable } from "@angular/core";
+import { Router } from "@angular/router";
+import { JwtHelperService } from "@auth0/angular-jwt";
+import { firstValueFrom, Observable, Subject, Subscription } from "rxjs";
+import { catchError } from "rxjs/operators";
+import { AdminUpdateUserDTO } from "src/app/models/auth/admin-update-user.dto";
+import { AuthRoles } from "src/app/models/auth/auth-roles.enum";
+import { AuthUserDTO } from "src/app/models/auth/auth-user.dto";
+import { EMailStringDTO } from "src/app/models/auth/email-string.dto";
+import { ResetPasswordDTO } from "src/app/models/auth/reset-password.dto";
+import { TokenDTO } from "src/app/models/auth/token.dto";
+import { UpdateUserDTO } from "src/app/models/auth/update-user.dto";
+import { AuthUserSelectCriterion } from "src/app/models/selection/auth-user/auth-user-select-criterion.dto";
+import { GetFilteredAuthUsersResultDTO } from "src/app/models/selection/auth-user/get-filtered-auth-users-result.dto";
+import { SettingsService } from "../settings/settings.service";
+import { SpinnerService } from "../spinner/spinner.service";
+import { DiscordAuthURL } from "../../models/auth/discord-auth-url.dto";
+import { OAuthDTO } from "../../models/auth/oauth.dto";
@Injectable({
providedIn: 'root'
@@ -157,6 +159,39 @@ export class AuthService {
});
}
+ /* discord auth */
+ getDiscordAuthURL() {
+ return this.http.get
(`${this.appsettings.getApiURL()}/api/auth/discord/get-url`, {
+ headers: new HttpHeaders({
+ 'Content-Type': 'application/json'
+ })
+ });
+ }
+ discordCreateUser(code: string, state: string) {
+ return this.http.get(`${this.appsettings.getApiURL()}/api/auth/discord/create-user?code=${code}&state=${state}`, {
+ headers: new HttpHeaders({
+ 'Content-Type': 'application/json'
+ })
+ });
+ }
+
+ // /api/auth/discord/register?code=
+ discordRegister(oAuthDTO: OAuthDTO) {
+ return this.http.post(`${this.appsettings.getApiURL()}/api/auth/discord/register`, oAuthDTO, {
+ headers: new HttpHeaders({
+ 'Content-Type': 'application/json'
+ })
+ });
+ }
+
+ // discordGetUser(code: string, state: string) {
+ // return this.http.get(`${this.appsettings.getApiURL()}/api/auth/discord/get-user?code=${code}&state=${state}`, {
+ // headers: new HttpHeaders({
+ // 'Content-Type': 'application/json'
+ // })
+ // });
+ // }
+
/* utils */
saveToken(token: TokenDTO): void {
localStorage.setItem('jwt', token.token);
diff --git a/kdb-web/src/assets/i18n/de.json b/kdb-web/src/assets/i18n/de.json
index 9f305603..4593ae8f 100644
--- a/kdb-web/src/assets/i18n/de.json
+++ b/kdb-web/src/assets/i18n/de.json
@@ -1,286 +1,303 @@
{
- "header": {
- "change_password": "Passwort ändern",
- "settings": "Einstellungen",
- "logout": "Ausloggen",
- "header": "Krümmelmonster WI"
- },
- "sidebar": {
- "dashboard": "Dashboard",
- "server": "Server",
- "server_empty": "Kein Server ausgewählt",
- "settings": "Einstellungen",
- "members": "Mitglieder",
- "administration": "Administration",
- "config": "Konfiguration",
- "auth_user_list": "Benutzer"
- },
- "admin": {
- "settings": {
- "header": "Konfiguration",
- "website": {
- "header": "Webseite",
- "frontend_version": "Webseite Version",
- "backend_version": "Server Version",
- "config_path": "Konfigurations-Dateipfad",
- "frontend_base_url": "Webseite Basis-URL",
- "backend_base_url": "Server Basis-URL",
- "token_expire_time": "Token Ablaufzeit",
- "refresh_token_expire_time": "Refresh Token Ablaufzeit"
- },
- "e_mail": {
- "header": "E-Mail",
- "user": "Benutzer",
- "host": "Host",
- "port": "Port",
- "transceiver": "Absender",
- "e_mail_address": "E-Mail Adresse",
- "e_mail": "E-Mail",
- "send_e_mail": "E-Mail senden"
- },
- "message": {
- "error": "Fehler",
- "could_not_send_mail": "E-Mail konte nicht gesendet werden!",
- "connection_failed": "Verbindung fehlgeschlagen",
- "connection_to_mail_failed": "Die Verbindung zum Mailserver konnte nicht hergestellt werden!",
- "mail_login_failed": "Die Anmeldung am Mailserver ist fehlgeschlagen!",
- "send_failed": "Senden fehlgeschlagen",
- "test_mail_not_send": "Die Test E-Mail konnte nicht gesendet werden!",
- "success": "Erfolg",
- "send_mail": "E-Mail wurde erfolgreich gesendet"
- }
- },
- "auth_users": {
- "header": "Benutzer",
- "of": "von",
- "add": "Hinzufügen",
- "reset_filters": "Filter zurücksetzen",
- "users": "Benutzer",
- "headers": {
- "users": "Benutzer",
- "first_name": "Vorname",
- "last_name": "Nachname",
- "e_mail": "E-Mail",
- "active": "Aktiv",
- "role": "Rolle",
- "password": "Passwort",
- "actions": "Aktionen"
- },
- "no_entries_found": "Keine Einträge gefunden",
- "message": {
- "invalid_email": "Ungültige E-Mail",
- "invalid_email_d": "Die E-Mail {{email}} ist nicht gültig!",
- "user_already_exists": "Benutzer existiert bereits",
- "user_already_exists_d": "Der Benutzer {{email}} existiert bereits!",
- "user_added": "Benutzer hinzugefügt",
- "user_added_d": "Benutzer {{email}} erfolgreich hinzugefügt",
- "user_change_failed": "Benutzer änderung fehlgeschlagen",
- "user_change_failed_d": "Benutzer {{email}} konnte nicht geändert werden!",
- "user_changed": "Benutzer geändert",
- "user_changed_d": "Benutzer {{email}} erfolgreich geändert",
- "cannot_delete_user": "Benutzer kann nicht gelöscht werden",
- "logon_with_another_user": "Loggen Sie sich mit einem anderen Benutzer ein, um diesen Benutzer zu löschen!",
- "user_delete": "Benutzer löschen",
- "user_delete_q": "Sind Sie sich sicher, dass Sie {{email}} löschen möchten?",
- "user_deleted": "Benutzer gelöscht",
- "user_deleted_d": "Benutzer {{email}} erfolgreich gelöscht"
- }
- }
- },
- "auth": {
- "header": "Krümmelmonster WI",
- "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",
- "reset_password": "Passwort zurücksetzen",
- "login": "Anmelden",
- "register": "Registrieren",
- "repeat_password": "Passwort wiederholen",
- "passwords_do_not_match": "Die Passwörter stimmen nicht überein",
- "password": "Passwort",
- "message": {
- "reset_password": "Passwort zurückgesetzt",
- "reset_password_d": "Dein Passwort wurde zurückgesetzt"
- }
- }
- },
- "view": {
- "dashboard": {
- "header": "Dashboard",
- "of": "von",
- "servers": "Server",
- "server": {
- "header": "Server",
- "member_count": "Mitglid(er)"
- },
- "filter": {
- "name": "Name"
- }
- },
- "server": {
- "header": "Server"
- },
- "user-list": {},
- "change-password": {
- "header": "Passwort ändern",
- "wrong_password": "Falsches Passwort",
- "passwords_do_not_match": "Die Passwörter stimmen nicht überein",
- "password": "Passwort",
- "active_password": "Aktuelles Passwort",
- "new_password": "Neues Passwort",
- "repeat_new_password": "Neues Passwort wiederholen",
- "save": "Speichern",
- "message": {
- "error": "Fehler",
- "password_cannot_be_changed": "Dein Passwort konnte nicht geändert werden!",
- "change_password": "Passwort geändert",
- "changed_password": "Dein Passwort wurde geändert"
- }
- },
- "user_settings": {
- "header": "Einstellungen",
- "first_name": "Vorname",
- "last_name": "Nachname",
- "e_mail": "E-Mail",
- "password": "Passwort",
- "e_mail_already_exists": "Die E-Mail wurde bereits vergeben",
- "wrong_password": "Falsches Passwort",
- "save": "Speichern",
- "message": {
- "user_not_found": "Benutzer nicht gefunden",
- "user_not_found_d": "Der Benutzer konnte nicht gefunden werden!",
- "error": "Fehler",
- "could_not_change_settings": "Die Einstellungen konnten nicht geändert werden!",
- "changed_settings": "Die Einstellungen wurden geändert",
- "success": "Erfolg"
- }
- }
- },
- "footer": {
- "imprint": "Impressum",
- "backend": "Webseite",
- "frontend": "API"
- },
- "dialog": {
- "confirm": "Bestätigen",
- "abort": "Abbrechen"
- },
- "general": {
- "days": "Tage",
- "minutes": "Minuten"
- },
- "common": {
- "bool_as_string": {
- "true": "Ja",
- "false": "Nein"
- },
+ "header": {
+ "change_password": "Passwort ändern",
+ "settings": "Einstellungen",
+ "logout": "Ausloggen",
+ "header": "Krümmelmonster WI"
+ },
+ "sidebar": {
+ "dashboard": "Dashboard",
+ "server": "Server",
+ "server_empty": "Kein Server ausgewählt",
+ "settings": "Einstellungen",
+ "members": "Mitglieder",
+ "administration": "Administration",
+ "config": "Konfiguration",
+ "auth_user_list": "Benutzer"
+ },
+ "admin": {
+ "settings": {
+ "header": "Konfiguration",
+ "website": {
+ "header": "Webseite",
+ "frontend_version": "Webseite Version",
+ "backend_version": "Server Version",
+ "config_path": "Konfigurations-Dateipfad",
+ "frontend_base_url": "Webseite Basis-URL",
+ "backend_base_url": "Server Basis-URL",
+ "token_expire_time": "Token Ablaufzeit",
+ "refresh_token_expire_time": "Refresh Token Ablaufzeit"
+ },
+ "e_mail": {
+ "header": "E-Mail",
+ "user": "Benutzer",
+ "host": "Host",
+ "port": "Port",
+ "transceiver": "Absender",
+ "e_mail_address": "E-Mail Adresse",
+ "e_mail": "E-Mail",
+ "send_e_mail": "E-Mail senden"
+ },
+ "message": {
"error": "Fehler",
- "404": "404 - Der Eintrag konnte nicht gefunden werden"
+ "could_not_send_mail": "E-Mail konte nicht gesendet werden!",
+ "connection_failed": "Verbindung fehlgeschlagen",
+ "connection_to_mail_failed": "Die Verbindung zum Mailserver konnte nicht hergestellt werden!",
+ "mail_login_failed": "Die Anmeldung am Mailserver ist fehlgeschlagen!",
+ "send_failed": "Senden fehlgeschlagen",
+ "test_mail_not_send": "Die Test E-Mail konnte nicht gesendet werden!",
+ "success": "Erfolg",
+ "send_mail": "E-Mail wurde erfolgreich gesendet"
+ }
},
- "primeng": {
- "startsWith": "Startet mit",
- "contains": "Enthält",
- "notContains": "Enthält nicht",
- "endsWith": "Ended mit",
- "equals": "Gleich",
- "notEquals": "Nicht gleich",
- "noFilter": "Kein Filter",
- "lt": "Weniger als",
- "lte": "Weniger als oder gleich",
- "gt": "Größer als",
- "gte": "Größer als doer gleich",
- "is": "Ist",
- "isNot": "Ist nicht",
- "before": "Vorher",
- "after": "Nachher",
- "clear": "Zurücksetzen",
- "apply": "Anwenden",
- "matchAll": "Passend zu allem",
- "matchAny": "Passend zu jedem",
- "addRule": "Regel hinzufügen",
- "removeRule": "Regel entfernen",
- "accept": "Ja",
- "reject": "Nein",
- "choose": "Wählen",
- "upload": "Hochladen",
- "cancel": "Abbrechen",
- "dayNames": [
- "Sonntag",
- "Montag",
- "Dienstag",
- "Mittwoch",
- "Donnerstag",
- "Freitag",
- "Samstag"
- ],
- "dayNamesShort": ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"],
- "dayNamesMin": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
- "monthNames": [
- "Januar",
- "Februar",
- "März",
- "April",
- "Mai",
- "Juni",
- "Juli",
- "August",
- "September",
- "Oktober",
- "November",
- "Dezember"
- ],
- "monthNamesShort": [
- "Jan",
- "Feb",
- "Mär",
- "Apr",
- "Mai",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Okt",
- "Nov",
- "Dez"
- ],
- "today": "Heute",
- "weekHeader": "Wk",
- "weak": "Woche",
- "medium": "Mittel",
- "strong": "Stark",
- "passwordPrompt": "Passwort eingeben",
- "emptyMessage": "Keine Ergebnisse gefunden",
- "emptyFilterMessage": "Keine Ergebnisse gefunden"
+ "auth_users": {
+ "header": "Benutzer",
+ "of": "von",
+ "add": "Hinzufügen",
+ "reset_filters": "Filter zurücksetzen",
+ "users": "Benutzer",
+ "headers": {
+ "users": "Benutzer",
+ "first_name": "Vorname",
+ "last_name": "Nachname",
+ "e_mail": "E-Mail",
+ "active": "Aktiv",
+ "role": "Rolle",
+ "password": "Passwort",
+ "actions": "Aktionen"
+ },
+ "no_entries_found": "Keine Einträge gefunden",
+ "message": {
+ "invalid_email": "Ungültige E-Mail",
+ "invalid_email_d": "Die E-Mail {{email}} ist nicht gültig!",
+ "user_already_exists": "Benutzer existiert bereits",
+ "user_already_exists_d": "Der Benutzer {{email}} existiert bereits!",
+ "user_added": "Benutzer hinzugefügt",
+ "user_added_d": "Benutzer {{email}} erfolgreich hinzugefügt",
+ "user_change_failed": "Benutzer änderung fehlgeschlagen",
+ "user_change_failed_d": "Benutzer {{email}} konnte nicht geändert werden!",
+ "user_changed": "Benutzer geändert",
+ "user_changed_d": "Benutzer {{email}} erfolgreich geändert",
+ "cannot_delete_user": "Benutzer kann nicht gelöscht werden",
+ "logon_with_another_user": "Loggen Sie sich mit einem anderen Benutzer ein, um diesen Benutzer zu löschen!",
+ "user_delete": "Benutzer löschen",
+ "user_delete_q": "Sind Sie sich sicher, dass Sie {{email}} löschen möchten?",
+ "user_deleted": "Benutzer gelöscht",
+ "user_deleted_d": "Benutzer {{email}} erfolgreich gelöscht"
+ }
}
+ },
+ "auth": {
+ "header": "Krümmelmonster WI",
+ "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",
+ "register_with_discord": "Mit Discord 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",
+ "reset_password": "Passwort zurücksetzen",
+ "login": "Anmelden",
+ "register": "Registrieren",
+ "repeat_password": "Passwort wiederholen",
+ "passwords_do_not_match": "Die Passwörter stimmen nicht überein",
+ "password": "Passwort",
+ "message": {
+ "reset_password": "Passwort zurückgesetzt",
+ "reset_password_d": "Dein Passwort wurde zurückgesetzt"
+ }
+ }
+ },
+ "view": {
+ "dashboard": {
+ "header": "Dashboard",
+ "of": "von",
+ "servers": "Server",
+ "server": {
+ "header": "Server",
+ "member_count": "Mitglid(er)"
+ },
+ "filter": {
+ "name": "Name"
+ }
+ },
+ "server": {
+ "header": "Server"
+ },
+ "user-list": {},
+ "change-password": {
+ "header": "Passwort ändern",
+ "wrong_password": "Falsches Passwort",
+ "passwords_do_not_match": "Die Passwörter stimmen nicht überein",
+ "password": "Passwort",
+ "active_password": "Aktuelles Passwort",
+ "new_password": "Neues Passwort",
+ "repeat_new_password": "Neues Passwort wiederholen",
+ "save": "Speichern",
+ "message": {
+ "error": "Fehler",
+ "password_cannot_be_changed": "Dein Passwort konnte nicht geändert werden!",
+ "change_password": "Passwort geändert",
+ "changed_password": "Dein Passwort wurde geändert"
+ }
+ },
+ "user_settings": {
+ "header": "Einstellungen",
+ "first_name": "Vorname",
+ "last_name": "Nachname",
+ "e_mail": "E-Mail",
+ "password": "Passwort",
+ "e_mail_already_exists": "Die E-Mail wurde bereits vergeben",
+ "wrong_password": "Falsches Passwort",
+ "save": "Speichern",
+ "message": {
+ "user_not_found": "Benutzer nicht gefunden",
+ "user_not_found_d": "Der Benutzer konnte nicht gefunden werden!",
+ "error": "Fehler",
+ "could_not_change_settings": "Die Einstellungen konnten nicht geändert werden!",
+ "changed_settings": "Die Einstellungen wurden geändert",
+ "success": "Erfolg"
+ }
+ }
+ },
+ "footer": {
+ "imprint": "Impressum",
+ "backend": "Webseite",
+ "frontend": "API"
+ },
+ "dialog": {
+ "confirm": "Bestätigen",
+ "abort": "Abbrechen"
+ },
+ "general": {
+ "days": "Tage",
+ "minutes": "Minuten"
+ },
+ "common": {
+ "bool_as_string": {
+ "true": "Ja",
+ "false": "Nein"
+ },
+ "error": "Fehler",
+ "404": "404 - Der Eintrag konnte nicht gefunden werden"
+ },
+ "primeng": {
+ "startsWith": "Startet mit",
+ "contains": "Enthält",
+ "notContains": "Enthält nicht",
+ "endsWith": "Ended mit",
+ "equals": "Gleich",
+ "notEquals": "Nicht gleich",
+ "noFilter": "Kein Filter",
+ "lt": "Weniger als",
+ "lte": "Weniger als oder gleich",
+ "gt": "Größer als",
+ "gte": "Größer als doer gleich",
+ "is": "Ist",
+ "isNot": "Ist nicht",
+ "before": "Vorher",
+ "after": "Nachher",
+ "clear": "Zurücksetzen",
+ "apply": "Anwenden",
+ "matchAll": "Passend zu allem",
+ "matchAny": "Passend zu jedem",
+ "addRule": "Regel hinzufügen",
+ "removeRule": "Regel entfernen",
+ "accept": "Ja",
+ "reject": "Nein",
+ "choose": "Wählen",
+ "upload": "Hochladen",
+ "cancel": "Abbrechen",
+ "dayNames": [
+ "Sonntag",
+ "Montag",
+ "Dienstag",
+ "Mittwoch",
+ "Donnerstag",
+ "Freitag",
+ "Samstag"
+ ],
+ "dayNamesShort": [
+ "Son",
+ "Mon",
+ "Die",
+ "Mit",
+ "Don",
+ "Fre",
+ "Sam"
+ ],
+ "dayNamesMin": [
+ "So",
+ "Mo",
+ "Di",
+ "Mi",
+ "Do",
+ "Fr",
+ "Sa"
+ ],
+ "monthNames": [
+ "Januar",
+ "Februar",
+ "März",
+ "April",
+ "Mai",
+ "Juni",
+ "Juli",
+ "August",
+ "September",
+ "Oktober",
+ "November",
+ "Dezember"
+ ],
+ "monthNamesShort": [
+ "Jan",
+ "Feb",
+ "Mär",
+ "Apr",
+ "Mai",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Okt",
+ "Nov",
+ "Dez"
+ ],
+ "today": "Heute",
+ "weekHeader": "Wk",
+ "weak": "Woche",
+ "medium": "Mittel",
+ "strong": "Stark",
+ "passwordPrompt": "Passwort eingeben",
+ "emptyMessage": "Keine Ergebnisse gefunden",
+ "emptyFilterMessage": "Keine Ergebnisse gefunden"
+ }
}
diff --git a/kdb-web/src/styles.scss b/kdb-web/src/styles.scss
index 9f56ea05..8407ecb4 100644
--- a/kdb-web/src/styles.scss
+++ b/kdb-web/src/styles.scss
@@ -421,7 +421,7 @@ footer {
}
.register-form-wrapper {
- height: 550px;
+ height: 600px;
}
.register-confirm-form-wrapper {