浏览代码

Save 07-11-2025 W-Seminar Abgabe

Jan 2 月之前
父节点
当前提交
6e3deac51d

+ 1 - 3
src/main/java/model/Chat.java

@@ -29,9 +29,7 @@ public class Chat {
 
     public void decryptWholeChat(PrivateKey privateKey, PublicKey publicKey) throws Exception {
         for(Message message: messages){
-            if(message.getSenderKey().equals(targetKey)){
-                message.decrypt(privateKey, publicKey);
-            }
+            message.decrypt(privateKey, publicKey);
         }
     }
 

+ 8 - 8
src/main/java/model/Message.java

@@ -12,6 +12,7 @@ public class Message implements Serializable {
     private boolean directMessage;
     private String fromIp;
     private long timestamp;
+    private String content;
     private String contentForReceiver;
     private String contentForSender;
     private boolean encrypted = false;
@@ -32,17 +33,19 @@ public class Message implements Serializable {
         if (!encrypted) {
             this.contentForSender = CryptoUtils.encrypt(contentForSender, senderKey);
             this.contentForReceiver = CryptoUtils.encrypt(contentForReceiver, receiverKey);
+            content = "";
             encrypted = true;
         }
     }
 
     public void decrypt(PrivateKey privateKey, PublicKey publicKey) throws Exception {
-        if (!encrypted) {
+        if (encrypted) {
             if (didISendThis(publicKey)) {
-                this.contentForSender = CryptoUtils.decrypt(contentForSender, privateKey);
+                this.content = CryptoUtils.decrypt(contentForSender, privateKey);
             } else {
-                this.contentForReceiver =CryptoUtils.decrypt(contentForReceiver, privateKey);
+                this.content = CryptoUtils.decrypt(contentForReceiver, privateKey);
             }
+            encrypted = false;
         }
     }
 
@@ -53,11 +56,8 @@ public class Message implements Serializable {
     public PublicKey getSenderKey(){
         return senderKey;
     }
-    public String getContentForReceiver(){
-        return contentForReceiver;
-    }
-    public String getContentForSender(){
-        return contentForSender;
+    public String getContent(){
+        return content;
     }
     public void setDirectMessage(String fromIp, int port){
         directMessage = true;

+ 4 - 3
src/main/java/net/direct/DirectClient.java

@@ -19,7 +19,7 @@ public class DirectClient {
         out = new ObjectOutputStream(socket.getOutputStream());
         in = new ObjectInputStream(socket.getInputStream());
 
-        new Thread(() -> {
+        Thread connectionThread = new Thread(() -> {
             System.out.println("Startet DirectClient! Connecting to '" + ip + "' on Port: "+ port);
             try {
                 Object msg;
@@ -30,9 +30,10 @@ public class DirectClient {
                     }
                 }
             } catch (Exception e) {
-                e.printStackTrace();
+                System.out.println("Either you or the other Peer disconnected! Aborting this Connection...");
             }
-        }).start();
+        });
+        connectionThread.start();
     }
 
     public void send(Object msg) {

+ 4 - 2
src/main/java/net/direct/DirectServer.java

@@ -4,6 +4,7 @@ import java.io.*;
 import java.net.*;
 
 import config.Config;
+import crypto.KeyManager;
 import model.Message;
 import net.RelayClient;
 
@@ -45,11 +46,12 @@ public class DirectServer extends Thread {
             while ((msg = in.readObject()) != null) {
                 System.out.println("Received message: " + msg);
                 if(msg instanceof Message){
+                    ((Message) msg).decrypt(KeyManager.getPrivateKey(), KeyManager.getPublicKey());
                     messageReceiver.onMessage((Message) msg);
                 }
             }
-        } catch (IOException | ClassNotFoundException e) {
-            e.printStackTrace();
+        } catch (Exception e) {
+            System.out.println("Either you or the other Peer disconnected! Aborting this Connection...");
         }
     }
 }

+ 3 - 3
src/main/java/ui/ChatWindow.java

@@ -197,9 +197,9 @@ public class ChatWindow extends JFrame implements RelayClient.MessageReceiver {
         chat.decryptWholeChat(KeyManager.getPrivateKey(), KeyManager.getPublicKey());
         for (Message msg : chat.getMessages()) {
             if (msg.didISendThis(KeyManager.getPublicKey())) {
-                chatArea.append("Du: " + msg.getContentForSender() + "\n");
+                chatArea.append("Du: " + msg.getContent() + "\n");
             } else {
-                chatArea.append(targetName + ": " + msg.getContentForReceiver() + "\n");
+                chatArea.append(targetName + ": " + msg.getContent() + "\n");
             }
         }
     }
@@ -207,7 +207,7 @@ public class ChatWindow extends JFrame implements RelayClient.MessageReceiver {
     @Override
     public void onMessage(Message msg) {
         mainWindow.onMessage(msg);
-        SwingUtilities.invokeLater(() -> chatArea.append(targetName + ": " + msg.getContentForSender() + "\n"));
+        SwingUtilities.invokeLater(() -> chatArea.append(targetName + ": " + msg.getContent() + "\n"));
     }
 
     public Chat getChat() {

+ 25 - 19
src/main/java/ui/MainWindow.java

@@ -196,31 +196,37 @@ public class MainWindow extends JFrame implements RelayClient.MessageReceiver {
 
     @Override
     public void onMessage(Message msg) {
-        PublicKey senderPublicKey = msg.getSenderKey();
-        boolean found = false;
-        for(Chat chat : chatHashMap.values()){
-            if(chat.getTargetKey().equals(senderPublicKey)){
-                chat.addMessage(msg);
-                for(ChatWindow chatWindow : openChatWindows){
-                    if(chatWindow.getChat().getTargetKey().equals(senderPublicKey)){
-                        chatWindow.addMessage(msg);
-                    }
-                }
-                found = true;
+        PublicKey senderKey = msg.getSenderKey();
+
+        if (senderKey.equals(KeyManager.getPublicKey())) {
+            return;
+        }
+
+        Chat chat = null;
+        for (Chat existingChat : chatHashMap.values()) {
+            if (existingChat.getTargetKey().equals(senderKey)) {
+                chat = existingChat;
+                break;
             }
         }
-        if(!found && !senderPublicKey.equals(KeyManager.getPublicKey())){
-            Chat newChat;
-            if(!msg.isDirectMessage()){
-                newChat = new Chat(true, Config.RELAY_SERVER_IP, Config.RELAY_SERVER_PORT, msg.getSenderKey());
 
-            }else {
-                newChat = new Chat(false, msg.getFromIp(), msg.getUsingPort(), msg.getSenderKey());
+        if (chat == null) {
+            if (msg.isDirectMessage()) {
+                chat = new Chat(false, msg.getFromIp(), msg.getUsingPort(), senderKey);
+            } else {
+                chat = new Chat(true, Config.RELAY_SERVER_IP, Config.RELAY_SERVER_PORT, senderKey);
             }
-            newChat.addMessage(msg);
-            chatHashMap.put(KeyManager.publicKeyToString(senderPublicKey), newChat);
+            chatHashMap.put(KeyManager.publicKeyToString(senderKey).substring(0, 6), chat);
             updateChatList();
         }
+
+        chat.addMessage(msg);
+
+        for (ChatWindow window : openChatWindows) {
+            if (window.getChat().getTargetKey().equals(senderKey)) {
+                window.addMessage(msg);
+            }
+        }
     }
 
     public void closedWindow(ChatWindow closedWindow) {