def decode_token(): #token = 'JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9token.eyJleHAiOjE1NzI2NzU2NzksImlhdCI6MTU2NzQ5MTY3OSwiZGF0YSI6eyJhY2NvdW50IjoiMTU3NzEwMDA1ODciLCJsb2dpbl90aW1lIjoxNTY3NDkxNjc5fX0.kY-_AHxJ7IQ35NJ80IkTr9kDk-LV3wdc6tByVSIQ1KE' token = request.headers.get('Authorization') if not token: _json = request.json token = _json.get('token') token_arr = token.split(' ') if (not token_arr) or (token_arr[0] != "JWT") or (len(token_arr) != 2): return json.dumps(return_unsuccess('验证头信息不正确'), ensure_ascii=False) else: auth_token = token_arr[1] try: data = Auth.decode_jwt(auth_token).get('data') except Exception as e: return json.dumps(return_unsuccess('token解码失败: ' + str(e)), ensure_ascii=False) else: account = data.get('account') user_dao = UserDao() try: res = user_dao.query_by_account(account) if len(res) == 1: return json.dumps(return_success(UserDao.to_dict(res)), ensure_ascii=False) else: return json.dumps( (return_unsuccess("Error: No such user"))) except Exception as e: return json.dumps((return_unsuccess("Error: " + str(e))))
def query_self_permission(): res = json.loads(decode_token()).get('result') try: account = res[0]['account'] features = UserDao().query_permission(account) return jsonify(return_success(UserDao.to_permission_dict(features))) except Exception as e: return jsonify(return_unsuccess('Query Failed :' + str(e)))
def queryPermission(): account = request.json.get('account') try: res = UserDao().query_permission(account) return json.dumps(return_success(UserDao.to_permission_dict(res))) except Exception as e: return json.dumps( return_unsuccess('Query Permission Failed: ' + str(e)))
def bindUserWx(): _openid = request.json.get('openid') _account = request.json.get('account') user_dao = UserDao() try: user_dao.bind_wx(_account, _openid) return json.dumps(return_success("")) except Exception as e: return json.dumps(return_unsuccess("Bind Failed " + str(e)))
def queryUser(): _openid = request.json.get('openid') _account = request.json.get('account') user_dao = UserDao() res = user_dao.query_by_openid_account(_account, _openid) size = len(res) if size > 0: return json.dumps(return_success(UserDao.to_dict(res))) else: return json.dumps(return_unsuccess('Error: No such user'))
def check_account(): account = request.json.get('account') # 到数据库中进行查询 user_dao = UserDao() result = user_dao.query_by_account(account) size = len(result) if size == 0: return json.dumps(return_success("")) else: return json.dumps(return_unsuccess("Error Account Duplicate"))
def delPermissionByFeatures(): account = request.json.get('account') features = request.json.get('features') try: UserDao().del_permission_by_features(account, features) return json.dumps(return_success('ok')) except Exception as e: return json.dumps(return_unsuccess('Del Permission Failed: ' + str(e)))
def addPermissionByRole(): account = request.json.get('account') role = request.json.get('role') try: UserDao().add_permission_by_role(account, role) return json.dumps(return_success('ok')) except Exception as e: return json.dumps(return_unsuccess('Add Permission Failed: ' + str(e)))
def set_position(): _json = request.json account = _json.get("account") position = _json.get('position') try: UserDao().set_position(account, position) return json.dumps(return_success('Set position success')) except Exception as e: return json.dumps(return_unsuccess('Failed to set position ' + str(e)))
def userRegister(): _json = request.json account = _json.get("account") res = json.loads(check_account()) suc = res.get("success") if not suc: return jsonify(return_unsuccess("账户重复")) companyId = _json.get("companyId") password = _json.get("passwd") verification = _json.get("verification") # 验证码验证 true_veri = redis_store.get('veri' + account) print(true_veri) print(type(true_veri)) if not true_veri: return jsonify(return_unsuccess("验证码过期")) elif verification != true_veri: return jsonify(return_unsuccess("验证码错误")) # 验证码正确,删除对应键值 redis_store.delete('veri' + account) # 生成token login_time = int(time.time()) token = Auth.create_jwt({'account': account, 'login_time': login_time}) # 密码处理 store = base64.b64decode(password) store_in = binascii.hexlify(store) strpass = str(store_in, 'utf-8') print(strpass) try: user_dao = UserDao() user_dao.add(account, strpass, companyId) resp = return_success("") resp['token'] = token return jsonify(resp) except Exception as e: print(e) return json.dumps(return_unsuccess("注册失败"), ensure_ascii=False)
def check_permission(account): # 当前请求端点 pre_endpoint = str(request.endpoint) # 允许的功能 allow_feature = list(UserDao().query_permission(account)) # 转list # 全部的功能 all_feature = get_permission() flag = False for feature in all_feature['features']: for api in feature['api']: # feature 转tuple if api and pre_endpoint in api and ( feature['name'], ) in allow_feature: flag = True return flag
def test11(self): res = UserDao().del_permission_by_features('15771000587', ['Common', 'Data Analysis']) print(res)
def test10_1(self): res = UserDao().add_permission_by_role('13474709706', 'admin') print(res)
def test10(self): res = UserDao().query_all() for r in res: print(r[0]) res = UserDao().add_permission_by_role(r[0], 'admin') print(res)
def test1(self): userdao = UserDao() result = userdao.query_all() print(result) j = json.dumps(return_success(UserDao.to_dict(result))) print(j)
def __init__(self, db_host, db_port, db_name): client = pymongo.MongoClient(db_host, db_port) self.db = client[db_name] self.user_dao = UserDao(self.db) self.audit_dao = AuditDao(self.db) self.client_data_dao = ClientDataDao(self.db)
def login(): # token登陆 if request.method == 'GET': return decode_token() _json = request.json login_type = _json.get('type') account = _json.get('account') password = _json.get('passwd') web = _json.get('web') # 生成token login_time = int(time.time()) token = Auth.create_jwt({'account': account, 'login_time': login_time}) # 账号密码登陆 if login_type == 0: store_in = base64.b64decode(password) if not web: store_in = binascii.hexlify(store_in) strpass = str(store_in, 'utf-8') print(strpass) user_dao = UserDao() res = user_dao.query_check_login(account, strpass) size = len(res) if size == 1: resp = return_success(UserDao.to_dict(res)) resp['token'] = token return jsonify(resp) else: return jsonify(return_unsuccess('账号或密码错误')) # 验证码登陆 elif login_type == 1: true_veri = redis_store.get('veri' + account) if not true_veri: return jsonify(return_unsuccess("验证码过期")) elif password != true_veri: return jsonify(return_unsuccess("验证码错误")) res = json.loads(check_account()) suc = res.get("success") if not suc: print(res) redis_store.delete('veri' + account) user = UserDao().query_by_account(account) resp = return_success(UserDao.to_dict(user)) resp['token'] = token else: resp = return_unsuccess('Error: No such user') return jsonify(resp) # openid登陆 elif login_type == 2: openid = _json.get("openid") user_dao = UserDao() res = user_dao.query_by_openid_account(account, openid) size = len(res) if size == 1: resp = return_success(UserDao.to_dict(res)) token = Auth.create_jwt({ 'account': res[0][0], 'login_time': login_time }) resp['token'] = token return jsonify(resp) else: return jsonify(return_unsuccess('Error: No such user')) else: return jsonify(return_unsuccess('Error: Wrong Login Method'))