diff options
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)) +} |
