1package main
2
3import (
4 "embed"
5 "log"
6 "net/http"
7
8 "github.com/dgraph-io/badger/v3"
9 flag "github.com/spf13/pflag"
10)
11
12//go:embed templates
13var templates embed.FS
14
15var flagConfig *string = flag.StringP("config", "c", "config.yaml", "Path to config file")
16
17type model struct {
18 Listen string `yaml:"listen"`
19 AccessToken string `yaml:"accessToken"`
20 DatabasePath string `yaml:"databasePath"`
21 database *badger.DB
22}
23
24func (m *model) init() {
25 flag.Parse()
26 log.Println("Reading config at", *flagConfig)
27 m.parseConfig(&*flagConfig)
28 log.Println("Listening on", m.Listen)
29 if m.AccessToken == "CHANGEME" {
30 log.Fatalln("Access token *must* be defined, either by flag or config file.")
31 }
32 log.Println("Reading database at", m.DatabasePath+"/")
33}
34
35func main() {
36 m := model{}
37 m.init()
38
39 db, err := badger.Open(badger.DefaultOptions(m.DatabasePath))
40 m.database = db
41 if err != nil {
42 log.Fatal(err)
43 }
44 defer m.database.Close()
45
46 mux := http.NewServeMux()
47
48 httpServer := &http.Server{
49 Addr: m.Listen,
50 Handler: mux,
51 }
52
53 mux.HandleFunc("/", m.root)
54 mux.HandleFunc("/login", m.login)
55 mux.HandleFunc("/logout", m.logout)
56 mux.HandleFunc("/create", m.create)
57 mux.HandleFunc("/delete", m.delete)
58 mux.HandleFunc("/edit", m.edit)
59
60 if err = httpServer.ListenAndServe(); err == http.ErrServerClosed {
61 log.Println("Web server closed")
62 } else {
63 log.Fatalln(err)
64 }
65}