operations.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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_operations_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 == 'delete_operation':
  17. id = request.args.get('id')
  18. project = request.args.get('project')
  19. operation_id = request.form.get('id')
  20. server = Server.query.filter_by(id=id).first()
  21. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/operations/' + operation_id + '?project=' + project
  22. client_cert = get_client_crt()
  23. client_key = get_client_key()
  24. results = requests.delete(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  25. return jsonify(results.json())
  26. if endpoint == 'list_operations':
  27. id = request.args.get('id')
  28. project = request.args.get('project')
  29. server = Server.query.filter_by(id=id).first()
  30. recursion = request.args.get('recursion')
  31. if recursion == '1':
  32. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/operations?recursion=1&project=' + project
  33. else:
  34. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/operations?project=' + project
  35. client_cert = get_client_crt()
  36. client_key = get_client_key()
  37. results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  38. #Convert result JSON to string
  39. data = json.dumps(results.json())
  40. #Convert to dict
  41. data = json.loads(data)
  42. #Check if running exists as metadata.key. This is needs to exist for datatables
  43. if "running" not in data['metadata']:
  44. data['metadata']['running'] = []
  45. #Check for image download tokens exist after downloading image in clustered environment
  46. for operation in data['metadata']['running']:
  47. if operation['class'] == 'token':
  48. if operation['description'] == 'Image download token':
  49. if operation['may_cancel']:
  50. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/operations/' + operation['id'] + '?project=' + project
  51. requests.delete(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  52. return jsonify(data)
  53. if endpoint == 'load_operation':
  54. id = request.args.get('id')
  55. project = request.args.get('project')
  56. operation_id = request.form.get('id')
  57. server = Server.query.filter_by(id=id).first()
  58. url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/operations/' + operation_id + '?project=' + project
  59. client_cert = get_client_crt()
  60. client_key = get_client_key()
  61. results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
  62. return jsonify(results.json())