summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorJulian Hurst <julian.hurst@digdash.com>2025-01-23 12:06:57 +0100
committerJulian Hurst <julian.hurst@digdash.com>2025-01-23 12:06:57 +0100
commitfccb6c6a78aaa197ad21a81df49a33882b942cbf (patch)
treee1c9c450297ae0271d630c520430654854752a80 /main.go
parentb23201e4ea65403625b80573907d270b9055dafc (diff)
downloadbox-fccb6c6a78aaa197ad21a81df49a33882b942cbf.tar.gz
Flag for allowing resource deletion
Diffstat (limited to 'main.go')
-rw-r--r--main.go28
1 files changed, 24 insertions, 4 deletions
diff --git a/main.go b/main.go
index 9df05b9..949d2f3 100644
--- a/main.go
+++ b/main.go
@@ -22,6 +22,7 @@ var tmplFS embed.FS
type BoxHandler struct {
dataPath string
token string
+ deleteEnabled bool
}
func serve(w http.ResponseWriter, token string, views ...string) {
@@ -44,13 +45,29 @@ func (handler BoxHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
f, err := os.Open(filepath.Join(handler.dataPath, resourceId))
if err != nil {
log.Println(err)
- fmt.Fprint(w, err.Error())
w.WriteHeader(http.StatusBadRequest)
+ fmt.Fprint(w, err.Error())
return
}
io.Copy(w, f)
}
return
+ case http.MethodDelete:
+ if !handler.deleteEnabled {
+ w.WriteHeader(http.StatusForbidden)
+ return
+ }
+ resourceId := path.Base(r.URL.Path)
+ filename := filepath.Join(handler.dataPath, resourceId)
+ log.Printf("Deleting %s...", filename)
+ err := os.Remove(filename)
+ if err != nil {
+ log.Println(err)
+ w.WriteHeader(http.StatusBadRequest)
+ fmt.Fprint(w, err.Error())
+ return
+ }
+ w.WriteHeader(http.StatusNoContent)
case http.MethodPost:
token := r.Header.Get("X-Upload-Token")
if token != handler.token {
@@ -66,18 +83,19 @@ func (handler BoxHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}
filename := filepath.Join(handler.dataPath, u.String())
- log.Printf("boxing %s\n", filename)
+ log.Printf("Boxing %s...\n", filename)
f, err := os.Create(filename)
if err != nil {
log.Println(err)
- fmt.Fprint(w, err.Error())
w.WriteHeader(http.StatusInternalServerError)
+ fmt.Fprint(w, err.Error())
return
}
defer r.Body.Close()
io.Copy(f, r.Body)
w.Header().Add("X-Resource-ID", filepath.Base(filename))
- log.Printf("boxed %s\n", filename)
+
+ log.Printf("Boxed %s\n", filename)
default:
w.WriteHeader(http.StatusMethodNotAllowed)
}
@@ -87,10 +105,12 @@ func main() {
host := flag.String("n", "", "The hostname to listen on")
port := flag.Int("p", 8080, "The port to listen on")
token := flag.String("t", "", "The token to use to protect uploads")
+ deleteEnabled := flag.Bool("d", false, "Enable deleting resources")
flag.Parse()
boxHandler := BoxHandler {
"data",
*token,
+ *deleteEnabled,
}
err := os.MkdirAll(boxHandler.dataPath, 0750)
if err != nil {