diff --git a/assets/templates/html/deletePasteSuccess.html.tmpl b/assets/templates/html/deletePasteSuccess.html.tmpl deleted file mode 100644 index 334f2cb..0000000 --- a/assets/templates/html/deletePasteSuccess.html.tmpl +++ /dev/null @@ -1,3 +0,0 @@ -{{define "title"}} -Success - rushlink -{{end}} \ No newline at end of file diff --git a/assets/templates/html/newFileUploadPasteSuccess.html.tmpl b/assets/templates/html/newFileUploadPasteSuccess.html.tmpl deleted file mode 100644 index d5f8f3b..0000000 --- a/assets/templates/html/newFileUploadPasteSuccess.html.tmpl +++ /dev/null @@ -1,16 +0,0 @@ -{{define "title"}} -Success - rushlink -{{end}} - -{{define "body"}} -
-{{.Host}}/{{.Paste.Key}}{{.FileExt}}
----
-
-    # View metadata
-    curl {{.Host}}/{{.Paste.Key}}{{.FileExt}}/meta?deleteToken={{.Paste.DeleteToken | urlquery}}
-
-    # Delete this object
-    curl --request DELETE {{.Host}}/{{.Paste.Key}}{{.FileExt}}?deleteToken={{.Paste.DeleteToken | urlquery}}
-
-{{end}} \ No newline at end of file diff --git a/assets/templates/html/newRedirectPasteSuccess.html.tmpl b/assets/templates/html/newRedirectPasteSuccess.html.tmpl deleted file mode 100644 index b1b0372..0000000 --- a/assets/templates/html/newRedirectPasteSuccess.html.tmpl +++ /dev/null @@ -1,16 +0,0 @@ -{{define "title"}} -Success - rushlink -{{end}} - -{{define "body"}} -
-{{.Host}}/{{.Paste.Key}}
----
-
-# View metadata
-curl {{.Host}}/{{.Paste.Key}}/meta?deleteToken={{.Paste.DeleteToken | urlquery}}
-
-# Delete this object
-curl --request DELETE {{.Host}}/{{.Paste.Key}}?deleteToken={{.Paste.DeleteToken | urlquery}}
-
-{{end}} \ No newline at end of file diff --git a/assets/templates/txt/deletePasteSuccess.txt.tmpl b/assets/templates/txt/deletePasteSuccess.txt.tmpl deleted file mode 100644 index ac40c43..0000000 --- a/assets/templates/txt/deletePasteSuccess.txt.tmpl +++ /dev/null @@ -1 +0,0 @@ -<{{.Host}}/{{.Paste.Key}}> was succesfully deleted diff --git a/assets/templates/txt/newFileUploadPasteSuccess.txt.tmpl b/assets/templates/txt/newFileUploadPasteSuccess.txt.tmpl deleted file mode 100644 index a94e8cd..0000000 --- a/assets/templates/txt/newFileUploadPasteSuccess.txt.tmpl +++ /dev/null @@ -1,8 +0,0 @@ -{{.Host}}/{{.Paste.Key}}{{.FileExt}} ---- - -# View metadata -curl {{.Host}}/{{.Paste.Key}}{{.FileExt}}/meta?deleteToken={{.Paste.DeleteToken | urlquery}} - -# Delete this object -curl --request DELETE {{.Host}}/{{.Paste.Key}}{{.FileExt}}?deleteToken={{.Paste.DeleteToken | urlquery}} diff --git a/assets/templates/txt/newRedirectPasteSuccess.txt.tmpl b/assets/templates/txt/newRedirectPasteSuccess.txt.tmpl deleted file mode 100644 index 5b1e2f6..0000000 --- a/assets/templates/txt/newRedirectPasteSuccess.txt.tmpl +++ /dev/null @@ -1,8 +0,0 @@ -{{.Host}}/{{.Paste.Key}} ---- - -# View metadata -curl {{.Host}}/{{.Paste.Key}}/meta?deleteToken={{.Paste.DeleteToken | urlquery}} - -# Delete this object -curl --request DELETE {{.Host}}/{{.Paste.Key}}?deleteToken={{.Paste.DeleteToken | urlquery}} diff --git a/handlers.go b/handlers.go index f7a9429..5d9da67 100644 --- a/handlers.go +++ b/handlers.go @@ -9,7 +9,6 @@ import ( "net/http" "net/url" "os" - "path/filepath" "time" "gitea.hashru.nl/dsprenkels/rushlink/internal/db" @@ -108,7 +107,7 @@ func (rl *rushlink) viewPasteHandlerInner(w http.ResponseWriter, r *http.Request if err != nil { return err } - fileExt = filepath.Ext(fu.FileName) + fileExt = fu.Ext() } return nil }); err != nil { @@ -213,8 +212,7 @@ func (rl *rushlink) newFileUploadPasteHandler(w http.ResponseWriter, r *http.Req }); err != nil { panic(err) } - data := map[string]interface{}{"Paste": paste, "FileUpload": fu} - rl.render(w, r, "newFileUploadPasteSuccess", data) + rl.renderCreateSuccess(w, r, paste, fu) } func (rl *rushlink) newPasteHandlerURLEncoded(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) { @@ -254,8 +252,7 @@ func (rl *rushlink) newRedirectPasteHandler(w http.ResponseWriter, r *http.Reque }); err != nil { panic(err) } - data := map[string]interface{}{"Paste": paste} - rl.render(w, r, "newRedirectPasteSuccess", data) + rl.renderCreateSuccess(w, r, paste, nil) } // Delete a URL from the database @@ -270,35 +267,33 @@ func (rl *rushlink) deletePasteHandler(w http.ResponseWriter, r *http.Request) { } var errorCode int - var paste db.Paste + var paste *db.Paste if err := rl.db.Bolt.Update(func(tx *bolt.Tx) error { - p, err := db.GetPaste(tx, key) + var err error + paste, err = db.GetPaste(tx, key) if err != nil { errorCode = http.StatusNotFound return err } - if p.State == db.PasteStateDeleted { + if paste.State == db.PasteStateDeleted { errorCode = http.StatusGone return errors.New("already deleted") } - if subtle.ConstantTimeCompare([]byte(deleteToken), []byte(p.DeleteToken)) == 0 { + if subtle.ConstantTimeCompare([]byte(deleteToken), []byte(paste.DeleteToken)) == 0 { errorCode = http.StatusForbidden return errors.New("invalid delete token") } - if err := p.Delete(tx, rl.fs); err != nil { + if err := paste.Delete(tx, rl.fs); err != nil { errorCode = http.StatusInternalServerError return err } - paste = *p return nil }); err != nil { log.Printf("error: %v\n", err) rl.renderError(w, r, errorCode, fmt.Sprintf("error: %v\n", err)) return } - - data := map[string]interface{}{"Paste": paste} - rl.render(w, r, "deletePasteSuccess", data) + rl.renderCreateSuccess(w, r, paste, nil) } // Add a new fileUpload redirect to the database diff --git a/internal/db/fileupload.go b/internal/db/fileupload.go index 45ceaf3..f4ff68e 100644 --- a/internal/db/fileupload.go +++ b/internal/db/fileupload.go @@ -9,6 +9,7 @@ import ( "net/url" "os" "path" + "path/filepath" "github.com/google/uuid" "github.com/pkg/errors" @@ -214,3 +215,8 @@ func (fu *FileUpload) URL() *url.URL { } return urlParse } + +// Ext returns the extension of the file attached to this FileUpload. +func (fu *FileUpload) Ext() string { + return filepath.Ext(fu.FileName) +} diff --git a/views.go b/views.go index b18072a..eaa9112 100644 --- a/views.go +++ b/views.go @@ -9,6 +9,7 @@ import ( "io" "log" "net/http" + "net/url" "path/filepath" "regexp" "runtime/debug" @@ -17,6 +18,8 @@ import ( "strings" text "text/template" + "gitea.hashru.nl/dsprenkels/rushlink/internal/db" + "github.com/pkg/errors" ) @@ -151,6 +154,19 @@ func (rl *rushlink) renderInternalServerError(w http.ResponseWriter, r *http.Req rl.renderError(w, r, http.StatusInternalServerError, msg) } +func (rl *rushlink) renderCreateSuccess(w http.ResponseWriter, r *http.Request, paste *db.Paste, fu *db.FileUpload) { + var fileExt string + if fu != nil { + fileExt = fu.Ext() + } + var redirectURL url.URL + redirectURL.Path = fmt.Sprintf("/%s%s/meta", paste.Key, fileExt) + queryVals := redirectURL.Query() + queryVals.Add("deleteToken", paste.DeleteToken) + redirectURL.RawQuery = queryVals.Encode() + http.Redirect(w, r, redirectURL.String(), http.StatusFound) +} + // resolveHost constructs the `scheme://host` part of rushlinks public API. // // If the `--host` flag is set, it will return that URL.