From 40c1ff578709c7346ef85412ce6ba8af52f367a7 Mon Sep 17 00:00:00 2001 From: Paolo Manzi Date: Wed, 10 Apr 2024 21:37:12 +0200 Subject: [PATCH] Improved data transfer between client and server --- src/main/java/controllers/Database.java | 5 +-- src/main/java/controllers/ServerThread.java | 34 +++++++++++++++++--- src/main/java/views/ClientReceiveThread.java | 9 +++++- src/main/java/views/ClientSendThread.java | 25 ++++++++++++-- 4 files changed, 61 insertions(+), 12 deletions(-) diff --git a/src/main/java/controllers/Database.java b/src/main/java/controllers/Database.java index 2ecc0a6..94caabf 100644 --- a/src/main/java/controllers/Database.java +++ b/src/main/java/controllers/Database.java @@ -253,9 +253,6 @@ public class Database { } private static Connection getConnection() throws SQLException { - return DriverManager.getConnection( - System.getenv("db_url"), - System.getenv("db_user"), System.getenv("db_pass") - ); + return DriverManager.getConnection("jdbc:mariadb://riefolo.me:3306/chat_rsa", "proj_sistemi", "$o8a5#diTGg8*Agk"); } } diff --git a/src/main/java/controllers/ServerThread.java b/src/main/java/controllers/ServerThread.java index ffe15db..2fa38bf 100644 --- a/src/main/java/controllers/ServerThread.java +++ b/src/main/java/controllers/ServerThread.java @@ -1,11 +1,13 @@ package controllers; import models.Account; +import models.Message; import models.Rsa; import java.io.*; import java.math.BigInteger; import java.net.Socket; +import java.util.List; import static controllers.Database.*; @@ -105,16 +107,30 @@ public class ServerThread extends Thread { sendEncrypted("Inserisci l'username del destinatario: "); try { dUsername = rsa.decrypt(fromClient.readLine()); + System.err.println(dUsername); } catch (IOException e) { throw new RuntimeException(e); } int recipientId = getIdFromUsername(dUsername); Database.addConversation(clientId, recipientId); - + System.err.println(recipientId); PublicKey pk = Database.getPublicKey(recipientId); assert pk != null; sendEncrypted(pk.e().toString()); sendEncrypted(pk.n().toString()); + int convId = Database.getConversationId(clientId, recipientId); + List messaggi = getMessages(convId); + for (Message i : messaggi) { + try { + send("MESSAGGIO"); + } catch (IOException e) { + throw new RuntimeException(e); + } + sendEncrypted(i.message().toString()); + sendEncrypted(i.sending_date().toString()); + sendEncrypted(i.sending_time().toString()); + } + sendEncrypted("(DISCONNECT per uscire, CD per cambiare destinatario)\n"); for (; ; ) { try { @@ -124,9 +140,9 @@ public class ServerThread extends Thread { throw new RuntimeException(e); } - if (message == null || "DISCONNECT".equals(message)) break; + if (message == null || "DISCONNECT".equals(rsa.decrypt(message))) break; - if ("CAMBIA_DESTINATARIO".equals(message)) { + if ("CD".equals(rsa.decrypt(message))) { try { sendEncrypted("Inserisci l'username del nuovo destinatario: "); dUsername = rsa.decrypt(fromClient.readLine()); @@ -135,14 +151,24 @@ public class ServerThread extends Thread { } recipientId = getIdFromUsername(dUsername); Database.addConversation(clientId, recipientId); + pk = Database.getPublicKey(recipientId); + assert pk != null; + try { + send("CAMBIO_CHIAVE"); + } catch (IOException e) { + throw new RuntimeException(e); + } + sendEncrypted(pk.e().toString()); + sendEncrypted(pk.n().toString()); continue; } - int convId = Database.getConversationId(clientId, recipientId); try { + String message2 = fromClient.readLine(); MessageForwarder.sendTo(recipientId, message, clientId); Database.addMessage(convId, message); + Database.addMessage(convId, message2); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/views/ClientReceiveThread.java b/src/main/java/views/ClientReceiveThread.java index f8b8018..c9a5323 100644 --- a/src/main/java/views/ClientReceiveThread.java +++ b/src/main/java/views/ClientReceiveThread.java @@ -4,6 +4,7 @@ import models.Rsa; import java.io.BufferedReader; import java.io.IOException; +import java.math.BigInteger; public class ClientReceiveThread extends Thread { private final BufferedReader in; @@ -18,7 +19,13 @@ public class ClientReceiveThread extends Thread { while (true) { try { String s = in.readLine(); - System.out.print(rsa.decrypt(s)); + if ("CAMBIO_CHIAVE".equals(s)) { + BigInteger recipientE = new BigInteger(rsa.decrypt(in.readLine())); + BigInteger recipientN = new BigInteger(rsa.decrypt(in.readLine())); + ClientSendThread.setPK(recipientE, recipientN); + } else if ("MESSAGGIO".equals(s)) { + System.out.print(rsa.decrypt(s)); + } else System.out.print(rsa.decrypt(s)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/src/main/java/views/ClientSendThread.java b/src/main/java/views/ClientSendThread.java index 261c26b..4c450ac 100644 --- a/src/main/java/views/ClientSendThread.java +++ b/src/main/java/views/ClientSendThread.java @@ -11,15 +11,20 @@ import java.util.logging.Logger; public class ClientSendThread extends Thread { private final BufferedWriter out; private final BigInteger se, sn; + private final BigInteger myE, myN; private final Rsa rsa; private final BufferedReader in; + private static BigInteger recipientE, recipientN; + public ClientSendThread(BufferedReader in, BufferedWriter out, BigInteger se, BigInteger sn, Rsa rsa) { this.in = in; this.out = out; this.se = se; this.sn = sn; this.rsa = rsa; + myE = rsa.getE(); + myN = rsa.getN(); } public void run() { @@ -55,14 +60,13 @@ public class ClientSendThread extends Thread { String s; try { - System.out.println(rsa.decrypt(in.readLine())); + System.out.print(rsa.decrypt(in.readLine())); s = br.readLine(); send(rsa.encrypt(s, se, sn)); } catch (IOException ex) { Logger.getLogger(ClientSendThread.class.getName()).log(Level.SEVERE, null, ex); } - BigInteger recipientE, recipientN; try { recipientE = new BigInteger(rsa.decrypt(in.readLine())); recipientN = new BigInteger(rsa.decrypt(in.readLine())); @@ -77,7 +81,17 @@ public class ClientSendThread extends Thread { while (true) { try { s = br.readLine(); - send(rsa.encrypt(s, recipientE, recipientN)); + if ("DISCONNECT".equals(s)) { + send(rsa.encrypt(s, se, sn)); + break; + } else if ("CD".equals(s)) { + send(rsa.encrypt(s, se, sn)); + s = br.readLine(); + send(rsa.encrypt(s, se, sn)); + } else { + send(rsa.encrypt(s, recipientE, recipientN)); + send(rsa.encrypt(s, myE, myN)); + } } catch (IOException ex) { Logger.getLogger(ClientSendThread.class.getName()).log(Level.SEVERE, null, ex); } @@ -102,4 +116,9 @@ public class ClientSendThread extends Thread { out.newLine(); out.flush(); } + + public static void setPK(BigInteger e, BigInteger n) { + recipientE = e; + recipientN = n; + } }