Get text files from __files__ dir

master
Bel LaPointe 2020-07-23 23:21:43 -06:00
parent 461592ec40
commit bbdd4919ba
3 changed files with 94 additions and 1 deletions

29
view/files.go Normal file
View File

@ -0,0 +1,29 @@
package view
import (
"local/dndex/config"
"local/dndex/storage"
"net/http"
"path"
"strings"
)
func files(_ storage.Graph, w http.ResponseWriter, r *http.Request) error {
r.URL.Path = strings.TrimPrefix(r.URL.Path, config.New().FilePrefix)
if len(r.URL.Path) < 2 {
http.NotFound(w, r)
return nil
}
switch r.Method {
case http.MethodGet:
return filesGet(w, r)
default:
http.NotFound(w, r)
return nil
}
}
func filesGet(w http.ResponseWriter, r *http.Request) error {
http.ServeFile(w, r, path.Join(config.New().FileRoot, r.URL.Path))
return nil
}

60
view/files_test.go Normal file
View File

@ -0,0 +1,60 @@
package view
import (
"fmt"
"io/ioutil"
"local/dndex/config"
"local/dndex/storage"
"net/http"
"net/http/httptest"
"os"
"path"
"testing"
)
func TestFiles(t *testing.T) {
os.Args = os.Args[:1]
f, err := ioutil.TempFile(os.TempDir(), "pattern*")
if err != nil {
t.Fatal(err)
}
f.Close()
defer os.Remove(f.Name())
os.Setenv("DBURI", f.Name())
d, err := ioutil.TempDir(os.TempDir(), "pattern*")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(d)
os.Setenv("FILEROOT", d)
t.Logf("config: %+v", config.New())
handler := jsonHandler(storage.Graph{})
t.Run("get fake file 404", func(t *testing.T) {
r := httptest.NewRequest(http.MethodGet, fmt.Sprintf("%s/fake", config.New().FilePrefix), nil)
w := httptest.NewRecorder()
handler.ServeHTTP(w, r)
if w.Code != http.StatusNotFound {
t.Fatalf("%d: %s", w.Code, w.Body.Bytes())
}
})
t.Run("get text file", func(t *testing.T) {
f, err := ioutil.TempFile(d, "*.txt")
t.Logf("tempFile(%q, *.txt) = %q", d, f.Name())
if err != nil {
t.Fatal(err)
}
f.Write([]byte("hello, world"))
f.Close()
r := httptest.NewRequest(http.MethodGet, path.Join(config.New().FilePrefix, path.Base(f.Name())), nil)
w := httptest.NewRecorder()
t.Logf("URL = %q", r.URL.String())
handler.ServeHTTP(w, r)
if w.Code != http.StatusOK {
t.Fatalf("%d: %s", w.Code, w.Body.Bytes())
}
})
}

View File

@ -29,11 +29,15 @@ func jsonHandler(g storage.Graph) http.Handler {
path: "/who/", path: "/who/",
foo: who, foo: who,
}, },
{
path: config.New().FilePrefix,
foo: files,
},
} }
for _, route := range routes { for _, route := range routes {
path := route.path
nopath := strings.TrimRight(route.path, "/") nopath := strings.TrimRight(route.path, "/")
path := nopath + "/"
foo := route.foo foo := route.foo
mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) { mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
if err := foo(g, w, r); err != nil { if err := foo(g, w, r); err != nil {