mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-28 06:05:24 +00:00
release-2.9.1 (#1557)
* fix(sso): send the PKCE verifier for GitHub login (#1534) * fix(remote-desktop): clip cursor overflow without disabling zoom (#1535) * test(remote-desktop): preserve sessions beyond one hour (#1536) * fix(hosts): expose controls for overflowing editor tabs (#1537) * fix(hosts): expose controls for overflowing editor tabs * test(hosts): mock resize observation in admin panel tests * fix(status): skip TCP probes while host sessions are active (#1538) * fix(database): batch session activity persistence (#1539) * docs(api): describe cookie and API key authentication (#1540) * fix(snippets): repair missing note column on SQLite upgrades (#1541) * fix(docker): retain stored SSH credential association (#1543) * fix(file-manager): render transfer toasts without plugin hooks (#1546) * feat(hosts): keep compact row actions inline (#1547) * fix(auth): allow retrying unavailable second-factor interfaces (#1549) * fix(auth): reject unresolved legacy identity provisioning (#1550) * fix(desktop): ship the plugin SDK inside Mac App Store builds (#1551) * fix(tmux): pass full session info to the terminal's session picker (#1552) The tmux.sessions service reduced detected sessions to bare names, but the picker reads session.name, so every entry rendered blank and selecting one sent an empty name, which created a new session instead of attaching. * fix(ssh): read force keyboard-interactive as a boolean when resolving hosts (#1553) The column holds the text "true"/"false", and the resolver passed it through as-is. The string "false" is truthy, so the password provider treated every saved host as forced keyboard-interactive and left the password out. Jump hops are built straight from the resolved host, so a password hop whose server doesn't offer keyboard-interactive failed with "All configured authentication methods failed". * fix(database): batch database saves for bulk host writes (#1554) * fix(database): yield to the event loop between database saves Each SQLite save serializes and encrypts the whole database into new buffers, which V8 only releases once the event loop turns. Boot migrations and bulk host import write plugin settings per host and per key in an awaited loop, so hundreds of full copies piled up and the container ran out of memory. * fix(database): save once per bulk host write instead of once per row On SQLite every repository write force-saves the whole database. Boot plugin data migrations, host defaults materialization and the bulk host routes write one row per host per setting, so they serialized and encrypted the full database hundreds of times in a row. DatabaseSaveTrigger.batched wraps a function so force saves made while it runs collapse into a single save when it finishes. Nested scopes fold into the outer one, and work that outlives its scope saves normally. * feat(hosts): add instance-wide predefined tag suggestions (#1548) * feat(hosts): add shared predefined tag suggestions * style(hosts): format tag catalog routes * test(database): advance fake timers past the save yield (#1555) * fix(i18n): complete Simplified Chinese core and plugin translations (#1542) * fix(i18n): complete Chinese onboarding and navigation labels * fix(i18n): translate remaining Chinese core and plugin interfaces * fix(i18n): translate host editor tab overflow controls * fix(i18n): use consistent Chinese fleet terminology * fix(i18n): localize hardcoded controls and plugin views * fix(i18n): translate built-in homepage widget catalog * test(homepage): follow translated timezone placeholder * fix(i18n): translate plugin-provided homepage widgets * fix(i18n): localize feature settings section titles * fix: 2.8 oidc accounts unable to sign in after upgrading (#1381) * fix: plugins losing the saved ssh login when copying a host (#1391) * fix: fleets, proxmox and automations not getting the host sudo password * fix: host imports running a defaults pass and metrics restart per host (#1384) * fix: high cpu from status probes and full database saves on every sample (#1300) * fix: user data export freezing the server (#1393) * fix: op:// secret references rejected as ssh keys on credentials (#1394) * fix: slow file deletes from the trash lookups on every delete (#1390) * fix: add openapi docs and error handling to host tag routes * test: compare download stream buffers directly so it stops timing out * chore: drop em dash from host row comment * chore: update release notes for 2.9.1 * fix: restore space to add host tags and redesign predefined tags editor * fix: host key silently accepted when the host is missing from the database (#1397) * fix: clearer host login failed status label and fix its translations (#1396) * chore: add host key and status label fixes to release notes * fix: sso and ldap provider dialogs overflowing the screen and using mismatched toggles * chore: increment ver * fix(audit): store plugin entries with no acting user as a null user_id (#1556) Plugin audit entries written outside a request used the literal "system" as user_id. That column references users.id, so the insert was refused (Postgres logs it as an FK violation) and the entry was silently dropped. Write null instead and keep "system" / plugin:<id> in username. * chore: add sso/ldap dialog and audit log fixes to release notes * fix: tunnels and host settings missing from shared hosts on desktop * fix: remote desktop logins missing from shared hosts on desktop * fix: simplify host status to online/offline and keep it live without a refresh * chore: sync Crowdin translations for 2.9.1 --------- Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
This commit is contained in:
1 parent
5786eaccbb
commit
6b708106e1
912 files changed
+14220
-2200
No files matched your search
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Company directory",
|
||||
"nameRequired": "A display name is required",
|
||||
"enabled": "Enabled",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Save Directory",
|
||||
"saving": "Saving...",
|
||||
"saved": "Saved",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP Host",
|
||||
"port": "Port",
|
||||
"useTls": "Use TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Bind Password",
|
||||
"secretKeep": "A password is saved. Leave this empty to keep it.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Group Search Base",
|
||||
"adminGroup": "Admin Group",
|
||||
"allowedUsers": "Allowed Users"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Maatskappygids",
|
||||
"nameRequired": "'n Vertoonnaam word vereis",
|
||||
"enabled": "Geaktiveer",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Stoor gids",
|
||||
"saving": "Stoor...",
|
||||
"saved": "Gestoor",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP-gasheer",
|
||||
"port": "Hawe",
|
||||
"useTls": "Gebruik TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Bind Wagwoord",
|
||||
"secretKeep": "'n Wagwoord is gestoor. Los dit leeg om dit te behou.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Groepsoekbasis",
|
||||
"adminGroup": "Admingroep",
|
||||
"allowedUsers": "Toegelate Gebruikers"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "دليل الشركات",
|
||||
"nameRequired": "اسم العرض مطلوب",
|
||||
"enabled": "مُمكّن",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "حفظ الدليل",
|
||||
"saving": "جارٍ الحفظ...",
|
||||
"saved": "محفوظ",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "مضيف LDAP",
|
||||
"port": "منفذ",
|
||||
"useTls": "استخدام TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "اسم مميز للربط",
|
||||
"bindPassword": "كلمة مرور الارتباط",
|
||||
"secretKeep": "تم حفظ كلمة المرور. اترك هذا الحقل فارغًا للاحتفاظ بها.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "قاعدة بحث المجموعات",
|
||||
"adminGroup": "مجموعة المسؤولين",
|
||||
"allowedUsers": "المستخدمون المسموح لهم"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Фирмен указател",
|
||||
"nameRequired": "Изисква се показвано име",
|
||||
"enabled": "Активирано",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Запазване на директорията",
|
||||
"saving": "Запазване...",
|
||||
"saved": "Запазено",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP хост",
|
||||
"port": "Порт",
|
||||
"useTls": "Използвайте TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Обвързване DN",
|
||||
"bindPassword": "Свързване на парола",
|
||||
"secretKeep": "Паролата е запазена. Оставете това празно, за да я запазите.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "База за групово търсене",
|
||||
"adminGroup": "Административна група",
|
||||
"allowedUsers": "Разрешени потребители"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "কোম্পানির ডিরেক্টরি",
|
||||
"nameRequired": "একটি প্রদর্শনের নাম প্রয়োজন",
|
||||
"enabled": "সক্ষম করা হয়েছে",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "ডিরেক্টরি সংরক্ষণ করুন",
|
||||
"saving": "সঞ্চয়...",
|
||||
"saved": "সংরক্ষিত",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "এলডিএপি হোস্ট",
|
||||
"port": "বন্দর",
|
||||
"useTls": "TLS (LDAPS) ব্যবহার করুন",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "ডিএনকে আবদ্ধ করুন",
|
||||
"bindPassword": "পাসওয়ার্ড সংযুক্ত করুন",
|
||||
"secretKeep": "একটি পাসওয়ার্ড সংরক্ষিত হয়েছে। এটি রাখতে চাইলে এই স্থানটি খালি রাখুন।",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "গ্রুপ অনুসন্ধান ভিত্তি",
|
||||
"adminGroup": "অ্যাডমিন গ্রুপ",
|
||||
"allowedUsers": "অনুমোদিত ব্যবহারকারী"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Directori d'empreses",
|
||||
"nameRequired": "Cal un nom de visualització",
|
||||
"enabled": "Activat",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Desa el directori",
|
||||
"saving": "Desant...",
|
||||
"saved": "Desat",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Amfitrió LDAP",
|
||||
"port": "Port",
|
||||
"useTls": "Utilitza TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Vinculació de nom de domini",
|
||||
"bindPassword": "Contrasenya de vinculació",
|
||||
"secretKeep": "S'ha desat una contrasenya. Deixeu-ho en blanc per conservar-la.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Base de cerca de grups",
|
||||
"adminGroup": "Grup d'administradors",
|
||||
"allowedUsers": "Usuaris permesos"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Adresář firem",
|
||||
"nameRequired": "Je vyžadováno zobrazované jméno",
|
||||
"enabled": "Povoleno",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Uložit adresář",
|
||||
"saving": "Ukládání…",
|
||||
"saved": "Uloženo",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Hostitel LDAP",
|
||||
"port": "Port",
|
||||
"useTls": "Používejte TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Vázat DN",
|
||||
"bindPassword": "Vázat heslo",
|
||||
"secretKeep": "Heslo je uloženo. Pro jeho zachování nechte toto pole prázdné.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Základna pro vyhledávání skupin",
|
||||
"adminGroup": "Skupina administrátorů",
|
||||
"allowedUsers": "Povolení uživatelé"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Firmaregister",
|
||||
"nameRequired": "Et visningsnavn er påkrævet",
|
||||
"enabled": "Aktiveret",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Gem mappe",
|
||||
"saving": "Gemmer...",
|
||||
"saved": "Gemt",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP-vært",
|
||||
"port": "Havn",
|
||||
"useTls": "Brug TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Bind adgangskode",
|
||||
"secretKeep": "En adgangskode er gemt. Lad dette felt være tomt for at beholde den.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Gruppesøgningsbase",
|
||||
"adminGroup": "Admingruppe",
|
||||
"allowedUsers": "Tilladte brugere"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Firmenverzeichnis",
|
||||
"nameRequired": "Ein Anzeigename ist erforderlich.",
|
||||
"enabled": "Aktiviert",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Speicherverzeichnis",
|
||||
"saving": "Wird gespeichert …",
|
||||
"saved": "Gespeichert",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP-Host",
|
||||
"port": "Port",
|
||||
"useTls": "TLS verwenden (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind-DN",
|
||||
"bindPassword": "Bind-Passwort",
|
||||
"secretKeep": "Ein Passwort wurde gespeichert. Lassen Sie dieses Feld leer, um es zu behalten.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Gruppen-Suchbasis",
|
||||
"adminGroup": "Admin-Gruppe",
|
||||
"allowedUsers": "Zugelassene Benutzer"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Κατάλογος εταιρείας",
|
||||
"nameRequired": "Απαιτείται εμφανιζόμενο όνομα",
|
||||
"enabled": "Ενεργοποιημένο",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Αποθήκευση καταλόγου",
|
||||
"saving": "Οικονομία...",
|
||||
"saved": "Αποθηκεύτηκε",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Κεντρικός υπολογιστής LDAP",
|
||||
"port": "Λιμάνι",
|
||||
"useTls": "Χρήση TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Σύνδεση DN",
|
||||
"bindPassword": "Σύνδεση κωδικού πρόσβασης",
|
||||
"secretKeep": "Ένας κωδικός πρόσβασης αποθηκεύτηκε. Αφήστε το κενό για να τον διατηρήσετε.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Βάση αναζήτησης ομάδας",
|
||||
"adminGroup": "Ομάδα Διαχειριστών",
|
||||
"allowedUsers": "Επιτρεπόμενοι χρήστες"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Directorio de empresas",
|
||||
"nameRequired": "Se requiere un nombre para mostrar.",
|
||||
"enabled": "Activado",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Guardar directorio",
|
||||
"saving": "Guardando...",
|
||||
"saved": "Guardado",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Host LDAP",
|
||||
"port": "Puerto",
|
||||
"useTls": "Usar TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "DN de enlace",
|
||||
"bindPassword": "Contraseña de enlace",
|
||||
"secretKeep": "Se ha guardado una contraseña. Déjelo en blanco para conservarla.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Base de búsqueda de grupos",
|
||||
"adminGroup": "Grupo de administradores",
|
||||
"allowedUsers": "Usuarios permitidos"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Yrityshakemisto",
|
||||
"nameRequired": "Näyttönimi on pakollinen",
|
||||
"enabled": "Käytössä",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Tallenna hakemisto",
|
||||
"saving": "Tallennetaan...",
|
||||
"saved": "Tallennettu",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP-isäntä",
|
||||
"port": "Portti",
|
||||
"useTls": "Käytä TLS:ää (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Sido DN",
|
||||
"bindPassword": "Sido salasana",
|
||||
"secretKeep": "Salasana on tallennettu. Jätä tämä tyhjäksi, jos haluat säilyttää sen.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Ryhmän hakukanta",
|
||||
"adminGroup": "Hallintaryhmä",
|
||||
"allowedUsers": "Sallitut käyttäjät"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Annuaire des entreprises",
|
||||
"nameRequired": "Un nom d'affichage est requis.",
|
||||
"enabled": "Activé",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Répertoire de sauvegarde",
|
||||
"saving": "Enregistrement…",
|
||||
"saved": "Enregistré",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Hôte LDAP",
|
||||
"port": "Port",
|
||||
"useTls": "Utiliser TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "DN de liaison",
|
||||
"bindPassword": "Mot de passe de liaison",
|
||||
"secretKeep": "Un mot de passe est enregistré. Laissez ce champ vide pour le conserver.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Base de recherche de groupe",
|
||||
"adminGroup": "Groupe administrateur",
|
||||
"allowedUsers": "Utilisateurs autorisés"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "מדריך חברות",
|
||||
"nameRequired": "נדרש שם תצוגה",
|
||||
"enabled": "מופעל",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "שמור ספרייה",
|
||||
"saving": "חִסָכוֹן...",
|
||||
"saved": "נשמר",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "מארח LDAP",
|
||||
"port": "נָמָל",
|
||||
"useTls": "השתמש ב-TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "קשר DN",
|
||||
"bindPassword": "קשירת סיסמה",
|
||||
"secretKeep": "סיסמה נשמרה. השאר שדה זה ריק כדי לשמור אותה.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "בסיס חיפוש קבוצתי",
|
||||
"adminGroup": "קבוצת ניהול",
|
||||
"allowedUsers": "משתמשים מורשים"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "कंपनी निर्देशिका",
|
||||
"nameRequired": "एक डिस्प्ले नाम आवश्यक है",
|
||||
"enabled": "सक्षम",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "निर्देशिका सहेजें",
|
||||
"saving": "सहेजा जा रहा है...",
|
||||
"saved": "सहेजा गया",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP होस्ट",
|
||||
"port": "पोर्ट",
|
||||
"useTls": "TLS (LDAPS) का उपयोग करें",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Bind पासवर्ड",
|
||||
"secretKeep": "पासवर्ड सेव हो गया है। इसे सेव रखने के लिए इसे खाली छोड़ दें।",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "समूह खोज आधार",
|
||||
"adminGroup": "व्यवस्थापक समूह",
|
||||
"allowedUsers": "अनुमत उपयोगकर्ता"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Cégjegyzék",
|
||||
"nameRequired": "Megjelenített név megadása kötelező",
|
||||
"enabled": "Engedélyezve",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Könyvtár mentése",
|
||||
"saving": "Megtakarítás...",
|
||||
"saved": "Mentett",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP-gazdagép",
|
||||
"port": "Kikötő",
|
||||
"useTls": "TLS (LDAPS) használata",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Kötési DN",
|
||||
"bindPassword": "Jelszó kötése",
|
||||
"secretKeep": "A jelszó mentésre került. Hagyja ezt üresen a megőrzéshez.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Csoportkeresési bázis",
|
||||
"adminGroup": "Adminisztrátori csoport",
|
||||
"allowedUsers": "Engedélyezett felhasználók"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Direktori perusahaan",
|
||||
"nameRequired": "Nama tampilan wajib diisi.",
|
||||
"enabled": "Diaktifkan",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Simpan Direktori",
|
||||
"saving": "Penghematan...",
|
||||
"saved": "Tersimpan",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Host LDAP",
|
||||
"port": "Pelabuhan",
|
||||
"useTls": "Gunakan TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Ikat DN",
|
||||
"bindPassword": "Kata Sandi Terikat",
|
||||
"secretKeep": "Kata sandi telah tersimpan. Biarkan kosong untuk menyimpannya.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Basis Pencarian Grup",
|
||||
"adminGroup": "Grup Admin",
|
||||
"allowedUsers": "Pengguna yang Diizinkan"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Elenco delle aziende",
|
||||
"nameRequired": "È richiesto un nome visualizzato",
|
||||
"enabled": "Abilitato",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Salva directory",
|
||||
"saving": "Salvando...",
|
||||
"saved": "Salvato",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Host LDAP",
|
||||
"port": "Porta",
|
||||
"useTls": "Usa TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Password di bind",
|
||||
"secretKeep": "È stata salvata una password. Lascia questo campo vuoto per mantenerla.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Base di ricerca gruppi",
|
||||
"adminGroup": "Gruppo amministratori",
|
||||
"allowedUsers": "Utenti consentiti"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "企業名簿",
|
||||
"nameRequired": "表示名は必須です",
|
||||
"enabled": "有効",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "保存先ディレクトリ",
|
||||
"saving": "保存中...",
|
||||
"saved": "保存しました",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAPホスト",
|
||||
"port": "ポート",
|
||||
"useTls": "TLS (LDAPS) を使用",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "バインドDN",
|
||||
"bindPassword": "バインドパスワード",
|
||||
"secretKeep": "パスワードが保存されます。パスワードを保持するには、この欄を空欄のままにしてください。",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "グループ検索ベース",
|
||||
"adminGroup": "管理者グループ",
|
||||
"allowedUsers": "許可ユーザー"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "회사 디렉토리",
|
||||
"nameRequired": "표시 이름은 필수입니다.",
|
||||
"enabled": "사용",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "디렉토리 저장",
|
||||
"saving": "저장 중...",
|
||||
"saved": "저장됨",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP 호스트",
|
||||
"port": "포트",
|
||||
"useTls": "TLS 사용 (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "바인딩 DN",
|
||||
"bindPassword": "바인딩 암호",
|
||||
"secretKeep": "비밀번호가 저장됩니다. 비밀번호를 유지하려면 이 필드를 비워 두세요.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "그룹 검색 기준",
|
||||
"adminGroup": "관리자 그룹",
|
||||
"allowedUsers": "허용 사용자"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Bedrijfsdirectory",
|
||||
"nameRequired": "Een weergavenaam is verplicht.",
|
||||
"enabled": "Ingeschakeld",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Map opslaan",
|
||||
"saving": "Besparing...",
|
||||
"saved": "Opgeslagen",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP-host",
|
||||
"port": "Haven",
|
||||
"useTls": "Gebruik TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Bind wachtwoord",
|
||||
"secretKeep": "Er wordt een wachtwoord opgeslagen. Laat dit veld leeg om het wachtwoord te behouden.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Groepszoekbasis",
|
||||
"adminGroup": "Beheerdersgroep",
|
||||
"allowedUsers": "Toegestane gebruikers"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Firmakatalog",
|
||||
"nameRequired": "Et visningsnavn er obligatorisk",
|
||||
"enabled": "Aktivert",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Lagre katalog",
|
||||
"saving": "Lagrer...",
|
||||
"saved": "Lagret",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP-vert",
|
||||
"port": "Havn",
|
||||
"useTls": "Bruk TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Bind passord",
|
||||
"secretKeep": "Et passord er lagret. La dette feltet stå tomt for å beholde det.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Gruppesøkbase",
|
||||
"adminGroup": "Admingruppe",
|
||||
"allowedUsers": "Tillatte brukere"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Katalog firm",
|
||||
"nameRequired": "Wymagana jest nazwa wyświetlana",
|
||||
"enabled": "Włączona",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Zapisz katalog",
|
||||
"saving": "Zapisywanie...",
|
||||
"saved": "Zapisano",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Host LDAP",
|
||||
"port": "Port",
|
||||
"useTls": "Użyj TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Hasło Bind",
|
||||
"secretKeep": "Hasło zostało zapisane. Pozostaw to pole puste, aby je zachować.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Baza wyszukiwania grup",
|
||||
"adminGroup": "Grupa administratorów",
|
||||
"allowedUsers": "Dozwoleni użytkownicy"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Diretório de empresas",
|
||||
"nameRequired": "É necessário um nome de exibição.",
|
||||
"enabled": "Habilitado",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Salvar diretório",
|
||||
"saving": "Salvando...",
|
||||
"saved": "Salvo",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Host LDAP",
|
||||
"port": "Porta",
|
||||
"useTls": "Usar TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Vincular DN",
|
||||
"bindPassword": "Senha de vinculação",
|
||||
"secretKeep": "Uma senha foi salva. Deixe este campo em branco para mantê-la.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Base de pesquisa de grupo",
|
||||
"adminGroup": "Grupo de Administração",
|
||||
"allowedUsers": "Usuários autorizados"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Diretório de empresas",
|
||||
"nameRequired": "É necessário um nome de utilizador.",
|
||||
"enabled": "Ativado",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Guardar diretório",
|
||||
"saving": "A guardar...",
|
||||
"saved": "Guardado",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Servidor LDAP",
|
||||
"port": "Porta",
|
||||
"useTls": "Usar TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Palavra-passe de Bind",
|
||||
"secretKeep": "Uma palavra-passe foi guardada. Deixe este campo em branco para a manter.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Base de pesquisa de grupos",
|
||||
"adminGroup": "Grupo de administração",
|
||||
"allowedUsers": "Utilizadores permitidos"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Directorul companiilor",
|
||||
"nameRequired": "Este obligatoriu un nume afișat",
|
||||
"enabled": "Activat",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Salvați directorul",
|
||||
"saving": "Economisire...",
|
||||
"saved": "Salvat",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Gazdă LDAP",
|
||||
"port": "Port",
|
||||
"useTls": "Utilizați TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Legați DN-ul",
|
||||
"bindPassword": "Parolă de legare",
|
||||
"secretKeep": "O parolă este salvată. Lăsați acest câmp gol pentru a o păstra.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Baza de căutare a grupului",
|
||||
"adminGroup": "Grup de administratori",
|
||||
"allowedUsers": "Utilizatori permiși"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Справочник компаний",
|
||||
"nameRequired": "Необходимо указать отображаемое имя.",
|
||||
"enabled": "Включено",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Сохранить каталог",
|
||||
"saving": "Сохранение…",
|
||||
"saved": "Сохранено",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP-сервер",
|
||||
"port": "Порт",
|
||||
"useTls": "Использовать TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Пароль привязки",
|
||||
"secretKeep": "Пароль сохранен. Оставьте это поле пустым, чтобы сохранить его.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "База поиска групп",
|
||||
"adminGroup": "Группа администраторов",
|
||||
"allowedUsers": "Разрешенные пользователи"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Именик компанија",
|
||||
"nameRequired": "Потребно је приказано име",
|
||||
"enabled": "Омогућено",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Сачувај директоријум",
|
||||
"saving": "Чување...",
|
||||
"saved": "Сачувано",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP хост",
|
||||
"port": "Лука",
|
||||
"useTls": "Користите TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Повезивање DN-а",
|
||||
"bindPassword": "Повезивање лозинке",
|
||||
"secretKeep": "Лозинка је сачувана. Оставите ово празно да бисте је задржали.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "База групне претраге",
|
||||
"adminGroup": "Администраторска група",
|
||||
"allowedUsers": "Дозвољени корисници"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Företagskatalog",
|
||||
"nameRequired": "Ett visningsnamn krävs",
|
||||
"enabled": "Aktiverad",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Spara katalog",
|
||||
"saving": "Sparande...",
|
||||
"saved": "Sparad",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP-värd",
|
||||
"port": "Hamn",
|
||||
"useTls": "Använd TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Bind lösenord",
|
||||
"secretKeep": "Ett lösenord har sparats. Lämna detta tomt för att behålla det.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Gruppsökningsbas",
|
||||
"adminGroup": "Administratörsgrupp",
|
||||
"allowedUsers": "Tillåtna användare"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "รายชื่อบริษัท",
|
||||
"nameRequired": "จำเป็นต้องระบุชื่อที่แสดง",
|
||||
"enabled": "เปิดใช้งาน",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "บันทึกไดเร็กทอรี",
|
||||
"saving": "ประหยัด...",
|
||||
"saved": "บันทึกแล้ว",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "โฮสต์ LDAP",
|
||||
"port": "ท่าเรือ",
|
||||
"useTls": "ใช้ TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "ผูก DN",
|
||||
"bindPassword": "รหัสผ่านผูกมัด",
|
||||
"secretKeep": "รหัสผ่านถูกบันทึกไว้แล้ว หากต้องการบันทึกรหัสผ่าน ให้เว้นช่องนี้ว่างไว้",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "ฐานการค้นหากลุ่ม",
|
||||
"adminGroup": "กลุ่มผู้ดูแลระบบ",
|
||||
"allowedUsers": "ผู้ใช้ที่ได้รับอนุญาต"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Şirket dizini",
|
||||
"nameRequired": "Görünen ad gereklidir.",
|
||||
"enabled": "Etkin",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Kaydet",
|
||||
"saving": "Kaydediliyor...",
|
||||
"saved": "Kaydedildi",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP Sunucusu",
|
||||
"port": "Port",
|
||||
"useTls": "TLS Kullan (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Bind Parolası",
|
||||
"secretKeep": "Parola kaydedildi. Parolayı saklamak için bu alanı boş bırakın.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Grup Arama Tabanı",
|
||||
"adminGroup": "Yönetici Grubu",
|
||||
"allowedUsers": "İzin Verilen Kullanıcılar"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Довідник компаній",
|
||||
"nameRequired": "Потрібне відображуване ім'я",
|
||||
"enabled": "Увімкнено",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Зберегти каталог",
|
||||
"saving": "Збереження...",
|
||||
"saved": "Збережено",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Хост LDAP",
|
||||
"port": "Порт",
|
||||
"useTls": "Використовувати TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Прив'язане DN",
|
||||
"bindPassword": "Прив’язати пароль",
|
||||
"secretKeep": "Пароль збережено. Залиште це поле порожнім, щоб зберегти його.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "База групового пошуку",
|
||||
"adminGroup": "Група адміністраторів",
|
||||
"allowedUsers": "Дозволені користувачі"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "Danh bạ công ty",
|
||||
"nameRequired": "Tên hiển thị là bắt buộc",
|
||||
"enabled": "Đã bật",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "Lưu thư mục",
|
||||
"saving": "Đang lưu...",
|
||||
"saved": "Đã lưu",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "Máy chủ LDAP",
|
||||
"port": "Cổng",
|
||||
"useTls": "Dùng TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "Bind DN",
|
||||
"bindPassword": "Mật khẩu Bind",
|
||||
"secretKeep": "Mật khẩu đã được lưu. Hãy để trống phần này để giữ nguyên.",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "Cơ sở tìm kiếm nhóm",
|
||||
"adminGroup": "Nhóm Admin",
|
||||
"allowedUsers": "Người dùng được phép"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "公司名录",
|
||||
"nameRequired": "必须填写显示名称。",
|
||||
"enabled": "已启用",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "保存目录",
|
||||
"saving": "保存中...",
|
||||
"saved": "已保存",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP 主机",
|
||||
"port": "端口",
|
||||
"useTls": "使用 TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "绑定 DN",
|
||||
"bindPassword": "绑定密码",
|
||||
"secretKeep": "密码已保存。留空则不保存。",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "群组搜索基准",
|
||||
"adminGroup": "管理员组",
|
||||
"allowedUsers": "允许的用户"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,12 @@
|
||||
"namePlaceholder": "公司名錄",
|
||||
"nameRequired": "必須填寫顯示名稱。",
|
||||
"enabled": "已啟用",
|
||||
"enabledDesc": "Let users sign in with this directory.",
|
||||
"dialogDesc": "Connect an LDAP or Active Directory server so users can sign in with it.",
|
||||
"sectionGeneral": "General",
|
||||
"sectionConnection": "Connection",
|
||||
"sectionUsers": "User Lookup",
|
||||
"sectionAccess": "Access",
|
||||
"save": "儲存目錄",
|
||||
"saving": "儲存中…",
|
||||
"saved": "已儲存",
|
||||
@@ -36,6 +42,7 @@
|
||||
"host": "LDAP 主機",
|
||||
"port": "連接埠",
|
||||
"useTls": "使用 TLS (LDAPS)",
|
||||
"useTlsDesc": "Connect over an encrypted LDAPS connection.",
|
||||
"bindDn": "綁定 DN",
|
||||
"bindPassword": "綁定密碼",
|
||||
"secretKeep": "密碼已儲存。留空則不保存。",
|
||||
@@ -46,5 +53,8 @@
|
||||
"groupSearchBase": "群組搜尋基底",
|
||||
"adminGroup": "管理員群組",
|
||||
"allowedUsers": "允許的使用者"
|
||||
},
|
||||
"plugin": {
|
||||
"name": "LDAP"
|
||||
}
|
||||
}
|
||||
@@ -5,10 +5,13 @@ import {
|
||||
Button,
|
||||
Dialog,
|
||||
DialogContent,
|
||||
DialogDescription,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
FakeSwitch,
|
||||
Input,
|
||||
Switch,
|
||||
PasswordInput,
|
||||
SettingRow,
|
||||
} from "@termix/plugin-sdk/ui";
|
||||
import { usePluginApi, useTranslation } from "@termix/plugin-sdk/frontend";
|
||||
import { createLdapApi, type LdapProvider } from "./ldap-api";
|
||||
@@ -51,9 +54,6 @@ function errorMessage(error: unknown, fallback: string): string {
|
||||
return err.response?.data?.error || err.message || fallback;
|
||||
}
|
||||
|
||||
const labelClass =
|
||||
"text-[10px] font-semibold text-muted-foreground uppercase tracking-widest";
|
||||
|
||||
function Field({
|
||||
label,
|
||||
required,
|
||||
@@ -66,14 +66,25 @@ function Field({
|
||||
children: ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<div className="flex flex-col gap-1">
|
||||
<label className={labelClass}>
|
||||
<div className="flex flex-col gap-1.5 min-w-0">
|
||||
<label className="text-xs font-semibold">
|
||||
{label}
|
||||
{required && <span className="text-accent-brand ml-1">*</span>}
|
||||
</label>
|
||||
{children}
|
||||
{hint && (
|
||||
<span className="text-[10px] text-muted-foreground">{hint}</span>
|
||||
<p className="text-[10px] text-muted-foreground leading-snug">{hint}</p>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function Section({ title, children }: { title: string; children: ReactNode }) {
|
||||
return (
|
||||
<div className="flex flex-col gap-3">
|
||||
<span className="text-[10px] font-semibold text-muted-foreground uppercase tracking-widest">
|
||||
{title}
|
||||
</span>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
@@ -150,172 +161,155 @@ function ProviderDialog({
|
||||
}
|
||||
}
|
||||
|
||||
const text = (
|
||||
key: Exclude<keyof Fields, "useTLS" | "bindPassword">,
|
||||
label: string,
|
||||
placeholder: string,
|
||||
required = false,
|
||||
) => (
|
||||
<Field label={label} required={required}>
|
||||
<Input
|
||||
value={fields[key]}
|
||||
onChange={(e) => set(key)(e.target.value)}
|
||||
placeholder={placeholder}
|
||||
/>
|
||||
</Field>
|
||||
);
|
||||
|
||||
return (
|
||||
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||
<DialogContent className="max-w-lg max-h-[90vh] overflow-y-auto">
|
||||
<DialogHeader>
|
||||
<DialogTitle>
|
||||
<DialogContent className="flex flex-col gap-0 p-0 overflow-hidden w-[calc(100vw-2rem)] sm:max-w-xl max-h-[calc(100dvh-2rem)]">
|
||||
<DialogHeader className="px-4 pt-4 pb-3 pr-10 border-b border-border shrink-0">
|
||||
<DialogTitle className="text-lg font-bold">
|
||||
{provider ? t("providers.edit") : t("providers.add")}
|
||||
</DialogTitle>
|
||||
<DialogDescription className="text-xs text-muted-foreground">
|
||||
{t("providers.dialogDesc")}{" "}
|
||||
<a
|
||||
href="https://docs.termix.site/features/authentication/ldap"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
className="text-accent-brand hover:underline"
|
||||
>
|
||||
{t("providers.docsLink")}
|
||||
</a>
|
||||
</DialogDescription>
|
||||
</DialogHeader>
|
||||
<div className="flex flex-col gap-3 pt-2">
|
||||
<Field label={t("providers.name")} required>
|
||||
<Input
|
||||
value={name}
|
||||
onChange={(e) => setName(e.target.value)}
|
||||
placeholder={t("providers.namePlaceholder")}
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
<div className="flex items-center justify-between">
|
||||
<label className={labelClass}>{t("providers.enabled")}</label>
|
||||
<Switch checked={enabled} onCheckedChange={setEnabled} />
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-3 border-t border-border pt-3">
|
||||
<span className="text-[10px] text-muted-foreground">
|
||||
<a
|
||||
href="https://docs.termix.site/features/authentication/ldap"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
className="text-accent-brand hover:underline"
|
||||
>
|
||||
{t("providers.docsLink")}
|
||||
</a>
|
||||
</span>
|
||||
<Field label={t("fields.host")} required>
|
||||
<div className="flex-1 min-h-0 overflow-y-auto px-4 py-4 flex flex-col gap-6">
|
||||
<Section title={t("providers.sectionGeneral")}>
|
||||
<Field label={t("providers.name")} required>
|
||||
<Input
|
||||
value={fields.host}
|
||||
onChange={(e) => set("host")(e.target.value)}
|
||||
placeholder="ldap.example.com"
|
||||
className="text-xs"
|
||||
value={name}
|
||||
onChange={(e) => setName(e.target.value)}
|
||||
placeholder={t("providers.namePlaceholder")}
|
||||
/>
|
||||
</Field>
|
||||
<div className="flex gap-2">
|
||||
<div className="flex-1">
|
||||
<Field label={t("fields.port")} required>
|
||||
<Input
|
||||
value={fields.port}
|
||||
onChange={(e) => set("port")(e.target.value)}
|
||||
placeholder="389"
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
</div>
|
||||
<div className="flex items-end pb-1.5 gap-2">
|
||||
<Switch
|
||||
<div className="border border-border px-3">
|
||||
<SettingRow
|
||||
label={t("providers.enabled")}
|
||||
description={t("providers.enabledDesc")}
|
||||
>
|
||||
<FakeSwitch checked={enabled} onChange={setEnabled} />
|
||||
</SettingRow>
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section title={t("providers.sectionConnection")}>
|
||||
<div className="grid grid-cols-1 sm:grid-cols-[1fr_8rem] gap-3">
|
||||
{text("host", t("fields.host"), "ldap.example.com", true)}
|
||||
{text("port", t("fields.port"), "389", true)}
|
||||
</div>
|
||||
<div className="border border-border px-3">
|
||||
<SettingRow
|
||||
label={t("fields.useTls")}
|
||||
description={t("fields.useTlsDesc")}
|
||||
>
|
||||
<FakeSwitch
|
||||
checked={fields.useTLS}
|
||||
onCheckedChange={(useTLS) =>
|
||||
onChange={(useTLS) =>
|
||||
setFields((prev) => ({ ...prev, useTLS }))
|
||||
}
|
||||
aria-label={t("fields.useTls")}
|
||||
/>
|
||||
<span className="text-[10px] text-muted-foreground">
|
||||
{t("fields.useTls")}
|
||||
</span>
|
||||
</div>
|
||||
</SettingRow>
|
||||
</div>
|
||||
<Field label={t("fields.bindDn")} required>
|
||||
<Input
|
||||
value={fields.bindDN}
|
||||
onChange={(e) => set("bindDN")(e.target.value)}
|
||||
placeholder="cn=admin,dc=example,dc=com"
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
<Field
|
||||
label={t("fields.bindPassword")}
|
||||
required={!provider?.hasBindPassword}
|
||||
hint={
|
||||
provider?.hasBindPassword ? t("fields.secretKeep") : undefined
|
||||
}
|
||||
>
|
||||
<Input
|
||||
type="password"
|
||||
value={fields.bindPassword}
|
||||
onChange={(e) => set("bindPassword")(e.target.value)}
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
<Field label={t("fields.userSearchBase")} required>
|
||||
<Input
|
||||
value={fields.userSearchBase}
|
||||
onChange={(e) => set("userSearchBase")(e.target.value)}
|
||||
placeholder="ou=users,dc=example,dc=com"
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
<Field label={t("fields.userSearchFilter")} required>
|
||||
<Input
|
||||
value={fields.userSearchFilter}
|
||||
onChange={(e) => set("userSearchFilter")(e.target.value)}
|
||||
placeholder="(uid={{username}})"
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
<Field label={t("fields.usernameAttr")} required>
|
||||
<Input
|
||||
value={fields.usernameAttribute}
|
||||
onChange={(e) => set("usernameAttribute")(e.target.value)}
|
||||
placeholder="uid"
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
<Field label={t("fields.displayNameAttr")} required>
|
||||
<Input
|
||||
value={fields.displayNameAttribute}
|
||||
onChange={(e) => set("displayNameAttribute")(e.target.value)}
|
||||
placeholder="cn"
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
<div className="border-t border-border pt-3 flex flex-col gap-3">
|
||||
<Field label={t("fields.groupSearchBase")}>
|
||||
<Input
|
||||
value={fields.groupSearchBase}
|
||||
onChange={(e) => set("groupSearchBase")(e.target.value)}
|
||||
placeholder="ou=groups,dc=example,dc=com"
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
<Field label={t("fields.adminGroup")}>
|
||||
<Input
|
||||
value={fields.adminGroup}
|
||||
onChange={(e) => set("adminGroup")(e.target.value)}
|
||||
placeholder="cn=admins,ou=groups,dc=example,dc=com"
|
||||
className="text-xs"
|
||||
/>
|
||||
</Field>
|
||||
<Field label={t("fields.allowedUsers")}>
|
||||
<Input
|
||||
value={fields.allowedUsers}
|
||||
onChange={(e) => set("allowedUsers")(e.target.value)}
|
||||
placeholder="user1,user2,@domain.com"
|
||||
className="text-xs"
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
||||
{text(
|
||||
"bindDN",
|
||||
t("fields.bindDn"),
|
||||
"cn=admin,dc=example,dc=com",
|
||||
true,
|
||||
)}
|
||||
<Field
|
||||
label={t("fields.bindPassword")}
|
||||
required={!provider?.hasBindPassword}
|
||||
hint={
|
||||
provider?.hasBindPassword ? t("fields.secretKeep") : undefined
|
||||
}
|
||||
>
|
||||
<PasswordInput
|
||||
value={fields.bindPassword}
|
||||
onChange={(e) => set("bindPassword")(e.target.value)}
|
||||
/>
|
||||
</Field>
|
||||
</div>
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<div className="flex gap-2 justify-end pt-2">
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
className="text-xs"
|
||||
onClick={() => onOpenChange(false)}
|
||||
>
|
||||
{t("providers.cancel")}
|
||||
</Button>
|
||||
<Button
|
||||
size="sm"
|
||||
variant="outline"
|
||||
className="text-xs border-accent-brand/40 text-accent-brand hover:bg-accent-brand/10 hover:text-accent-brand"
|
||||
onClick={save}
|
||||
disabled={saving}
|
||||
>
|
||||
{saving ? t("providers.saving") : t("providers.save")}
|
||||
</Button>
|
||||
</div>
|
||||
<Section title={t("providers.sectionUsers")}>
|
||||
{text(
|
||||
"userSearchBase",
|
||||
t("fields.userSearchBase"),
|
||||
"ou=users,dc=example,dc=com",
|
||||
true,
|
||||
)}
|
||||
{text(
|
||||
"userSearchFilter",
|
||||
t("fields.userSearchFilter"),
|
||||
"(uid={{username}})",
|
||||
true,
|
||||
)}
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
||||
{text("usernameAttribute", t("fields.usernameAttr"), "uid", true)}
|
||||
{text(
|
||||
"displayNameAttribute",
|
||||
t("fields.displayNameAttr"),
|
||||
"cn",
|
||||
true,
|
||||
)}
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section title={t("providers.sectionAccess")}>
|
||||
{text(
|
||||
"groupSearchBase",
|
||||
t("fields.groupSearchBase"),
|
||||
"ou=groups,dc=example,dc=com",
|
||||
)}
|
||||
{text(
|
||||
"adminGroup",
|
||||
t("fields.adminGroup"),
|
||||
"cn=admins,ou=groups,dc=example,dc=com",
|
||||
)}
|
||||
{text(
|
||||
"allowedUsers",
|
||||
t("fields.allowedUsers"),
|
||||
"user1,user2,@domain.com",
|
||||
)}
|
||||
</Section>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center justify-end gap-2 px-4 py-3 border-t border-border shrink-0">
|
||||
<Button variant="ghost" onClick={() => onOpenChange(false)}>
|
||||
{t("providers.cancel")}
|
||||
</Button>
|
||||
<Button
|
||||
variant="outline"
|
||||
className="border-accent-brand/40 text-accent-brand hover:bg-accent-brand/10 hover:text-accent-brand"
|
||||
onClick={save}
|
||||
disabled={saving}
|
||||
>
|
||||
{saving ? t("providers.saving") : t("providers.save")}
|
||||
</Button>
|
||||
</div>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
@@ -371,9 +365,9 @@ export function ProvidersSetting() {
|
||||
if (providers === null) return null;
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-3">
|
||||
<div className="flex flex-col gap-3 py-3 border-b border-border last:border-0">
|
||||
{providers.length === 0 ? (
|
||||
<span className="text-[10px] text-muted-foreground">
|
||||
<span className="text-xs text-muted-foreground">
|
||||
{t("providers.none")}
|
||||
</span>
|
||||
) : (
|
||||
@@ -381,20 +375,19 @@ export function ProvidersSetting() {
|
||||
{providers.map((provider) => (
|
||||
<div
|
||||
key={provider.id}
|
||||
className="flex items-center gap-2 p-2 border border-border bg-background"
|
||||
className="flex items-center gap-2 p-3 border border-border bg-background"
|
||||
>
|
||||
<span className="flex-1 min-w-0 text-xs font-medium truncate">
|
||||
<span className="flex-1 min-w-0 text-sm font-medium truncate">
|
||||
{provider.name}
|
||||
</span>
|
||||
<Switch
|
||||
<FakeSwitch
|
||||
checked={provider.enabled}
|
||||
onCheckedChange={() => void toggleEnabled(provider)}
|
||||
aria-label={t("providers.enabled")}
|
||||
onChange={() => void toggleEnabled(provider)}
|
||||
/>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
className="h-6 w-6 p-0 text-muted-foreground hover:text-foreground"
|
||||
className="h-7 w-7 p-0 text-muted-foreground hover:text-foreground"
|
||||
onClick={() => {
|
||||
setEditing(provider);
|
||||
setDialogOpen(true);
|
||||
@@ -406,7 +399,7 @@ export function ProvidersSetting() {
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
className="h-6 w-6 p-0 text-muted-foreground hover:text-destructive"
|
||||
className="h-7 w-7 p-0 text-muted-foreground hover:text-destructive"
|
||||
onClick={() => void remove(provider)}
|
||||
title={t("providers.delete")}
|
||||
>
|
||||
|
||||
Reference in new issue
Block a user