summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorMarin Ivanov <[email protected]>2026-01-16 22:27:54 +0200
committerMarin Ivanov <[email protected]>2026-01-16 22:27:54 +0200
commitda07b8ded59d6d759856bbc2374f8447232f9c62 (patch)
treef5560c22511a3bef029c1e7e018d274dc042d49f /main.go
parent56b97bd9bec99aaad3eb19881ee01fe426428231 (diff)
publish multiple objects
Diffstat (limited to 'main.go')
-rw-r--r--main.go107
1 files changed, 67 insertions, 40 deletions
diff --git a/main.go b/main.go
index 75406bc..60e6e1f 100644
--- a/main.go
+++ b/main.go
@@ -105,62 +105,89 @@ func (s *Server) createRandomFilename(ext string) (*os.File, string, error) {
return f, name, nil
}
-func (s *Server) formPost(w http.ResponseWriter, r *http.Request) {
- r.ParseMultipartForm(10 << 23) // 83MB
+func (s *Server) createFile(rd io.Reader, ext string, mimeType string) (string, error) {
+ f, name, err := s.createRandomFilename(ext)
+ if err != nil {
+ return "", fmt.Errorf("createRandomFilename(): %w", err)
+ }
+ defer f.Sync()
+ defer f.Close()
+ if _, err := io.Copy(f, rd); err != nil {
+ return "", fmt.Errorf("io.Copy(): %w", err)
+ }
+ m := Metadata{
+ ContentType: mimeType,
+ }
+ if err = s.writeMetadata(name, &m); err != nil {
+ return "", fmt.Errorf("writeMetadata(): %w", err)
+ }
+ return name, nil
+}
- mimeType := r.Form.Get("mimetype")
+func (s *Server) postText(r *http.Request) (string, error) {
ext := ""
- var datard io.Reader
text := r.Form.Get("text")
- if strings.TrimSpace(text) == "" {
- file, _, err := r.FormFile("file")
+ mimeType := r.Form.Get("text_mimetype")
+
+ datard := strings.NewReader(text)
+ if mimeType == "auto" {
+ mimeType = "text/plain"
+ ext = "txt"
+ }
+
+ return s.createFile(datard, ext, mimeType)
+}
+
+func (s *Server) postFile(r *http.Request) (string, error) {
+ var datard io.Reader
+
+ ext := ""
+ mimeType := r.Form.Get("file_mimetype")
+ file, _, err := r.FormFile("file")
+ if err == nil {
+ return "", err
+ }
+ defer file.Close()
+ if mimeType == "auto" {
+ mimeType, ext, datard, err = detectMimetype(file)
if err != nil {
- log.Print("Error file upload: ", err)
- w.WriteHeader(http.StatusInternalServerError)
- return
- }
- defer file.Close()
- if mimeType == "auto" {
- mimeType, ext, datard, err = detectMimetype(file)
- if err != nil {
- log.Printf("Failed to detect mimetype. defaulting '%s': %s", DefaultMimeType, err)
- mimeType = DefaultMimeType
- }
- } else {
- datard = file
+ log.Printf("Failed to detect mimetype. defaulting '%s': %s", DefaultMimeType, err)
+ mimeType = DefaultMimeType
}
} else {
- datard = strings.NewReader(text)
- if mimeType == "auto" {
- mimeType = "text/plain"
- }
+ datard = file
}
+ return s.createFile(datard, ext, mimeType)
+}
- f, name, err := s.createRandomFilename(ext)
+func (s *Server) formPost(w http.ResponseWriter, r *http.Request) {
+ r.ParseMultipartForm(10 << 23) // 83MB
+
+ var textLink string
+ var fileLink string
+
+ textName, err := s.postText(r)
if err != nil {
- log.Print("createRandomFilename(): ", err)
- w.WriteHeader(http.StatusInternalServerError)
- }
- defer f.Sync()
- defer f.Close()
- if _, err := io.Copy(f, datard); err != nil {
- log.Print("io.Copy(): ", err)
- w.WriteHeader(http.StatusInternalServerError)
- return
+ log.Print("Error text upload: ", err)
+ } else {
+ textLink = fmt.Sprintf("%s/%s", s.host, textName)
}
- m := Metadata{
- ContentType: mimeType,
+
+ fileName, err := s.postFile(r)
+ if err != nil {
+ log.Print("Error file upload: ", err)
+ } else {
+ fileLink = fmt.Sprintf("%s/%s", s.host, fileName)
}
- if err = s.writeMetadata(name, &m); err != nil {
- log.Print("writeMetadata(): ", err)
+
+ if fileName == "" && textName == "" {
w.WriteHeader(http.StatusInternalServerError)
return
}
- log.Printf("Created posting: %s", name)
- link := fmt.Sprintf("%s/%s\n", s.host, name)
tmplData := map[string]string{
- "Link": link,
+ "TextLink": textLink,
+ "FileLink": fileLink,
}
if err := tmpl.ExecuteTemplate(w, "result.html", tmplData); err != nil {
w.WriteHeader(http.StatusInternalServerError)