From 4c141bbc6e81913097e152bb6e59df2354949013 Mon Sep 17 00:00:00 2001 From: afonso <afonso@francof.net> Date: Sat, 20 Apr 2024 00:55:16 +0100 Subject: [PATCH] [PD1] Logic all done? --- Projs/PD1/internal/client/client.go | 51 +++++++++++-------------- Projs/PD1/internal/server/datastore.go | 13 ++++--- Projs/PD1/internal/server/server.go | 1 + Projs/PD1/server.db | Bin 20480 -> 32768 bytes 4 files changed, 31 insertions(+), 34 deletions(-) diff --git a/Projs/PD1/internal/client/client.go b/Projs/PD1/internal/client/client.go index 3f8487e..3afbda7 100644 --- a/Projs/PD1/internal/client/client.go +++ b/Projs/PD1/internal/client/client.go @@ -6,8 +6,9 @@ import ( "PD1/internal/utils/networking" "crypto/x509" "flag" - "fmt" + "log" "sort" + "strconv" ) func Run() { @@ -76,40 +77,33 @@ func Run() { showMessagesInfo(clientMessages) - //case "getall": - // cl := networking.NewClient[protocol.Packet](&clientKeyStore) - // defer cl.Connection.Conn.Close() - - // requestAllMsgPacket := protocol.NewRequestAllMsgPacket() - // if !cl.Connection.Send(requestAllMsgPacket) { - // return - // } - // serverMessagePackets,certificates := getManyMessages(cl) - // var clientMessages []ClientMessage - // for _, message := range serverMessagePackets { - // senderCert, ok := certificates[message.FromUID] - // if ok { - // decryptedContentBytes := clientKeyStore.DecryptMessageContent(senderCert, message.Content) - // content := UnmarshalContent(decryptedContentBytes) - // clientMessage := newClientMessage(message.FromUID, message.ToUID, content, message.Timestamp) - // clientMessages = append(clientMessages, clientMessage) - // } - // } - // //Sort the messages - // sort.Slice(clientMessages, func(i, j int) bool { - // return clientMessages[i].Timestamp.After(clientMessages[j].Timestamp) - // }) - - // showMessages(clientMessages) - case "getmsg": if flag.NArg() < 2 { panic("Insufficient arguments for 'getmsg' command. Usage: getmsg <NUM>") } - //num := flag.Arg(1) + numString := flag.Arg(1) cl := networking.NewClient[protocol.Packet](&clientKeyStore) defer cl.Connection.Conn.Close() + num,err :=strconv.Atoi(numString) + if err!=nil{ + log.Panicln("NUM argument provided is not a number") + } + packet := protocol.NewRequestMsgPacket(num) + cl.Connection.Send(packet) + receivedMsgPacket,active := cl.Connection.Receive() + if !active{ + return + } + serverMessagePacket := protocol.UnmarshalServerMessagePacket(receivedMsgPacket.Body) + senderCert := getUserCert(cl, serverMessagePacket.FromUID) + decryptedSubjectBytes := clientKeyStore.DecryptMessageContent(senderCert, serverMessagePacket.Subject) + decryptedBodyBytes := clientKeyStore.DecryptMessageContent(senderCert, serverMessagePacket.Body) + subject := Unmarshal(decryptedSubjectBytes) + body := Unmarshal(decryptedBodyBytes) + message := newClientMessage(serverMessagePacket.FromUID, serverMessagePacket.ToUID, subject, body, serverMessagePacket.Timestamp) + showMessage(message) + case "help": showHelp() @@ -163,7 +157,6 @@ func getManyMessagesInfo(cl networking.Client[protocol.Packet]) ([]protocol.Serv //Get senders' certificates for senderUID := range senderSet { senderCert := getUserCert(cl, senderUID) - fmt.Println("Got a User cert") certificatesMap[senderUID] = senderCert } return serverMessageInfoPackets, certificatesMap diff --git a/Projs/PD1/internal/server/datastore.go b/Projs/PD1/internal/server/datastore.go index 75e54e9..9229077 100644 --- a/Projs/PD1/internal/server/datastore.go +++ b/Projs/PD1/internal/server/datastore.go @@ -63,7 +63,6 @@ func (ds DataStore) GetMessage(toUID string, position int) protocol.Packet { SELECT fromUID, toUID, subject, body, timestamp FROM messages WHERE toUID = ? - AND status = 0 ORDER BY timestamp LIMIT 1 OFFSET ? ` @@ -81,10 +80,14 @@ func (ds DataStore) GetMessage(toUID string, position int) protocol.Packet { func (ds DataStore) MarkMessageInQueueAsRead(toUID string, position int) { query := ` UPDATE messages - SET status = 1 - WHERE toUID = ? AND status = 0 - ORDER BY timestamp - LIMIT 1 OFFSET ? + SET status = 1 + WHERE (fromUID,toUID,timestamp) = ( + SELECT fromUID,toUID,timestamp + FROM messages + WHERE toUID = ? + ORDER BY timestamp + LIMIT 1 OFFSET ? + ) ` // Execute the SQL statement diff --git a/Projs/PD1/internal/server/server.go b/Projs/PD1/internal/server/server.go index ba22925..1f2863a 100644 --- a/Projs/PD1/internal/server/server.go +++ b/Projs/PD1/internal/server/server.go @@ -48,6 +48,7 @@ F: if active := connection.Send(message); !active { break F } + dataStore.MarkMessageInQueueAsRead(UID, reqMsg.Num) case protocol.SubmitMsgPkt: submitMsg := protocol.UnmarshalSubmitMessagePacket(pac.Body) if submitMsg.ToUID != UID && dataStore.userExists(submitMsg.ToUID) { diff --git a/Projs/PD1/server.db b/Projs/PD1/server.db index 649678698dfe3251187c804538aa52326f6c92f8..b5ed3b148273dff98bb8afe342732e7866c2a5a9 100644 GIT binary patch delta 4612 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 delta 48 zcmZo@U}{*vI6<0~n}LCWb)tejBlpIH1^SBu1bDcBB8>c37=Vanv!KEW{>fMTbpRV* B3_t(?