From 65d8c7d5e2d2fa480bf99bdb83675ff3f9b0057f Mon Sep 17 00:00:00 2001 From: Lucas Date: Sat, 31 Jan 2026 17:52:49 +1000 Subject: [PATCH] Kinda fix networks --- noSys/.mtimes.json | 2 +- noSys/info.json | 2 +- noSys/networks.py | 9 +++++- noSys/networksApiBlueprint.py | 39 +++++++++++++++++++++--- noSys/noSysApiBlueprint.py | 7 +++-- noSys/vue/components/ConnectionsTab.vue | 6 ++-- p2private/.mtimes.json | 2 +- p2private/dataManager.py | 3 ++ p2private/info.json | 2 +- p2private/p2private.zip | Bin 11101 -> 11268 bytes p2private/p2privateApiBlueprint.py | 7 +++-- p2private/vue/api/p2privateApi.js | 19 ++++++++++-- p2private/vue/views/HomeView.vue | 28 +++++++++++------ 13 files changed, 97 insertions(+), 29 deletions(-) diff --git a/noSys/.mtimes.json b/noSys/.mtimes.json index d65cba2..3b2b2e0 100644 --- a/noSys/.mtimes.json +++ b/noSys/.mtimes.json @@ -1 +1 @@ -{".gitignore": 1748256258.9985344, "api.http": 1750139941.0187607, "connections.py": 1757738624.594908, "dataManager.py": 1766792003.8798084, "dispatcher.py": 1757802996.961887, "events.py": 1757056638.2672198, "index.html": 1752913927.847083, "modules.py": 1757507552.9273007, "networks.py": 1757748986.1507368, "networksApiBlueprint.py": 1757583651.2527168, "noSys.py": 1757749429.9569714, "noSys.zip.bkp": 1755913936.6262422, "noSysApiBlueprint.py": 1757743519.0319538, "noSysCore.py": 1757838163.5684075, "noSysModule.py": 1757065213.3453174, "noSysModuleServer.py": 1756720592.4303212, "noSysSocketio.py": 1756798784.7306013, "peers.py": 1757802573.2807248, "servers.py": 1756114998.854464, "users.py": 1757585178.0426896, "vue\\router.js": 1753274355.3049414, "vue\\api\\noSysApi.js": 1757586249.0933578, "vue\\api\\socketEvents.js": 1753577297.9669068, "vue\\components\\ConnectionsTab.vue": 1757496047.4013255, "vue\\components\\NetworksTabs.vue": 1757748327.563559, "vue\\stores\\noSysStore.js": 1757498732.9446464, "vue\\views\\HomeView.vue": 1757495074.6380558} \ No newline at end of file +{".gitignore": 1748256258.9985344, "api.http": 1750139941.0187607, "connections.py": 1757738624.594908, "dataManager.py": 1769702539.7690244, "dispatcher.py": 1757802996.961887, "events.py": 1757056638.2672198, "index.html": 1752913927.847083, "modules.py": 1757507552.9273007, "networks.py": 1769704242.0337706, "networksApiBlueprint.py": 1769703421.136844, "noSys.py": 1757749429.9569714, "noSys.zip.bkp": 1755913936.6262422, "noSysApiBlueprint.py": 1769334730.8683, "noSysCore.py": 1757838163.5684075, "noSysModule.py": 1769702364.140982, "noSysModuleServer.py": 1756720592.4303212, "noSysSocketio.py": 1756798784.7306013, "peers.py": 1757802573.2807248, "servers.py": 1756114998.854464, "users.py": 1757585178.0426896, "vue\\router.js": 1753274355.3049414, "vue\\api\\noSysApi.js": 1757586249.0933578, "vue\\api\\socketEvents.js": 1753577297.9669068, "vue\\components\\ConnectionsTab.vue": 1769332288.6606996, "vue\\components\\NetworksTabs.vue": 1757748327.563559, "vue\\stores\\noSysStore.js": 1757498732.9446464, "vue\\views\\HomeView.vue": 1757495074.6380558} \ No newline at end of file diff --git a/noSys/info.json b/noSys/info.json index 66c8092..0bd6369 100644 --- a/noSys/info.json +++ b/noSys/info.json @@ -1,6 +1,6 @@ { "id": "noSys", - "version": 0.14, + "version": 0.149, "modules": [ { "id": "noSys", diff --git a/noSys/networks.py b/noSys/networks.py index d0c4397..4d7e666 100644 --- a/noSys/networks.py +++ b/noSys/networks.py @@ -24,6 +24,7 @@ class NetworkStatus(Enum): logger = get_logger("networks") +# TODO FIX ALL THE LOGIC class Networks(NoSysModule): """ SOMETHING HERE.""" @@ -46,6 +47,9 @@ class Networks(NoSysModule): # self.socketio = HandlerSocketio(self) # self.nosys_core.modules.api.register_socketio(self.socketio) + def create_network(self, name, description, type, modules): + return self.nosys_core.data.create_network(name, description, type, modules) + def user_add_network(self, user_id, network_id): self.nosys_core.data.user_add_network(user_id, network_id) @@ -56,7 +60,8 @@ class Networks(NoSysModule): user_id:str = event.user_id user_data = self.nosys_core.data.get_user(user_id) for network_id in user_data.get("networks", []): - self.network_states.get(network_id)["users"].append(user_id) + if self.network_states.get(network_id): + self.network_states.get(network_id)["users"].append(user_id) def on_nosys_ready(self, event): self.manage_networks() @@ -98,6 +103,7 @@ class Networks(NoSysModule): for network_id, state in self.network_states.items(): if state["managed"]: self.manage_network(network_id) + # TODO Value from config file time.sleep(30) def manage_network(self, network_id): @@ -125,6 +131,7 @@ class Networks(NoSysModule): def connect_network_rendezvous_servers(self, network): network_id = network.get("id") state = self.network_states.get(network_id) + # TODO FIX USER SELECTION if state["users"]: for rendezvous_id in network.get("rendezvous"): rendezvous = self.nosys_core.data.get_rendezvous(rendezvous_id) diff --git a/noSys/networksApiBlueprint.py b/noSys/networksApiBlueprint.py index d9263e0..e75eee6 100644 --- a/noSys/networksApiBlueprint.py +++ b/noSys/networksApiBlueprint.py @@ -16,7 +16,7 @@ class Blueprint(ApiBlueprint): def show(): return self.module.name - @self.blueprint.route('/networks') + @self.blueprint.route('/networks', methods=["GET", "POST"]) def networks(): if request.method == "GET": networks = [] @@ -27,11 +27,13 @@ class Blueprint(ApiBlueprint): elif request.method == "POST": content:dict = request.json - user_id = content["user_id"] - network_id = content["network_id"] - self.module.user_add_network(user_id, network_id) + name = content["name"] + description = content["description"] + type = content["type"] + modules = content["modules"] + network = self.module.create_network(name, description, type, modules) - return jsonify({"network_id":network_id}) + return jsonify({"network_id":network.get("id")}) @self.blueprint.route("/networks/", methods=["GET", "PUT", "DELETE"]) def network(network_id): @@ -48,4 +50,31 @@ class Blueprint(ApiBlueprint): user_id = content["user_id"] self.module.user_remove_network(user_id, network_id) return jsonify({"networkId":network_id}) + + @self.blueprint.route("/networks//rendezvous", methods=["GET", "POST", "DELETE"]) + def network_rendezvous(network_id): + if request.method == "GET": + network_rendezvous = self.module.nosys_core.data.get_network(network_id)["rendezvous"] + return jsonify(network_rendezvous) + + elif request.method == "POST": + content:dict = request.json + rendezvous_id = content["rendezvous_id"] + self.module.nosys_core.data.network_assign_rendezvous(network_id, rendezvous_id) + return jsonify() + + # Rendezvous + + @self.blueprint.route('/rendezvous', methods=["GET", "POST"]) + def rendezvous(): + if request.method == "GET": + return jsonify(self.module.nosys_core.data.list_rendezvous()) + + elif request.method == "POST": + content:dict = request.json + id = content["id"] + address = content["address"] + self.module.nosys_core.data.add_rendezvous(id, address) + + return jsonify() diff --git a/noSys/noSysApiBlueprint.py b/noSys/noSysApiBlueprint.py index ce22745..13c1983 100644 --- a/noSys/noSysApiBlueprint.py +++ b/noSys/noSysApiBlueprint.py @@ -41,7 +41,10 @@ class Blueprint(ApiBlueprint): 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(): @@ -62,8 +65,8 @@ class Blueprint(ApiBlueprint): 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}) + 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/", methods=["GET", "POST", "DELETE"]) def peer(connection_id): diff --git a/noSys/vue/components/ConnectionsTab.vue b/noSys/vue/components/ConnectionsTab.vue index f368f43..c09c25d 100644 --- a/noSys/vue/components/ConnectionsTab.vue +++ b/noSys/vue/components/ConnectionsTab.vue @@ -15,7 +15,7 @@ var socket = null const noSysStore = useNoSysStore() const ip = ref("n0sys.duckdns.org") -const port = ref("30331") +const port = ref("40441") const user = ref() const peers = ref([]) @@ -24,7 +24,7 @@ async function listUsers(){ } async function connect(){ - const response = await noSysApi.connectAddress(user.value.user, ip.value, port.value) + const response = await noSysApi.connectAddress(user.value.id, ip.value, port.value) } async function reconnect(connectionId){ @@ -167,7 +167,7 @@ function onTemporaryEvent(data) {
- +
diff --git a/p2private/.mtimes.json b/p2private/.mtimes.json index 5d3e114..fbe023e 100644 --- a/p2private/.mtimes.json +++ b/p2private/.mtimes.json @@ -1 +1 @@ -{"config.json": 1756118682.0519147, "dataManager.py": 1757749170.2625794, "networks.py": 1757800810.4118917, "networksApiBlueprint.py": 1757750515.750099, "p2private.py": 1757803028.377009, "p2privateApiBlueprint.py": 1757825501.4272363, "vue\\router.js": 1755335641.4535544, "vue\\api\\p2privateApi.js": 1757756279.5687172, "vue\\api\\socketEvents.js": 1757748445.9564493, "vue\\views\\HomeView.vue": 1757756292.8398924} \ No newline at end of file +{"config.json": 1756118682.0519147, "dataManager.py": 1769761674.1419418, "networks.py": 1757800810.4118917, "networksApiBlueprint.py": 1757750515.750099, "p2private.py": 1757803028.377009, "p2privateApiBlueprint.py": 1769761706.0132868, "vue\\router.js": 1755335641.4535544, "vue\\api\\p2privateApi.js": 1769764270.9727585, "vue\\api\\socketEvents.js": 1757748445.9564493, "vue\\views\\HomeView.vue": 1769764331.9364705} \ No newline at end of file diff --git a/p2private/dataManager.py b/p2private/dataManager.py index fcaa773..862b4d4 100644 --- a/p2private/dataManager.py +++ b/p2private/dataManager.py @@ -44,4 +44,7 @@ class DataManager(): def update_message(self, hash: str, updates: Dict[str, Any]) -> bool: return self.store.update_item("messages", "hash", hash, updates) + + def get_chat(self, from_user, to_user): + return [m for m in self.list_messages() if from_user == m.get("from") and to_user == m.get("to")] \ No newline at end of file diff --git a/p2private/info.json b/p2private/info.json index 53ad0ca..321ca66 100644 --- a/p2private/info.json +++ b/p2private/info.json @@ -1,6 +1,6 @@ { "id": "p2private", - "version": 0.043, + "version": 0.046, "modules": [ { "id": "p2private", diff --git a/p2private/p2private.zip b/p2private/p2private.zip index 918487b67bcf77eac32ab1794592fd60dbf4c8f4..8f285845f930e36c31b9b86a48920f8a4e3a2819 100644 GIT binary patch delta 5974 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 delta 5750 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 W0R{%!zoZBz#00+>&L+=)SN{u+0k0we diff --git a/p2private/p2privateApiBlueprint.py b/p2private/p2privateApiBlueprint.py index b97bdca..b8298ea 100644 --- a/p2private/p2privateApiBlueprint.py +++ b/p2private/p2privateApiBlueprint.py @@ -30,12 +30,13 @@ class Blueprint(ApiBlueprint): pass @self.blueprint.route('/messages//', methods=["GET", "POST"]) - def messages(): + def messages(user_id, friend_id): if request.method == "GET": - return jsonify() + messages = self.module.data.get_chat(user_id, friend_id) + return jsonify(messages) elif request.method == "POST": content:dict = request.json - message = self.module.create_message(content["from"], content["to"], content["content"], content["medias"]) + message = self.module.create_message(user_id, friend_id, content["content"], content["medias"]) return jsonify(message) # @self.blueprint.route('/posts', methods=["GET", "POST"]) diff --git a/p2private/vue/api/p2privateApi.js b/p2private/vue/api/p2privateApi.js index 3942a13..3f9c2a6 100644 --- a/p2private/vue/api/p2privateApi.js +++ b/p2private/vue/api/p2privateApi.js @@ -37,14 +37,14 @@ export const p2privateApi = { }, async createMessage(from, to, content, medias){ - const data = {"from":from, "to":to, "content":content, "medias":medias} + const data = {"content":content, "medias":medias} const requestOptions = { method: 'POST', headers: {'Content-Type': 'application/json',}, body: JSON.stringify(data), }; try { - const response = await fetch(p2privateApiUrl+"/messages", requestOptions); + const response = await fetch(p2privateApiUrl+"/messages/"+from+"/"+to, requestOptions); if (!response.ok) { const errorText = await response.text(); throw new Error(`Error fetching posts: ${response.status} - ${errorText}`); @@ -59,6 +59,21 @@ export const p2privateApi = { } }, + async getChat(from, to){ + try { + const response = await fetch(p2privateApiUrl+"/messages/"+from+"/"+to) + if (!response.ok) { + const errorText = await response.text(); + throw new Error(`Error fetching networks: ${response.status} - ${errorText}`); + } + const result = await response.json() + return result; + } catch (error) { + console.error("Error fetching networks:", error); + throw error; + } + }, + // async createPosts(user, content, medias, networks){ // const data = {"user": user, "content": content, "medias": medias, "networks": networks}; // const requestOptions = { diff --git a/p2private/vue/views/HomeView.vue b/p2private/vue/views/HomeView.vue index 07ac923..1b30304 100644 --- a/p2private/vue/views/HomeView.vue +++ b/p2private/vue/views/HomeView.vue @@ -13,6 +13,7 @@ import { p2postApi } from '@/modules/p2post/api/p2postApi'; const friends = ref([]) const activeFriend = ref(null) const myUsers = ref([]) +const currentUser = ref({"pubkey":null}) const relays = ref([]) @@ -20,31 +21,39 @@ async function getRelays(){ relays.value = await p2privateApi.getNetworks() } -async function getFriends(){ +async function getFriends(user){ const result = await p2privateApi.getFriends() for (const f of result){ - const m1 = {id:1, senderId:'me', content:"test Meeeeeeeeeeeeeeeeeeeeee", timestamp:new Date(), status:"SENT"} - const m2 = {id:2, senderId:'peer', content:"test Peer", status:"RECEIVED", timestamp:new Date(), files:[{name:'file1', type:'image/jpeg', size:123}]} - const mes = [m1,m2] - const fr = {nickname:'Nickname', unreadCount:5, publicKey:f.pubkey, isOnline:true, messages:mes} + const chat = await p2privateApi.getChat(user.pubkey, f.pubkey) + const messages = [] + for (const m of chat){ + if (m.from === user.pubkey){ + var senderId = "me" + }else{ + var senderId = "peer" + } + var message = {id:m.hash, senderId:senderId, content:m.content, timestamp:m.timestamp, status:"SENT"} + messages.push(message) + } + const fr = {nickname:'Nickname', unreadCount:5, publicKey:f.pubkey, isOnline:true, messages:messages} friends.value.push(fr) } } async function getMyUsers(){ myUsers.value = await p2postApi.getMyUsers() + const randomIndex = Math.floor(Math.random() * myUsers.value.length); + currentUser.value = myUsers.value[randomIndex] + getFriends(currentUser.value) } const inputMessageText = ref("") async function createMessage(){ - const randomIndex = Math.floor(Math.random() * myUsers.value.length); - const randomUser = myUsers.value[randomIndex] - await p2privateApi.createMessage(randomUser.pubkey, activeFriend.value.publicKey, inputMessageText.value, []) + await p2privateApi.createMessage(currentUser.value.pubkey, activeFriend.value.publicKey, inputMessageText.value, []) } onMounted(()=>{ getRelays() - getFriends() getMyUsers() }) @@ -109,6 +118,7 @@ onMounted(()=>{ Friends ({{friends.length}}) + {{ currentUser.pubkey }}