Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
AlekSIS-App-LDAP
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
AlekSIS®
Official
AlekSIS-App-LDAP
Commits
1132fc11
Verified
Commit
1132fc11
authored
4 years ago
by
Tom Teichler
Browse files
Options
Downloads
Patches
Plain Diff
[Reformat] Fix variables
parent
e1186033
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
aleksis/apps/ldap/apps.py
+2
-2
2 additions, 2 deletions
aleksis/apps/ldap/apps.py
aleksis/apps/ldap/util/ldap_sync.py
+28
-28
28 additions, 28 deletions
aleksis/apps/ldap/util/ldap_sync.py
with
30 additions
and
30 deletions
aleksis/apps/ldap/apps.py
+
2
−
2
View file @
1132fc11
...
@@ -25,6 +25,6 @@ class LDAPConfig(AppConfig):
...
@@ -25,6 +25,6 @@ class LDAPConfig(AppConfig):
update_dynamic_preferences
()
update_dynamic_preferences
()
U
ser
=
get_user_model
()
u
ser
=
get_user_model
()
if
get_site_preferences
()[
"
ldap__person_sync_on_login
"
]:
if
get_site_preferences
()[
"
ldap__person_sync_on_login
"
]:
post_save
.
connect
(
ldap_sync_user_on_login
,
sender
=
U
ser
)
post_save
.
connect
(
ldap_sync_user_on_login
,
sender
=
u
ser
)
This diff is collapsed.
Click to expand it.
aleksis/apps/ldap/util/ldap_sync.py
+
28
−
28
View file @
1132fc11
...
@@ -66,8 +66,8 @@ def from_ldap(value, instance, field, dn, ldap_field):
...
@@ -66,8 +66,8 @@ def from_ldap(value, instance, field, dn, ldap_field):
def
update_dynamic_preferences
():
def
update_dynamic_preferences
():
"""
Auto-generate sync field settings from models.
"""
"""
Auto-generate sync field settings from models.
"""
P
erson
=
apps
.
get_model
(
"
core
"
,
"
Person
"
)
p
erson
=
apps
.
get_model
(
"
core
"
,
"
Person
"
)
for
model
in
(
P
erson
,):
for
model
in
(
p
erson
,):
# Collect fields that are matchable
# Collect fields that are matchable
for
field
in
model
.
syncable_fields
():
for
field
in
model
.
syncable_fields
():
setting_name
=
setting_name_from_field
(
model
,
field
)
setting_name
=
setting_name_from_field
(
model
,
field
)
...
@@ -128,7 +128,7 @@ def ldap_sync_user_on_login(sender, instance, created, **kwargs):
...
@@ -128,7 +128,7 @@ def ldap_sync_user_on_login(sender, instance, created, **kwargs):
return
return
instance
.
_skip_signal
=
True
instance
.
_skip_signal
=
True
P
erson
=
apps
.
get_model
(
"
core
"
,
"
Person
"
)
p
erson
=
apps
.
get_model
(
"
core
"
,
"
Person
"
)
if
(
if
(
get_site_preferences
()[
"
ldap__enable_sync
"
]
get_site_preferences
()[
"
ldap__enable_sync
"
]
...
@@ -140,10 +140,10 @@ def ldap_sync_user_on_login(sender, instance, created, **kwargs):
...
@@ -140,10 +140,10 @@ def ldap_sync_user_on_login(sender, instance, created, **kwargs):
person
=
ldap_sync_from_user
(
person
=
ldap_sync_from_user
(
instance
,
instance
.
ldap_user
.
dn
,
instance
.
ldap_user
.
attrs
.
data
instance
,
instance
.
ldap_user
.
dn
,
instance
.
ldap_user
.
attrs
.
data
)
)
except
P
erson
.
DoesNotExist
:
except
p
erson
.
DoesNotExist
:
logger
.
warn
(
f
"
No matching person for user
{
instance
.
username
}
"
)
logger
.
warn
(
f
"
No matching person for user
{
instance
.
username
}
"
)
return
return
except
P
erson
.
MultipleObjectsReturned
:
except
p
erson
.
MultipleObjectsReturned
:
logger
.
error
(
f
"
More than one matching person for user
{
instance
.
username
}
"
)
logger
.
error
(
f
"
More than one matching person for user
{
instance
.
username
}
"
)
return
return
except
(
DataError
,
IntegrityError
,
ValueError
)
as
e
:
except
(
DataError
,
IntegrityError
,
ValueError
)
as
e
:
...
@@ -174,13 +174,13 @@ def ldap_sync_user_on_login(sender, instance, created, **kwargs):
...
@@ -174,13 +174,13 @@ def ldap_sync_user_on_login(sender, instance, created, **kwargs):
@transaction.atomic
@transaction.atomic
def
ldap_sync_from_user
(
user
,
dn
,
attrs
):
def
ldap_sync_from_user
(
user
,
dn
,
attrs
):
"""
Synchronise person information from a User object (with ldap_user) to Django.
"""
"""
Synchronise person information from a User object (with ldap_user) to Django.
"""
P
erson
=
apps
.
get_model
(
"
core
"
,
"
Person
"
)
p
erson
=
apps
.
get_model
(
"
core
"
,
"
Person
"
)
# Check if there is an existing person connected to the user.
# Check if there is an existing person connected to the user.
if
Person
.
objects
.
filter
(
user__username
=
user
.
username
).
exists
():
if
Person
.
objects
.
filter
(
user__username
=
user
.
username
).
exists
():
person
=
user
.
person
person
_
=
user
.
person
created
=
False
created
=
False
logger
.
info
(
f
"
Existing person
{
person
}
already linked to user
{
user
.
username
}
"
)
logger
.
info
(
f
"
Existing person
{
person
_
}
already linked to user
{
user
.
username
}
"
)
# FIXME ALso account for existing person with DN here
# FIXME ALso account for existing person with DN here
else
:
else
:
# Build filter criteria depending on config
# Build filter criteria depending on config
...
@@ -196,20 +196,20 @@ def ldap_sync_from_user(user, dn, attrs):
...
@@ -196,20 +196,20 @@ def ldap_sync_from_user(user, dn, attrs):
defaults
[
"
email
"
]
=
user
.
email
defaults
[
"
email
"
]
=
user
.
email
if
get_site_preferences
()[
"
ldap__create_missing_persons
"
]:
if
get_site_preferences
()[
"
ldap__create_missing_persons
"
]:
person
,
created
=
Person
.
objects
.
get_or_create
(
**
matches
,
defaults
=
defaults
)
person
_
,
created
=
Person
.
objects
.
get_or_create
(
**
matches
,
defaults
=
defaults
)
else
:
else
:
person
=
Person
.
objects
.
get
(
**
matches
)
person
_
=
Person
.
objects
.
get
(
**
matches
)
created
=
False
created
=
False
person
.
user
=
user
person
_
.
user
=
user
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
_
.
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
person
.
email
=
user
.
email
person
_
.
email
=
user
.
email
# Synchronise additional fields if enabled
# Synchronise additional fields if enabled
for
field
in
Person
.
syncable_fields
():
for
field
in
Person
.
syncable_fields
():
...
@@ -226,19 +226,19 @@ def ldap_sync_from_user(user, dn, attrs):
...
@@ -226,19 +226,19 @@ def ldap_sync_from_user(user, dn, attrs):
value
=
apply_templates
(
value
,
patterns
,
templates
)
value
=
apply_templates
(
value
,
patterns
,
templates
)
# Opportunistically convert LDAP string value to Python object
# Opportunistically convert LDAP string value to Python object
value
=
from_ldap
(
value
,
person
,
field
,
dn
,
ldap_field
)
value
=
from_ldap
(
value
,
person
_
,
field
,
dn
,
ldap_field
)
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
_
}
"
)
person
.
save
()
person
_
.
save
()
return
person
return
person
_
@transaction.atomic
@transaction.atomic
def
ldap_sync_from_groups
(
group_infos
):
def
ldap_sync_from_groups
(
group_infos
):
"""
Synchronise group information from LDAP results to Django.
"""
"""
Synchronise group information from LDAP results to Django.
"""
G
roup
=
apps
.
get_model
(
"
core
"
,
"
Group
"
)
g
roup
=
apps
.
get_model
(
"
core
"
,
"
Group
"
)
# Resolve Group objects from LDAP group objects
# Resolve Group objects from LDAP group objects
group_objects
=
[]
group_objects
=
[]
...
@@ -272,13 +272,13 @@ def ldap_sync_from_groups(group_infos):
...
@@ -272,13 +272,13 @@ def ldap_sync_from_groups(group_infos):
)
)
# Shorten names to fit into model fields
# Shorten names to fit into model fields
short_name
=
short_name
[:
G
roup
.
_meta
.
get_field
(
"
short_name
"
).
max_length
]
short_name
=
short_name
[:
g
roup
.
_meta
.
get_field
(
"
short_name
"
).
max_length
]
name
=
name
[:
G
roup
.
_meta
.
get_field
(
"
name
"
).
max_length
]
name
=
name
[:
g
roup
.
_meta
.
get_field
(
"
name
"
).
max_length
]
# FIXME FInd a way to throw exceptions correctly but still continue import
# FIXME FInd a way to throw exceptions correctly but still continue import
try
:
try
:
with
transaction
.
atomic
():
with
transaction
.
atomic
():
group
,
created
=
G
roup
.
objects
.
update_or_create
(
group
,
created
=
g
roup
.
objects
.
update_or_create
(
ldap_dn
=
ldap_group
[
0
].
lower
(),
ldap_dn
=
ldap_group
[
0
].
lower
(),
defaults
=
{
"
short_name
"
:
short_name
,
"
name
"
:
name
},
defaults
=
{
"
short_name
"
:
short_name
,
"
name
"
:
name
},
)
)
...
@@ -300,7 +300,7 @@ def mass_ldap_import():
...
@@ -300,7 +300,7 @@ def mass_ldap_import():
"""
Add utility code for mass import from ldap.
"""
"""
Add utility code for mass import from ldap.
"""
from
django_auth_ldap.backend
import
LDAPBackend
,
_LDAPUser
# noqa
from
django_auth_ldap.backend
import
LDAPBackend
,
_LDAPUser
# noqa
P
erson
=
apps
.
get_model
(
"
core
"
,
"
Person
"
)
p
erson
=
apps
.
get_model
(
"
core
"
,
"
Person
"
)
# Abuse pre-configured search object as general LDAP interface
# Abuse pre-configured search object as general LDAP interface
backend
=
LDAPBackend
()
backend
=
LDAPBackend
()
...
@@ -338,11 +338,11 @@ def mass_ldap_import():
...
@@ -338,11 +338,11 @@ def mass_ldap_import():
if
created
or
get_site_preferences
()[
"
ldap__sync_on_update
"
]:
if
created
or
get_site_preferences
()[
"
ldap__sync_on_update
"
]:
try
:
try
:
with
transaction
.
atomic
():
with
transaction
.
atomic
():
person
=
ldap_sync_from_user
(
user
,
dn
,
attrs
)
person
_
=
ldap_sync_from_user
(
user
,
dn
,
attrs
)
except
Person
.
DoesNotExist
:
except
Person
.
DoesNotExist
:
logger
.
warn
(
f
"
No matching person for user
{
user
.
username
}
"
)
logger
.
warn
(
f
"
No matching person for user
{
user
.
username
}
"
)
continue
continue
except
P
erson
.
MultipleObjectsReturned
:
except
p
erson
_
.
MultipleObjectsReturned
:
logger
.
error
(
f
"
More than one matching person for user
{
user
.
username
}
"
)
logger
.
error
(
f
"
More than one matching person for user
{
user
.
username
}
"
)
continue
continue
except
(
DataError
,
IntegrityError
,
ValueError
)
as
e
:
except
(
DataError
,
IntegrityError
,
ValueError
)
as
e
:
...
...
This diff is collapsed.
Click to expand it.
Tom Teichler
@debdolph
mentioned in commit
bad8d096
·
4 years ago
mentioned in commit
bad8d096
mentioned in commit bad8d0968cec710d7856dad4a632798271bce0aa
Toggle commit list
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment