Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gjl2004yn
jumpserver
提交
a62a2178
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,发现更多精彩内容 >>
提交
a62a2178
编写于
10月 15, 2016
作者:
baltery
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add user backend
上级
f038423c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
69 addition
and
4 deletion
+69
-4
apps/common/utils.py
apps/common/utils.py
+22
-4
apps/users/backends.py
apps/users/backends.py
+47
-0
未找到文件。
apps/common/utils.py
浏览文件 @
a62a2178
...
...
@@ -7,15 +7,19 @@ from itertools import chain
import
string
import
logging
from
itsdangerous
import
TimedJSONWebSignatureSerializer
from
itsdangerous
import
Signer
,
TimedJSONWebSignatureSerializer
,
JSONWebSignatureSerializer
,
TimestampSigner
,
\
BadSignature
,
SignatureExpired
from
django.shortcuts
import
reverse
as
dj_reverse
from
django.conf
import
settings
from
django.core
import
signing
from
django.utils
import
timezone
SECRET_KEY
=
settings
.
SECRET_KEY
SIGNER
=
TimestampSigner
(
SECRET_KEY
)
def
reverse
(
viewname
,
urlconf
=
None
,
args
=
None
,
kwargs
=
None
,
current_app
=
None
,
external
=
False
):
url
=
dj_reverse
(
viewname
,
urlconf
=
urlconf
,
args
=
args
,
kwargs
=
kwargs
,
current_app
=
current_app
)
def
reverse
(
view_name
,
urlconf
=
None
,
args
=
None
,
kwargs
=
None
,
current_app
=
None
,
external
=
False
):
url
=
dj_reverse
(
view_name
,
urlconf
=
urlconf
,
args
=
args
,
kwargs
=
kwargs
,
current_app
=
current_app
)
if
external
:
url
=
settings
.
SITE_URL
.
strip
(
'/'
)
+
url
...
...
@@ -44,13 +48,27 @@ def decrypt(*args, **kwargs):
return
''
def
sign
(
value
):
return
SIGNER
.
sign
(
value
)
def
unsign
(
value
,
max_age
=
3600
):
try
:
return
SIGNER
.
unsign
(
value
,
max_age
=
max_age
)
except
(
BadSignature
,
SignatureExpired
):
return
None
def
date_expired_default
():
try
:
years
=
int
(
settings
.
CONFIG
.
DEFAULT_EXPIRED_YEARS
)
except
TypeError
:
years
=
70
return
timezone
.
now
()
+
timezone
.
timedelta
(
days
=
365
*
years
)
return
timezone
.
now
()
+
timezone
.
timedelta
(
days
=
365
*
years
)
def
sign
(
value
):
return
SIGNER
.
sign
(
value
)
def
combine_seq
(
s1
,
s2
,
callback
=
None
):
...
...
apps/users/backends.py
0 → 100644
浏览文件 @
a62a2178
# -*- coding: utf-8 -*-
#
from
rest_framework
import
authentication
,
exceptions
from
django.utils.translation
import
ugettext
as
_
from
common.utils
import
unsign
from
.models
import
User
class
APPSignAuthentication
(
authentication
.
BaseAuthentication
):
keyword
=
'Sign'
model
=
User
def
authenticate
(
self
,
request
):
auth
=
authentication
.
get_authorization_header
(
request
).
split
()
if
not
auth
or
auth
[
0
].
lower
()
!=
self
.
keyword
.
lower
().
encode
():
return
None
if
len
(
auth
)
==
1
:
msg
=
_
(
'Invalid sign header. No credentials provided.'
)
raise
exceptions
.
AuthenticationFailed
(
msg
)
elif
len
(
auth
)
>
2
:
msg
=
_
(
'Invalid sign header. Sign string should not contain spaces.'
)
raise
exceptions
.
AuthenticationFailed
(
msg
)
try
:
sign
=
auth
[
1
].
decode
()
except
UnicodeError
:
msg
=
_
(
'Invalid token header. Sign string should not contain invalid characters.'
)
raise
exceptions
.
AuthenticationFailed
(
msg
)
return
self
.
authenticate_credentials
(
sign
)
def
authenticate_credentials
(
self
,
key
):
try
:
token
=
self
.
model
.
objects
.
select_related
(
'user'
).
get
(
key
=
key
)
except
self
.
model
.
DoesNotExist
:
raise
exceptions
.
AuthenticationFailed
(
_
(
'Invalid token.'
))
if
not
token
.
user
.
is_active
:
raise
exceptions
.
AuthenticationFailed
(
_
(
'User inactive or deleted.'
))
if
__name__
==
'__main__'
:
pass
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录