92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package client
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
func readStdin(message string) string {
|
|
fmt.Println(message)
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
scanner.Scan()
|
|
return scanner.Text()
|
|
}
|
|
|
|
func printError(err string) {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
}
|
|
|
|
func showHelp() {
|
|
fmt.Println("Comandos da aplicação cliente:")
|
|
fmt.Println("-user <FNAME>: Especifica o ficheiro com dados do utilizador. Por omissão, será assumido que esse ficheiro é userdata.p12.")
|
|
fmt.Println("send <UID> <SUBJECT>: Envia uma mensagem com assunto <SUBJECT> destinada ao utilizador com identificador <UID>. O conteúdo da mensagem será lido do stdin, e o tamanho deve ser limitado a 1000 bytes.")
|
|
fmt.Println("askqueue: Solicita ao servidor que lhe envie a lista de mensagens não lidas da queue do utilizador.")
|
|
fmt.Println("getmsg <NUM>: Solicita ao servidor o envio da mensagem da sua queue com número <NUM>.")
|
|
fmt.Println("help: Imprime instruções de uso do programa.")
|
|
}
|
|
|
|
func showMessagesInfo(page int, numPages int, messages []ClientMessageInfo) int {
|
|
if messages == nil {
|
|
fmt.Println("No unread messages in the queue")
|
|
return 0
|
|
}
|
|
for _, message := range messages {
|
|
if message.decryptError != nil {
|
|
fmt.Printf("ERROR: %v:%v:%v:", message.Num, message.FromUID, message.Timestamp)
|
|
fmt.Println(message.decryptError)
|
|
} else {
|
|
fmt.Printf("%v:%v:%v:%v\n", message.Num, message.FromUID, message.Timestamp, message.Subject)
|
|
}
|
|
}
|
|
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) {
|
|
fmt.Printf("From: %s\n", message.FromUID)
|
|
fmt.Printf("To: %s\n", message.ToUID)
|
|
fmt.Printf("Subject: %s\n", message.Subject)
|
|
fmt.Printf("Body: %s\n", message.Body)
|
|
}
|