diff --git a/webapp/src/locales/de.json b/webapp/src/locales/de.json
index 091f820..3cd430b 100644
--- a/webapp/src/locales/de.json
+++ b/webapp/src/locales/de.json
@@ -3,15 +3,20 @@
"name": "Ackify"
},
"nav": {
- "home": "Accueil",
- "myConfirmations": "Mes confirmations",
- "myDocuments": "Mes documents",
+ "home": "Startseite",
+ "myConfirmations": "Meine Bestätigungen",
+ "myDocuments": "Meine Dokumente",
"admin": "Admin",
"administration": "Administration",
- "login": "Se connecter",
- "logout": "Déconnexion",
- "mobileMenu": "Menu mobile",
- "mainNavigation": "Navigation principale"
+ "adminMenu": {
+ "allDocuments": "Alle Dokumente",
+ "settings": "Einstellungen",
+ "webhooks": "Webhooks"
+ },
+ "login": "Anmelden",
+ "logout": "Abmelden",
+ "mobileMenu": "Mobiles Menü",
+ "mainNavigation": "Hauptnavigation"
},
"theme": {
"toggle": "Changer de thème"
@@ -342,6 +347,152 @@
"pageOf": "Page {current} sur {total}"
}
},
+ "settings": {
+ "title": "Einstellungen",
+ "subtitle": "Konfigurieren Sie Ihre Ackify-Instanz",
+ "manage": "Einstellungen",
+ "loading": "Einstellungen werden geladen...",
+ "lastUpdated": "Letzte Aktualisierung: {date}",
+ "saveSuccess": "Einstellungen erfolgreich gespeichert",
+ "saveError": "Fehler beim Speichern der Einstellungen",
+ "testSuccess": "Verbindungstest erfolgreich",
+ "testError": "Verbindungstest fehlgeschlagen",
+ "resetSuccess": "Einstellungen aus Umgebung zurückgesetzt",
+ "resetError": "Fehler beim Zurücksetzen der Einstellungen",
+ "sections": {
+ "general": "Allgemein",
+ "oidc": "OAuth / OIDC",
+ "magiclink": "Magic Link",
+ "smtp": "E-Mail (SMTP)",
+ "storage": "Speicher"
+ },
+ "general": {
+ "title": "Allgemeine Einstellungen",
+ "description": "Grundkonfiguration Ihrer Ackify-Instanz",
+ "organisation": "Organisationsname",
+ "organisationPlaceholder": "Meine Firma",
+ "organisationHelper": "Wird in E-Mails und Oberfläche angezeigt",
+ "onlyAdminCanCreate": "Nur Admins können Dokumente erstellen",
+ "onlyAdminCanCreateHelper": "Wenn aktiviert, können nur Administratoren neue Dokumente erstellen"
+ },
+ "oidc": {
+ "title": "OAuth / OIDC Konfiguration",
+ "description": "OAuth 2.0 / OpenID Connect Authentifizierung konfigurieren",
+ "enabled": "OAuth-Authentifizierung aktivieren",
+ "provider": "Anbieter",
+ "providerPlaceholder": "Anbieter auswählen",
+ "providers": {
+ "google": "Google",
+ "github": "GitHub",
+ "gitlab": "GitLab",
+ "custom": "Benutzerdefiniert"
+ },
+ "clientId": "Client-ID",
+ "clientIdPlaceholder": "Geben Sie Ihre Client-ID ein",
+ "clientSecret": "Client-Secret",
+ "clientSecretPlaceholder": "Geben Sie Ihr Client-Secret ein",
+ "clientSecretHelper": "Leer lassen, um den bestehenden Wert beizubehalten",
+ "authUrl": "Autorisierungs-URL",
+ "authUrlPlaceholder": "https://provider.com/oauth/authorize",
+ "tokenUrl": "Token-URL",
+ "tokenUrlPlaceholder": "https://provider.com/oauth/token",
+ "userinfoUrl": "Userinfo-URL",
+ "userinfoUrlPlaceholder": "https://provider.com/userinfo",
+ "logoutUrl": "Logout-URL (optional)",
+ "logoutUrlPlaceholder": "https://provider.com/logout",
+ "scopes": "Scopes",
+ "scopesPlaceholder": "openid email profile",
+ "scopesHelper": "Durch Leerzeichen getrennte Liste von OAuth-Scopes",
+ "allowedDomain": "Erlaubte Domain (optional)",
+ "allowedDomainPlaceholder": "@firma.com",
+ "allowedDomainHelper": "Auf bestimmte E-Mail-Domain beschränken",
+ "autoLogin": "Auto-Login",
+ "autoLoginHelper": "Automatisch zu OAuth weiterleiten, wenn Sitzung existiert",
+ "testConnection": "Verbindung testen"
+ },
+ "magiclink": {
+ "title": "Magic Link Konfiguration",
+ "description": "Passwortlose E-Mail-Authentifizierung konfigurieren",
+ "enabled": "Magic Link Authentifizierung aktivieren",
+ "enabledHelper": "Erfordert konfiguriertes SMTP"
+ },
+ "smtp": {
+ "title": "E-Mail (SMTP) Konfiguration",
+ "description": "SMTP-Server für E-Mail-Versand konfigurieren",
+ "host": "SMTP-Host",
+ "hostPlaceholder": "smtp.beispiel.com",
+ "port": "Port",
+ "portPlaceholder": "587",
+ "username": "Benutzername",
+ "usernamePlaceholder": "user@beispiel.com",
+ "password": "Passwort",
+ "passwordPlaceholder": "Passwort eingeben",
+ "passwordHelper": "Leer lassen, um den bestehenden Wert beizubehalten",
+ "tls": "TLS verwenden",
+ "tlsHelper": "Implizite TLS-Verbindung verwenden",
+ "starttls": "STARTTLS verwenden",
+ "starttlsHelper": "Verbindung auf TLS upgraden",
+ "insecureSkipVerify": "Zertifikatsprüfung überspringen",
+ "insecureSkipVerifyHelper": "Nicht für Produktion empfohlen",
+ "timeout": "Timeout",
+ "timeoutPlaceholder": "10s",
+ "from": "Absenderadresse",
+ "fromPlaceholder": "noreply@beispiel.com",
+ "fromName": "Absendername",
+ "fromNamePlaceholder": "Ackify",
+ "subjectPrefix": "Betreff-Präfix (optional)",
+ "subjectPrefixPlaceholder": "[Ackify]",
+ "testConnection": "SMTP testen"
+ },
+ "storage": {
+ "title": "Speicherkonfiguration",
+ "description": "Dokumentenspeicher-Backend konfigurieren",
+ "type": "Speichertyp",
+ "types": {
+ "none": "Deaktiviert",
+ "local": "Lokales Dateisystem",
+ "s3": "S3 / MinIO"
+ },
+ "maxSizeMb": "Max. Dateigröße (MB)",
+ "maxSizeMbHelper": "Maximale Upload-Dateigröße in Megabytes",
+ "localPath": "Lokaler Pfad",
+ "localPathPlaceholder": "/data/documents",
+ "localPathHelper": "Verzeichnispfad zum Speichern von Dateien",
+ "s3Endpoint": "S3-Endpoint",
+ "s3EndpointPlaceholder": "s3.amazonaws.com oder minio.beispiel.com",
+ "s3Bucket": "Bucket-Name",
+ "s3BucketPlaceholder": "ackify-documents",
+ "s3AccessKey": "Zugriffsschlüssel",
+ "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE",
+ "s3SecretKey": "Geheimschlüssel",
+ "s3SecretKeyPlaceholder": "Geheimschlüssel eingeben",
+ "s3SecretKeyHelper": "Leer lassen, um den bestehenden Wert beizubehalten",
+ "s3Region": "Region",
+ "s3RegionPlaceholder": "us-east-1",
+ "s3UseSsl": "SSL verwenden",
+ "s3UseSslHelper": "HTTPS für S3-Verbindung verwenden",
+ "testConnection": "S3-Verbindung testen"
+ },
+ "actions": {
+ "save": "Speichern",
+ "saving": "Speichern...",
+ "test": "Testen",
+ "testing": "Testen...",
+ "reset": "Aus ENV zurücksetzen",
+ "resetting": "Zurücksetzen..."
+ },
+ "resetConfirm": {
+ "title": "Einstellungen zurücksetzen?",
+ "message": "Dies setzt alle Einstellungen auf die Werte aus den Umgebungsvariablen zurück. Alle in der Datenbank gespeicherten Konfigurationen werden überschrieben.",
+ "confirm": "Zurücksetzen",
+ "cancel": "Abbrechen"
+ },
+ "validation": {
+ "authRequired": "Mindestens eine Authentifizierungsmethode (OAuth oder Magic Link) muss aktiviert sein",
+ "magiclinkRequiresSmtp": "Magic Link erfordert konfiguriertes SMTP",
+ "oidcCustomRequiresUrls": "Benutzerdefinierter OIDC-Anbieter erfordert auth_url, token_url und userinfo_url"
+ }
+ },
"webhooks": {
"title": "Webhooks",
"subtitle": "Configurer les notifications vers des applications tierces",
diff --git a/webapp/src/locales/en.json b/webapp/src/locales/en.json
index 807af11..692565e 100644
--- a/webapp/src/locales/en.json
+++ b/webapp/src/locales/en.json
@@ -8,6 +8,11 @@
"myDocuments": "My documents",
"admin": "Admin",
"administration": "Administration",
+ "adminMenu": {
+ "allDocuments": "All documents",
+ "settings": "Settings",
+ "webhooks": "Webhooks"
+ },
"login": "Sign in",
"logout": "Sign out",
"mobileMenu": "Mobile menu",
@@ -342,6 +347,152 @@
"pageOf": "Page {current} of {total}"
}
},
+ "settings": {
+ "title": "Settings",
+ "subtitle": "Configure your Ackify instance",
+ "manage": "Settings",
+ "loading": "Loading settings...",
+ "lastUpdated": "Last updated: {date}",
+ "saveSuccess": "Settings saved successfully",
+ "saveError": "Failed to save settings",
+ "testSuccess": "Connection test successful",
+ "testError": "Connection test failed",
+ "resetSuccess": "Settings reset from environment",
+ "resetError": "Failed to reset settings",
+ "sections": {
+ "general": "General",
+ "oidc": "OAuth / OIDC",
+ "magiclink": "Magic Link",
+ "smtp": "Email (SMTP)",
+ "storage": "Storage"
+ },
+ "general": {
+ "title": "General Settings",
+ "description": "Basic configuration for your Ackify instance",
+ "organisation": "Organisation name",
+ "organisationPlaceholder": "My Company",
+ "organisationHelper": "Displayed in emails and interface",
+ "onlyAdminCanCreate": "Only admins can create documents",
+ "onlyAdminCanCreateHelper": "When enabled, only administrators can create new documents"
+ },
+ "oidc": {
+ "title": "OAuth / OIDC Configuration",
+ "description": "Configure OAuth 2.0 / OpenID Connect authentication",
+ "enabled": "Enable OAuth authentication",
+ "provider": "Provider",
+ "providerPlaceholder": "Select a provider",
+ "providers": {
+ "google": "Google",
+ "github": "GitHub",
+ "gitlab": "GitLab",
+ "custom": "Custom"
+ },
+ "clientId": "Client ID",
+ "clientIdPlaceholder": "Enter your client ID",
+ "clientSecret": "Client Secret",
+ "clientSecretPlaceholder": "Enter your client secret",
+ "clientSecretHelper": "Leave empty to keep existing value",
+ "authUrl": "Authorization URL",
+ "authUrlPlaceholder": "https://provider.com/oauth/authorize",
+ "tokenUrl": "Token URL",
+ "tokenUrlPlaceholder": "https://provider.com/oauth/token",
+ "userinfoUrl": "Userinfo URL",
+ "userinfoUrlPlaceholder": "https://provider.com/userinfo",
+ "logoutUrl": "Logout URL (optional)",
+ "logoutUrlPlaceholder": "https://provider.com/logout",
+ "scopes": "Scopes",
+ "scopesPlaceholder": "openid email profile",
+ "scopesHelper": "Space-separated list of OAuth scopes",
+ "allowedDomain": "Allowed domain (optional)",
+ "allowedDomainPlaceholder": "@company.com",
+ "allowedDomainHelper": "Restrict to specific email domain",
+ "autoLogin": "Auto login",
+ "autoLoginHelper": "Automatically redirect to OAuth if session exists",
+ "testConnection": "Test Connection"
+ },
+ "magiclink": {
+ "title": "Magic Link Configuration",
+ "description": "Configure passwordless email authentication",
+ "enabled": "Enable Magic Link authentication",
+ "enabledHelper": "Requires SMTP to be configured"
+ },
+ "smtp": {
+ "title": "Email (SMTP) Configuration",
+ "description": "Configure SMTP server for sending emails",
+ "host": "SMTP Host",
+ "hostPlaceholder": "smtp.example.com",
+ "port": "Port",
+ "portPlaceholder": "587",
+ "username": "Username",
+ "usernamePlaceholder": "user@example.com",
+ "password": "Password",
+ "passwordPlaceholder": "Enter password",
+ "passwordHelper": "Leave empty to keep existing value",
+ "tls": "Use TLS",
+ "tlsHelper": "Use implicit TLS connection",
+ "starttls": "Use STARTTLS",
+ "starttlsHelper": "Upgrade connection to TLS",
+ "insecureSkipVerify": "Skip certificate verification",
+ "insecureSkipVerifyHelper": "Not recommended for production",
+ "timeout": "Timeout",
+ "timeoutPlaceholder": "10s",
+ "from": "From address",
+ "fromPlaceholder": "noreply@example.com",
+ "fromName": "From name",
+ "fromNamePlaceholder": "Ackify",
+ "subjectPrefix": "Subject prefix (optional)",
+ "subjectPrefixPlaceholder": "[Ackify]",
+ "testConnection": "Test SMTP"
+ },
+ "storage": {
+ "title": "Storage Configuration",
+ "description": "Configure document storage backend",
+ "type": "Storage type",
+ "types": {
+ "none": "Disabled",
+ "local": "Local filesystem",
+ "s3": "S3 / MinIO"
+ },
+ "maxSizeMb": "Max file size (MB)",
+ "maxSizeMbHelper": "Maximum upload file size in megabytes",
+ "localPath": "Local path",
+ "localPathPlaceholder": "/data/documents",
+ "localPathHelper": "Directory path for storing files",
+ "s3Endpoint": "S3 Endpoint",
+ "s3EndpointPlaceholder": "s3.amazonaws.com or minio.example.com",
+ "s3Bucket": "Bucket name",
+ "s3BucketPlaceholder": "ackify-documents",
+ "s3AccessKey": "Access Key",
+ "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE",
+ "s3SecretKey": "Secret Key",
+ "s3SecretKeyPlaceholder": "Enter secret key",
+ "s3SecretKeyHelper": "Leave empty to keep existing value",
+ "s3Region": "Region",
+ "s3RegionPlaceholder": "us-east-1",
+ "s3UseSsl": "Use SSL",
+ "s3UseSslHelper": "Use HTTPS for S3 connection",
+ "testConnection": "Test S3 Connection"
+ },
+ "actions": {
+ "save": "Save",
+ "saving": "Saving...",
+ "test": "Test",
+ "testing": "Testing...",
+ "reset": "Reset from ENV",
+ "resetting": "Resetting..."
+ },
+ "resetConfirm": {
+ "title": "Reset Settings?",
+ "message": "This will reset all settings to their values from environment variables. Any configuration saved in the database will be overwritten.",
+ "confirm": "Reset",
+ "cancel": "Cancel"
+ },
+ "validation": {
+ "authRequired": "At least one authentication method (OAuth or Magic Link) must be enabled",
+ "magiclinkRequiresSmtp": "Magic Link requires SMTP to be configured",
+ "oidcCustomRequiresUrls": "Custom OIDC provider requires auth_url, token_url and userinfo_url"
+ }
+ },
"webhooks": {
"title": "Webhooks",
"subtitle": "Configure notifications to third-party applications",
diff --git a/webapp/src/locales/es.json b/webapp/src/locales/es.json
index ae17954..715847d 100644
--- a/webapp/src/locales/es.json
+++ b/webapp/src/locales/es.json
@@ -3,15 +3,20 @@
"name": "Ackify"
},
"nav": {
- "home": "Accueil",
- "myConfirmations": "Mes confirmations",
- "myDocuments": "Mes documents",
+ "home": "Inicio",
+ "myConfirmations": "Mis confirmaciones",
+ "myDocuments": "Mis documentos",
"admin": "Admin",
- "administration": "Administration",
- "login": "Se connecter",
- "logout": "Déconnexion",
- "mobileMenu": "Menu mobile",
- "mainNavigation": "Navigation principale"
+ "administration": "Administración",
+ "adminMenu": {
+ "allDocuments": "Todos los documentos",
+ "settings": "Configuración",
+ "webhooks": "Webhooks"
+ },
+ "login": "Iniciar sesión",
+ "logout": "Cerrar sesión",
+ "mobileMenu": "Menú móvil",
+ "mainNavigation": "Navegación principal"
},
"theme": {
"toggle": "Changer de thème"
@@ -342,6 +347,152 @@
"pageOf": "Page {current} sur {total}"
}
},
+ "settings": {
+ "title": "Configuración",
+ "subtitle": "Configure su instancia de Ackify",
+ "manage": "Configuración",
+ "loading": "Cargando configuración...",
+ "lastUpdated": "Última actualización: {date}",
+ "saveSuccess": "Configuración guardada correctamente",
+ "saveError": "Error al guardar la configuración",
+ "testSuccess": "Prueba de conexión exitosa",
+ "testError": "Error en la prueba de conexión",
+ "resetSuccess": "Configuración restablecida desde el entorno",
+ "resetError": "Error al restablecer la configuración",
+ "sections": {
+ "general": "General",
+ "oidc": "OAuth / OIDC",
+ "magiclink": "Magic Link",
+ "smtp": "Email (SMTP)",
+ "storage": "Almacenamiento"
+ },
+ "general": {
+ "title": "Configuración general",
+ "description": "Configuración básica de su instancia Ackify",
+ "organisation": "Nombre de la organización",
+ "organisationPlaceholder": "Mi Empresa",
+ "organisationHelper": "Se muestra en emails e interfaz",
+ "onlyAdminCanCreate": "Solo los admins pueden crear documentos",
+ "onlyAdminCanCreateHelper": "Cuando está activado, solo los administradores pueden crear nuevos documentos"
+ },
+ "oidc": {
+ "title": "Configuración OAuth / OIDC",
+ "description": "Configurar autenticación OAuth 2.0 / OpenID Connect",
+ "enabled": "Habilitar autenticación OAuth",
+ "provider": "Proveedor",
+ "providerPlaceholder": "Seleccionar proveedor",
+ "providers": {
+ "google": "Google",
+ "github": "GitHub",
+ "gitlab": "GitLab",
+ "custom": "Personalizado"
+ },
+ "clientId": "Client ID",
+ "clientIdPlaceholder": "Ingrese su client ID",
+ "clientSecret": "Client Secret",
+ "clientSecretPlaceholder": "Ingrese su client secret",
+ "clientSecretHelper": "Dejar vacío para mantener el valor existente",
+ "authUrl": "URL de autorización",
+ "authUrlPlaceholder": "https://provider.com/oauth/authorize",
+ "tokenUrl": "URL del token",
+ "tokenUrlPlaceholder": "https://provider.com/oauth/token",
+ "userinfoUrl": "URL userinfo",
+ "userinfoUrlPlaceholder": "https://provider.com/userinfo",
+ "logoutUrl": "URL de cierre de sesión (opcional)",
+ "logoutUrlPlaceholder": "https://provider.com/logout",
+ "scopes": "Scopes",
+ "scopesPlaceholder": "openid email profile",
+ "scopesHelper": "Lista de scopes OAuth separados por espacios",
+ "allowedDomain": "Dominio permitido (opcional)",
+ "allowedDomainPlaceholder": "@empresa.com",
+ "allowedDomainHelper": "Restringir a un dominio de email específico",
+ "autoLogin": "Inicio de sesión automático",
+ "autoLoginHelper": "Redirigir automáticamente a OAuth si existe sesión",
+ "testConnection": "Probar conexión"
+ },
+ "magiclink": {
+ "title": "Configuración Magic Link",
+ "description": "Configurar autenticación sin contraseña por email",
+ "enabled": "Habilitar autenticación Magic Link",
+ "enabledHelper": "Requiere que SMTP esté configurado"
+ },
+ "smtp": {
+ "title": "Configuración Email (SMTP)",
+ "description": "Configurar servidor SMTP para envío de emails",
+ "host": "Host SMTP",
+ "hostPlaceholder": "smtp.ejemplo.com",
+ "port": "Puerto",
+ "portPlaceholder": "587",
+ "username": "Usuario",
+ "usernamePlaceholder": "user@ejemplo.com",
+ "password": "Contraseña",
+ "passwordPlaceholder": "Ingrese contraseña",
+ "passwordHelper": "Dejar vacío para mantener el valor existente",
+ "tls": "Usar TLS",
+ "tlsHelper": "Usar conexión TLS implícita",
+ "starttls": "Usar STARTTLS",
+ "starttlsHelper": "Actualizar conexión a TLS",
+ "insecureSkipVerify": "Omitir verificación de certificado",
+ "insecureSkipVerifyHelper": "No recomendado en producción",
+ "timeout": "Tiempo de espera",
+ "timeoutPlaceholder": "10s",
+ "from": "Dirección de envío",
+ "fromPlaceholder": "noreply@ejemplo.com",
+ "fromName": "Nombre del remitente",
+ "fromNamePlaceholder": "Ackify",
+ "subjectPrefix": "Prefijo del asunto (opcional)",
+ "subjectPrefixPlaceholder": "[Ackify]",
+ "testConnection": "Probar SMTP"
+ },
+ "storage": {
+ "title": "Configuración de almacenamiento",
+ "description": "Configurar backend de almacenamiento de documentos",
+ "type": "Tipo de almacenamiento",
+ "types": {
+ "none": "Deshabilitado",
+ "local": "Sistema de archivos local",
+ "s3": "S3 / MinIO"
+ },
+ "maxSizeMb": "Tamaño máx. de archivo (MB)",
+ "maxSizeMbHelper": "Tamaño máximo de carga de archivos en megabytes",
+ "localPath": "Ruta local",
+ "localPathPlaceholder": "/data/documents",
+ "localPathHelper": "Ruta del directorio para almacenar archivos",
+ "s3Endpoint": "Endpoint S3",
+ "s3EndpointPlaceholder": "s3.amazonaws.com o minio.ejemplo.com",
+ "s3Bucket": "Nombre del bucket",
+ "s3BucketPlaceholder": "ackify-documents",
+ "s3AccessKey": "Clave de acceso",
+ "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE",
+ "s3SecretKey": "Clave secreta",
+ "s3SecretKeyPlaceholder": "Ingrese clave secreta",
+ "s3SecretKeyHelper": "Dejar vacío para mantener el valor existente",
+ "s3Region": "Región",
+ "s3RegionPlaceholder": "us-east-1",
+ "s3UseSsl": "Usar SSL",
+ "s3UseSslHelper": "Usar HTTPS para conexión S3",
+ "testConnection": "Probar conexión S3"
+ },
+ "actions": {
+ "save": "Guardar",
+ "saving": "Guardando...",
+ "test": "Probar",
+ "testing": "Probando...",
+ "reset": "Restablecer desde ENV",
+ "resetting": "Restableciendo..."
+ },
+ "resetConfirm": {
+ "title": "¿Restablecer configuración?",
+ "message": "Esto restablecerá toda la configuración a los valores de las variables de entorno. Cualquier configuración guardada en la base de datos será sobrescrita.",
+ "confirm": "Restablecer",
+ "cancel": "Cancelar"
+ },
+ "validation": {
+ "authRequired": "Al menos un método de autenticación (OAuth o Magic Link) debe estar habilitado",
+ "magiclinkRequiresSmtp": "Magic Link requiere que SMTP esté configurado",
+ "oidcCustomRequiresUrls": "El proveedor OIDC personalizado requiere auth_url, token_url y userinfo_url"
+ }
+ },
"webhooks": {
"title": "Webhooks",
"subtitle": "Configurer les notifications vers des applications tierces",
diff --git a/webapp/src/locales/fr.json b/webapp/src/locales/fr.json
index 566ab7b..37f772b 100644
--- a/webapp/src/locales/fr.json
+++ b/webapp/src/locales/fr.json
@@ -8,6 +8,11 @@
"myDocuments": "Mes documents",
"admin": "Admin",
"administration": "Administration",
+ "adminMenu": {
+ "allDocuments": "Tous les documents",
+ "settings": "Paramètres",
+ "webhooks": "Webhooks"
+ },
"login": "Se connecter",
"logout": "Déconnexion",
"mobileMenu": "Menu mobile",
@@ -342,6 +347,152 @@
"pageOf": "Page {current} sur {total}"
}
},
+ "settings": {
+ "title": "Paramètres",
+ "subtitle": "Configurez votre instance Ackify",
+ "manage": "Paramètres",
+ "loading": "Chargement des paramètres...",
+ "lastUpdated": "Dernière mise à jour : {date}",
+ "saveSuccess": "Paramètres enregistrés avec succès",
+ "saveError": "Échec de l'enregistrement des paramètres",
+ "testSuccess": "Test de connexion réussi",
+ "testError": "Échec du test de connexion",
+ "resetSuccess": "Paramètres réinitialisés depuis l'environnement",
+ "resetError": "Échec de la réinitialisation des paramètres",
+ "sections": {
+ "general": "Général",
+ "oidc": "OAuth / OIDC",
+ "magiclink": "Magic Link",
+ "smtp": "Email (SMTP)",
+ "storage": "Stockage"
+ },
+ "general": {
+ "title": "Paramètres généraux",
+ "description": "Configuration de base de votre instance Ackify",
+ "organisation": "Nom de l'organisation",
+ "organisationPlaceholder": "Mon Entreprise",
+ "organisationHelper": "Affiché dans les emails et l'interface",
+ "onlyAdminCanCreate": "Seuls les admins peuvent créer des documents",
+ "onlyAdminCanCreateHelper": "Lorsque activé, seuls les administrateurs peuvent créer de nouveaux documents"
+ },
+ "oidc": {
+ "title": "Configuration OAuth / OIDC",
+ "description": "Configurer l'authentification OAuth 2.0 / OpenID Connect",
+ "enabled": "Activer l'authentification OAuth",
+ "provider": "Fournisseur",
+ "providerPlaceholder": "Sélectionner un fournisseur",
+ "providers": {
+ "google": "Google",
+ "github": "GitHub",
+ "gitlab": "GitLab",
+ "custom": "Personnalisé"
+ },
+ "clientId": "Client ID",
+ "clientIdPlaceholder": "Entrez votre client ID",
+ "clientSecret": "Client Secret",
+ "clientSecretPlaceholder": "Entrez votre client secret",
+ "clientSecretHelper": "Laissez vide pour conserver la valeur existante",
+ "authUrl": "URL d'autorisation",
+ "authUrlPlaceholder": "https://provider.com/oauth/authorize",
+ "tokenUrl": "URL du token",
+ "tokenUrlPlaceholder": "https://provider.com/oauth/token",
+ "userinfoUrl": "URL userinfo",
+ "userinfoUrlPlaceholder": "https://provider.com/userinfo",
+ "logoutUrl": "URL de déconnexion (optionnel)",
+ "logoutUrlPlaceholder": "https://provider.com/logout",
+ "scopes": "Scopes",
+ "scopesPlaceholder": "openid email profile",
+ "scopesHelper": "Liste des scopes OAuth séparés par des espaces",
+ "allowedDomain": "Domaine autorisé (optionnel)",
+ "allowedDomainPlaceholder": "@entreprise.com",
+ "allowedDomainHelper": "Restreindre à un domaine email spécifique",
+ "autoLogin": "Connexion automatique",
+ "autoLoginHelper": "Rediriger automatiquement vers OAuth si une session existe",
+ "testConnection": "Tester la connexion"
+ },
+ "magiclink": {
+ "title": "Configuration Magic Link",
+ "description": "Configurer l'authentification sans mot de passe par email",
+ "enabled": "Activer l'authentification Magic Link",
+ "enabledHelper": "Nécessite que SMTP soit configuré"
+ },
+ "smtp": {
+ "title": "Configuration Email (SMTP)",
+ "description": "Configurer le serveur SMTP pour l'envoi d'emails",
+ "host": "Hôte SMTP",
+ "hostPlaceholder": "smtp.exemple.com",
+ "port": "Port",
+ "portPlaceholder": "587",
+ "username": "Nom d'utilisateur",
+ "usernamePlaceholder": "user@exemple.com",
+ "password": "Mot de passe",
+ "passwordPlaceholder": "Entrez le mot de passe",
+ "passwordHelper": "Laissez vide pour conserver la valeur existante",
+ "tls": "Utiliser TLS",
+ "tlsHelper": "Utiliser une connexion TLS implicite",
+ "starttls": "Utiliser STARTTLS",
+ "starttlsHelper": "Mettre à niveau la connexion vers TLS",
+ "insecureSkipVerify": "Ignorer la vérification du certificat",
+ "insecureSkipVerifyHelper": "Non recommandé en production",
+ "timeout": "Délai d'attente",
+ "timeoutPlaceholder": "10s",
+ "from": "Adresse d'expédition",
+ "fromPlaceholder": "noreply@exemple.com",
+ "fromName": "Nom d'expéditeur",
+ "fromNamePlaceholder": "Ackify",
+ "subjectPrefix": "Préfixe du sujet (optionnel)",
+ "subjectPrefixPlaceholder": "[Ackify]",
+ "testConnection": "Tester SMTP"
+ },
+ "storage": {
+ "title": "Configuration du stockage",
+ "description": "Configurer le backend de stockage des documents",
+ "type": "Type de stockage",
+ "types": {
+ "none": "Désactivé",
+ "local": "Système de fichiers local",
+ "s3": "S3 / MinIO"
+ },
+ "maxSizeMb": "Taille max des fichiers (Mo)",
+ "maxSizeMbHelper": "Taille maximale des fichiers uploadés en mégaoctets",
+ "localPath": "Chemin local",
+ "localPathPlaceholder": "/data/documents",
+ "localPathHelper": "Chemin du répertoire pour stocker les fichiers",
+ "s3Endpoint": "Endpoint S3",
+ "s3EndpointPlaceholder": "s3.amazonaws.com ou minio.exemple.com",
+ "s3Bucket": "Nom du bucket",
+ "s3BucketPlaceholder": "ackify-documents",
+ "s3AccessKey": "Clé d'accès",
+ "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE",
+ "s3SecretKey": "Clé secrète",
+ "s3SecretKeyPlaceholder": "Entrez la clé secrète",
+ "s3SecretKeyHelper": "Laissez vide pour conserver la valeur existante",
+ "s3Region": "Région",
+ "s3RegionPlaceholder": "us-east-1",
+ "s3UseSsl": "Utiliser SSL",
+ "s3UseSslHelper": "Utiliser HTTPS pour la connexion S3",
+ "testConnection": "Tester la connexion S3"
+ },
+ "actions": {
+ "save": "Enregistrer",
+ "saving": "Enregistrement...",
+ "test": "Tester",
+ "testing": "Test en cours...",
+ "reset": "Réinitialiser depuis ENV",
+ "resetting": "Réinitialisation..."
+ },
+ "resetConfirm": {
+ "title": "Réinitialiser les paramètres ?",
+ "message": "Cela réinitialisera tous les paramètres à leurs valeurs des variables d'environnement. Toute configuration enregistrée en base de données sera écrasée.",
+ "confirm": "Réinitialiser",
+ "cancel": "Annuler"
+ },
+ "validation": {
+ "authRequired": "Au moins une méthode d'authentification (OAuth ou Magic Link) doit être activée",
+ "magiclinkRequiresSmtp": "Magic Link nécessite que SMTP soit configuré",
+ "oidcCustomRequiresUrls": "Un fournisseur OIDC personnalisé nécessite auth_url, token_url et userinfo_url"
+ }
+ },
"webhooks": {
"title": "Webhooks",
"subtitle": "Configurer les notifications vers des applications tierces",
diff --git a/webapp/src/locales/it.json b/webapp/src/locales/it.json
index b7c17f0..e725fe3 100644
--- a/webapp/src/locales/it.json
+++ b/webapp/src/locales/it.json
@@ -3,15 +3,20 @@
"name": "Ackify"
},
"nav": {
- "home": "Accueil",
- "myConfirmations": "Mes confirmations",
- "myDocuments": "Mes documents",
+ "home": "Home",
+ "myConfirmations": "Le mie conferme",
+ "myDocuments": "I miei documenti",
"admin": "Admin",
- "administration": "Administration",
- "login": "Se connecter",
- "logout": "Déconnexion",
+ "administration": "Amministrazione",
+ "adminMenu": {
+ "allDocuments": "Tutti i documenti",
+ "settings": "Impostazioni",
+ "webhooks": "Webhooks"
+ },
+ "login": "Accedi",
+ "logout": "Esci",
"mobileMenu": "Menu mobile",
- "mainNavigation": "Navigation principale"
+ "mainNavigation": "Navigazione principale"
},
"theme": {
"toggle": "Changer de thème"
@@ -342,6 +347,152 @@
"pageOf": "Page {current} sur {total}"
}
},
+ "settings": {
+ "title": "Impostazioni",
+ "subtitle": "Configura la tua istanza Ackify",
+ "manage": "Impostazioni",
+ "loading": "Caricamento impostazioni...",
+ "lastUpdated": "Ultimo aggiornamento: {date}",
+ "saveSuccess": "Impostazioni salvate con successo",
+ "saveError": "Errore nel salvataggio delle impostazioni",
+ "testSuccess": "Test di connessione riuscito",
+ "testError": "Test di connessione fallito",
+ "resetSuccess": "Impostazioni ripristinate dall'ambiente",
+ "resetError": "Errore nel ripristino delle impostazioni",
+ "sections": {
+ "general": "Generale",
+ "oidc": "OAuth / OIDC",
+ "magiclink": "Magic Link",
+ "smtp": "Email (SMTP)",
+ "storage": "Archiviazione"
+ },
+ "general": {
+ "title": "Impostazioni generali",
+ "description": "Configurazione di base della tua istanza Ackify",
+ "organisation": "Nome organizzazione",
+ "organisationPlaceholder": "La Mia Azienda",
+ "organisationHelper": "Visualizzato nelle email e nell'interfaccia",
+ "onlyAdminCanCreate": "Solo gli admin possono creare documenti",
+ "onlyAdminCanCreateHelper": "Quando abilitato, solo gli amministratori possono creare nuovi documenti"
+ },
+ "oidc": {
+ "title": "Configurazione OAuth / OIDC",
+ "description": "Configura l'autenticazione OAuth 2.0 / OpenID Connect",
+ "enabled": "Abilita autenticazione OAuth",
+ "provider": "Provider",
+ "providerPlaceholder": "Seleziona un provider",
+ "providers": {
+ "google": "Google",
+ "github": "GitHub",
+ "gitlab": "GitLab",
+ "custom": "Personalizzato"
+ },
+ "clientId": "Client ID",
+ "clientIdPlaceholder": "Inserisci il tuo client ID",
+ "clientSecret": "Client Secret",
+ "clientSecretPlaceholder": "Inserisci il tuo client secret",
+ "clientSecretHelper": "Lascia vuoto per mantenere il valore esistente",
+ "authUrl": "URL di autorizzazione",
+ "authUrlPlaceholder": "https://provider.com/oauth/authorize",
+ "tokenUrl": "URL del token",
+ "tokenUrlPlaceholder": "https://provider.com/oauth/token",
+ "userinfoUrl": "URL userinfo",
+ "userinfoUrlPlaceholder": "https://provider.com/userinfo",
+ "logoutUrl": "URL di logout (opzionale)",
+ "logoutUrlPlaceholder": "https://provider.com/logout",
+ "scopes": "Scopes",
+ "scopesPlaceholder": "openid email profile",
+ "scopesHelper": "Lista di scopes OAuth separati da spazi",
+ "allowedDomain": "Dominio consentito (opzionale)",
+ "allowedDomainPlaceholder": "@azienda.com",
+ "allowedDomainHelper": "Limita a un dominio email specifico",
+ "autoLogin": "Login automatico",
+ "autoLoginHelper": "Reindirizza automaticamente a OAuth se esiste una sessione",
+ "testConnection": "Testa connessione"
+ },
+ "magiclink": {
+ "title": "Configurazione Magic Link",
+ "description": "Configura l'autenticazione senza password via email",
+ "enabled": "Abilita autenticazione Magic Link",
+ "enabledHelper": "Richiede SMTP configurato"
+ },
+ "smtp": {
+ "title": "Configurazione Email (SMTP)",
+ "description": "Configura il server SMTP per l'invio di email",
+ "host": "Host SMTP",
+ "hostPlaceholder": "smtp.esempio.com",
+ "port": "Porta",
+ "portPlaceholder": "587",
+ "username": "Nome utente",
+ "usernamePlaceholder": "user@esempio.com",
+ "password": "Password",
+ "passwordPlaceholder": "Inserisci password",
+ "passwordHelper": "Lascia vuoto per mantenere il valore esistente",
+ "tls": "Usa TLS",
+ "tlsHelper": "Usa connessione TLS implicita",
+ "starttls": "Usa STARTTLS",
+ "starttlsHelper": "Aggiorna connessione a TLS",
+ "insecureSkipVerify": "Salta verifica certificato",
+ "insecureSkipVerifyHelper": "Non raccomandato in produzione",
+ "timeout": "Timeout",
+ "timeoutPlaceholder": "10s",
+ "from": "Indirizzo mittente",
+ "fromPlaceholder": "noreply@esempio.com",
+ "fromName": "Nome mittente",
+ "fromNamePlaceholder": "Ackify",
+ "subjectPrefix": "Prefisso oggetto (opzionale)",
+ "subjectPrefixPlaceholder": "[Ackify]",
+ "testConnection": "Testa SMTP"
+ },
+ "storage": {
+ "title": "Configurazione archiviazione",
+ "description": "Configura il backend di archiviazione documenti",
+ "type": "Tipo di archiviazione",
+ "types": {
+ "none": "Disabilitato",
+ "local": "Filesystem locale",
+ "s3": "S3 / MinIO"
+ },
+ "maxSizeMb": "Dimensione max file (MB)",
+ "maxSizeMbHelper": "Dimensione massima file caricati in megabytes",
+ "localPath": "Percorso locale",
+ "localPathPlaceholder": "/data/documents",
+ "localPathHelper": "Percorso directory per archiviare i file",
+ "s3Endpoint": "Endpoint S3",
+ "s3EndpointPlaceholder": "s3.amazonaws.com o minio.esempio.com",
+ "s3Bucket": "Nome bucket",
+ "s3BucketPlaceholder": "ackify-documents",
+ "s3AccessKey": "Chiave di accesso",
+ "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE",
+ "s3SecretKey": "Chiave segreta",
+ "s3SecretKeyPlaceholder": "Inserisci chiave segreta",
+ "s3SecretKeyHelper": "Lascia vuoto per mantenere il valore esistente",
+ "s3Region": "Regione",
+ "s3RegionPlaceholder": "us-east-1",
+ "s3UseSsl": "Usa SSL",
+ "s3UseSslHelper": "Usa HTTPS per connessione S3",
+ "testConnection": "Testa connessione S3"
+ },
+ "actions": {
+ "save": "Salva",
+ "saving": "Salvataggio...",
+ "test": "Testa",
+ "testing": "Test in corso...",
+ "reset": "Ripristina da ENV",
+ "resetting": "Ripristino..."
+ },
+ "resetConfirm": {
+ "title": "Ripristinare le impostazioni?",
+ "message": "Questo ripristinerà tutte le impostazioni ai valori delle variabili d'ambiente. Qualsiasi configurazione salvata nel database verrà sovrascritta.",
+ "confirm": "Ripristina",
+ "cancel": "Annulla"
+ },
+ "validation": {
+ "authRequired": "Almeno un metodo di autenticazione (OAuth o Magic Link) deve essere abilitato",
+ "magiclinkRequiresSmtp": "Magic Link richiede SMTP configurato",
+ "oidcCustomRequiresUrls": "Il provider OIDC personalizzato richiede auth_url, token_url e userinfo_url"
+ }
+ },
"webhooks": {
"title": "Webhooks",
"subtitle": "Configurer les notifications vers des applications tierces",
diff --git a/webapp/src/pages/admin/AdminDashboard.vue b/webapp/src/pages/admin/AdminDashboard.vue
index bfd9dd2..a0c0ede 100644
--- a/webapp/src/pages/admin/AdminDashboard.vue
+++ b/webapp/src/pages/admin/AdminDashboard.vue
@@ -18,6 +18,7 @@ import {
Loader2,
Search,
Webhook,
+ Settings,
ChevronLeft,
ChevronRight,
AlertCircle,
@@ -199,6 +200,12 @@ onMounted(() => {
{{ t('admin.webhooks.manage') }}
+
+
+