This repository has been archived on 2019-06-27. You can view files and clone it, but cannot push or open issues/pull-requests.
am/main.go

83 lines
1.7 KiB
Go

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, <host>:<port>")
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))
}
}