107 lines
4.6 KiB
Python
107 lines
4.6 KiB
Python
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/<path:user_id>", 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/<path:user_id>/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
|
|
network_id = content["network_id"]
|
|
self.module.nosys_core.data.user_add_network(user_id, network_id)
|
|
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"]
|
|
peer = self.nosys_core.connections.connect(address=address, user_id=user_pk, bind_address=bind_address)
|
|
return jsonify({"connectionId":peer.id})
|
|
|
|
@self.blueprint.route("/peers/<path:connection_id>", 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({})
|