392 lines
16 KiB
Python
392 lines
16 KiB
Python
from flask import jsonify, request
|
|
import json
|
|
import requests
|
|
import os
|
|
from lxconsole import db
|
|
from lxconsole.models import Server
|
|
from datetime import datetime
|
|
from flask_login import login_required
|
|
from lxconsole.api.access_controls import privilege_check
|
|
|
|
|
|
def get_client_crt():
|
|
return 'certs/client.crt'
|
|
|
|
def get_client_key():
|
|
return 'certs/client.key'
|
|
|
|
@login_required
|
|
def api_network_endpoint(endpoint):
|
|
|
|
if not privilege_check(endpoint, request.args.get('id')):
|
|
return jsonify({'data': [], 'metadata':[], 'error': 'not authorized', 'error_code': 403})
|
|
|
|
|
|
if endpoint == 'add_network_forward':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
network = request.args.get('network')
|
|
server = Server.query.filter_by(id=id).first()
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/forwards?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
|
|
if request.form.get('json'):
|
|
data = request.form.get('json')
|
|
results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), data=data)
|
|
return jsonify(results.json())
|
|
|
|
data = {}
|
|
data.update({'listen_address': request.form.get('listen_address')})
|
|
data.update({'description': request.form.get('description')})
|
|
#config = {}
|
|
#config.update({'user.mykey': request.form.get('user.mykey')}) if request.form.get('user.mykey') else False
|
|
port = {}
|
|
port.update({'description': request.form.get('port_description')}) if request.form.get('port_description') else False
|
|
port.update({'listen_port': request.form.get('port_listen_port')}) if request.form.get('port_listen_port') else False
|
|
port.update({'protocol': request.form.get('port_protocol')}) if request.form.get('port_protocol') else False
|
|
port.update({'target_address': [ request.form.get('port_target_address') ]}) if request.form.get('port_target_address') else False
|
|
port.update({'target_port': [ request.form.get('port_target_port') ]}) if request.form.get('port_target_port') else False
|
|
|
|
#data.update({'config': config})
|
|
data.update({'ports': [ port ]})
|
|
results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data)
|
|
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'add_network_load_balancer':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
network = request.args.get('network')
|
|
server = Server.query.filter_by(id=id).first()
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/load-balancers?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
|
|
if request.form.get('json'):
|
|
data = request.form.get('json')
|
|
results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), data=data)
|
|
return jsonify(results.json())
|
|
|
|
data = {}
|
|
data.update({'listen_address': request.form.get('listen_address')})
|
|
data.update({'description': request.form.get('description')})
|
|
backend = {}
|
|
backend.update({'description': request.form.get('backend_description')}) if request.form.get('backend_description') else False
|
|
backend.update({'name': request.form.get('backend_name')}) if request.form.get('backend_name') else False
|
|
backend.update({'target_address': request.form.get('backend_target_address')}) if request.form.get('backend_target_address') else False
|
|
backend.update({'target_port': request.form.get('backend_target_port')}) if request.form.get('backend_target_port') else False
|
|
#config = {}
|
|
#config.update({'user.mykey': request.form.get('user.mykey')}) if request.form.get('user.mykey') else False
|
|
port = {}
|
|
port.update({'description': request.form.get('port_description')}) if request.form.get('port_description') else False
|
|
port.update({'listen_port': request.form.get('port_listen_port')}) if request.form.get('port_listen_port') else False
|
|
port.update({'protocol': request.form.get('port_protocol')}) if request.form.get('port_protocol') else False
|
|
port.update({'target_backend': [ request.form.get('port_target_backend') ]}) if request.form.get('port_target_backend') else False
|
|
|
|
data.update({'backends': [ backend ]})
|
|
#data.update({'config': config})
|
|
data.update({'ports': [ port ]})
|
|
results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data)
|
|
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'add_network_peer':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
network = request.args.get('network')
|
|
server = Server.query.filter_by(id=id).first()
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/peers?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
|
|
if request.form.get('json'):
|
|
data = request.form.get('json')
|
|
results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), data=data)
|
|
return jsonify(results.json())
|
|
|
|
data = {}
|
|
data.update({'name': request.form.get('name')})
|
|
data.update({'description': request.form.get('description')})
|
|
data.update({'target_network': request.form.get('target_network')})
|
|
data.update({'target_project': request.form.get('target_network')})
|
|
#config = {}
|
|
#config.update({'user.mykey': request.form.get('user.mykey')}) if request.form.get('user.mykey') else False
|
|
|
|
#data.update({'config': config})
|
|
results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data)
|
|
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'delete_network_forward':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
network = request.args.get('network')
|
|
name = request.form.get('name')
|
|
server = Server.query.filter_by(id=id).first()
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/forwards/' + name + '?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
results = requests.delete(url, verify=server.ssl_verify, cert=(client_cert, client_key))
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'delete_network_load_balancer':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
network = request.args.get('network')
|
|
name = request.form.get('name')
|
|
server = Server.query.filter_by(id=id).first()
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/load-balancers/' + name + '?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
results = requests.delete(url, verify=server.ssl_verify, cert=(client_cert, client_key))
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'delete_network_peer':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
network = request.args.get('network')
|
|
name = request.form.get('name')
|
|
server = Server.query.filter_by(id=id).first()
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/peers/' + name + '?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
results = requests.delete(url, verify=server.ssl_verify, cert=(client_cert, client_key))
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'get_network_state':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
server = Server.query.filter_by(id=id).first()
|
|
name = request.args.get('name')
|
|
recursion = request.args.get('recursion')
|
|
if recursion == '1':
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/state?recursion=1&project=' + project
|
|
else:
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/state?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
|
|
try:
|
|
results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key), timeout=5)
|
|
results.raise_for_status()
|
|
except requests.exceptions.RequestException as errex:
|
|
return jsonify({'metadata': []})
|
|
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'list_network_forwards':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
server = Server.query.filter_by(id=id).first()
|
|
name = request.args.get('name')
|
|
recursion = request.args.get('recursion')
|
|
if recursion == '1':
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/forwards?recursion=1&project=' + project
|
|
else:
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/forwards?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
try:
|
|
results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key), timeout=5)
|
|
results.raise_for_status()
|
|
except requests.exceptions.RequestException as errex:
|
|
return jsonify({'metadata': []})
|
|
|
|
forwards = json.dumps(results.json())
|
|
forwards = json.loads(forwards)
|
|
if forwards['metadata']:
|
|
return jsonify(results.json())
|
|
else:
|
|
return jsonify({'metadata': []})
|
|
|
|
|
|
if endpoint == 'list_network_leases':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
server = Server.query.filter_by(id=id).first()
|
|
name = request.args.get('name')
|
|
recursion = request.args.get('recursion')
|
|
if recursion == '1':
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/leases?recursion=1&project=' + project
|
|
else:
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/leases?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
|
|
try:
|
|
results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key), timeout=5)
|
|
results.raise_for_status()
|
|
except requests.exceptions.RequestException as errex:
|
|
return jsonify({'metadata': []})
|
|
|
|
leases = json.dumps(results.json())
|
|
leases = json.loads(leases)
|
|
if leases['metadata']:
|
|
return jsonify(results.json())
|
|
else:
|
|
return jsonify({'metadata': []})
|
|
|
|
|
|
if endpoint == 'list_network_load_balancers':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
server = Server.query.filter_by(id=id).first()
|
|
name = request.args.get('name')
|
|
recursion = request.args.get('recursion')
|
|
if recursion == '1':
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/load-balancers?recursion=1&project=' + project
|
|
else:
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/load-balancers?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
try:
|
|
results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key), timeout=5)
|
|
results.raise_for_status()
|
|
except requests.exceptions.RequestException as errex:
|
|
return jsonify({'metadata': []})
|
|
|
|
load_balancers = json.dumps(results.json())
|
|
load_balancers = json.loads(load_balancers)
|
|
if load_balancers['metadata']:
|
|
return jsonify(results.json())
|
|
else:
|
|
return jsonify({'metadata': []})
|
|
|
|
|
|
if endpoint == 'list_network_peers':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
server = Server.query.filter_by(id=id).first()
|
|
name = request.args.get('name')
|
|
recursion = request.args.get('recursion')
|
|
if recursion == '1':
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/peers?recursion=1&project=' + project
|
|
else:
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + name + '/peers?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
try:
|
|
results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key), timeout=5)
|
|
results.raise_for_status()
|
|
except requests.exceptions.RequestException as errex:
|
|
return jsonify({'metadata': []})
|
|
|
|
peers = json.dumps(results.json())
|
|
peers = json.loads(peers)
|
|
if peers['metadata']:
|
|
return jsonify(results.json())
|
|
else:
|
|
return jsonify({'metadata': []})
|
|
|
|
|
|
if endpoint == 'load_network_forward':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
network = request.args.get('network')
|
|
name = request.form.get('name')
|
|
server = Server.query.filter_by(id=id).first()
|
|
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/forwards/' + name + '?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'load_network_load_balancer':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
network = request.args.get('network')
|
|
name = request.form.get('name')
|
|
server = Server.query.filter_by(id=id).first()
|
|
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/load-balancers/' + name + '?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'load_network_peer':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
network = request.args.get('network')
|
|
name = request.form.get('name')
|
|
server = Server.query.filter_by(id=id).first()
|
|
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/peers/' + name + '?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
results = requests.get(url, verify=server.ssl_verify, cert=(client_cert, client_key))
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'update_network_forward':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
name = request.args.get('name')
|
|
server = Server.query.filter_by(id=id).first()
|
|
network = request.args.get('network')
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/forwards/' + name + '?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
|
|
if request.form.get('json'):
|
|
data = request.form.get('json')
|
|
results = requests.put(url, verify=server.ssl_verify, cert=(client_cert, client_key), data=data)
|
|
return jsonify(results.json())
|
|
|
|
data = {}
|
|
data.update({'name': request.form.get('name')})
|
|
results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data)
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'update_network_load_balancer':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
name = request.args.get('name')
|
|
server = Server.query.filter_by(id=id).first()
|
|
network = request.args.get('network')
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/load-balancers/' + name + '?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
|
|
if request.form.get('json'):
|
|
data = request.form.get('json')
|
|
results = requests.put(url, verify=server.ssl_verify, cert=(client_cert, client_key), data=data)
|
|
return jsonify(results.json())
|
|
|
|
data = {}
|
|
data.update({'name': request.form.get('name')})
|
|
results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data)
|
|
return jsonify(results.json())
|
|
|
|
|
|
if endpoint == 'update_network_peer':
|
|
id = request.args.get('id')
|
|
project = request.args.get('project')
|
|
name = request.args.get('name')
|
|
server = Server.query.filter_by(id=id).first()
|
|
network = request.args.get('network')
|
|
url = 'https://' + server.addr + ':' + str(server.port) + '/1.0/networks/' + network + '/peers/' + name + '?project=' + project
|
|
client_cert = get_client_crt()
|
|
client_key = get_client_key()
|
|
|
|
if request.form.get('json'):
|
|
data = request.form.get('json')
|
|
results = requests.put(url, verify=server.ssl_verify, cert=(client_cert, client_key), data=data)
|
|
return jsonify(results.json())
|
|
|
|
data = {}
|
|
data.update({'name': request.form.get('name')})
|
|
results = requests.post(url, verify=server.ssl_verify, cert=(client_cert, client_key), json=data)
|
|
return jsonify(results.json()) |