Replace json config with flags and fix various bugs
This commit is contained in:
parent
044cb3667c
commit
ea9d6176d2
51
main.go
51
main.go
@ -1,7 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"flag"
|
||||||
"html/template"
|
"html/template"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
@ -15,40 +15,28 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if err := loadConfig(); err != nil {
|
loadConfig()
|
||||||
log.Fatal(`Failed to load config. ` + err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := updateTemplate(); err != nil {
|
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)))
|
log.Fatal(http.ListenAndServe(":"+strconv.Itoa(config.Port), http.HandlerFunc(serveRequest)))
|
||||||
}
|
}
|
||||||
|
|
||||||
var config struct {
|
var config struct {
|
||||||
Port int `json:"port"`
|
Port int
|
||||||
Template string `json:"template"`
|
Template string
|
||||||
|
Pages string
|
||||||
|
Static string
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadConfig() error {
|
func loadConfig() {
|
||||||
f, err := os.Open(`config.json`)
|
flag.IntVar(&config.Port, `port`, 80, `The port mdsite will listen on`)
|
||||||
if err != nil && !os.IsNotExist(err) {
|
flag.StringVar(&config.Template, `template`, `template.html`, `The template used by mdsite`)
|
||||||
return err
|
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()
|
||||||
// Set defaults
|
|
||||||
config.Port = 80
|
|
||||||
config.Template = `template.html`
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = json.NewDecoder(f).Decode(&config)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var t *template.Template
|
var t *template.Template
|
||||||
@ -64,23 +52,18 @@ func updateTemplate() error {
|
|||||||
|
|
||||||
func serveRequest(w http.ResponseWriter, r *http.Request) {
|
func serveRequest(w http.ResponseWriter, r *http.Request) {
|
||||||
if strings.HasPrefix(r.URL.Path, `/static/`) {
|
if strings.HasPrefix(r.URL.Path, `/static/`) {
|
||||||
p, _ := os.Getwd()
|
path := path.Join(config.Static, path.Clean(strings.TrimPrefix(r.URL.Path, `/static/`)))
|
||||||
p = path.Join(p, r.URL.Path)
|
http.ServeFile(w, r, path)
|
||||||
http.ServeFile(w, r, p)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
servePage(w, r)
|
servePage(w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func servePage(w http.ResponseWriter, r *http.Request) {
|
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)
|
s, err := os.Stat(p)
|
||||||
if err != nil {
|
if err == nil && s.IsDir() {
|
||||||
w.WriteHeader(404)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if s.IsDir() {
|
|
||||||
if p[len(p)-1] != '/' {
|
if p[len(p)-1] != '/' {
|
||||||
p += `/`
|
p += `/`
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user