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.createHandler)
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}