network_acl.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from flask import jsonify, request
  2. import json
  3. import requests
  4. from lxconsole import db
  5. from lxconsole.models import Server
  6. from flask_login import login_required
  7. from lxconsole.api.access_controls import privilege_check
  8. def get_client_crt():
  9. return 'certs/client.crt'
  10. def get_client_key():
  11. return 'certs/client.key'
  12. @login_required
  13. def api_network_acl_endpoint(endpoint):
  14. if not privilege_check(endpoint, request.args.get('id')):
  15. return jsonify({'data': [], 'metadata':[], 'error': 'not authorized', 'error_code': 403})
  16. if endpoint == 'add_network_acl':
  17. id = request.args.get('id')
  18. project = request.args.get('project')
  19. acl = request.args.get('acl')
  20. type = request.form.get('type')
  21. server = Server.query.filter_by(id=id).first()
  22. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/network-acls/' + acl + '?project=' + project
  23. client_cert = get_client_crt()
  24. client_key = get_client_key()
  25. if request.form.get('json'):
  26. data = request.form.get('json')
  27. results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), data=data)
  28. return jsonify(results.json())
  29. results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  30. data = json.dumps(results.json())
  31. data = json.loads(data)
  32. config = {}
  33. config.update({'action': request.form.get('action')}) if request.form.get('action') else False
  34. config.update({'description': request.form.get('description')}) if request.form.get('description') else False
  35. config.update({'destination': request.form.get('destination')}) if request.form.get('destination') else False
  36. config.update({'destination_port': request.form.get('destination_port')}) if request.form.get('destination_port') else False
  37. config.update({'icmp_code': request.form.get('icmp_code')}) if request.form.get('icmp_code') else False
  38. config.update({'icmp_type': request.form.get('icmp_type')}) if request.form.get('icmp_type') else False
  39. config.update({'protocol': request.form.get('protocol')}) if request.form.get('protocol') else False
  40. config.update({'source': request.form.get('source')}) if request.form.get('source') else False
  41. config.update({'source_port': request.form.get('source_port')}) if request.form.get('source_port') else False
  42. config.update({'state': request.form.get('state')}) if request.form.get('state') else False
  43. data['metadata'][type] += [config]
  44. results = requests.put(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data['metadata'])
  45. return jsonify(results.json())
  46. if endpoint == 'delete_network_acl':
  47. id = request.args.get('id')
  48. project = request.args.get('project')
  49. acl = request.args.get('acl')
  50. index = request.form.get('index')
  51. type = request.form.get('type')
  52. server = Server.query.filter_by(id=id).first()
  53. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/network-acls/' + acl + '?project=' + project
  54. client_cert = get_client_crt()
  55. client_key = get_client_key()
  56. results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  57. data = json.dumps(results.json())
  58. data = json.loads(data)
  59. data['metadata'][type].pop(int(index))
  60. results = requests.put(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data['metadata'])
  61. return jsonify(results.json())
  62. if endpoint == 'list_network_acls':
  63. id = request.args.get('id')
  64. project = request.args.get('project')
  65. acl = request.args.get('acl')
  66. server = Server.query.filter_by(id=id).first()
  67. recursion = request.args.get('recursion')
  68. if recursion == '1':
  69. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/network-acls/'+acl+'?recursion=1&project=' + project
  70. else:
  71. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/network-acls/'+acl+'?project=' + project
  72. client_cert = get_client_crt()
  73. client_key = get_client_key()
  74. results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  75. data = json.dumps(results.json())
  76. data = json.loads(data)
  77. length = len(data['metadata']['ingress'])
  78. i = 0
  79. while i < length:
  80. data['metadata']['ingress'][i]['index'] = i
  81. i += 1
  82. length = len(data['metadata']['egress'])
  83. i = 0
  84. while i < length:
  85. data['metadata']['egress'][i]['index'] = i
  86. i += 1
  87. return jsonify(data)