2022-01-11 11:02:46 +08:00
|
|
|
|
import functools
|
|
|
|
|
|
|
|
|
|
from flask import request
|
2022-01-12 12:13:21 +08:00
|
|
|
|
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer, SignatureExpired, BadSignature
|
2022-01-11 11:02:46 +08:00
|
|
|
|
|
2022-01-11 15:12:08 +08:00
|
|
|
|
from common.db import find_data
|
2022-01-11 11:02:46 +08:00
|
|
|
|
|
2022-01-12 12:13:21 +08:00
|
|
|
|
TOKEN_KEY = "P0eHym@&CbaLzWkq"
|
|
|
|
|
|
2022-01-11 11:02:46 +08:00
|
|
|
|
|
|
|
|
|
def api_secret(func):
|
|
|
|
|
"""
|
|
|
|
|
校验接口请求密钥
|
|
|
|
|
"""
|
2022-01-11 15:12:08 +08:00
|
|
|
|
secret = "EZgo9ykxrYuBMYnYmmKIh" # 接口密钥
|
|
|
|
|
|
2022-01-11 11:02:46 +08:00
|
|
|
|
@functools.wraps(func)
|
|
|
|
|
def internal(*args, **kwargs):
|
|
|
|
|
try:
|
|
|
|
|
token = request.headers.get('secret')
|
2022-01-11 15:12:08 +08:00
|
|
|
|
if token != secret:
|
2022-01-11 11:02:46 +08:00
|
|
|
|
return {"info": "接口密钥错误"}, 401
|
|
|
|
|
except Exception:
|
|
|
|
|
return {"info": "请求异常"}, 401
|
|
|
|
|
return func(*args, **kwargs)
|
|
|
|
|
return internal
|
2022-01-11 15:12:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def api_verification_code(func):
|
|
|
|
|
"""
|
|
|
|
|
检查验证码
|
|
|
|
|
"""
|
|
|
|
|
v_client = "tfse_admin" # 校验数据库服务
|
|
|
|
|
v_database = "用户" # 校验数据库名称
|
|
|
|
|
v_collection = "验证记录" # 校验数据表名称
|
|
|
|
|
|
|
|
|
|
@functools.wraps(func)
|
|
|
|
|
def internal(*args, **kwargs):
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
email = request.json['email']
|
2022-01-11 17:36:31 +08:00
|
|
|
|
vcode = request.json['vcode']
|
2022-01-11 15:12:08 +08:00
|
|
|
|
res = find_data(v_client, v_database, v_collection, {"email": email})
|
|
|
|
|
|
|
|
|
|
if len(res) == 0:
|
|
|
|
|
return {"info": "验证码错误"}, 401
|
|
|
|
|
|
2022-01-11 17:36:31 +08:00
|
|
|
|
if res[0]['vcode'] == vcode:
|
2022-01-11 15:12:08 +08:00
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
return {"info": "验证码错误"}, 401
|
|
|
|
|
|
|
|
|
|
except Exception:
|
|
|
|
|
return {"info": "请求异常"}, 401
|
|
|
|
|
|
|
|
|
|
return func(*args, **kwargs)
|
|
|
|
|
return internal
|
2022-01-11 17:36:31 +08:00
|
|
|
|
|
|
|
|
|
|
2022-01-12 12:13:21 +08:00
|
|
|
|
def verify_token(func):
|
|
|
|
|
"""
|
|
|
|
|
校验token
|
|
|
|
|
Returns:
|
|
|
|
|
返回token被解析后的值
|
|
|
|
|
"""
|
|
|
|
|
@functools.wraps(func)
|
|
|
|
|
def internal(*args, **kwargs):
|
|
|
|
|
try:
|
|
|
|
|
s = Serializer(TOKEN_KEY)
|
|
|
|
|
token = s.loads(request.headers.get('token'))
|
|
|
|
|
except TypeError:
|
|
|
|
|
return {"info": "参数错误"}, 401
|
|
|
|
|
except KeyError:
|
|
|
|
|
return {"info": "参数错误"}, 401
|
|
|
|
|
except BadSignature:
|
|
|
|
|
return {"info": "token错误"}, 401
|
|
|
|
|
except SignatureExpired:
|
|
|
|
|
return {"info": "token过期"}, 401
|
|
|
|
|
return func(*args, **kwargs, token=token)
|
|
|
|
|
return internal
|
|
|
|
|
|
|
|
|
|
|
2022-01-11 17:36:31 +08:00
|
|
|
|
def create_token(param):
|
|
|
|
|
"""
|
|
|
|
|
创建token
|
|
|
|
|
Parameters:
|
|
|
|
|
param: 传入参数,用于创建token
|
|
|
|
|
Returns:
|
|
|
|
|
token: 用户访问令牌
|
|
|
|
|
"""
|
|
|
|
|
token_expiration = 14400
|
|
|
|
|
|
2022-01-12 12:13:21 +08:00
|
|
|
|
s = Serializer(TOKEN_KEY, expires_in=token_expiration)
|
2022-01-11 17:36:31 +08:00
|
|
|
|
token = '' + s.dumps(param).decode('ascii')
|
|
|
|
|
return token
|