Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
douban-api-proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
douban-api-proxy
Commits
56505457
Commit
56505457
authored
Dec 03, 2020
by
Ozzieisaacs
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'ldap_import/feat/ldap-import-user-identifier' into master
# Conflicts: # cps/admin.py
parents
5930c6d5
1ca45838
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
67 additions
and
17 deletions
+67
-17
admin.py
cps/admin.py
+15
-2
config_sql.py
cps/config_sql.py
+1
-0
config_edit.html
cps/templates/config_edit.html
+14
-0
web.py
cps/web.py
+37
-15
No files found.
cps/admin.py
View file @
56505457
...
...
@@ -566,6 +566,7 @@ def _configuration_ldap_helper(to_save, gdriveError):
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_user_object"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_group_object_filter"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_group_members_field"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_member_user_object"
)
reboot_required
|=
_config_checkbox
(
to_save
,
"config_ldap_openldap"
)
reboot_required
|=
_config_int
(
to_save
,
"config_ldap_encryption"
)
reboot_required
|=
_config_string
(
to_save
,
"config_ldap_cacert_path"
)
...
...
@@ -608,14 +609,26 @@ def _configuration_ldap_helper(to_save, gdriveError):
gdriveError
)
if
config
.
config_ldap_user_object
.
count
(
"("
)
!=
config
.
config_ldap_user_object
.
count
(
")"
):
return
reboot_required
,
_configuration_result
(
_
(
'LDAP User Object Filter Has Unmatched Parenthesis'
),
gdriveError
)
gdriveError
)
if
to_save
[
"ldap_import_user_filter"
]
==
'0'
:
config
.
config_ldap_member_user_object
=
""
else
:
if
config
.
config_ldap_member_user_object
.
count
(
"
%
s"
)
!=
1
:
return
reboot_required
,
\
_configuration_result
(
_
(
'LDAP Member User Filter needs to Have One "
%
s" Format Identifier'
),
gdriveError
)
if
config
.
config_ldap_member_user_object
.
count
(
"("
)
!=
config
.
config_ldap_member_user_object
.
count
(
")"
):
return
reboot_required
,
_configuration_result
(
_
(
'LDAP Member User Filter Has Unmatched Parenthesis'
),
gdriveError
)
if
config
.
config_ldap_cacert_path
or
config
.
config_ldap_cert_path
or
config
.
config_ldap_key_path
:
if
not
(
os
.
path
.
isfile
(
config
.
config_ldap_cacert_path
)
and
os
.
path
.
isfile
(
config
.
config_ldap_cert_path
)
and
os
.
path
.
isfile
(
config
.
config_ldap_key_path
)):
return
reboot_required
,
\
_configuration_result
(
_
(
'LDAP CACertificate, Certificate or Key Location is not Valid, Please Enter Correct Path'
),
_configuration_result
(
_
(
'LDAP CACertificate, Certificate or Key Location is not Valid, '
'Please Enter Correct Path'
),
gdriveError
)
return
reboot_required
,
None
...
...
cps/config_sql.py
View file @
56505457
...
...
@@ -113,6 +113,7 @@ class _Settings(_Base):
config_ldap_key_path
=
Column
(
String
,
default
=
""
)
config_ldap_dn
=
Column
(
String
,
default
=
'dc=example,dc=org'
)
config_ldap_user_object
=
Column
(
String
,
default
=
'uid=
%
s'
)
config_ldap_member_user_object
=
Column
(
String
,
default
=
''
)
#
config_ldap_openldap
=
Column
(
Boolean
,
default
=
True
)
config_ldap_group_object_filter
=
Column
(
String
,
default
=
'(&(objectclass=posixGroup)(cn=
%
s))'
)
config_ldap_group_members_field
=
Column
(
String
,
default
=
'memberUid'
)
...
...
cps/templates/config_edit.html
View file @
56505457
...
...
@@ -331,6 +331,20 @@
<label
for=
"config_ldap_group_members_field"
>
{{_('LDAP Group Members Field')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_group_members_field"
name=
"config_ldap_group_members_field"
value=
"{% if config.config_ldap_group_members_field != None %}{{ config.config_ldap_group_members_field }}{% endif %}"
autocomplete=
"off"
>
</div>
<div
class=
"form-group"
>
<label
for=
"ldap_import_user_filter"
>
{{_('LDAP Authentication')}}
</label>
<select
name=
"ldap_import_user_filter"
id=
"ldap_import_user_filter"
class=
"form-control"
data-control=
"ldap_member_user_object"
>
<option
value=
"0"
{%
if
config
.
config_ldap_member_user_object =
=
""
%}
selected
{%
endif
%}
>
{{ _('Autodetect') }}
</option>
<option
value=
"1"
{%
if
config
.
config_ldap_member_user_object
%}
selected
{%
endif
%}
>
{{ _('Custom Filter') }}
</option>
</select>
</div>
<div
data-related=
"ldap_member_user_object-1"
>
<div
class=
"form-group"
>
<label
for=
"config_ldap_member_user_object"
>
{{_('LDAP Member User Filter')}}
</label>
<input
type=
"text"
class=
"form-control"
id=
"config_ldap_member_user_object"
name=
"config_ldap_member_user_object"
value=
"{% if config.config_ldap_member_user_object != None %}{{ config.config_ldap_member_user_object }}{% endif %}"
autocomplete=
"off"
>
</div>
</div>
</div>
{% endif %}
{% if feature_support['oauth'] %}
...
...
cps/web.py
View file @
56505457
...
...
@@ -323,31 +323,34 @@ def import_ldap_users():
showtext
[
'text'
]
=
_
(
u'Error: No user returned in response of LDAP server'
)
return
json
.
dumps
(
showtext
)
imported
=
0
for
username
in
new_users
:
user
=
username
.
decode
(
'utf-8'
)
if
'='
in
user
:
match
=
re
.
search
(
"([a-zA-Z0-9-]+)=
%
s"
,
config
.
config_ldap_user_object
,
re
.
IGNORECASE
|
re
.
UNICODE
)
if
match
:
match_filter
=
match
.
group
(
1
)
match
=
re
.
search
(
match_filter
+
"=([
\
d
\
s
\
w-]+)"
,
user
,
re
.
IGNORECASE
|
re
.
UNICODE
)
if
match
:
user
=
match
.
group
(
1
)
# if member object field is empty take user object as filter
try
:
if
config
.
config_ldap_member_user_object
:
user_identifier
=
extract_user_identifier
(
user
,
config
.
config_ldap_member_user_object
)
else
:
log
.
warning
(
"Could Not Parse LDAP User:
%
s"
,
user
)
continue
e
ls
e
:
log
.
warning
(
"Could Not Parse LDAP User:
%
s"
,
user
)
user_identifier
=
extract_user_identifier
(
user
,
config
.
config_ldap_user_object
)
e
xcept
Exception
as
e
:
log
.
warning
(
e
)
continue
if
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
nickname
==
user
.
lower
())
.
first
():
log
.
warning
(
"LDAP User:
%
s Already in Database"
,
user
)
else
:
user_identifier
=
user
if
ub
.
session
.
query
(
ub
.
User
)
.
filter
(
ub
.
User
.
nickname
==
user_identifier
.
lower
())
.
first
():
log
.
warning
(
"LDAP User:
%
s Already in Database"
,
user_identifier
)
continue
user_data
=
services
.
ldap
.
get_object_details
(
user
=
user
,
user_data
=
services
.
ldap
.
get_object_details
(
user
=
user
_identifier
,
group
=
None
,
query_filter
=
None
,
dn_only
=
False
)
if
user_data
:
content
=
ub
.
User
()
content
.
nickname
=
user
# user_login_field = extract_dynamic_field_from_filter(user, config.config_ldap_user_object)
content
.
nickname
=
user_identifier
# user_data[user_login_field][0].decode('utf-8')
content
.
password
=
''
# dummy password which will be replaced by ldap one
if
'mail'
in
user_data
:
content
.
email
=
user_data
[
'mail'
][
0
]
.
decode
(
'utf-8'
)
...
...
@@ -365,6 +368,7 @@ def import_ldap_users():
ub
.
session
.
add
(
content
)
try
:
ub
.
session
.
commit
()
imported
+=
1
except
Exception
as
e
:
log
.
warning
(
"Failed to create LDAP user:
%
s -
%
s"
,
user
,
e
)
ub
.
session
.
rollback
()
...
...
@@ -373,10 +377,28 @@ def import_ldap_users():
log
.
warning
(
"LDAP User:
%
s Not Found"
,
user
)
showtext
[
'text'
]
=
_
(
u'At Least One LDAP User Not Found in Database'
)
if
not
showtext
:
showtext
[
'text'
]
=
_
(
u'
User Successfully Imported'
)
showtext
[
'text'
]
=
_
(
u'
{} User Successfully Imported'
.
format
(
imported
)
)
return
json
.
dumps
(
showtext
)
def
extract_user_data_from_field
(
user
,
field
):
match
=
re
.
search
(
field
+
"=([
\
d
\
s
\
w-]+)"
,
user
,
re
.
IGNORECASE
|
re
.
UNICODE
)
if
match
:
return
match
.
group
(
1
)
else
:
raise
Exception
(
"Could Not Parse LDAP User:
%
s"
,
user
)
# CN=Firstname LastName,OU=Laba,OU=...,DC=...,DC=...
# CN=user displayname,OU=ouname1,OU=ouname2,OU=ouname3,DC=domain,DC=domain
def
extract_user_identifier
(
user
,
filter
):
match
=
re
.
search
(
"([a-zA-Z0-9-]+)=
%
s"
,
filter
,
re
.
IGNORECASE
|
re
.
UNICODE
)
if
match
:
dynamic_field
=
match
.
group
(
1
)
else
:
raise
Exception
(
"Could Not Parse LDAP User:
%
s"
,
user
)
return
extract_user_data_from_field
(
user
,
dynamic_field
)
# ################################### data provider functions #########################################################
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment