Photoblog: refactoring config

This commit is contained in:
Meutel 2017-07-29 20:21:27 +02:00
parent 16fa08d2a1
commit 5088b4b531
3 changed files with 47 additions and 16 deletions

1
.gitignore vendored
View File

@ -65,3 +65,4 @@ cert.pem
key.pem key.pem
photoblog/photoblog photoblog/photoblog
photoblog/data photoblog/data
photoblog/photoblog.json

View File

@ -1,6 +1,7 @@
package main package main
import ( import (
"encoding/json"
"html/template" "html/template"
"log" "log"
"net/http" "net/http"
@ -13,34 +14,61 @@ import (
"github.com/gorilla/sessions" "github.com/gorilla/sessions"
) )
type PhotoBlogConfig struct {
SessionSecret string `json:"session-secret"`
PasswordSecret string `json:"password-secret"`
DataDir string `json:"data-dir"`
}
func ReadConfig(file *os.File) (*PhotoBlogConfig, error) {
conf := new(PhotoBlogConfig)
err := json.NewDecoder(file).Decode(conf)
return conf, err
}
func main() { func main() {
// load config
confPath := "photoblog.json"
if len(os.Args) > 1 {
confPath = os.Args[1]
}
confFile, err := os.Open(confPath)
if err != nil {
log.Fatalln("Invalid conf file", err)
}
defer confFile.Close()
conf, err := ReadConfig(confFile)
if err != nil {
log.Fatalln("Configuration error", err)
}
dataInfo, err := os.Stat(conf.DataDir)
if !dataInfo.IsDir() {
log.Fatalln("Invalid data directory")
}
data, err := os.Open(conf.DataDir)
if err != nil {
log.Fatalln("cannot open data directory", err)
}
defer data.Close()
// load templates
tpl, err := template.ParseGlob("templates/*.html") tpl, err := template.ParseGlob("templates/*.html")
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
} }
dataInfo, err := os.Stat("data")
if !dataInfo.IsDir() {
log.Fatalln("data is not a directory")
}
data, err := os.Open("data")
if err != nil {
log.Fatalln(err)
}
defer data.Close()
// FIXME config file
app := photo.PhotoBlog{ app := photo.PhotoBlog{
admin.AuthCookie{ admin.AuthCookie{
Templates: tpl, Templates: tpl,
Store: sessions.NewCookieStore([]byte("flQ6QzM/c3Jtdl9ycDx6OXRIfFgK")), Store: sessions.NewCookieStore([]byte(conf.SessionSecret)),
DataDir: data, DataDir: data,
PasswordSecret: "d2xnNSwoREQhfSxBVDQ0bF0yb2AK", PasswordSecret: conf.PasswordSecret,
}, },
} }
http.HandleFunc("/", func(res http.ResponseWriter, req *http.Request) { http.HandleFunc("/", func(res http.ResponseWriter, req *http.Request) {
if strings.HasPrefix(req.RequestURI, "/data") { if strings.HasPrefix(req.RequestURI, photo.DATA) {
http.StripPrefix("/data/", http.FileServer(http.Dir(data.Name()))).ServeHTTP(res, req) http.StripPrefix(photo.DATA, http.FileServer(http.Dir(data.Name()))).ServeHTTP(res, req)
} else { } else {
app.HomePage(res, req) app.HomePage(res, req)
} }

View File

@ -21,6 +21,7 @@ const (
var ( var (
PHOTOEXT = [3]string{".jpg", ".jpeg", ".png"} PHOTOEXT = [3]string{".jpg", ".jpeg", ".png"}
PHOTOMIME = [2]string{"image/png", "image/jpeg"} PHOTOMIME = [2]string{"image/png", "image/jpeg"}
DATA = "/data/"
) )
// Application // Application
@ -148,8 +149,9 @@ func (app *PhotoBlog) AddPhoto(res http.ResponseWriter, req *http.Request) (stri
func (app *PhotoBlog) HomePage(res http.ResponseWriter, req *http.Request) { func (app *PhotoBlog) HomePage(res http.ResponseWriter, req *http.Request) {
photos := make([]*TimedFile, 0) photos := make([]*TimedFile, 0)
filepath.Walk(app.DataDir.Name(), func(path string, info os.FileInfo, err error) error { filepath.Walk(app.DataDir.Name(), func(path string, info os.FileInfo, err error) error {
if !info.IsDir() && IsPhoto(path) { relPath, err := filepath.Rel(app.DataDir.Name(), path)
photos = append(photos, NewTimedFile(info.ModTime(), path)) if !info.IsDir() && IsPhoto(path) && err == nil {
photos = append(photos, NewTimedFile(info.ModTime(), DATA+relPath))
} }
return nil return nil
}) })