import time import requests from flask import make_response, request, abort from flask_restful import Resource from app.configs import config def verify_token(token, servertype): if token not in config.built_in_token or token not in config.token_dict: # 不是内置token请求oauth或不在字记录典里请求oauth # token ,记录token,token为key,时间错为value validate_token_rep = requests.post('http://%s/oauth/api/user/getUserByToken' % config.OAUTH_HOST, headers={'token': token}, data={'strUrl': servertype, 'serviceId': 8}) elif time.time() > config.token_dict.get(token) + 172800: # token在字典里,判断token是否超过48小时,超过删除token请求oauth。记录token,token为key,时间错为value config.token_dict.pop(token) validate_token_rep = requests.post('http://%s/oauth/api/user/getUserByToken' % config.OAUTH_HOST, headers={'token': token}, data={'strUrl': servertype, 'serviceId': 8} ) return validate_token_rep.json() class AgentApi(Resource): def get(self, path): args = request.args.to_dict() try: token = args.pop('token') servertype = args.pop('servertype') validate_token_rep = verify_token(token, servertype) if validate_token_rep.get('code') != 200: return validate_token_rep config.token_dict[token] = time.time() # 替换ip转发请求 rep = requests.get('{server}/{path}'.format(server=config.ServerConfig.get(servertype), path=path), params=args) response = make_response(rep.content) response.headers['Content-Type'] = rep.headers.get('Content-Type') return response except KeyError: abort(418) class MapServer(Resource): def get(self): args = request.args.to_dict() try: token = args.pop('token') servertype = args.pop('servertype') validate_token_rep = verify_token(token, servertype) if validate_token_rep.get('code') != 200: return validate_token_rep # 替换ip转发请求 rep = requests.get(config.ServerConfig.get(servertype), params=args) response = make_response(rep.text) response.headers['Content-Type'] = 'application/javascript;charset=UTF-8' return response except KeyError: abort(418)