1package main
2
3import (
4 "embed"
5 "fmt"
6 "log"
7 "net/http"
8
9 flag "github.com/spf13/pflag"
10)
11
12//go:embed templates
13var templates embed.FS
14
15var (
16 flagListen *string = flag.StringP("listen", "l", "127.0.0.1:2857", "Host and port umu will listen on")
17 flagConfig *string = flag.StringP("config", "c", "config.yaml", "Path to config file")
18 flagAccessToken *string = flag.StringP("accesstoken", "a", "CHANGEME", "Access token, best defined in config.yaml")
19)
20
21type config struct {
22 listen string
23 config string
24 accessToken string
25}
26
27func init() {
28 flag.Parse()
29 fmt.Println("Listening on", *flagListen)
30 fmt.Println("Reading config at", *flagConfig)
31 parseConfig(flagConfig)
32 if *flagAccessToken == "CHANGEME" {
33 log.Fatalln("Access token *must* be defined, either by flag or config file.")
34 }
35}
36
37func main() {
38 mux := http.NewServeMux()
39
40 httpServer := &http.Server{
41 Addr: *flagListen,
42 Handler: mux,
43 }
44
45 mux.HandleFunc("/", root)
46 mux.HandleFunc("/login", login)
47 mux.HandleFunc("/logout", logout)
48 mux.HandleFunc("/create", create)
49 mux.HandleFunc("/delete", delete)
50 mux.HandleFunc("/edit", edit)
51
52 if err := httpServer.ListenAndServe(); err == http.ErrServerClosed {
53 log.Println("Web server closed")
54 } else {
55 log.Fatalln(err)
56 }
57}