From: Sergey Matveev Date: Fri, 21 May 2021 14:37:44 +0000 (+0300) Subject: Simplify notification code X-Git-Tag: v1.4.0^0 X-Git-Url: http://www.git.stargrave.org/?p=uploader.git;a=commitdiff_plain;h=d53db4887bee299339a0ef60558dc4733c3a2fe1 Simplify notification code --- diff --git a/main.go b/main.go index 8a39053..0b97083 100644 --- a/main.go +++ b/main.go @@ -72,39 +72,6 @@ $ b2sum somedata.tar.gpg # to verify BLAKE2b-512 checksum Jobs sync.WaitGroup ) -func notify(tai, filename string, size int64, comment string) { - defer Jobs.Done() - if *NotifyToAddr == "" { - return - } - var rec bytes.Buffer - w := recfile.NewWriter(&rec) - w.WriteFields( - recfile.Field{Name: "TAI64N", Value: tai}, - recfile.Field{Name: "Size", Value: strconv.FormatInt(size, 10)}, - recfile.Field{Name: "Filename", Value: filename}, - ) - w.WriteFieldMultiline("Comment", strings.Split(comment, "\n")) - cmd := exec.Command(SendmailCmd, *NotifyToAddr) - cmd.Stdin = io.MultiReader( - strings.NewReader(fmt.Sprintf( - `From: %s -To: %s -Subject: %s -MIME-Version: 1.0 -Content-Type: text/plain; charset=utf-8 -Content-Transfer-Encoding: base64 - -`, - *NotifyFromAddr, - *NotifyToAddr, - mime.BEncoding.Encode("UTF-8", fmt.Sprintf("%s (%d KiB)", filename, size/1024)), - )), - strings.NewReader(base64.StdEncoding.EncodeToString(rec.Bytes())), - ) - cmd.Run() -} - func upload(w http.ResponseWriter, r *http.Request) { log.Println(r.RemoteAddr, "connected") if r.Method == http.MethodGet { @@ -172,6 +139,7 @@ func upload(w http.ResponseWriter, r *http.Request) { log.Println(r.RemoteAddr, tai, fnOrig, n, sum, err) return } + var rec bytes.Buffer wr := recfile.NewWriter(&rec) if _, err = wr.WriteFields( @@ -182,11 +150,13 @@ func upload(w http.ResponseWriter, r *http.Request) { log.Println(r.RemoteAddr, tai, fnOrig, n, sum, err) return } - io.Copy(w, &rec) - log.Println(r.RemoteAddr, tai, fnOrig, n, sum) + if _, err = w.Write(rec.Bytes()); err == nil { + log.Println(r.RemoteAddr, tai, fnOrig, n, sum) + } else { + log.Println(r.RemoteAddr, tai, fnOrig, n, sum, err) + return + } - rec.Reset() - wr = recfile.NewWriter(&rec) if _, err = wr.WriteFields( recfile.Field{Name: "Filename", Value: fnOrig}, ); err != nil { @@ -194,21 +164,42 @@ func upload(w http.ResponseWriter, r *http.Request) { return } - var comment []byte + var commentLines []string p, err = mr.NextPart() - if err != nil || p.FormName() != CommentFieldName { - goto Notify + if err == nil && p.FormName() == CommentFieldName { + comment, err := ioutil.ReadAll(p) + if err == nil && len(comment) > 0 { + commentLines = strings.Split(string(comment), "\n") + wr.WriteFieldMultiline("Comment", commentLines) + } } - comment, err = ioutil.ReadAll(p) - if err != nil || len(comment) == 0 { - goto Notify + + ioutil.WriteFile(tai+".rec", rec.Bytes(), os.FileMode(0666)) + if *NotifyToAddr == "" { + return } - wr.WriteFieldMultiline("Comment", strings.Split(string(comment), "\n")) + cmd := exec.Command(SendmailCmd, *NotifyToAddr) + cmd.Stdin = io.MultiReader( + strings.NewReader(fmt.Sprintf( + `From: %s +To: %s +Subject: %s +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: base64 -Notify: +`, + *NotifyFromAddr, + *NotifyToAddr, + mime.BEncoding.Encode("UTF-8", fmt.Sprintf("%s (%d KiB)", fnOrig, n/1024)), + )), + strings.NewReader(base64.StdEncoding.EncodeToString(rec.Bytes())), + ) Jobs.Add(1) - go notify(tai, fnOrig, n, string(comment)) - ioutil.WriteFile(tai+".rec", rec.Bytes(), os.FileMode(0666)) + go func() { + cmd.Run() + Jobs.Done() + }() } func main() {