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 918487b..8f28584 100644 Binary files a/p2private/p2private.zip and b/p2private/p2private.zip differ 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 }}