added create_network(), delete_network(), create_subnet(), delete_subnet(), process_t...
[plcapi.git] / PLC / RestAPI.py
1 from flask import Flask, url_for, request, Response, jsonify
2 app = Flask(__name__)
3
4 from PLC.API import PLCAPI
5 from PLC.Config import Config
6 from PLC.Logger import logger
7
8 api = PLCAPI()
9
10 get_response = """
11 <html><head>
12 <title>PLCAPI Nova JSON REST Interface</title>
13 </head><body>
14 <h1>PLCAPI Nova JSON REST Interface</h1>
15 <p>Please use HTTP to access the PLCAPI. </p>
16 </body></html>
17 """
18
19 def prepare_response(result):
20     response = {'response': result}
21     return jsonify(response)
22
23 @app.route('/')
24 def api_root():
25     return 'Welcome'
26
27 @app.route('/auth', methods=['GET', 'POST'])
28 def AuthCheck():
29     if request.method == 'POST':
30         args = [request.json.get('auth')]
31         result = api.call(request.remote_addr, 'AuthCheck', *args)
32         return prepare_response(result)
33     return get_response
34       
35 @app.route('/roles', methods=['GET', 'POST'])
36 def roles():
37     if request.method == 'POST':
38         args = [request.json.get('auth')]
39         result = api.call(request.remote_addr, 'GetRoles', *args)
40         return prepare_response(result)
41     return get_response 
42
43
44
45 @app.route('/role', methods=['GET', 'POST', 'PUT', 'DELETE'])
46 @app.route('/role/<role_id>', methods=['GET', 'POST', 'PUT', 'DELETE'])
47 def role(role_id=None):
48     method='GetRoles'
49     if request.method == 'POST':
50         args = [request.json.get('auth')]
51         role = request.json.get('role')
52         if not role_id:
53             method = 'AddRole'
54             args.append(role)
55         else:
56             if not role:
57                 method = 'GetRoles'
58                 # GetRoles doesnt support filtering
59                 #args.append(role_id)
60             else:
61                 method = 'GetRoles'
62     elif request.method == 'PUT':
63         # There is no UpdateRole method
64         pass
65     elif request.method == 'Delete':
66         method = 'DeleteRole'
67         args = [request.json.get('auth'), role_id]
68     result = api.call(request.remote_addr, method, *args)
69     return prepare_response(result)
70