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
17 <title>TIC-Core web server</title>
18 <h1> TIC-Core web server is working<h1>
21 @app.route('/analysis', methods=['POST'])
24 logger = logging.getLogger(__name__)
25 logger.info('%s - %s %s : data=%s' % (request.remote_addr, request.method, request.path, request.data))
26 target_info = json.loads(request.data)
27 view_data = command.analyze(target_info.get('recipes'))
28 #view_data = command.analyze(None)
29 resp = makeresponse(view_data, None)
30 except error.TICError as err:
32 resp = makeresponse(str(err), err)
33 except ValueError as ve:
35 resp = makeresponse(str(ve), ve)
36 # except Exception as ex:
38 # resp = makeresponse(str(ex), ex)
42 @app.route('/imports', methods=['POST'])
45 logger = logging.getLogger(__name__)
46 logger.info('%s - %s %s : data=%s' % (request.remote_addr, request.method, request.path, request.data))
47 repo_info = json.loads(request.data)
48 view_data = command.imports(repo_info.get('recipes'))
49 resp = makeresponse(view_data, None)
50 except error.TICError as err:
52 resp = makeresponse(str(err), err)
53 except Exception as ex:
55 resp = makeresponse(str(ex), ex)
59 @app.route('/exports', methods=['POST'])
62 logger = logging.getLogger(__name__)
63 logger.info('%s - %s %s : data=%s' % (request.remote_addr, request.method, request.path, request.data))
64 exportInfo = json.loads(request.data)
65 export_type = request.args.get('format')
66 output = command.exports(export_type, exportInfo.get('recipes'), exportInfo.get('packages'), exportInfo.get('outdir'), exportInfo.get('filename'))
67 resp = makeresponse(output, None)
68 except error.TICError as err:
70 resp = makeresponse(str(err), err)
71 except ValueError as ve:
73 resp = makeresponse(str(ve), ve)
74 # except Exception as ex:
76 # resp = makeresponse(str(ex), ex)
80 def start(port_num=8082):
81 # cryptographic random generator
82 app.secret_key = os.urandom(24)
84 with app.test_request_context():
85 print(url_for('index'))
86 print(url_for('analysis'))
87 print(url_for('imports'))
88 print(url_for('exports'))
89 if isinstance(port_num, (str, unicode)):
90 port_num = int(port_num)
91 app.run(host='0.0.0.0', threaded=True, port=port_num)
93 def makeresponse(data, err):
96 if isinstance(err, error.TICError) or isinstance(err, ValueError):
97 status = 400 # Bad Request
98 elif isinstance(err, Exception):
99 status = 500 # Internal Server Error
100 data='Internal Server Error'
101 res_body = json.dumps(ResultInfo('false', None, data)._asdict())
103 res_body = json.dumps(ResultInfo('true', data, None)._asdict())
105 resp = Response(status=status,
106 mimetype='application/json',
111 ResultInfoType = collections.namedtuple('ResultInfo', 'result, data, message')
112 def ResultInfo(result='false', data=None, message=None):
113 return ResultInfoType(result, data, message)
115 if __name__ == '__main__':