apis.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import time
  2. import requests
  3. from flask import make_response, request, abort
  4. from flask_restful import Resource
  5. from app.configs import config
  6. def verify_token(token, servertype):
  7. if token not in config.built_in_token or token not in config.token_dict: # 不是内置token请求oauth或不在字记录典里请求oauth
  8. # token ,记录token,token为key,时间错为value
  9. validate_token_rep = requests.post('http://%s/oauth/api/user/getUserByToken' % config.OAUTH_HOST,
  10. headers={'token': token},
  11. data={'strUrl': servertype, 'serviceId': 8})
  12. elif time.time() > config.token_dict.get(token) + 172800:
  13. # token在字典里,判断token是否超过48小时,超过删除token请求oauth。记录token,token为key,时间错为value
  14. config.token_dict.pop(token)
  15. validate_token_rep = requests.post('http://%s/oauth/api/user/getUserByToken' % config.OAUTH_HOST,
  16. headers={'token': token},
  17. data={'strUrl': servertype, 'serviceId': 8}
  18. )
  19. return validate_token_rep.json()
  20. class AgentApi(Resource):
  21. def get(self, path):
  22. args = request.args.to_dict()
  23. try:
  24. token = args.pop('token')
  25. servertype = args.pop('servertype')
  26. validate_token_rep = verify_token(token, servertype)
  27. if validate_token_rep.get('code') != 200:
  28. return validate_token_rep
  29. config.token_dict[token] = time.time()
  30. # 替换ip转发请求
  31. rep = requests.get('{server}/{path}'.format(server=config.ServerConfig.get(servertype), path=path),
  32. params=args)
  33. response = make_response(rep.content)
  34. response.headers['Content-Type'] = rep.headers.get('Content-Type')
  35. return response
  36. except KeyError:
  37. abort(418)
  38. class MapServer(Resource):
  39. def get(self):
  40. args = request.args.to_dict()
  41. try:
  42. token = args.pop('token')
  43. servertype = args.pop('servertype')
  44. validate_token_rep = verify_token(token, servertype)
  45. if validate_token_rep.get('code') != 200:
  46. return validate_token_rep
  47. # 替换ip转发请求
  48. rep = requests.get(config.ServerConfig.get(servertype), params=args)
  49. response = make_response(rep.text)
  50. response.headers['Content-Type'] = 'application/javascript;charset=UTF-8'
  51. return response
  52. except KeyError:
  53. abort(418)