feat: fix MFA integration — migration, otplib compat, branding, and add MFA translations for all languages

This commit is contained in:
Maurice
2026-03-29 13:18:53 +02:00
parent 530f233b7d
commit 3abcc0ec76
8 changed files with 153 additions and 6 deletions

View File

@@ -167,6 +167,22 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'settings.deleteBlockedTitle': 'الحذف غير ممكن',
'settings.deleteBlockedMessage': 'أنت المسؤول الوحيد. قم بترقية مستخدم آخر إلى مسؤول قبل حذف حسابك.',
'settings.saveProfile': 'حفظ الملف الشخصي',
'settings.mfa.title': 'المصادقة الثنائية (2FA)',
'settings.mfa.description': 'تضيف خطوة ثانية عند تسجيل الدخول. استخدم تطبيق مصادقة (Google Authenticator، Authy، إلخ).',
'settings.mfa.enabled': 'المصادقة الثنائية مفعّلة على حسابك.',
'settings.mfa.disabled': 'المصادقة الثنائية غير مفعّلة.',
'settings.mfa.setup': 'إعداد المصادقة',
'settings.mfa.scanQr': 'امسح رمز QR بتطبيقك أو أدخل المفتاح يدويًا.',
'settings.mfa.secretLabel': 'المفتاح السري (إدخال يدوي)',
'settings.mfa.codePlaceholder': 'رمز من 6 أرقام',
'settings.mfa.enable': 'تفعيل 2FA',
'settings.mfa.cancelSetup': 'إلغاء',
'settings.mfa.disableTitle': 'تعطيل 2FA',
'settings.mfa.disableHint': 'أدخل كلمة مرور حسابك ورمزًا حاليًا من المصادقة.',
'settings.mfa.disable': 'تعطيل 2FA',
'settings.mfa.toastEnabled': 'تم تفعيل المصادقة الثنائية',
'settings.mfa.toastDisabled': 'تم تعطيل المصادقة الثنائية',
'settings.mfa.demoBlocked': 'غير متاح في الوضع التجريبي',
'settings.toast.mapSaved': 'تم حفظ إعدادات الخريطة',
'settings.toast.keysSaved': 'تم حفظ مفاتيح API',
'settings.toast.displaySaved': 'تم حفظ إعدادات العرض',
@@ -213,6 +229,13 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'login.username': 'اسم المستخدم',
'login.oidc.registrationDisabled': 'التسجيل معطّل. تواصل مع المسؤول.',
'login.oidc.noEmail': 'لم يتم استلام بريد إلكتروني من المزوّد.',
'login.mfaTitle': 'المصادقة الثنائية',
'login.mfaSubtitle': 'أدخل الرمز المكون من 6 أرقام من تطبيق المصادقة.',
'login.mfaCodeLabel': 'رمز التحقق',
'login.mfaCodeRequired': 'أدخل الرمز من تطبيق المصادقة.',
'login.mfaHint': 'افتح Google Authenticator أو Authy أو أي تطبيق TOTP آخر.',
'login.mfaBack': '← العودة لتسجيل الدخول',
'login.mfaVerify': 'تحقق',
'login.oidc.tokenFailed': 'فشلت المصادقة.',
'login.oidc.invalidState': 'جلسة غير صالحة. حاول مرة أخرى.',
'login.demoFailed': 'فشل الدخول إلى العرض التجريبي',

View File

@@ -163,6 +163,22 @@ const es: Record<string, string> = {
'settings.deleteBlockedMessage': 'Eres el único administrador. Asciende a otro usuario a administrador antes de eliminar tu cuenta.',
'settings.roleUser': 'Usuario',
'settings.saveProfile': 'Guardar perfil',
'settings.mfa.title': 'Autenticación de dos factores (2FA)',
'settings.mfa.description': 'Añade un segundo paso al iniciar sesión. Usa una app de autenticación (Google Authenticator, Authy, etc.).',
'settings.mfa.enabled': '2FA está activado en tu cuenta.',
'settings.mfa.disabled': '2FA no está activado.',
'settings.mfa.setup': 'Configurar autenticador',
'settings.mfa.scanQr': 'Escanea este código QR con tu app o introduce la clave manualmente.',
'settings.mfa.secretLabel': 'Clave secreta (entrada manual)',
'settings.mfa.codePlaceholder': 'Código de 6 dígitos',
'settings.mfa.enable': 'Activar 2FA',
'settings.mfa.cancelSetup': 'Cancelar',
'settings.mfa.disableTitle': 'Desactivar 2FA',
'settings.mfa.disableHint': 'Introduce tu contraseña y un código actual de tu autenticador.',
'settings.mfa.disable': 'Desactivar 2FA',
'settings.mfa.toastEnabled': 'Autenticación de dos factores activada',
'settings.mfa.toastDisabled': 'Autenticación de dos factores desactivada',
'settings.mfa.demoBlocked': 'No disponible en modo demo',
'settings.toast.mapSaved': 'Ajustes del mapa guardados',
'settings.toast.keysSaved': 'Claves API guardadas',
'settings.toast.displaySaved': 'Ajustes de visualización guardados',
@@ -210,6 +226,13 @@ const es: Record<string, string> = {
'login.username': 'Usuario',
'login.oidc.registrationDisabled': 'El registro está desactivado. Contacta con tu administrador.',
'login.oidc.noEmail': 'No se recibió ningún correo del proveedor.',
'login.mfaTitle': 'Autenticación de dos factores',
'login.mfaSubtitle': 'Introduce el código de 6 dígitos de tu app de autenticación.',
'login.mfaCodeLabel': 'Código de verificación',
'login.mfaCodeRequired': 'Introduce el código de tu app de autenticación.',
'login.mfaHint': 'Abre Google Authenticator, Authy u otra app TOTP.',
'login.mfaBack': '← Volver al inicio de sesión',
'login.mfaVerify': 'Verificar',
'login.oidc.tokenFailed': 'La autenticación falló.',
'login.oidc.invalidState': 'Sesión no válida. Inténtalo de nuevo.',
'login.demoFailed': 'Falló el acceso a la demo',

View File

@@ -164,6 +164,22 @@ const fr: Record<string, string> = {
'settings.deleteBlockedMessage': 'Vous êtes le seul administrateur. Promouvez un autre utilisateur en tant qu\'administrateur avant de supprimer votre compte.',
'settings.roleUser': 'Utilisateur',
'settings.saveProfile': 'Enregistrer le profil',
'settings.mfa.title': 'Authentification à deux facteurs (2FA)',
'settings.mfa.description': 'Ajoute une étape supplémentaire lors de la connexion. Utilisez une application d\'authentification (Google Authenticator, Authy, etc.).',
'settings.mfa.enabled': '2FA est activé sur votre compte.',
'settings.mfa.disabled': '2FA n\'est pas activé.',
'settings.mfa.setup': 'Configurer l\'authentificateur',
'settings.mfa.scanQr': 'Scannez ce code QR avec votre application ou entrez la clé manuellement.',
'settings.mfa.secretLabel': 'Clé secrète (saisie manuelle)',
'settings.mfa.codePlaceholder': 'Code à 6 chiffres',
'settings.mfa.enable': 'Activer 2FA',
'settings.mfa.cancelSetup': 'Annuler',
'settings.mfa.disableTitle': 'Désactiver 2FA',
'settings.mfa.disableHint': 'Entrez votre mot de passe et un code actuel de votre authentificateur.',
'settings.mfa.disable': 'Désactiver 2FA',
'settings.mfa.toastEnabled': 'Authentification à deux facteurs activée',
'settings.mfa.toastDisabled': 'Authentification à deux facteurs désactivée',
'settings.mfa.demoBlocked': 'Non disponible en mode démo',
'settings.toast.mapSaved': 'Paramètres de carte enregistrés',
'settings.toast.keysSaved': 'Clés API enregistrées',
'settings.toast.displaySaved': 'Paramètres d\'affichage enregistrés',
@@ -211,6 +227,13 @@ const fr: Record<string, string> = {
'login.username': 'Nom d\'utilisateur',
'login.oidc.registrationDisabled': 'Les inscriptions sont désactivées. Contactez votre administrateur.',
'login.oidc.noEmail': 'Aucun e-mail reçu du fournisseur.',
'login.mfaTitle': 'Authentification à deux facteurs',
'login.mfaSubtitle': 'Entrez le code à 6 chiffres de votre application d\'authentification.',
'login.mfaCodeLabel': 'Code de vérification',
'login.mfaCodeRequired': 'Entrez le code de votre application d\'authentification.',
'login.mfaHint': 'Ouvrez Google Authenticator, Authy ou une autre application TOTP.',
'login.mfaBack': '← Retour à la connexion',
'login.mfaVerify': 'Vérifier',
'login.oidc.tokenFailed': 'L\'authentification a échoué.',
'login.oidc.invalidState': 'Session invalide. Veuillez réessayer.',
'login.demoFailed': 'Échec de la connexion démo',

View File

@@ -164,6 +164,22 @@ const nl: Record<string, string> = {
'settings.deleteBlockedMessage': 'Je bent de enige beheerder. Maak eerst een andere gebruiker beheerder voordat je je account verwijdert.',
'settings.roleUser': 'Gebruiker',
'settings.saveProfile': 'Profiel opslaan',
'settings.mfa.title': 'Tweefactorauthenticatie (2FA)',
'settings.mfa.description': 'Voegt een tweede stap toe bij het inloggen. Gebruik een authenticator-app (Google Authenticator, Authy, etc.).',
'settings.mfa.enabled': '2FA is ingeschakeld op je account.',
'settings.mfa.disabled': '2FA is niet ingeschakeld.',
'settings.mfa.setup': 'Authenticator instellen',
'settings.mfa.scanQr': 'Scan deze QR-code met je app of voer de sleutel handmatig in.',
'settings.mfa.secretLabel': 'Geheime sleutel (handmatige invoer)',
'settings.mfa.codePlaceholder': '6-cijferige code',
'settings.mfa.enable': '2FA inschakelen',
'settings.mfa.cancelSetup': 'Annuleren',
'settings.mfa.disableTitle': '2FA uitschakelen',
'settings.mfa.disableHint': 'Voer je wachtwoord en een huidige code van je authenticator in.',
'settings.mfa.disable': '2FA uitschakelen',
'settings.mfa.toastEnabled': 'Tweefactorauthenticatie ingeschakeld',
'settings.mfa.toastDisabled': 'Tweefactorauthenticatie uitgeschakeld',
'settings.mfa.demoBlocked': 'Niet beschikbaar in demomodus',
'settings.toast.mapSaved': 'Kaartinstellingen opgeslagen',
'settings.toast.keysSaved': 'API-sleutels opgeslagen',
'settings.toast.displaySaved': 'Weergave-instellingen opgeslagen',
@@ -211,6 +227,13 @@ const nl: Record<string, string> = {
'login.username': 'Gebruikersnaam',
'login.oidc.registrationDisabled': 'Registratie is uitgeschakeld. Neem contact op met je beheerder.',
'login.oidc.noEmail': 'Geen e-mailadres ontvangen van de provider.',
'login.mfaTitle': 'Tweefactorauthenticatie',
'login.mfaSubtitle': 'Voer de 6-cijferige code van je authenticator-app in.',
'login.mfaCodeLabel': 'Verificatiecode',
'login.mfaCodeRequired': 'Voer de code van je authenticator-app in.',
'login.mfaHint': 'Open Google Authenticator, Authy of een andere TOTP-app.',
'login.mfaBack': '← Terug naar inloggen',
'login.mfaVerify': 'Verifiëren',
'login.oidc.tokenFailed': 'Authenticatie mislukt.',
'login.oidc.invalidState': 'Ongeldige sessie. Probeer het opnieuw.',
'login.demoFailed': 'Demo-login mislukt',

View File

@@ -164,6 +164,22 @@ const ru: Record<string, string> = {
'settings.deleteBlockedMessage': 'Вы единственный администратор. Назначьте другого пользователя администратором перед удалением своего аккаунта.',
'settings.roleUser': 'Пользователь',
'settings.saveProfile': 'Сохранить профиль',
'settings.mfa.title': 'Двухфакторная аутентификация (2FA)',
'settings.mfa.description': 'Добавляет второй шаг при входе. Используйте приложение-аутентификатор (Google Authenticator, Authy и др.).',
'settings.mfa.enabled': '2FA включена для вашего аккаунта.',
'settings.mfa.disabled': '2FA не включена.',
'settings.mfa.setup': 'Настроить аутентификатор',
'settings.mfa.scanQr': 'Отсканируйте QR-код приложением или введите ключ вручную.',
'settings.mfa.secretLabel': 'Секретный ключ (ручной ввод)',
'settings.mfa.codePlaceholder': '6-значный код',
'settings.mfa.enable': 'Включить 2FA',
'settings.mfa.cancelSetup': 'Отмена',
'settings.mfa.disableTitle': 'Отключить 2FA',
'settings.mfa.disableHint': 'Введите пароль аккаунта и текущий код из аутентификатора.',
'settings.mfa.disable': 'Отключить 2FA',
'settings.mfa.toastEnabled': 'Двухфакторная аутентификация включена',
'settings.mfa.toastDisabled': 'Двухфакторная аутентификация отключена',
'settings.mfa.demoBlocked': 'Недоступно в демо-режиме',
'settings.toast.mapSaved': 'Настройки карты сохранены',
'settings.toast.keysSaved': 'API-ключи сохранены',
'settings.toast.displaySaved': 'Настройки отображения сохранены',
@@ -211,6 +227,13 @@ const ru: Record<string, string> = {
'login.username': 'Имя пользователя',
'login.oidc.registrationDisabled': 'Регистрация отключена. Обратитесь к администратору.',
'login.oidc.noEmail': 'Провайдер не предоставил адрес эл. почты.',
'login.mfaTitle': 'Двухфакторная аутентификация',
'login.mfaSubtitle': 'Введите 6-значный код из приложения-аутентификатора.',
'login.mfaCodeLabel': 'Код подтверждения',
'login.mfaCodeRequired': 'Введите код из приложения-аутентификатора.',
'login.mfaHint': 'Откройте Google Authenticator, Authy или другое TOTP-приложение.',
'login.mfaBack': '← Назад к входу',
'login.mfaVerify': 'Подтвердить',
'login.oidc.tokenFailed': 'Аутентификация не удалась.',
'login.oidc.invalidState': 'Недействительная сессия. Попробуйте снова.',
'login.demoFailed': 'Ошибка демо-входа',

View File

@@ -164,6 +164,22 @@ const zh: Record<string, string> = {
'settings.deleteBlockedMessage': '你是唯一的管理员。请先将其他用户提升为管理员,然后再删除账户。',
'settings.roleUser': '用户',
'settings.saveProfile': '保存资料',
'settings.mfa.title': '双因素认证 (2FA)',
'settings.mfa.description': '登录时添加第二步验证。使用身份验证器应用Google Authenticator、Authy 等)。',
'settings.mfa.enabled': '您的账户已启用 2FA。',
'settings.mfa.disabled': '2FA 未启用。',
'settings.mfa.setup': '设置身份验证器',
'settings.mfa.scanQr': '使用应用扫描此二维码,或手动输入密钥。',
'settings.mfa.secretLabel': '密钥(手动输入)',
'settings.mfa.codePlaceholder': '6 位验证码',
'settings.mfa.enable': '启用 2FA',
'settings.mfa.cancelSetup': '取消',
'settings.mfa.disableTitle': '停用 2FA',
'settings.mfa.disableHint': '输入您的账户密码和身份验证器中的当前验证码。',
'settings.mfa.disable': '停用 2FA',
'settings.mfa.toastEnabled': '双因素认证已启用',
'settings.mfa.toastDisabled': '双因素认证已停用',
'settings.mfa.demoBlocked': '演示模式下不可用',
'settings.toast.mapSaved': '地图设置已保存',
'settings.toast.keysSaved': 'API 密钥已保存',
'settings.toast.displaySaved': '显示设置已保存',
@@ -211,6 +227,13 @@ const zh: Record<string, string> = {
'login.username': '用户名',
'login.oidc.registrationDisabled': '注册已关闭。请联系管理员。',
'login.oidc.noEmail': '未从提供商获取到邮箱。',
'login.mfaTitle': '双因素认证',
'login.mfaSubtitle': '请输入身份验证器应用中的 6 位验证码。',
'login.mfaCodeLabel': '验证码',
'login.mfaCodeRequired': '请输入身份验证器应用中的验证码。',
'login.mfaHint': '打开 Google Authenticator、Authy 或其他 TOTP 应用。',
'login.mfaBack': '← 返回登录',
'login.mfaVerify': '验证',
'login.oidc.tokenFailed': '认证失败。',
'login.oidc.invalidState': '会话无效,请重试。',
'login.demoFailed': '演示登录失败',