diff --git a/pages.go b/pages.go index 2d7f128..c20e1b8 100644 --- a/pages.go +++ b/pages.go @@ -14,6 +14,13 @@ func indexHandler(c web.C, w http.ResponseWriter, r *http.Request) { } } +func pasteHandler(c web.C, w http.ResponseWriter, r *http.Request) { + err := Templates["paste.html"].ExecuteWriter(pongo2.Context{}, w) + if err != nil { + oopsHandler(c, w, r) + } +} + func notFoundHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.WriteHeader(404) err := Templates["404.html"].ExecuteWriter(pongo2.Context{}, w) diff --git a/server.go b/server.go index e8a2806..98fdd53 100644 --- a/server.go +++ b/server.go @@ -72,6 +72,8 @@ func setup() { torrentRe := regexp.MustCompile(`^/(?P[a-z0-9-\.]+)/torrent$`) goji.Get("/", indexHandler) + goji.Get("/paste/", pasteHandler) + goji.Get("/paste", http.RedirectHandler("/paste/", 301)) goji.Post("/upload", uploadPostHandler) goji.Post("/upload/", uploadPostHandler) diff --git a/templates.go b/templates.go index 3a6ffdb..c742087 100644 --- a/templates.go +++ b/templates.go @@ -44,6 +44,7 @@ func populateTemplatesMap(tSet *pongo2.TemplateSet, tMap map[string]*pongo2.Temp templates := [...]string{ "index.html", + "paste.html", "404.html", "401.html", "oops.html", diff --git a/upload.go b/upload.go index 341fa9d..c99fc1c 100644 --- a/upload.go +++ b/upload.go @@ -38,7 +38,9 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) - if r.Header.Get("Content-Type") == "application/octet-stream" { + contentType := r.Header.Get("Content-Type") + + if contentType == "application/octet-stream" { if r.URL.Query().Get("randomize") == "true" { upReq.randomBarename = true } @@ -48,7 +50,9 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq.src = r.Body upReq.filename = r.URL.Query().Get("qqfile") - } else { + } else if strings.HasPrefix(contentType, "multipart/form-data") { + return + file, headers, err := r.FormFile("file") if err != nil { oopsHandler(c, w, r) @@ -63,6 +67,19 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq.expiry = parseExpiry(r.Form.Get("expires")) upReq.src = file upReq.filename = headers.Filename + } else { + if r.FormValue("content") == "" { + oopsHandler(c, w, r) + return + } + extension := r.FormValue("extension") + if extension == "" { + extension = "txt" + } + + upReq.src = strings.NewReader(r.FormValue("content")) + upReq.expiry = parseExpiry(r.FormValue("expires")) + upReq.filename = r.FormValue("filename") + "." + extension } upload, err := processUpload(upReq) @@ -126,8 +143,8 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { // Pull the first 512 bytes off for use in MIME detection if needed header := make([]byte, 512) - _, err = upReq.src.Read(header) - if err != nil { + n, err := upReq.src.Read(header) + if n == 0 || err != nil { return }