|
@@ -1,4 +1,4 @@
|
|
|
-import mimetypes
|
|
|
+import time
|
|
|
|
|
|
import requests
|
|
|
from flask import make_response, request, abort
|
|
@@ -7,29 +7,65 @@ from flask_restful import Resource
|
|
|
from app.configs import config
|
|
|
|
|
|
|
|
|
-class AgentApi(Resource):
|
|
|
+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
|
|
|
+
|
|
|
+ args = request.args.to_dict()
|
|
|
+
|
|
|
try:
|
|
|
token = args.pop('token')
|
|
|
+ servertype = args.pop('servertype')
|
|
|
|
|
|
- # token 在配置里则不验证,48小时删除配置里的token
|
|
|
- validate_token_rep = requests.get('http://%s/oauth/api/user/validateToken' % config.OAUTH_HOST,
|
|
|
- headers={'token': token}).json()
|
|
|
+ validate_token_rep = verify_token(token, servertype)
|
|
|
if validate_token_rep.get('code') != 200:
|
|
|
return validate_token_rep
|
|
|
|
|
|
- # 请求nginx
|
|
|
- nginx_rep = requests.get('http://%s/%s' % (config.NGINX_HOST, path), params=args if len(args) > 0 else None)
|
|
|
+ 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(nginx_rep.content)
|
|
|
- filename = path.split('/')[-1]
|
|
|
- mime_type = mimetypes.guess_type(filename)[0]
|
|
|
- if mime_type is None:
|
|
|
- mime_type = 'application/octet-stream'
|
|
|
- response.headers['Content-Type'] = mime_type
|
|
|
- response.headers['Content-Disposition'] = 'attachment; filename={}'.format(filename.encode().decode('latin-1'))
|
|
|
+ response = make_response(rep.text)
|
|
|
+ response.headers['Content-Type'] = 'application/javascript;charset=UTF-8'
|
|
|
return response
|
|
|
|
|
|
except KeyError:
|