From 76fc7c9f8b131d0bf15b1a19ec38c49c6de6e7cf Mon Sep 17 00:00:00 2001
From: Kevin Lyda <kevin@ie.suberic.net>
Date: Tue, 31 Jul 2018 08:40:22 +0100
Subject: [PATCH] Provide a way to offer chunked tokens.
---
cmd/cashier/main.go | 12 +++++++++---
server/web.go | 25 +++++++++++++++++++++++++
2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/cmd/cashier/main.go b/cmd/cashier/main.go
index 2b243648..acbaed7f 100644
--- a/cmd/cashier/main.go
+++ b/cmd/cashier/main.go
@@ -2,12 +2,14 @@ package main
import (
"bufio"
+ "bytes"
"fmt"
"log"
"net"
"os"
"os/user"
"path"
+ "strings"
"time"
"github.com/nsheridan/cashier/client"
@@ -49,12 +51,16 @@ func main() {
}
fmt.Print("Enter token: ")
- var token string
- fmt.Scanln(&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])
+ }
+ buffer.WriteString(scanner.Text())
+ token := buffer.String()
var message string
fmt.Print("Enter message: ")
- scanner := bufio.NewScanner(os.Stdin)
if scanner.Scan() {
message = scanner.Text()
}
diff --git a/server/web.go b/server/web.go
index 08162d51..a67d5f3e 100644
--- a/server/web.go
+++ b/server/web.go
@@ -1,6 +1,7 @@
package server
import (
+ "bytes"
"crypto/rand"
"encoding/hex"
"encoding/json"
@@ -181,6 +182,29 @@ 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
+ }
+
+ var buffer bytes.Buffer
+ runes := []rune(s)
+
+ for i := 0; i < len(runes); i += chunkSize {
+ end := i + chunkSize
+ if end > len(runes) {
+ end = len(runes)
+ }
+ buffer.WriteString(string(runes[i:end]))
+ buffer.WriteString("+++\n")
+ }
+ chunks := buffer.String()
+ if len(chunks) > 0 {
+ chunks = chunks[:len(chunks)-4]
+ }
+ return chunks
+}
+
// rootHandler starts the auth process. If the client is authenticated it renders the token to the user.
func rootHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int, error) {
if !a.isLoggedIn(w, r) {
@@ -190,6 +214,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)
tmpl := template.Must(template.New("token.html").Parse(templates.Token))
tmpl.Execute(w, page)
--
GitLab