diff options
| author | Marin Ivanov <[email protected]> | 2026-01-17 00:44:06 +0200 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2026-01-17 00:44:06 +0200 |
| commit | 1b84649ecabaac6fd6f777150d6e193af7092242 (patch) | |
| tree | 868bb9ee6796045fecf5f8b4f157f5ae5349e01a /main.go | |
| parent | 3c64c264897d8f4b2bed21e34a455298ed079e3b (diff) | |
cleanup and unify the posting creation
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 79 |
1 files changed, 19 insertions, 60 deletions
@@ -90,7 +90,7 @@ func (s *Server) writeMetadata(name string, m *Metadata) error { return writeMetadata(filename, m) } -func (s *Server) createRandomFilename(ext string) (*os.File, string, error) { +func (s *Server) randomFile(ext string) (*os.File, string, error) { var random [16]byte _, err := io.ReadFull(rand.Reader, random[:]) if err != nil { @@ -105,10 +105,21 @@ func (s *Server) createRandomFilename(ext string) (*os.File, string, error) { return f, name, nil } -func (s *Server) createFile(rd io.Reader, ext string, mimeType string) (string, error) { - f, name, err := s.createRandomFilename(ext) +func (s *Server) createPosting(rd io.Reader, mimeType string) (string, error) { + var ext string + if mimeType == "" || mimeType == "auto" || mimeType == "application/x-www-form-urlencoded" { + mimeType, ext, rd, _ = detectMimetype(rd) + } else if mimeType == "text/plain" { + ext = ".txt" + } else { + mime := mimetype.Lookup(mimeType) + if mime != nil { + ext = mime.Extension() + } + } + f, name, err := s.randomFile(ext) if err != nil { - return "", fmt.Errorf("createRandomFilename(): %w", err) + return "", fmt.Errorf("randomFile(): %w", err) } defer f.Sync() defer f.Close() @@ -125,49 +136,22 @@ func (s *Server) createFile(rd io.Reader, ext string, mimeType string) (string, } func (s *Server) postText(r *http.Request) (string, error) { - var ext string - text := r.Form.Get("text") if text == "" { return "", nil } - mimeType := r.Form.Get("text_mimetype") - rd := io.Reader(strings.NewReader(text)) - if mimeType == "text/plain" { - ext = ".txt" - } else if mimeType == "auto" { - var err error - mimeType, ext, rd, err = detectMimetype(rd) - if err != nil { - mimeType = DefaultMimeType - } - } - - return s.createFile(rd, ext, mimeType) + return s.createPosting(strings.NewReader(text), mimeType) } func (s *Server) postFile(r *http.Request) (string, error) { - var ext string - var rd io.Reader - mimeType := r.Form.Get("file_mimetype") file, _, err := r.FormFile("file") if err != nil { return "", err } defer file.Close() - if mimeType == "auto" { - mimeType, ext, rd, err = detectMimetype(file) - if err != nil { - log.Printf("Failed to detect mimetype. defaulting '%s': %s", DefaultMimeType, err) - mimeType = DefaultMimeType - } - } else { - rd = file - } - - return s.createFile(rd, ext, mimeType) + return s.createPosting(file, mimeType) } func (s *Server) formPost(w http.ResponseWriter, r *http.Request) { @@ -241,35 +225,10 @@ func (s *Server) indexPost(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { return } - var rd io.Reader mimeType := r.Header.Get("content-type") - ext := "" - if mimeType == "" || mimeType == "application/x-www-form-urlencoded" { - mimeType, ext, rd, _ = detectMimetype(r.Body) - } else { - mime := mimetype.Lookup(mimeType) - if mime != nil { - ext = mime.Extension() - } - rd = r.Body - } - f, name, err := s.createRandomFilename(ext) + name, err := s.createPosting(r.Body, mimeType) if err != nil { - log.Print("createRandomFilename(): ", err) - w.WriteHeader(http.StatusInternalServerError) - } - defer f.Sync() - defer f.Close() - if _, err = io.Copy(f, rd); err != nil { - log.Print("io.Copy(): ", err) - w.WriteHeader(http.StatusInternalServerError) - return - } - m := Metadata{ - ContentType: mimeType, - } - if err = s.writeMetadata(name, &m); err != nil { - log.Print("writeMetadata(): ", err) + log.Print("failed to create file: ", err) w.WriteHeader(http.StatusInternalServerError) return } |
