from flask import Blueprint, make_response, request, jsonify, abort from flask_socketio import SocketIO, emit, join_room, leave_room import os, signal, json, time import logging from threading import Thread from libs.api.apiBlueprint import ApiBlueprint class Blueprint(ApiBlueprint): def routes(self): from .noSys import NoSys self.nosys:NoSys = self.module from .noSysCore import NoSysCore self.nosys_core = self.nosys.nosys_core @self.blueprint.route('/') def show(): return self.nosys.name @self.blueprint.route('/users') def users(): if request.method == "GET": users = [] for user in self.nosys_core.users.users.values(): user_data = self.nosys.nosys_core.data.get_user(user.id) users.append(user_data) return jsonify(users) @self.blueprint.route("/users/", methods=["GET", "POST", "DELETE"]) def user(user_id): if request.method == "GET": user_data = self.nosys.nosys_core.data.get_user(user_id) return jsonify(user_data) @self.blueprint.route("/users//networks", methods=["GET", "POST", "DELETE"]) def user_networks(user_id): if request.method == "GET": user_networks = self.nosys.nosys_core.data.get_user(user_id)["networks"] return jsonify(user_networks) elif request.method == "POST": content:dict = request.json return jsonify() @self.blueprint.route("/peers", methods=["GET", "POST"]) def peers(): if request.method == "GET": response = [] for peer in self.nosys_core.peers.peers.values(): response.append({ "id":peer.id, "address":f"{peer.connection.address[0]}:{peer.connection.address[1]}", "bindAddress":f"{peer.connection.bind_address[0]}:{peer.connection.bind_address[1]}", "user":peer.connection.security.user, "status":peer.connection.status.name }) return jsonify(response) elif request.method == "POST": content:dict = request.json address = (content["address"]["ip"], int(content["address"]["port"])) bind_address = ("0.0.0.0", 0) if content.get("bindAddress"): bind_address = (content["bindAddress"]["ip"], int(content["bindAddress"]["port"])) user_pk = content["user"] connection_id = self.nosys_core.connections.connect(address=address, user_id=user_pk, bind_address=bind_address) return jsonify({"connectionId":connection_id}) @self.blueprint.route("/peers/", methods=["GET", "POST", "DELETE"]) def peer(connection_id): peer = self.nosys_core.peers.peers.get(connection_id) if not peer: return jsonify({}) if request.method == "GET": return jsonify({ "id":peer.id, "address":f"{peer.connection.address[0]}:{peer.connection.address[1]}", "bindAddress":f"{peer.connection.bind_address[0]}:{peer.connection.bind_address[1]}", "user":peer.connection.security.user, "status":peer.connection.status.name }) elif request.method == "POST": content:dict = request.json message = content.get("message") to_module = (content.get("toModule")["package"],content.get("toModule")["module"]) encrypted = content.get("encrypted") self.nosys_core.dispatcher.send_message(message, peer.id, to_module, encrypted) return jsonify({"connectionId":connection_id}) elif request.method == "DELETE": peer.connection.close_connection() return jsonify({"connectionId":connection_id}) @self.blueprint.route('/restart') def restart(): if request.method == "GET": self.nosys_core.restart_app() return jsonify({}) @self.blueprint.route('/test') def test(): if request.method == "GET": self.nosys_core.test() return jsonify({})