summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorMarin Ivanov <[email protected]>2026-01-17 00:44:06 +0200
committerMarin Ivanov <[email protected]>2026-01-17 00:44:06 +0200
commit1b84649ecabaac6fd6f777150d6e193af7092242 (patch)
tree868bb9ee6796045fecf5f8b4f157f5ae5349e01a /main.go
parent3c64c264897d8f4b2bed21e34a455298ed079e3b (diff)
cleanup and unify the posting creation
Diffstat (limited to 'main.go')
-rw-r--r--main.go79
1 files changed, 19 insertions, 60 deletions
diff --git a/main.go b/main.go
index 2c71593..6e36b82 100644
--- a/main.go
+++ b/main.go
@@ -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
}