2 from flask import Flask
3 from flask import Response
4 from flask.globals import request
5 from flask.helpers import url_for
9 from tic import command
10 from tic.utils import error
13 #from flask_cors import CORS
21 <title>TIC-Core web server</title>
22 <h1> TIC-Core web server is working<h1>
25 @app.route('/analysis', methods=['GET', 'POST'])
28 logger = logging.getLogger(__name__)
31 if request.method == 'GET':
32 repo_list = request.args.getlist('repos')
33 recipe_list = request.args.getlist('recipes')
35 logger.info('%s - %s %s : data=%s' % (request.remote_addr, request.method, request.path, request.data))
36 repo_info = json.loads(request.data)
37 if 'repos' in repo_info:
38 repo_list = repo_info['repos']
39 if 'recipes' in repo_info:
40 recipe_list = repo_info['recipes']
41 view_data = command.analyze(repo_list, recipe_list)
42 resp = makeresponse(view_data, None)
43 except error.TICError as err:
45 resp = makeresponse(str(err), err)
46 except ValueError as ve:
48 resp = makeresponse(str(ve), ve)
49 except Exception as ex:
51 resp = makeresponse(str(ex), ex)
56 def start(port_num=59001):
57 # cryptographic random generator
58 app.secret_key = os.urandom(24)
60 with app.test_request_context():
61 print(url_for('index'))
62 print(url_for('anlayze'))
63 app.run(host='0.0.0.0', port=port_num)
66 def makeresponse(data, err):
69 if isinstance(err, error.TICError) or isinstance(err, ValueError):
70 status = 400 # Bad Request
71 elif isinstance(err, Exception):
72 status = 500 # Internal Server Error
73 res_body = json.dumps(ResultInfo('false', None, data)._asdict())
75 res_body = json.dumps(ResultInfo('true', data, None)._asdict())
77 resp = Response(status=status,
78 mimetype='application/json',
83 ResultInfoType = collections.namedtuple('ResultInfo', 'result, data, message')
84 def ResultInfo(result='false', data=None, message=None):
85 return ResultInfoType(result, data, message)
87 if __name__ == '__main__':