mirror of https://github.com/dirtbags/moth.git
Add flags and other stuff
This commit is contained in:
parent
c4687de605
commit
90146f31ed
14
handlers.go
14
handlers.go
|
@ -109,6 +109,20 @@ func answerHandler(w http.ResponseWriter, req *http.Request) {
|
||||||
showPage(w, "Points awarded", fmt.Sprintf("%d points for %s!", points, teamid))
|
showPage(w, "Points awarded", fmt.Sprintf("%d points for %s!", points, teamid))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func puzzlesHandler(w http.ResponseWriter, req *http.Request) {
|
||||||
|
puzzles := map[string][]interface{}{}
|
||||||
|
// v := map[string][]interface{}{"Moo": {1, "0177f85ae895a33e2e7c5030c3dc484e8173e55c"}}
|
||||||
|
// j, _ := json.Marshal(v)
|
||||||
|
|
||||||
|
for _, category := range categories {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func pointsHandler(w http.ResponseWriter, req *http.Request) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// staticHandler serves up static files.
|
// staticHandler serves up static files.
|
||||||
func rootHandler(w http.ResponseWriter, req *http.Request) {
|
func rootHandler(w http.ResponseWriter, req *http.Request) {
|
||||||
if req.URL.Path == "/" {
|
if req.URL.Path == "/" {
|
||||||
|
|
|
@ -34,8 +34,6 @@ func tidy() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Print("Hello, I'm maintaining!")
|
|
||||||
|
|
||||||
// Get current list of categories
|
// Get current list of categories
|
||||||
newCategories := []string{}
|
newCategories := []string{}
|
||||||
files, err := ioutil.ReadDir(modulesPath())
|
files, err := ioutil.ReadDir(modulesPath())
|
||||||
|
|
60
mothd.go
60
mothd.go
|
@ -2,7 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"flag"
|
"github.com/namsral/flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -45,15 +45,16 @@ func showPage(w http.ResponseWriter, title string, body string) {
|
||||||
fmt.Fprintf(w, "<!DOCTYPE html>")
|
fmt.Fprintf(w, "<!DOCTYPE html>")
|
||||||
fmt.Fprintf(w, "<html><head>")
|
fmt.Fprintf(w, "<html><head>")
|
||||||
fmt.Fprintf(w, "<title>%s</title>", title)
|
fmt.Fprintf(w, "<title>%s</title>", title)
|
||||||
fmt.Fprintf(w, "<link rel=\"stylesheet\" href=\"../style.css\">")
|
fmt.Fprintf(w, "<link rel=\"stylesheet\" href=\"static/style.css\">")
|
||||||
fmt.Fprintf(w, "<meta name=\"viewport\" content=\"width=device-width\"></head>")
|
fmt.Fprintf(w, "<meta name=\"viewport\" content=\"width=device-width\"></head>")
|
||||||
|
fmt.Fprintf(w, "<link rel=\"icon\" href=\"res/luna-moth.svg\" type=\"image/svg+xml\">")
|
||||||
|
fmt.Fprintf(w, "<link rel=\"icon\" href=\"res/luna-moth.png\" type=\"image/png\">")
|
||||||
fmt.Fprintf(w, "<body><h1>%s</h1>", title)
|
fmt.Fprintf(w, "<body><h1>%s</h1>", title)
|
||||||
fmt.Fprintf(w, "<section>%s</section>", body)
|
fmt.Fprintf(w, "<section>%s</section>", body)
|
||||||
fmt.Fprintf(w, "<nav>")
|
fmt.Fprintf(w, "<nav>")
|
||||||
fmt.Fprintf(w, "<ul>")
|
fmt.Fprintf(w, "<ul>")
|
||||||
fmt.Fprintf(w, "<li><a href=\"../register.html\">Register</a></li>")
|
fmt.Fprintf(w, "<li><a href=\"static/puzzles.html\">Puzzles</a></li>")
|
||||||
fmt.Fprintf(w, "<li><a href=\"../puzzles.html\">Puzzles</a></li>")
|
fmt.Fprintf(w, "<li><a href=\"static/scoreboard.html\">Scoreboard</a></li>")
|
||||||
fmt.Fprintf(w, "<li><a href=\"../scoreboard.html\">Scoreboard</a></li>")
|
|
||||||
fmt.Fprintf(w, "</ul>")
|
fmt.Fprintf(w, "</ul>")
|
||||||
fmt.Fprintf(w, "</nav>")
|
fmt.Fprintf(w, "</nav>")
|
||||||
fmt.Fprintf(w, "</body></html>")
|
fmt.Fprintf(w, "</body></html>")
|
||||||
|
@ -74,6 +75,13 @@ func cachePath(parts ...string) string {
|
||||||
return path.Join(cacheDir, tail)
|
return path.Join(cacheDir, tail)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func logRequest(handler http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
log.Printf("HTTP %s %s %s\n", r.RemoteAddr, r.Method, r.URL)
|
||||||
|
handler.ServeHTTP(w, r)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func setup() error {
|
func setup() error {
|
||||||
// Roll over and die if directories aren't even set up
|
// Roll over and die if directories aren't even set up
|
||||||
if _, err := os.Stat(modulesPath()); os.IsNotExist(err) {
|
if _, err := os.Stat(modulesPath()); os.IsNotExist(err) {
|
||||||
|
@ -101,55 +109,59 @@ func setup() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func logRequest(handler http.Handler) http.Handler {
|
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
log.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL)
|
|
||||||
handler.ServeHTTP(w, r)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.StringVar(
|
var maintenanceInterval time.Duration
|
||||||
|
var listen string
|
||||||
|
|
||||||
|
fs := flag.NewFlagSetWithEnvPrefix(os.Args[0], "MOTH", flag.ExitOnError)
|
||||||
|
fs.StringVar(
|
||||||
&moduleDir,
|
&moduleDir,
|
||||||
"modules",
|
"modules",
|
||||||
"/modules",
|
"/moth/modules",
|
||||||
"Path where your moth modules live",
|
"Path where your moth modules live",
|
||||||
)
|
)
|
||||||
flag.StringVar(
|
fs.StringVar(
|
||||||
&stateDir,
|
&stateDir,
|
||||||
"state",
|
"state",
|
||||||
"/state",
|
"/moth/state",
|
||||||
"Path where state should be written",
|
"Path where state should be written",
|
||||||
)
|
)
|
||||||
flag.StringVar(
|
fs.StringVar(
|
||||||
&cacheDir,
|
&cacheDir,
|
||||||
"cache",
|
"cache",
|
||||||
"/cache",
|
"/moth/cache",
|
||||||
"Path for ephemeral cache",
|
"Path for ephemeral cache",
|
||||||
)
|
)
|
||||||
maintenanceInterval := flag.Duration(
|
fs.DurationVar(
|
||||||
|
&maintenanceInterval,
|
||||||
"maint",
|
"maint",
|
||||||
20 * time.Second,
|
20 * time.Second,
|
||||||
"Maintenance interval",
|
"Maintenance interval",
|
||||||
)
|
)
|
||||||
listen := flag.String(
|
fs.StringVar(
|
||||||
|
&listen,
|
||||||
"listen",
|
"listen",
|
||||||
":8080",
|
":8080",
|
||||||
"[host]:port to bind and listen",
|
"[host]:port to bind and listen",
|
||||||
)
|
)
|
||||||
|
fs.Parse(os.Args[1:])
|
||||||
|
|
||||||
if err := setup(); err != nil {
|
if err := setup(); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
go maintenance(*maintenanceInterval)
|
go maintenance(maintenanceInterval)
|
||||||
|
|
||||||
|
fileserver := http.FileServer(http.Dir(cacheDir))
|
||||||
http.HandleFunc("/", rootHandler)
|
http.HandleFunc("/", rootHandler)
|
||||||
http.Handle("/static/", http.FileServer(http.Dir(cacheDir)))
|
http.Handle("/static/", http.StripPrefix("/static", fileserver))
|
||||||
|
|
||||||
http.HandleFunc("/register", registerHandler)
|
http.HandleFunc("/register", registerHandler)
|
||||||
http.HandleFunc("/token", tokenHandler)
|
http.HandleFunc("/token", tokenHandler)
|
||||||
http.HandleFunc("/answer", answerHandler)
|
http.HandleFunc("/answer", answerHandler)
|
||||||
|
|
||||||
|
http.HandleFunc("/puzzles.json", puzzlesHandler)
|
||||||
|
http.HandleFunc("/points.json", pointsHandler)
|
||||||
|
|
||||||
log.Printf("Listening on %s", *listen)
|
log.Printf("Listening on %s", listen)
|
||||||
log.Fatal(http.ListenAndServe(*listen, logRequest(http.DefaultServeMux)))
|
log.Fatal(http.ListenAndServe(listen, logRequest(http.DefaultServeMux)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
|
|
||||||
type Award struct {
|
type Award struct {
|
||||||
when time.Time
|
when time.Time
|
||||||
team string
|
teamid string
|
||||||
category string
|
category string
|
||||||
points int
|
points int
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ func ParseAward(s string) (*Award, error) {
|
||||||
}
|
}
|
||||||
ret.when = time.Unix(whenEpoch, 0)
|
ret.when = time.Unix(whenEpoch, 0)
|
||||||
|
|
||||||
ret.team = parts[1]
|
ret.teamid = parts[1]
|
||||||
ret.category = parts[2]
|
ret.category = parts[2]
|
||||||
|
|
||||||
points, err := strconv.Atoi(parts[3])
|
points, err := strconv.Atoi(parts[3])
|
||||||
|
@ -45,7 +45,7 @@ func ParseAward(s string) (*Award, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Award) String() string {
|
func (a *Award) String() string {
|
||||||
return fmt.Sprintf("%d %s %s %d", a.when.Unix(), a.team, a.category, a.points)
|
return fmt.Sprintf("%d %s %s %d", a.when.Unix(), a.teamid, a.category, a.points)
|
||||||
}
|
}
|
||||||
|
|
||||||
func pointsLog() []Award {
|
func pointsLog() []Award {
|
||||||
|
@ -89,6 +89,7 @@ func awardPoints(teamid string, category string, points int) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Printf("Award %s %s %d", teamid, category, points)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,6 @@ a:visited {
|
||||||
}
|
}
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb {
|
::-webkit-scrollbar-thumb {
|
||||||
background: rgba(255, 255, 255, 0.2);
|
background: rgba(255, 255, 255, 0.2);
|
||||||
border-radius: 1em;
|
border-radius: 1em;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue