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 changed.")
31 } else if m.AccessToken == "" {
32 log.Fatalln("Access token *must* be defined.")
33 }
34 log.Println("Reading database at", m.DatabasePath+"/")
35}
36
37func main() {
38 m := model{}
39 m.init()
40
41 db, err := badger.Open(badger.DefaultOptions(m.DatabasePath))
42 m.database = db
43 if err != nil {
44 log.Fatal(err)
45 }
46 defer m.database.Close()
47
48 mux := http.NewServeMux()
49
50 httpServer := &http.Server{
51 Addr: m.Listen,
52 Handler: mux,
53 }
54
55 mux.HandleFunc("/", m.root)
56 mux.HandleFunc("/login", m.login)
57 mux.HandleFunc("/logout", m.logout)
58 mux.HandleFunc("/create", m.create)
59 mux.HandleFunc("/delete", m.delete)
60 mux.HandleFunc("/edit", m.edit)
61 mux.HandleFunc("/get", m.getLinks)
62
63 if err = httpServer.ListenAndServe(); err == http.ErrServerClosed {
64 log.Println("Web server closed")
65 } else {
66 log.Fatalln(err)
67 }
68}