diff --git a/cmd/cashier/main.go b/cmd/cashier/main.go index acbaed7fccb46e4a53174d60a9c55bc4b64a890a..c62a61695c55a9294f81b9c42743127f41adfdbb 100644 --- a/cmd/cashier/main.go +++ b/cmd/cashier/main.go @@ -3,13 +3,13 @@ package main import ( "bufio" "bytes" + "encoding/base64" "fmt" "log" "net" "os" "os/user" "path" - "strings" "time" "github.com/nsheridan/cashier/client" @@ -53,11 +53,14 @@ func main() { fmt.Print("Enter token: ") scanner := bufio.NewScanner(os.Stdin) var buffer bytes.Buffer - for scanner.Scan(); strings.HasSuffix(scanner.Text(), "+++"); scanner.Scan() { - buffer.WriteString(scanner.Text()[:len(scanner.Text())-4]) + for scanner.Scan(); scanner.Text() == ".\n"; scanner.Scan() { + buffer.WriteString(scanner.Text()) } - buffer.WriteString(scanner.Text()) - token := buffer.String() + tokenBytes, err := base64.StdEncoding.DecodeString(buffer.String()) + if err != nil { + log.Fatalln(err) + } + token := string(tokenBytes) var message string fmt.Print("Enter message: ") diff --git a/server/web.go b/server/web.go index a67d5f3e42dc7a3047fd2dfba144afa1bc58ec40..09f7246c93ffb5833defc84850e6bd417723dccf 100644 --- a/server/web.go +++ b/server/web.go @@ -3,6 +3,7 @@ package server import ( "bytes" "crypto/rand" + "encoding/base64" "encoding/hex" "encoding/json" "fmt" @@ -182,13 +183,10 @@ func callbackHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int return http.StatusFound, nil } -func chunkString(s string, chunkSize int) string { - if len(s) <= chunkSize { - return s - } - +func encodeString(s string) string { var buffer bytes.Buffer - runes := []rune(s) + chunkSize := 70 + runes := []rune(base64.StdEncoding.EncodeToString([]byte(s))) for i := 0; i < len(runes); i += chunkSize { end := i + chunkSize @@ -196,13 +194,10 @@ func chunkString(s string, chunkSize int) string { end = len(runes) } buffer.WriteString(string(runes[i:end])) - buffer.WriteString("+++\n") - } - chunks := buffer.String() - if len(chunks) > 0 { - chunks = chunks[:len(chunks)-4] + buffer.WriteString("\n") } - return chunks + buffer.WriteString(".\n") + return buffer.String() } // rootHandler starts the auth process. If the client is authenticated it renders the token to the user. @@ -214,7 +209,7 @@ func rootHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int, er page := struct { Token string }{tok.AccessToken} - page.Token = chunkString(page.Token, 250) + page.Token = encodeString(page.Token) tmpl := template.Must(template.New("token.html").Parse(templates.Token)) tmpl.Execute(w, page)