core-extra/webapp/app.py

87 lines
2.1 KiB
Python

import os
from bottle import HTTPError
from flask import Flask
from flask import jsonify
from flask import request
import core_utils
import emane_routes
import hook_routes
import link_routes
import mobility_routes
import node_routes
import service_routes
import session_routes
import websocket_routes
import wlan_routes
import xml_routes
from core.emulator.coreemu import CoreEmu
from core.misc.ipaddress import Ipv4Prefix, Ipv6Prefix
coreemu = CoreEmu()
app = Flask(__name__)
app.config["SECRET_KEY"] = "core"
websocket_routes.register(app)
def register_blueprint(blueprint):
"""
Register api module and set coreemu object.
:param module blueprint: module that defines api routes
:return: nothing
"""
blueprint.coreemu = coreemu
app.register_blueprint(blueprint.api)
register_blueprint(emane_routes)
register_blueprint(hook_routes)
register_blueprint(link_routes)
register_blueprint(mobility_routes)
register_blueprint(node_routes)
register_blueprint(service_routes)
register_blueprint(session_routes)
register_blueprint(wlan_routes)
register_blueprint(xml_routes)
@app.route("/ips", methods=["POST"])
def get_ips():
data = request.get_json() or {}
node_id = data["id"]
node_id = int(node_id)
ip4_prefix = data.get("ip4")
ip6_prefix = data.get("ip6")
ip4_prefixes = Ipv4Prefix(ip4_prefix)
ip6_prefixes = Ipv6Prefix(ip6_prefix)
return jsonify(
ip4=str(ip4_prefixes.addr(node_id)),
ip4mask=ip4_prefixes.prefixlen,
ip6=str(ip6_prefixes.addr(node_id)),
ip6mask=ip6_prefixes.prefixlen
)
@app.route("/upload", methods=["POST"])
def upload():
if not os.path.exists(core_utils.save_dir):
os.mkdir(core_utils.save_dir, 755)
upload_file = request.files["file"]
save_path = os.path.join(core_utils.save_dir, upload_file.filename)
upload_file.save(save_path)
return jsonify()
@app.errorhandler(HTTPError)
def handle_error(e):
return jsonify(message=e.body, status=e.status_code), e.status_code
if __name__ == "__main__":
websocket_routes.socketio.run(app, host="0.0.0.0", debug=True)