diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2025-09-29 21:10:00 -0700 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2025-09-29 21:54:36 -0700 |
| commit | 36e28b20fb771b3750ee6adeabd93c89ccc53148 (patch) | |
| tree | f17878543259b4e9f6bca4c77a09f248631777e4 /tools/notes/notes.go | |
| parent | d89116e9e4ae7e15c69c5ce8d56940cfa71c9dd1 (diff) | |
| download | roseh.moe-36e28b20fb771b3750ee6adeabd93c89ccc53148.tar.zst | |
Implement "online authenticated encryption"
Diffstat (limited to 'tools/notes/notes.go')
| -rw-r--r-- | tools/notes/notes.go | 34 |
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 { |
