diff --git a/main.go b/main.go index 121713e..62b8ad7 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,7 @@ package main import ( - "encoding/json" + "flag" "html/template" "io/ioutil" "log" @@ -15,40 +15,28 @@ import ( ) func main() { - if err := loadConfig(); err != nil { - log.Fatal(`Failed to load config. ` + err.Error()) - } + loadConfig() if err := updateTemplate(); err != nil { - log.Fatal(`Failed to load template. ` + err.Error()) + log.Fatal(`Failed to load template. (` + err.Error() + `)`) } log.Fatal(http.ListenAndServe(":"+strconv.Itoa(config.Port), http.HandlerFunc(serveRequest))) } var config struct { - Port int `json:"port"` - Template string `json:"template"` + Port int + Template string + Pages string + Static string } -func loadConfig() error { - f, err := os.Open(`config.json`) - if err != nil && !os.IsNotExist(err) { - return err - } - - // Set defaults - config.Port = 80 - config.Template = `template.html` - - if err != nil { - return - } - - err = json.NewDecoder(f).Decode(&config) - if err != nil { - return err - } +func loadConfig() { + flag.IntVar(&config.Port, `port`, 80, `The port mdsite will listen on`) + flag.StringVar(&config.Template, `template`, `template.html`, `The template used by mdsite`) + flag.StringVar(&config.Pages, `pages`, `pages`, `The OS path used when searching a page`) + flag.StringVar(&config.Static, `static`, `static`, `The OS path used for static resource`) + flag.Parse() } var t *template.Template @@ -64,23 +52,18 @@ func updateTemplate() error { func serveRequest(w http.ResponseWriter, r *http.Request) { if strings.HasPrefix(r.URL.Path, `/static/`) { - p, _ := os.Getwd() - p = path.Join(p, r.URL.Path) - http.ServeFile(w, r, p) + path := path.Join(config.Static, path.Clean(strings.TrimPrefix(r.URL.Path, `/static/`))) + http.ServeFile(w, r, path) return } servePage(w, r) } func servePage(w http.ResponseWriter, r *http.Request) { - p := `pages` + path.Clean(r.URL.Path) + p := path.Join(config.Pages, path.Clean(r.URL.Path)) s, err := os.Stat(p) - if err != nil { - w.WriteHeader(404) - return - } - if s.IsDir() { + if err == nil && s.IsDir() { if p[len(p)-1] != '/' { p += `/` }