A fast and simple blog backend.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
mediocre-blog/srv/cmd/mediocre-blog/main.go

58 lines
1.4 KiB

package main
import (
"flag"
"log"
"net/http"
"strconv"
"github.com/mediocregopher/blog.mediocregopher.com/srv/pow"
"github.com/tilinna/clock"
)
func main() {
staticDir := flag.String("static-dir", "", "Directory from which static files are served")
listenAddr := flag.String("listen-addr", ":4000", "Address to listen for HTTP requests on")
powTargetStr := flag.String("pow-target", "0x000FFFF", "Proof-of-work target, lower is more difficult")
powSecret := flag.String("pow-secret", "", "Secret used to sign proof-of-work challenge seeds")
// parse config
flag.Parse()
switch {
case *staticDir == "":
log.Fatal("-static-dir is required")
case *powSecret == "":
log.Fatal("-pow-secret is required")
}
powTargetUint, err := strconv.ParseUint(*powTargetStr, 0, 32)
if err != nil {
log.Fatalf("parsing -pow-target: %v", err)
}
powTarget := uint32(powTargetUint)
// initialization
clock := clock.Realtime()
powStore := pow.NewMemoryStore(clock)
defer powStore.Close()
mgr := pow.NewManager(pow.ManagerParams{
Clock: clock,
Store: powStore,
Secret: []byte(*powSecret),
Target: powTarget,
})
mux := http.NewServeMux()
mux.Handle("/", http.FileServer(http.Dir(*staticDir)))
mux.Handle("/api/pow/challenge", newPowChallengeHandler(mgr))
// run
log.Printf("listening on %q", *listenAddr)
log.Fatal(http.ListenAndServe(*listenAddr, mux))
}