main.go

 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 db *badger.DB
16
17var (
18	flagListen      *string = flag.StringP("listen", "l", "127.0.0.1:2857", "Host and port umu will listen on")
19	flagConfig      *string = flag.StringP("config", "c", "config.yaml", "Path to config file")
20	flagAccessToken *string = flag.StringP("accesstoken", "a", "CHANGEME", "Access token, best defined in config.yaml")
21	flagDatabase    *string = flag.StringP("database", "d", "badger_db", "Path to badger database file")
22)
23
24type config struct {
25	listen      string
26	config      string
27	accessToken string
28}
29
30func init() {
31	flag.Parse()
32	log.Println("Reading config at", *flagConfig)
33	parseConfig(&*flagConfig)
34	log.Println("Listening on", *flagListen)
35	if *flagAccessToken == "CHANGEME" {
36		log.Fatalln("Access token *must* be defined, either by flag or config file.")
37	}
38	log.Println("Reading database at", *flagDatabase+"/")
39}
40
41func main() {
42	db, err := badger.Open(badger.DefaultOptions(*flagDatabase))
43	if err != nil {
44		log.Fatal(err)
45	}
46	defer db.Close()
47
48	mux := http.NewServeMux()
49
50	httpServer := &http.Server{
51		Addr:    *flagListen,
52		Handler: mux,
53	}
54
55	mux.HandleFunc("/", root)
56	mux.HandleFunc("/login", login)
57	mux.HandleFunc("/logout", logout)
58	mux.HandleFunc("/create", create)
59	mux.HandleFunc("/delete", delete)
60	mux.HandleFunc("/edit", edit)
61
62	if err = httpServer.ListenAndServe(); err == http.ErrServerClosed {
63		log.Println("Web server closed")
64	} else {
65		log.Fatalln(err)
66	}
67}