Skip to content
Snippets Groups Projects
Verified Commit 22075b9e authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Correct use of get_ldap_value_for_field

parent f62a49db
No related branches found
No related tags found
1 merge request!28Resolve "Allow match of users to persons by other fields in AlekSIS and LDAP"
...@@ -128,7 +128,7 @@ def apply_templates(value, patterns, templates, separator="|"): ...@@ -128,7 +128,7 @@ def apply_templates(value, patterns, templates, separator="|"):
return value return value
def get_ldap_value_for_field(model, field, attrs, dn, instance=None): def get_ldap_value_for_field(model, field, attrs, dn, instance=None, allow_missing=False):
"""Get the value of a field in LDAP attributes. """Get the value of a field in LDAP attributes.
Looks at the site preference for sync fields to determine which LDAP field is Looks at the site preference for sync fields to determine which LDAP field is
...@@ -152,7 +152,8 @@ def get_ldap_value_for_field(model, field, attrs, dn, instance=None): ...@@ -152,7 +152,8 @@ def get_ldap_value_for_field(model, field, attrs, dn, instance=None):
value = from_ldap(value, field, dn, ldap_field, instance) value = from_ldap(value, field, dn, ldap_field, instance)
return value return value
else:
if not allow_missing:
raise KeyError(f"Matching field {ldap_field} not in attributes of {dn}") raise KeyError(f"Matching field {ldap_field} not in attributes of {dn}")
...@@ -228,8 +229,9 @@ def ldap_sync_from_user(user, dn, attrs): ...@@ -228,8 +229,9 @@ def ldap_sync_from_user(user, dn, attrs):
defaults = {} defaults = {}
# Match on all fields selected in preferences # Match on all fields selected in preferences
fields_map = {f.name: f for f in Person.syncable_fields()}
for field_name in get_site_preferences()["ldap__matching_fields"]: for field_name in get_site_preferences()["ldap__matching_fields"]:
value = get_ldap_value_for_field(Person, field, attrs, dn) value = get_ldap_value_for_field(Person, fields_map[field_name], attrs, dn)
matches[field_name] = value matches[field_name] = value
# Pre-fill all mandatory non-matching fields from User object # Pre-fill all mandatory non-matching fields from User object
for missing_key in ("first_name", "last_name", "email"): for missing_key in ("first_name", "last_name", "email"):
...@@ -254,7 +256,7 @@ def ldap_sync_from_user(user, dn, attrs): ...@@ -254,7 +256,7 @@ def ldap_sync_from_user(user, dn, attrs):
# Synchronise additional fields if enabled # Synchronise additional fields if enabled
for field in Person.syncable_fields(): for field in Person.syncable_fields():
value = get_ldap_value_for_field(Person, field, attrs, dn, person) value = get_ldap_value_for_field(Person, field, attrs, dn, person, allow_missing=True)
setattr(person, field.name, value) setattr(person, field.name, value)
logger.debug(f"Field {field.name} set to {value} for {person}") logger.debug(f"Field {field.name} set to {value} for {person}")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment