diff --git a/cmd/smweb/main.go b/cmd/smweb/main.go index e97095b..f483486 100644 --- a/cmd/smweb/main.go +++ b/cmd/smweb/main.go @@ -6,22 +6,15 @@ import ( "os" "strconv" - "github.com/elazarl/go-bindata-assetfs" "mcquay.me/web" ) func main() { - var fs http.FileSystem - if os.Getenv("SM_DEV") == "" { - fs = &assetfs.AssetFS{ - Asset: web.Asset, - AssetDir: web.AssetDir, - AssetInfo: web.AssetInfo, - Prefix: "static", - } - } else { - fs = http.Dir(os.Getenv("SM_STATIC")) + static := "" + if s := os.Getenv("STATIC"); s != "" { + static = s } + port := 8000 if os.Getenv("PORT") != "" { p, err := strconv.Atoi(os.Getenv("PORT")) @@ -31,13 +24,11 @@ func main() { } port = p } - // XXX: beware: I've copy/pasted this twice now and been confused because - // I ought to have been using my own servemux - http.Handle( - "/", - http.FileServer(fs), - ) - if err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil); err != nil { + + sm := http.NewServeMux() + + web.NewServer(sm, static) + if err := http.ListenAndServe(fmt.Sprintf(":%d", port), sm); err != nil { fmt.Fprintf(os.Stderr, "problem serving: %v\n", err) os.Exit(1) } diff --git a/web.go b/web.go index 1fee15d..6fcd4d9 100644 --- a/web.go +++ b/web.go @@ -1,6 +1,34 @@ package web +import ( + "net/http" + "path/filepath" + + assetfs "github.com/elazarl/go-bindata-assetfs" +) + //go:generate go get github.com/jteeuwen/go-bindata/... //go:generate go get github.com/elazarl/go-bindata-assetfs/... //go:generate rm -f static.go //go:generate go-bindata -o static.go -pkg=web static/... + +func NewServer(sm *http.ServeMux, static string) { + var fs http.FileSystem + if p, d := filepath.Split(static); d == "static" { + static = p + } + fs = http.Dir(static) + if static == "" { + fs = &assetfs.AssetFS{ + Asset: Asset, + AssetDir: AssetDir, + AssetInfo: AssetInfo, + Prefix: "static", + } + } + + sm.Handle( + "/", + http.FileServer(fs), + ) +}