Commit Graph
9557 Commits
Author SHA1 Message Date
Timothy Jaeryang Baek e769f9ff4f refac 2026-07-23 17:53:13 -04:00
Timothy Jaeryang Baek 892dc03151 refac 2026-07-23 16:35:01 -04:00
G30 e62e4eb9fe fix(ui): contain archived chats and analytics content within the settings modal (#27306) 2026-07-23 13:34:35 -05:00
Juan Calderon-PerezandClaude Opus 4.8 ca2d7c9deb feat: add LDAP group synchronization support (#27263)
* feat: expose LDAP group sync settings in admin config

LDAP group synchronization was already wired into the login flow but its
settings (group management, auto-creation, and the group attribute) could
only be set via environment variables. OAuth, by contrast, exposes its
group-mapping settings through the admin config API and UI.

Bring LDAP to parity:
- Add enable_group_management, enable_group_creation and
  attribute_for_groups to LdapServerConfig and LDAP_SERVER_CONFIG_KEYS so
  the /admin/config/ldap/server endpoint reads and persists them.
- Add a "Group Mapping / Auto-Create Groups / Group Attribute" section to
  the LDAP admin settings UI, mirroring the OAuth group-mapping controls.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TtCvvQ7dcadoufbRpCKcpe

* fix: harden LDAP group sync config and login flow

Address review findings on the LDAP group-sync settings:

- ldap_auth: move the auto-create-groups call inside the try/except that
  wraps group sync, so a group-creation error is logged instead of
  bubbling to the broad handler and failing the whole login.
- update_ldap_server: reject saving with group management enabled but an
  empty group attribute, which would otherwise make sync silently no-op
  (mirrors the existing required-field validation).
- Authentication.svelte: merge the LDAP server config response into the
  client defaults instead of replacing the object, so any key an older
  backend omits keeps its default value.

Note: the empty-directory-groups behavior was reviewed and already
matches OAuth (both skip removal when no groups are returned), so it was
left unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TtCvvQ7dcadoufbRpCKcpe

* fix: default blank LDAP group attribute to memberOf before save

The Group Attribute field advertises "Default to memberOf", but the
backend now rejects an empty group attribute when group management is
enabled. Fall back to the memberOf default client-side when the field is
left blank, so the advertised default holds and the save isn't rejected.
The backend validation remains as defense-in-depth for direct API calls.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TtCvvQ7dcadoufbRpCKcpe

* fix: initialize LDAP port default as null instead of empty string

The backend LdapServerConfig types port as `int | None`, but the frontend
initialized it to an empty string. If a save carried that default (e.g.
when the backend response omits port under version skew), Pydantic would
reject the empty string. `null` matches the model and is also what the
type="number" input yields when the field is empty.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TtCvvQ7dcadoufbRpCKcpe

* fix: parse LDAP group DNs correctly instead of splitting on commas

Group CN extraction split the DN on raw commas and sliced off "CN=",
which mangles any group whose name contains an escaped separator (e.g.
"CN=Sales\, EMEA,OU=...") into a truncated, wrong name that then fails to
match the intended Open WebUI group. Use ldap3's parse_dn to split the DN
respecting RFC 4514 escaping, and unescape the resulting value so the CN
matches what an administrator sees.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TtCvvQ7dcadoufbRpCKcpe

* chore: address review feedback on _unescape_ldap_dn_value

Trim the docstring and rename the loop index to a more descriptive name
(i -> pos) per review feedback on the group DN unescaping helper. No
behavior change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TtCvvQ7dcadoufbRpCKcpe

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-23 13:20:55 -05:00
Timothy Jaeryang Baek ca11bd90a7 chore: format 2026-07-23 13:41:16 -04:00
Timothy Jaeryang Baek 93bd05271c refac 2026-07-23 13:40:30 -04:00
Timothy Jaeryang Baek 3026ac64a2 refac 2026-07-23 13:36:35 -04:00
Timothy Jaeryang Baek 49abfbdd15 refac 2026-07-23 13:18:04 -04:00
Timothy Jaeryang Baek 1513ddaf58 refac 2026-07-23 12:25:17 -04:00
Timothy Jaeryang Baek aaf2834db7 refac 2026-07-23 12:03:26 -04:00
Timothy Jaeryang Baek d0f7da4f45 refac 2026-07-23 04:45:27 -04:00
Timothy Jaeryang Baek bb12b1a18b refac 2026-07-23 04:16:14 -04:00
Timothy Jaeryang Baek 48625e657f refac 2026-07-23 03:54:19 -04:00
Andi Chandler adf07e8df0 **i18n**: Internationalization or localization changes (#27304)
* Change spelling to British English in translation.json

Updated translations to use British English spelling for various terms.

* Update translation.json
2026-07-23 03:24:21 -04:00
joaoback 1b28b8a144 i18n: add pt-BR translations for newly added UI items and consistency pass (#27324)
New **pt-BR** translations for items introduced in the latest releases, plus a consistency/quality pass across existing strings (grammar, tone, capitalization, pluralization). Placeholders and hotkeys preserved. No logic changes.
2026-07-23 03:23:47 -04:00
Timothy Jaeryang Baek 73421c5b42 refac 2026-07-23 02:55:06 -04:00
Timothy Jaeryang Baek c4efa81d08 refac 2026-07-21 14:18:41 -04:00
Timothy Jaeryang Baek 9ca8cf528a refac 2026-07-21 14:16:51 -04:00
Timothy Jaeryang Baek 409fb39717 refac 2026-07-21 13:53:30 -04:00
Timothy Jaeryang Baek 86efecd9ad refac 2026-07-20 22:45:50 -04:00
Timothy Jaeryang Baek 6940297486 refac 2026-07-20 22:27:09 -04:00
Timothy Jaeryang Baek 49e57f4e7e chore: format 2026-07-20 22:11:42 -04:00
Timothy Jaeryang Baek 4a42543fc3 refac 2026-07-20 22:11:16 -04:00
Timothy Jaeryang Baek e88d2e053c refac 2026-07-20 22:10:11 -04:00
Timothy Jaeryang Baek 704d07e9a2 refac 2026-07-20 22:04:39 -04:00
Timothy Jaeryang Baek bc8d24c951 refac 2026-07-20 22:03:31 -04:00
Timothy Jaeryang Baek 1428a4ddce refac 2026-07-20 21:44:12 -04:00
Timothy Jaeryang Baek 2fcb36267f refac 2026-07-20 01:33:53 -04:00
Timothy Jaeryang Baek af9a315ac3 refac 2026-07-20 01:33:47 -04:00
Timothy Jaeryang Baek 6e5efc1f75 refac 2026-07-20 01:21:15 -04:00
Timothy Jaeryang Baek 4da2ff2655 refac 2026-07-20 00:25:37 -04:00
Timothy Jaeryang Baek d3ea51fd46 refac 2026-07-20 00:23:01 -04:00
Timothy Jaeryang Baek 2dbdba1f91 refac 2026-07-17 23:39:49 -04:00
Timothy Jaeryang Baek b2f7ecd83a refac 2026-07-17 06:45:00 -04:00
Timothy Jaeryang Baek 59c75f569b refac 2026-07-17 06:38:10 -04:00
Timothy Jaeryang Baek f192657dc9 refac 2026-07-17 06:35:24 -04:00
Timothy Jaeryang Baek 9281adc564 refac 2026-07-17 06:34:17 -04:00
Timothy Jaeryang Baek fd07e3a8e3 refac 2026-07-17 06:30:04 -04:00
Timothy Jaeryang Baek 890bfd0d97 refac 2026-07-17 06:28:07 -04:00
Timothy Jaeryang Baek ff49217206 refac 2026-07-17 06:22:15 -04:00
Timothy Jaeryang Baek 1bf05ebc7d refac 2026-07-17 06:06:23 -04:00
Timothy Jaeryang Baek cda5bdb9d4 refac 2026-07-17 05:51:39 -04:00
Timothy Jaeryang Baek ea2e3d0afc refac 2026-07-17 05:48:41 -04:00
Timothy Jaeryang Baek 437c06c479 refac 2026-07-17 05:46:09 -04:00
Timothy Jaeryang Baek d027a32ed1 refac 2026-07-17 05:40:40 -04:00
Timothy Jaeryang Baek 21e180182a refac 2026-07-17 05:34:00 -04:00
Timothy Jaeryang Baek 2d83c7438c refac 2026-07-17 05:32:50 -04:00
Timothy Jaeryang Baek d0bea60581 refac 2026-07-17 05:31:32 -04:00
Timothy Jaeryang Baek 421da67446 refac 2026-07-17 05:15:09 -04:00
Timothy Jaeryang Baek 6fcb38fe2e refac 2026-07-17 05:12:16 -04:00