diff options
| author | Julian Hurst <ark@mansus.space> | 2025-01-23 03:14:14 +0100 |
|---|---|---|
| committer | Julian Hurst <ark@mansus.space> | 2025-01-23 03:14:14 +0100 |
| commit | 0408d03a29c7aced3d4730df8fee1662cba4a4dd (patch) | |
| tree | 5797905a642e2f8368a796f783fe3a5791364629 /main.go | |
| download | box-0408d03a29c7aced3d4730df8fee1662cba4a4dd.tar.gz | |
Initial commit
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 63 |
1 files changed, 63 insertions, 0 deletions
@@ -0,0 +1,63 @@ +package main + +import ( + "net/http" + "html/template" + "log" + "fmt" + "embed" + "io" + "os" + "path" + "path/filepath" +) + +//go:embed templates +var tmplFS embed.FS + +type BoxHandler struct { + dataPath string +} + +func serve(w http.ResponseWriter, views ...string) { + t, err := template.New("index.html").ParseFS(tmplFS, views...) + if err != nil { + log.Fatal(err) + } + if err := t.Execute(w, nil); err != nil { + log.Fatal(err) + } +} + +func (handler BoxHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet: + serve(w, "templates/index.html") + return + case http.MethodPost: + filename := filepath.Join(handler.dataPath, path.Base(r.URL.Path)) + log.Printf("boxing %s\n", filename) + f, err := os.Create(filename) + if err != nil { + fmt.Fprint(w, err.Error()) + w.WriteHeader(http.StatusInternalServerError) + return + } + defer r.Body.Close() + io.Copy(f, r.Body) + log.Printf("boxed %s\n", filename) + default: + w.WriteHeader(http.StatusMethodNotAllowed) + } +} + +func main() { + boxHandler := BoxHandler { + "data", + } + err := os.MkdirAll(boxHandler.dataPath, 0750) + if err != nil { + log.Fatal(err) + } + log.Fatal(http.ListenAndServe(":8080", boxHandler)) +} |
