From 36e28b20fb771b3750ee6adeabd93c89ccc53148 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Mon, 29 Sep 2025 21:10:00 -0700 Subject: Implement "online authenticated encryption" --- tools/notes/notes.go | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) (limited to 'tools/notes') 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 { -- cgit v1.3.1