From dc6df3f0bf4509f776fc29a6ab265d66dc8ec181 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Wed, 9 Feb 2022 12:37:48 -0700 Subject: [PATCH] we made it wow --- spike/review/reinvent/ezmded/server/server.go | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/spike/review/reinvent/ezmded/server/server.go b/spike/review/reinvent/ezmded/server/server.go index 0cdd2b3..1fc840b 100644 --- a/spike/review/reinvent/ezmded/server/server.go +++ b/spike/review/reinvent/ezmded/server/server.go @@ -9,6 +9,7 @@ import ( "local/gziphttp" "local/router" "local/simpleserve/simpleserve" + "log" "net/http" "net/url" "os" @@ -36,7 +37,7 @@ func (server *Server) Routes() error { return strings.TrimSuffix(s, "/") + "/" + router.Wildcard } wildcards := func(s string) string { - return wildcard(wildcard(s)) + return wildcard(s) + router.Wildcard } _ = wildcards for path, handler := range map[string]func(http.ResponseWriter, *http.Request) error{ @@ -44,10 +45,10 @@ func (server *Server) Routes() error { "/api/v0/tree": server.apiV0TreeHandler, "/api/v0/media": server.apiV0MediaHandler, wildcard("/api/v0/media"): server.apiV0MediaIDHandler, - "/api/v0/files": server.apiV0FilesHandler, - wildcard("/api/v0/files/"): server.apiV0FilesIDHandler, + wildcards("/api/v0/files"): server.apiV0FilesHandler, "/api/v0/search": server.apiV0SearchHandler, } { + log.Printf("listening for %s", path) if err := server.router.Add(path, server.tryCatchHttpHandler(handler)); err != nil { return err } @@ -90,13 +91,13 @@ func ensureAndWrite(p string, b []byte) error { func (server *Server) apiV0MediaHandler(w http.ResponseWriter, r *http.Request) error { id := uuid.New().String() - id, err := server.postContentHandler(server.diskMediaPath(id), w, r) + filePath, err := server.postContentHandler(server.diskMediaPath(id), w, r) if err != nil { return err } return json.NewEncoder(w).Encode(map[string]map[string]string{ "data": map[string]string{ - "filePath": path.Join("/api/v0/media", id), + "filePath": path.Join("/api/v0/media", path.Base(filePath)), }, }) } @@ -201,11 +202,9 @@ func (server *Server) diskMediaPath(id string) string { } func (server *Server) apiV0FilesHandler(w http.ResponseWriter, r *http.Request) error { - return errors.New("not impl") -} - -func (server *Server) apiV0FilesIDHandler(w http.ResponseWriter, r *http.Request) error { switch r.Method { + case http.MethodPost: + return server.apiV0FilesPostHandler(w, r) case http.MethodGet: return server.apiV0FilesIDGetHandler(w, r) case http.MethodPut: @@ -213,10 +212,35 @@ func (server *Server) apiV0FilesIDHandler(w http.ResponseWriter, r *http.Request case http.MethodDelete: return server.apiV0FilesIDDelHandler(w, r) } + log.Printf("no method for %s: %s", r.Method, r.URL) http.NotFound(w, r) return nil } +func (server *Server) apiV0FilesPostHandler(w http.ResponseWriter, r *http.Request) error { + f, err := ioutil.TempFile(os.TempDir(), "filesPost*") + if err != nil { + return err + } + f.Close() + defer os.Remove(f.Name()) + + filePath, err := server.postContentHandler(f.Name(), w, r) + if err != nil { + return err + } + defer os.Remove(filePath) + + b, err := ioutil.ReadFile(filePath) + if err != nil { + return err + } + + pid := server.fileId(r) + id := append(pid, strings.Split(uuid.New().String(), "-")[0]) + return server.tree().Put(id, Leaf{Title: r.Header.Get("Title"), Content: string(b)}) +} + func (server *Server) apiV0FilesIDGetHandler(w http.ResponseWriter, r *http.Request) error { id := server.fileId(r)