summaryrefslogtreecommitdiffstats
path: root/tools/notes/notes.go
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2025-09-29 21:10:00 -0700
committerRose Hogenson <rosehogenson@posteo.net>2025-09-29 21:54:36 -0700
commit36e28b20fb771b3750ee6adeabd93c89ccc53148 (patch)
treef17878543259b4e9f6bca4c77a09f248631777e4 /tools/notes/notes.go
parentd89116e9e4ae7e15c69c5ce8d56940cfa71c9dd1 (diff)
downloadroseh.moe-36e28b20fb771b3750ee6adeabd93c89ccc53148.tar.zst
Implement "online authenticated encryption"
Diffstat (limited to 'tools/notes/notes.go')
-rw-r--r--tools/notes/notes.go34
1 files changed, 13 insertions, 21 deletions
diff --git a/tools/notes/notes.go b/tools/notes/notes.go
index 03070f7..adc7e6a 100644
--- a/tools/notes/notes.go
+++ b/tools/notes/notes.go
@@ -183,6 +183,17 @@ func (*newCommand) Usage() string {
func (*newCommand) SetFlags(*flag.FlagSet) {}
+type createNoteRequestStreamWriter struct {
+ w *gob.Encoder
+}
+
+func (w *createNoteRequestStreamWriter) Write(buf []byte) (int, error) {
+ if err := w.w.Encode(&api.CreateNoteRequestStream{Chunk: buf}); err != nil {
+ return 0, err
+ }
+ return len(buf), nil
+}
+
func (*newCommand) new(ctx context.Context, fileName string) error {
f, err := os.Open(fileName)
if err != nil {
@@ -200,27 +211,8 @@ func (*newCommand) new(ctx context.Context, fileName string) error {
}
req.Header.Set("Roseh-Token", token)
go func() {
- defer w.Close()
- w := gob.NewEncoder(w)
- buf := make([]byte, 4*1024*1024)
- for {
- n, err := f.Read(buf)
- if n > 0 {
- if err := w.Encode(&api.CreateNoteRequestStream{Chunk: buf[:n]}); err != nil {
- if err != io.ErrClosedPipe {
- fmt.Fprintf(os.Stderr, "upload file: %s\n", err)
- }
- return
- }
- }
- if err != nil {
- if errors.Is(err, io.EOF) {
- break
- }
- fmt.Fprintf(os.Stderr, "read file: %s\n", err)
- return
- }
- }
+ io.Copy(&createNoteRequestStreamWriter{gob.NewEncoder(w)}, f)
+ w.Close()
}()
resp, err := readGobResp[api.CreateNoteResponse](req)
if err != nil {