package am import ( "flag" "html/template" "log" "net/http" "os" "strings" "time" "golang.org/x/crypto/acme/autocert" ) //go:generate go run cmd/generate/templates.go /*********** * Globals * ***********/ var db *dbal var tmpl *template.Template func Main() { var listenAddr string flag.StringVar(&listenAddr, "listen", "localhost:8888", "Listen address, :") flag.Parse() l := strings.Split(listenAddr, ":") if len(l) != 2 { flag.Usage() os.Exit(1) } host := l[0] port := l[1] var err error // Initialize globals. tmpl = template.Must(template.New("").Funcs(template.FuncMap{ "now": func() string { return time.Now().UTC().Format("2006-01-02 15:04") }, }).Parse(tmpls)) if db, err = newDB("database.sqlite3"); err != nil { os.Exit(1) } go processTimeouts() go purgeOldEntries() // Root. http.HandleFunc("/", handleRoot) // API requests. http.HandleFunc("/report/", handleReport) // User routes. handle_admin("/user/insert", handleUserInsert) handle_user("/user/list", handleUserList) handle_user("/user/view/", handleUserView) handle_admin("/user/update/", handleUserUpdate) handle_admin("/user/delete/", handleUserDelete) handle_admin("/source/insert", handleSourceInsert) handle_user("/source/list", handleSourceList) handle_user("/source/view/", handleSourceView) handle_admin("/source/update/", handleSourceUpdate) handle_admin("/source/delete/", handleSourceDelete) handle_user("/log/list", handleLogList) if port == "443" { log.Printf("Listening on %s...", host) log.Fatal(http.Serve(autocert.NewListener(host), http.DefaultServeMux)) } else { log.Printf("Listening on %s...", listenAddr) log.Fatal(http.ListenAndServe(listenAddr, nil)) } }