main.go

 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}