[PD2] Code almost all done. Need to add logout and change help message

Co-authored-by: tsousa111 <tiagao2001@hotmail.com>
This commit is contained in:
Afonso Franco 2024-05-31 19:23:41 +01:00
parent e2c3d75223
commit 6f8219d991
Signed by: afonso
SSH key fingerprint: SHA256:PQTRDHPH3yALEGtHXnXBp3Orfcn21pK20t0tS1kHg54
12 changed files with 123 additions and 212 deletions

View file

@ -52,7 +52,7 @@ func Run() {
printError(err.Error())
os.Exit(1)
}
token := string(tokenFile)
token = string(tokenFile)
if token == "" {
printError("MSG SERVICE: token read error")
os.Exit(1)
@ -119,13 +119,7 @@ func Run() {
showMessage(msg)
case "register":
// call register
if flag.NArg() > 2 {
printError("MSG SERVICE: command error!")
showHelp()
os.Exit(1)
}
userId := flag.Arg(1)
if userId == "" {
if flag.NArg() != 1 {
printError("MSG SERVICE: command error!")
showHelp()
os.Exit(1)
@ -143,12 +137,12 @@ func Run() {
os.Exit(1)
}
err := registerUser(userId, password, clientKeyStore)
err := registerUser(myUID, password, clientKeyStore)
if err != nil {
printError(err.Error())
os.Exit(1)
}
// TODO: print register successful
printInfo("Registered successfully")
case "login":
if flag.NArg() != 1 {
printError("MSG SERVICE: command error!")
@ -173,14 +167,13 @@ func Run() {
os.Exit(1)
}
defer tokenFile.Close()
// TODO: Maybe encrypt token
_, err = tokenFile.WriteString(token)
if err != nil {
printError(err.Error())
os.Exit(1)
}
printInfo("Login was successful")
// TODO: print logged in
case "help":
showHelp()
@ -209,7 +202,7 @@ func registerUser(userId string, password string, clientKeyStore cryptoUtils.Key
if err != nil {
return err
}
parsedURL.JoinPath("register")
parsedURL = parsedURL.JoinPath("register")
req, err := http.NewRequest("POST", parsedURL.String(), bytes.NewBuffer(jsonData))
if err != nil {
@ -229,8 +222,8 @@ func registerUser(userId string, password string, clientKeyStore cryptoUtils.Key
}
if resp.StatusCode != http.StatusOK {
var reportError protocol.ReportError
if err := json.Unmarshal(responseBody, &reportError); err != nil {
reportError := new(protocol.ReportError)
if err := json.Unmarshal(responseBody, reportError); err != nil {
return err
}
return errors.New(reportError.ErrorMessage)
@ -252,7 +245,7 @@ func login(userId string, password string, clientKeyStore cryptoUtils.KeyStore)
if err != nil {
return "", err
}
parsedURL.JoinPath("login")
parsedURL = parsedURL.JoinPath("login")
req, err := http.NewRequest("POST", parsedURL.String(), bytes.NewBuffer(jsonData))
if err != nil {
@ -272,8 +265,8 @@ func login(userId string, password string, clientKeyStore cryptoUtils.KeyStore)
}
if resp.StatusCode != http.StatusOK {
var reportError protocol.ReportError
if err := json.Unmarshal(responseBody, &reportError); err != nil {
reportError := new(protocol.ReportError)
if err := json.Unmarshal(responseBody, reportError); err != nil {
return "", err
}
return "", errors.New(reportError.ErrorMessage)
@ -319,7 +312,7 @@ func sendCommand(clientKeyStore cryptoUtils.KeyStore, plainSubject, plainBody, r
if err != nil {
return fmt.Errorf("error parsing URL: %v", err)
}
parsedURL.JoinPath("message")
parsedURL = parsedURL.JoinPath("message")
sendMsgPacket := protocol.NewSendMsg(recieverUID, subject, body)
@ -328,12 +321,11 @@ func sendCommand(clientKeyStore cryptoUtils.KeyStore, plainSubject, plainBody, r
return fmt.Errorf("error marshaling JSON: %v", err)
}
//TODO: ADD THE HEADER WITH THE TOKEN
req, err := http.NewRequest("POST", parsedURL.String(), bytes.NewBuffer(jsonData))
if err != nil {
return fmt.Errorf("error creating request: %v", err)
}
req.Header.Add("Token",token)
req.Header.Set("Token", token)
resp, err := client.Do(req)
if err != nil {
@ -348,8 +340,8 @@ func sendCommand(clientKeyStore cryptoUtils.KeyStore, plainSubject, plainBody, r
}
if resp.StatusCode != http.StatusOK {
var reportError protocol.ReportError
if err := json.Unmarshal(responseBody, &reportError); err != nil {
reportError := new(protocol.ReportError)
if err := json.Unmarshal(responseBody, reportError); err != nil {
return err
}
return errors.New(reportError.ErrorMessage)
@ -366,21 +358,14 @@ func getMsgCommand(clientKeyStore cryptoUtils.KeyStore, num int, token string) (
if err != nil {
return ClientMessage{}, fmt.Errorf("error parsing URL: %v", err)
}
parsedURL.JoinPath("message")
parsedURL = parsedURL.JoinPath("message")
parsedURL = parsedURL.JoinPath(fmt.Sprint(num))
newGetMsg := protocol.NewGetMsg(num)
jsonData, err := json.Marshal(newGetMsg)
if err != nil {
return ClientMessage{}, fmt.Errorf("error marshaling JSON: %v", err)
}
//TODO: ADD THE HEADER WITH THE TOKEN
req, err := http.NewRequest("GET", parsedURL.String(), bytes.NewBuffer(jsonData))
req, err := http.NewRequest("GET", parsedURL.String(), nil)
if err != nil {
return ClientMessage{}, fmt.Errorf("error creating request: %v", err)
}
req.Header.Add("Token",token)
req.Header.Set("Token", token)
resp, err := client.Do(req)
if err != nil {
@ -396,15 +381,15 @@ func getMsgCommand(clientKeyStore cryptoUtils.KeyStore, num int, token string) (
}
if resp.StatusCode != http.StatusOK {
var reportError protocol.ReportError
if err := json.Unmarshal(body, &reportError); err != nil {
reportError := new(protocol.ReportError)
if err := json.Unmarshal(body, reportError); err != nil {
return ClientMessage{}, err
}
return ClientMessage{}, errors.New(reportError.ErrorMessage)
}
var answerGetMsg protocol.AnswerGetMsg
if err := json.Unmarshal(body, &answerGetMsg); err != nil {
answerGetMsg := new(protocol.AnswerGetMsg)
if err := json.Unmarshal(body, answerGetMsg); err != nil {
return ClientMessage{}, err
}
@ -448,15 +433,14 @@ func getUserCert(keyStore cryptoUtils.KeyStore, uid string, token string) (*x509
if err != nil {
return nil, fmt.Errorf("error parsing URL: %v", err)
}
parsedURL.JoinPath("cert")
parsedURL.JoinPath(uid)
parsedURL = parsedURL.JoinPath("cert")
parsedURL = parsedURL.JoinPath(uid)
//TODO: ADD THE HEADER WITH THE TOKEN
req, err := http.NewRequest("GET", parsedURL.String(), nil)
if err != nil {
return nil, fmt.Errorf("error creating request: %v", err)
}
req.Header.Add("Token",token)
req.Header.Set("Token", token)
resp, err := client.Do(req)
if err != nil {
@ -471,8 +455,8 @@ func getUserCert(keyStore cryptoUtils.KeyStore, uid string, token string) (*x509
}
if resp.StatusCode == http.StatusOK {
var answerGetUserCert protocol.AnswerGetUserCert
if err := json.Unmarshal(body, &answerGetUserCert); err != nil {
answerGetUserCert := new(protocol.AnswerGetUserCert)
if err := json.Unmarshal(body, answerGetUserCert); err != nil {
return nil, err
}
@ -485,8 +469,8 @@ func getUserCert(keyStore cryptoUtils.KeyStore, uid string, token string) (*x509
}
return userCert, nil
} else {
var reportError protocol.ReportError
if err := json.Unmarshal(body, &reportError); err != nil {
reportError := new(protocol.ReportError)
if err := json.Unmarshal(body, reportError); err != nil {
return nil, err
}
return nil, errors.New(reportError.ErrorMessage)
@ -502,21 +486,18 @@ func getUnreadMessagesInfo(keyStore cryptoUtils.KeyStore, page int, pageSize int
if err != nil {
return protocol.AnswerGetUnreadMsgsInfo{}, nil, fmt.Errorf("error parsing URL: %v", err)
}
parsedURL.JoinPath("queue")
parsedURL = parsedURL.JoinPath("queue")
getUnreadMessagesInfo := protocol.NewGetUnreadMsgsInfo(page, pageSize)
query := parsedURL.Query()
query.Set("page", fmt.Sprint(page))
query.Set("pagesize", fmt.Sprint(pageSize))
parsedURL.RawQuery = query.Encode()
jsonData, err := json.Marshal(getUnreadMessagesInfo)
if err != nil {
return protocol.AnswerGetUnreadMsgsInfo{}, nil, fmt.Errorf("error marshaling JSON: %v", err)
}
//TODO: ADD THE HEADER WITH THE TOKEN
req, err := http.NewRequest("GET", parsedURL.String(), bytes.NewBuffer(jsonData))
req, err := http.NewRequest("GET", parsedURL.String(), nil)
if err != nil {
return protocol.AnswerGetUnreadMsgsInfo{}, nil, fmt.Errorf("error creating request: %v", err)
}
req.Header.Add("Token",token)
req.Header.Set("Token", token)
resp, err := client.Do(req)
if err != nil {
@ -531,12 +512,12 @@ func getUnreadMessagesInfo(keyStore cryptoUtils.KeyStore, page int, pageSize int
}
if resp.StatusCode == http.StatusOK {
//Create Set of needed certificates
var answerGetUnreadMsgsInfo protocol.AnswerGetUnreadMsgsInfo
if err := json.Unmarshal(body, &answerGetUnreadMsgsInfo); err != nil {
answerGetUnreadMsgsInfo := new(protocol.AnswerGetUnreadMsgsInfo)
if err := json.Unmarshal(body, answerGetUnreadMsgsInfo); err != nil {
return protocol.AnswerGetUnreadMsgsInfo{}, nil, err
}
//Create Set of needed certificates
senderSet := map[string]bool{}
for _, messageInfo := range answerGetUnreadMsgsInfo.MessagesInfo {
senderSet[messageInfo.FromUID] = true
@ -550,10 +531,10 @@ func getUnreadMessagesInfo(keyStore cryptoUtils.KeyStore, page int, pageSize int
certificatesMap[senderUID] = senderCert
}
}
return answerGetUnreadMsgsInfo, certificatesMap, nil
return *answerGetUnreadMsgsInfo, certificatesMap, nil
} else {
var reportError protocol.ReportError
if err := json.Unmarshal(body, &reportError); err != nil {
reportError := new(protocol.ReportError)
if err := json.Unmarshal(body, reportError); err != nil {
return protocol.AnswerGetUnreadMsgsInfo{}, nil, err
}
return protocol.AnswerGetUnreadMsgsInfo{}, nil, errors.New(reportError.ErrorMessage)

View file

@ -4,7 +4,6 @@ import (
"bufio"
"fmt"
"os"
"strings"
)
func readStdin(message string) string {
@ -14,6 +13,10 @@ func readStdin(message string) string {
return scanner.Text()
}
func printInfo(info string){
fmt.Println(info)
}
func printError(err string) {
fmt.Fprintln(os.Stderr, err)
}
@ -27,10 +30,10 @@ func showHelp() {
fmt.Println("help: Imprime instruções de uso do programa.")
}
func showMessagesInfo(page int, numPages int, messages []ClientMessageInfo) int {
func showMessagesInfo(page int, numPages int, messages []ClientMessageInfo) {
if messages == nil {
fmt.Println("No unread messages in the queue")
return 0
return
}
for _, message := range messages {
if message.decryptError != nil {
@ -41,47 +44,6 @@ func showMessagesInfo(page int, numPages int, messages []ClientMessageInfo) int
}
}
fmt.Printf("Page %v/%v\n", page, numPages)
return messagesInfoPageNavigation(page, numPages)
}
func messagesInfoPageNavigation(page int, numPages int) int {
var action string
switch page {
case 1:
if page == numPages {
return 0
} else {
action = readStdin("Actions: quit/next")
}
case numPages:
action = readStdin("Actions: prev/quit")
default:
action = readStdin("prev/quit/next")
}
switch strings.ToLower(action) {
case "prev":
if page == 1 {
fmt.Println("Unavailable action: Already in first page")
messagesInfoPageNavigation(page, numPages)
} else {
return -1
}
case "quit":
return 0
case "next":
if page == numPages {
fmt.Println("Unavailable action: Already in last page")
messagesInfoPageNavigation(page, numPages)
} else {
return 1
}
default:
fmt.Println("Unknown action")
messagesInfoPageNavigation(page, numPages)
}
return 0
}
func showMessage(message ClientMessage) {