[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:
parent
e2c3d75223
commit
6f8219d991
12 changed files with 123 additions and 212 deletions
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue