Skip to content
Snippets Groups Projects
Verified Commit 7c605c89 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Drop usage of model extension fields

parent 13994832
No related branches found
No related tags found
1 merge request!129Make compatible with current Core
Pipeline #172840 passed with warnings
from django.utils.translation import gettext_lazy as _
from jsonstore import CharField
from aleksis.core.models import Group, Person
# Fields as import refs for LDAP objects
Group.field(ldap_dn=CharField(verbose_name=_("LDAP Distinguished Name"), blank=True))
Person.field(ldap_dn=CharField(verbose_name=_("LDAP Distinguished Name"), blank=True))
...@@ -294,7 +294,7 @@ def ldap_sync_from_user(user, dn, attrs): ...@@ -294,7 +294,7 @@ def ldap_sync_from_user(user, dn, attrs):
status = "New" if created else "Existing" status = "New" if created else "Existing"
logger.info(f"{status} person {person} linked to user {user.username}") logger.info(f"{status} person {person} linked to user {user.username}")
person.ldap_dn = dn.lower() person.extended_data["ldap_dn"] = dn.lower()
if not created: if not created:
person.first_name = user.first_name person.first_name = user.first_name
person.last_name = user.last_name person.last_name = user.last_name
...@@ -364,13 +364,13 @@ def ldap_sync_from_groups(group_infos): ...@@ -364,13 +364,13 @@ def ldap_sync_from_groups(group_infos):
all_dns = set(ldap_groups.keys()) all_dns = set(ldap_groups.keys())
# First, update all existing groups with known DNs # First, update all existing groups with known DNs
existing = Group.objects.filter(ldap_dn__in=all_dns, school_term=school_term).select_related( existing = Group.objects.filter(
None extended_data__ldap_dn__in=all_dns, school_term=school_term
) ).select_related(None)
existing_dns = set([v.ldap_dn for v in existing]) existing_dns = set([v.extended_data["ldap_dn"] for v in existing])
for obj in existing: for obj in existing:
obj.name = ldap_groups[obj.ldap_dn]["name"] obj.name = ldap_groups[obj.extended_data["ldap_dn"]]["name"]
obj.short_name = ldap_groups[obj.ldap_dn]["short_name"] obj.short_name = ldap_groups[obj.extended_data["ldap_dn"]]["short_name"]
logger.info(f"Updating {len(existing)} Django groups") logger.info(f"Updating {len(existing)} Django groups")
try: try:
Group.objects.bulk_update(existing, ("name", "short_name")) Group.objects.bulk_update(existing, ("name", "short_name"))
...@@ -385,7 +385,7 @@ def ldap_sync_from_groups(group_infos): ...@@ -385,7 +385,7 @@ def ldap_sync_from_groups(group_infos):
for dn in nonexisting_dns: for dn in nonexisting_dns:
nonexisting.append( nonexisting.append(
Group( Group(
ldap_dn=dn, extended_data=dict(ldap_dn=dn),
name=ldap_groups[dn]["name"], name=ldap_groups[dn]["name"],
short_name=ldap_groups[dn]["short_name"], short_name=ldap_groups[dn]["short_name"],
school_term=school_term, school_term=school_term,
...@@ -420,7 +420,7 @@ def mass_ldap_import(): ...@@ -420,7 +420,7 @@ def mass_ldap_import():
group_objects = ldap_sync_from_groups(ldap_groups) group_objects = ldap_sync_from_groups(ldap_groups)
# Create lookup table as cache for later code # Create lookup table as cache for later code
group_dict = {obj.ldap_dn: obj for obj in group_objects} group_dict = {obj.extended_data["ldap_dn"]: obj for obj in group_objects}
# Guess LDAP username field from user filter # Guess LDAP username field from user filter
uid_field = re.search( uid_field = re.search(
...@@ -482,14 +482,14 @@ def mass_ldap_import(): ...@@ -482,14 +482,14 @@ def mass_ldap_import():
if member_attr.lower() == "memberuid": if member_attr.lower() == "memberuid":
members = Person.objects.filter(user__username__in=ldap_members) members = Person.objects.filter(user__username__in=ldap_members)
else: else:
members = Person.objects.filter(ldap_dn__in=ldap_members) members = Person.objects.filter(extended_data__ldap_dn__in=ldap_members)
if get_site_preferences()["ldap__group_sync_owner_attr"]: if get_site_preferences()["ldap__group_sync_owner_attr"]:
ldap_owners = [_.lower() for _ in attrs[owner_attr]] if owner_attr in attrs else [] ldap_owners = [_.lower() for _ in attrs[owner_attr]] if owner_attr in attrs else []
if get_site_preferences()["ldap__group_sync_owner_attr_type"] == "uid": if get_site_preferences()["ldap__group_sync_owner_attr_type"] == "uid":
owners = Person.objects.filter(user__username__in=ldap_owners) owners = Person.objects.filter(user__username__in=ldap_owners)
elif get_site_preferences()["ldap__group_sync_owner_attr_type"] == "dn": elif get_site_preferences()["ldap__group_sync_owner_attr_type"] == "dn":
owners = Person.objects.filter(ldap_dn__in=ldap_owners) owners = Person.objects.filter(extended_data__ldap_dn__in=ldap_owners)
group.members.set(members) group.members.set(members)
if get_site_preferences()["ldap__group_sync_owner_attr"]: if get_site_preferences()["ldap__group_sync_owner_attr"]:
......
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