certificates.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. from flask import jsonify, request
  2. import requests
  3. from lxconsole import db
  4. from lxconsole.models import Server
  5. from flask_login import login_required
  6. from lxconsole.api.access_controls import privilege_check
  7. def get_client_crt():
  8. return 'certs/client.crt'
  9. def get_client_key():
  10. return 'certs/client.key'
  11. @login_required
  12. def api_certificates_endpoint(endpoint):
  13. if not privilege_check(endpoint, request.args.get('id')):
  14. return jsonify({'data': [], 'metadata':[], 'error': 'not authorized', 'error_code': 403})
  15. if endpoint == 'add_certificate':
  16. id = request.args.get('id')
  17. server = Server.query.filter_by(id=id).first()
  18. project = request.args.get('project')
  19. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/certificates?project=' + project
  20. client_cert = get_client_crt()
  21. client_key = get_client_key()
  22. if request.form.get('json'):
  23. data = request.form.get('json')
  24. data = data.replace('-----BEGIN CERTIFICATE-----\\n', '')
  25. data = data.replace('-----END CERTIFICATE-----\\n', '')
  26. data = data.replace('-----END CERTIFICATE-----', '')
  27. results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), data=data)
  28. return jsonify(results.json())
  29. data = {}
  30. data.update({'name': request.form.get('name')})
  31. certificate = request.form.get('certificate')
  32. certificate = certificate.replace('-----BEGIN CERTIFICATE-----\n', '')
  33. certificate = certificate.replace('-----END CERTIFICATE-----\n', '')
  34. certificate = certificate.replace('-----END CERTIFICATE-----', '')
  35. data.update({'certificate': certificate})
  36. data.update({'type': 'client'})
  37. results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data)
  38. return jsonify(results.json())
  39. if endpoint == 'delete_certificate':
  40. id = request.args.get('id')
  41. server = Server.query.filter_by(id=id).first()
  42. project = request.args.get('project')
  43. fingerprint = request.form.get('fingerprint')
  44. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/certificates/' + fingerprint + '?project=' + project
  45. client_cert = get_client_crt()
  46. client_key = get_client_key()
  47. results = requests.delete(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  48. return jsonify(results.json())
  49. if endpoint == 'list_certificates':
  50. id = request.args.get('id')
  51. server = Server.query.filter_by(id=id).first()
  52. project = request.args.get('project')
  53. recursion = request.args.get('recursion')
  54. if recursion == '1':
  55. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/certificates?recursion=1&project=' + project
  56. else:
  57. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/certificates?project=' + project
  58. client_cert = get_client_crt()
  59. client_key = get_client_key()
  60. results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  61. return jsonify(results.json())
  62. if endpoint == 'load_certificate':
  63. id = request.args.get('id')
  64. server = Server.query.filter_by(id=id).first()
  65. project = request.args.get('project')
  66. fingerprint = request.form.get('fingerprint')
  67. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/certificates/' + fingerprint + '?project=' + project
  68. client_cert = get_client_crt()
  69. client_key = get_client_key()
  70. results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  71. return jsonify(results.json())
  72. if endpoint == 'update_certificate':
  73. id = request.args.get('id')
  74. server = Server.query.filter_by(id=id).first()
  75. project = request.args.get('project')
  76. fingerprint = request.args.get('fingerprint')
  77. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/certificates/' + fingerprint + '?project=' + project
  78. client_cert = get_client_crt()
  79. client_key = get_client_key()
  80. if request.form.get('json'):
  81. data = request.form.get('json')
  82. results = requests.put(url, verify=server.ssl_verify, cert=(client_cert, client_key), data=data)
  83. return jsonify(results.json())
  84. data = {}
  85. data.update({'name': request.form.get('name')})
  86. results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data)
  87. return jsonify(results.json())