Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gjl2004yn
jumpserver
提交
c8cade62
J
jumpserver
项目概览
gjl2004yn
/
jumpserver
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jumpserver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c8cade62
编写于
10月 09, 2019
作者:
B
BaiJiangJie
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Update] 优化 LDAP 导入/搜索 逻辑
上级
74ab311d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
32 addition
and
13 deletion
+32
-13
apps/settings/api.py
apps/settings/api.py
+4
-3
apps/settings/utils.py
apps/settings/utils.py
+28
-10
未找到文件。
apps/settings/api.py
浏览文件 @
c8cade62
...
...
@@ -101,10 +101,11 @@ class LDAPUserListApi(generics.ListAPIView):
def
get_queryset
(
self
):
if
hasattr
(
self
,
'swagger_fake_view'
):
return
[]
util
=
LDAPUtil
()
q
=
self
.
request
.
query_params
.
get
(
'search'
)
try
:
users
=
util
.
search_user_items
()
util
=
LDAPUtil
()
extra_filter
=
util
.
construct_extra_filter
(
util
.
SEARCH_FIELD_ALL
,
q
)
users
=
util
.
search_user_items
(
extra_filter
)
except
Exception
as
e
:
users
=
[]
logger
.
error
(
e
)
...
...
apps/settings/utils.py
浏览文件 @
c8cade62
...
...
@@ -22,6 +22,9 @@ class LDAPOUGroupException(Exception):
class
LDAPUtil
:
_conn
=
None
SEARCH_FIELD_ALL
=
'all'
SEARCH_FIELD_USERNAME
=
'username'
def
__init__
(
self
,
use_settings_config
=
True
,
server_uri
=
None
,
bind_dn
=
None
,
password
=
None
,
use_ssl
=
None
,
search_ougroup
=
None
,
search_filter
=
None
,
attr_map
=
None
,
auth_ldap
=
None
):
...
...
@@ -84,7 +87,8 @@ class LDAPUtil:
def
_search_user_items_ou
(
self
,
search_ou
,
extra_filter
=
None
,
cookie
=
None
):
search_filter
=
self
.
search_filter
%
{
"user"
:
"*"
}
if
extra_filter
:
search_filter
=
'(&({})({}))'
.
format
(
search_filter
,
extra_filter
)
search_filter
=
'(&{}{})'
.
format
(
search_filter
,
extra_filter
)
ok
=
self
.
connection
.
search
(
search_ou
,
search_filter
,
attributes
=
list
(
self
.
attr_map
.
values
()),
...
...
@@ -111,14 +115,10 @@ class LDAPUtil:
cookie
=
self
.
connection
.
result
[
'controls'
][
'1.2.840.113556.1.4.319'
][
'value'
][
'cookie'
]
return
cookie
def
search_user_items
(
self
,
q
=
None
):
def
search_user_items
(
self
,
extra_filter
=
None
):
user_items
=
[]
logger
.
info
(
"Search user items"
)
extra_filter
=
''
if
q
:
for
attr
in
self
.
attr_map
.
values
():
extra_filter
+=
'({}={})'
.
format
(
attr
,
q
)
extra_filter
=
'(|{})'
.
format
(
extra_filter
)
for
search_ou
in
str
(
self
.
search_ougroup
).
split
(
"|"
):
logger
.
info
(
"Search user search ou: {}"
.
format
(
search_ou
))
_user_items
=
self
.
_search_user_items_ou
(
search_ou
,
extra_filter
=
extra_filter
)
...
...
@@ -130,10 +130,28 @@ class LDAPUtil:
logger
.
info
(
"Search user items end"
)
return
user_items
def
construct_extra_filter
(
self
,
field
,
q
):
if
not
q
:
return
None
extra_filter
=
''
if
field
==
self
.
SEARCH_FIELD_ALL
:
for
attr
in
self
.
attr_map
.
values
():
extra_filter
+=
'({}={})'
.
format
(
attr
,
q
)
extra_filter
=
'(|{})'
.
format
(
extra_filter
)
return
extra_filter
if
field
==
self
.
SEARCH_FIELD_USERNAME
and
isinstance
(
q
,
list
):
attr
=
self
.
attr_map
.
get
(
'username'
)
for
username
in
q
:
extra_filter
+=
'({}={})'
.
format
(
attr
,
username
)
extra_filter
=
'(|{})'
.
format
(
extra_filter
)
return
extra_filter
def
search_filter_user_items
(
self
,
username_list
):
user_items
=
self
.
search_user_items
()
if
username_list
:
user_items
=
[
u
for
u
in
user_items
if
u
[
'username'
]
in
username_list
]
extra_filter
=
self
.
construct_extra_filter
(
self
.
SEARCH_FIELD_USERNAME
,
username_list
)
user_items
=
self
.
search_user_items
(
extra_filter
)
return
user_items
@
staticmethod
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录