mirror of
https://github.com/hay-kot/mealie.git
synced 2025-07-14 00:54:00 -07:00
feat: LDAP improvements (#1487)
* Use Base DN for LDAP and fetch user attrs Requires that a Base DN be set for LDAP Set `full_name` and `email` based on LDAP attributes when creating user * Add support for secure LDAP Allow insecure LDAP connection (disabled by default) Use CA when connecting to secure LDAP server * Added missing quotes to example * Update security.py * Update security.py formatting * Update security.py Switched to f-String formatting * formatting * Update test_security.py Added at attributes for testing * Update test_security.py Modified tests for base DN * Update test_security.py Set proper base DN for testing * Update test_security.py Corrected testing for LDAP * Update test_security.py Defined base_dn * Authenticated user not in base DN Add check for when user can authenticate but is not in base DN * Update test_security.py LDAP user cannot exist as it is searched before it is created and the list returns False Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
This commit is contained in:
parent
21161321e4
commit
11eeab1b51
5 changed files with 54 additions and 26 deletions
|
@ -22,11 +22,11 @@ def test_ldap_authentication_mocked(monkeypatch: MonkeyPatch):
|
|||
user = random_string(10)
|
||||
password = random_string(10)
|
||||
bind_template = "cn={},dc=example,dc=com"
|
||||
admin_filter = "(memberOf=cn=admins,dc=example,dc=com)"
|
||||
base_dn = "(dc=example,dc=com)"
|
||||
monkeypatch.setenv("LDAP_AUTH_ENABLED", "true")
|
||||
monkeypatch.setenv("LDAP_SERVER_URL", "") # Not needed due to mocking
|
||||
monkeypatch.setenv("LDAP_BIND_TEMPLATE", bind_template)
|
||||
monkeypatch.setenv("LDAP_ADMIN_FILTER", admin_filter)
|
||||
monkeypatch.setenv("LDAP_BASE_DN", base_dn)
|
||||
|
||||
class LdapConnMock:
|
||||
def simple_bind_s(self, dn, bind_pw):
|
||||
|
@ -34,10 +34,10 @@ def test_ldap_authentication_mocked(monkeypatch: MonkeyPatch):
|
|||
return bind_pw == password
|
||||
|
||||
def search_s(self, dn, scope, filter, attrlist):
|
||||
assert attrlist == []
|
||||
assert filter == admin_filter
|
||||
assert dn == bind_template.format(user)
|
||||
assert scope == ldap.SCOPE_BASE
|
||||
assert attrlist == ["name", "mail"]
|
||||
assert filter == f"(&(objectClass=user)(|(cn={user})(sAMAccountName={user})(mail={user})))"
|
||||
assert dn == base_dn
|
||||
assert scope == ldap.SCOPE_SUBTREE
|
||||
return [()]
|
||||
|
||||
def ldap_initialize_mock(url):
|
||||
|
@ -48,5 +48,4 @@ def test_ldap_authentication_mocked(monkeypatch: MonkeyPatch):
|
|||
|
||||
get_app_settings.cache_clear()
|
||||
result = security.authenticate_user(create_session(), user, password)
|
||||
assert result is not False
|
||||
assert result.username == user
|
||||
assert result is False
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue