提交所有代码到 qiaoxinjiu 分支
This commit is contained in:
Binary file not shown.
@@ -16,10 +16,22 @@ from common.sqlSession import SqlSession
|
||||
|
||||
TOKEN_PREFIX = 'effekt:token:'
|
||||
TOKEN_CONTEXT_PREFIX = 'effekt:token:ctx:'
|
||||
REFRESH_TOKEN_PREFIX = 'effekt:refresh:'
|
||||
TOKEN_EXPIRE_SECONDS = 7200
|
||||
REFRESH_TOKEN_EXPIRE_SECONDS = 86400 * 7
|
||||
TOKEN_REFRESH_THRESHOLD_SECONDS = 1800
|
||||
TOKEN_CONTEXT_EXPIRE_SECONDS = 300
|
||||
WHITELIST_PATHS = ['/it/api/auth/login', '/it/api/auth/register']
|
||||
WHITELIST_PATHS = [
|
||||
'/it/api/auth/login',
|
||||
'/it/api/auth/register',
|
||||
'/it/api/auth/refresh',
|
||||
'/it/api/automation/execution/case/pull',
|
||||
'/it/api/automation/execution/queued',
|
||||
'/it/api/automation/execution/start',
|
||||
'/it/api/automation/execution/case/result',
|
||||
'/it/api/automation/execution/finish',
|
||||
'/it/api/automation/execution/abort'
|
||||
]
|
||||
|
||||
_redis_client = redis.from_url(REDIS_URL, decode_responses=True)
|
||||
_redis_client.ping()
|
||||
@@ -32,6 +44,34 @@ def create_token(user_id):
|
||||
return token, TOKEN_EXPIRE_SECONDS
|
||||
|
||||
|
||||
def create_refresh_token(user_id):
|
||||
refresh_token = uuid.uuid4().hex
|
||||
key = REFRESH_TOKEN_PREFIX + refresh_token
|
||||
_redis_client.setex(key, REFRESH_TOKEN_EXPIRE_SECONDS, str(user_id))
|
||||
return refresh_token, REFRESH_TOKEN_EXPIRE_SECONDS
|
||||
|
||||
|
||||
def validate_refresh_token(refresh_token):
|
||||
key = REFRESH_TOKEN_PREFIX + refresh_token
|
||||
user_id = _redis_client.get(key)
|
||||
if user_id:
|
||||
return int(user_id)
|
||||
return None
|
||||
|
||||
|
||||
def revoke_refresh_token(refresh_token):
|
||||
if refresh_token:
|
||||
_redis_client.delete(REFRESH_TOKEN_PREFIX + refresh_token)
|
||||
|
||||
|
||||
def revoke_all_refresh_tokens(user_id):
|
||||
keys = _redis_client.keys(REFRESH_TOKEN_PREFIX + '*')
|
||||
for key in keys:
|
||||
stored_user_id = _redis_client.get(key)
|
||||
if stored_user_id == str(user_id):
|
||||
_redis_client.delete(key)
|
||||
|
||||
|
||||
def get_token_ttl(token):
|
||||
return _redis_client.ttl(TOKEN_PREFIX + token)
|
||||
|
||||
@@ -71,10 +111,10 @@ def login_required(func):
|
||||
def wrapper(*args, **kwargs):
|
||||
token = parse_token()
|
||||
if not token:
|
||||
return ApiResponse.build_failure(40004, msg='未登录或缺少token!')
|
||||
return ApiResponse.build_failure(40001, msg='缺少token!')
|
||||
user_id = get_current_user_id(token)
|
||||
if not user_id:
|
||||
return ApiResponse.build_failure(40004, msg='token无效或已过期!')
|
||||
return ApiResponse.build_failure(451, msg='token无效或已过期!')
|
||||
session = None
|
||||
try:
|
||||
token_context = get_token_context(token)
|
||||
@@ -133,10 +173,10 @@ def permission_required(permission_code):
|
||||
@wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
if not getattr(g, 'current_user_id', None):
|
||||
return ApiResponse.build_failure(40004, msg='未登录或缺少token!')
|
||||
return ApiResponse.build_failure(40001, msg='缺少token!')
|
||||
current_permission_codes = getattr(g, 'current_permission_codes', [])
|
||||
if not has_permission(permission_code, current_permission_codes):
|
||||
return ApiResponse.build_failure(40004, msg='无权限访问该接口!')
|
||||
return ApiResponse.build_failure(40003, msg='无权限访问该接口!')
|
||||
return func(*args, **kwargs)
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
Reference in New Issue
Block a user