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
94cf66c3
Verified
Commit
94cf66c3
authored
4 years ago
by
Tom Teichler
Browse files
Options
Downloads
Patches
Plain Diff
[Reformat] black
parent
3ed829b3
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
aleksis/apps/ldap/model_extensions.py
+2
-6
2 additions, 6 deletions
aleksis/apps/ldap/model_extensions.py
aleksis/apps/ldap/util/ldap_sync.py
+12
-32
12 additions, 32 deletions
aleksis/apps/ldap/util/ldap_sync.py
with
14 additions
and
38 deletions
aleksis/apps/ldap/model_extensions.py
+
2
−
6
View file @
94cf66c3
...
...
@@ -5,9 +5,5 @@ 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
"
),
null
=
True
,
blank
=
True
)
)
Person
.
field
(
ldap_dn
=
CharField
(
verbose_name
=
_
(
"
LDAP Distinguished Name
"
),
null
=
True
,
blank
=
True
)
)
Group
.
field
(
ldap_dn
=
CharField
(
verbose_name
=
_
(
"
LDAP Distinguished Name
"
),
null
=
True
,
blank
=
True
))
Person
.
field
(
ldap_dn
=
CharField
(
verbose_name
=
_
(
"
LDAP Distinguished Name
"
),
null
=
True
,
blank
=
True
))
This diff is collapsed.
Click to expand it.
aleksis/apps/ldap/util/ldap_sync.py
+
12
−
32
View file @
94cf66c3
...
...
@@ -76,9 +76,7 @@ def update_dynamic_preferences():
class
_GeneratedPreference
(
StringPreference
):
section
=
section_ldap
name
=
setting_name
verbose_name
=
_
(
f
"
LDAP field for
{
field
.
verbose_name
}
on
{
model
.
_meta
.
label
}
"
)
verbose_name
=
_
(
f
"
LDAP field for
{
field
.
verbose_name
}
on
{
model
.
_meta
.
label
}
"
)
required
=
False
default
=
""
...
...
@@ -246,9 +244,7 @@ def ldap_sync_from_groups(group_infos):
for
ldap_group
in
tqdm
(
group_infos
,
desc
=
"
Sync. group infos
"
,
**
TQDM_DEFAULTS
):
# Skip group if one of the name fields is missing
# FIXME Throw exceptions and catch outside
sync_field_short_name
=
get_site_preferences
()[
"
ldap__group_sync_field_short_name
"
]
sync_field_short_name
=
get_site_preferences
()[
"
ldap__group_sync_field_short_name
"
]
if
sync_field_short_name
not
in
ldap_group
[
1
]:
logger
.
error
(
f
"
LDAP group with DN
{
ldap_group
[
0
]
}
does not have field
{
sync_field_short_name
}
"
...
...
@@ -264,9 +260,7 @@ def ldap_sync_from_groups(group_infos):
# Apply regex replace from config
short_name
=
apply_templates
(
ldap_group
[
1
][
get_site_preferences
()[
"
ldap__group_sync_field_short_name
"
]][
0
],
ldap_group
[
1
][
get_site_preferences
()[
"
ldap__group_sync_field_short_name
"
]][
0
],
get_site_preferences
()[
"
ldap__group_sync_field_short_name_re
"
],
get_site_preferences
()[
"
ldap__group_sync_field_short_name_replace
"
],
)
...
...
@@ -288,15 +282,11 @@ def ldap_sync_from_groups(group_infos):
defaults
=
{
"
short_name
"
:
short_name
,
"
name
"
:
name
},
)
except
IntegrityError
as
e
:
logger
.
error
(
f
"
Integrity error while trying to import LDAP group
{
ldap_group
[
0
]
}
:
\n
{
e
}
"
)
logger
.
error
(
f
"
Integrity error while trying to import LDAP group
{
ldap_group
[
0
]
}
:
\n
{
e
}
"
)
continue
else
:
status
=
"
Created
"
if
created
else
"
Updated
"
value
=
ldap_group
[
1
][
get_site_preferences
()[
"
ldap__group_sync_field_name
"
]
][
0
]
value
=
ldap_group
[
1
][
get_site_preferences
()[
"
ldap__group_sync_field_name
"
]][
0
]
logger
.
info
(
f
"
{
status
}
LDAP group
{
value
}
for Django group
{
name
}
"
)
group_objects
.
append
(
group
)
...
...
@@ -321,14 +311,12 @@ def mass_ldap_import():
group_objects
=
ldap_sync_from_groups
(
ldap_groups
)
# Guess LDAP username field from user filter
uid_field
=
re
.
search
(
r
"
([a-zA-Z]+)=%\(user\)s
"
,
backend
.
settings
.
USER_SEARCH
.
filterstr
)
.
group
(
1
)
uid_field
=
re
.
search
(
r
"
([a-zA-Z]+)=%\(user\)s
"
,
backend
.
settings
.
USER_SEARCH
.
filterstr
).
group
(
1
)
# Synchronise user data for all found users
ldap_users
=
backend
.
settings
.
USER_SEARCH
.
execute
(
connection
,
{
"
user
"
:
"
*
"
},
escape
=
False
)
ldap_users
=
backend
.
settings
.
USER_SEARCH
.
execute
(
connection
,
{
"
user
"
:
"
*
"
},
escape
=
False
)
for
dn
,
attrs
in
tqdm
(
ldap_users
,
desc
=
"
Sync. user infos
"
,
**
TQDM_DEFAULTS
):
uid
=
attrs
[
uid_field
][
0
]
...
...
@@ -354,9 +342,7 @@ def mass_ldap_import():
logger
.
error
(
f
"
More than one matching person for user
{
user
.
username
}
"
)
continue
except
(
DataError
,
IntegrityError
,
ValueError
)
as
e
:
logger
.
error
(
f
"
Data error while synchronising user
{
user
.
username
}
:
\n
{
e
}
"
)
logger
.
error
(
f
"
Data error while synchronising user
{
user
.
username
}
:
\n
{
e
}
"
)
continue
else
:
logger
.
info
(
f
"
Successfully imported user
{
uid
}
"
)
...
...
@@ -373,9 +359,7 @@ def mass_ldap_import():
**
TQDM_DEFAULTS
,
):
dn
,
attrs
=
ldap_group
ldap_members
=
(
[
_
.
lower
()
for
_
in
attrs
[
member_attr
]]
if
member_attr
in
attrs
else
[]
)
ldap_members
=
[
_
.
lower
()
for
_
in
attrs
[
member_attr
]]
if
member_attr
in
attrs
else
[]
if
member_attr
.
lower
()
==
"
memberUid
"
:
members
=
Person
.
objects
.
filter
(
user__username__in
=
ldap_members
)
...
...
@@ -383,11 +367,7 @@ def mass_ldap_import():
members
=
Person
.
objects
.
filter
(
ldap_dn__in
=
ldap_members
)
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
"
:
owners
=
Person
.
objects
.
filter
(
user__username__in
=
ldap_owners
)
elif
get_site_preferences
()[
"
ldap__group_sync_owner_attr_type
"
]
==
"
dn
"
:
...
...
This diff is collapsed.
Click to expand it.
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