package main
import (
+ "crypto/openpgp"
"epoint/key"
"epoint/server"
+ "flag"
"fmt"
+ "io/ioutil"
"log"
"net/http"
"os"
)
-const (
- addr = ":8080"
- rootdir = "docroot"
- seckey = "./key.sec"
+var (
+ rootdir = flag.String("dir", "docroot", "root dir for storage")
+ seckey = flag.String("key", "", "secret key, empty means generated")
+ addr = flag.String("addr", ":8080", "address to listen on")
)
// todo: http header limit: 64K, body limit: 64K
msg := fmt.Sprintf("add keys failed: %s", err)
httpError(w, 404, msg)
} else {
- w.Write([]byte("ok\nTODO: create cert 1 here?"))
+ w.Write([]byte("ok\n"))
}
default:
msg := fmt.Sprintf("expected key, draft or debit param, got: %s", httpReq(r))
}
}
+func initkey(path string) (sk *openpgp.Entity, err error) {
+ if path == "" {
+ // TODO: serious keygen, server key depends on time
+ return key.Server([]byte("secret seed"))
+ }
+ d, err := ioutil.ReadFile(path)
+ if err != nil {
+ return
+ }
+ return key.Parse(d)
+}
+
func main() {
- // TODO: serious keygen
- serverkey, err := key.Server([]byte("secret seed"))
+ flag.Parse()
+ serverkey, err := initkey(*seckey)
if err != nil {
log.Fatal(err)
}
- err = server.Init(rootdir, serverkey)
+ err = server.Init(*rootdir, serverkey)
if err != nil {
log.Fatal(err)
}
// TODO: url from key
- f, err := os.Create(rootdir + "/form.html")
+ f, err := os.Create(*rootdir + "/form.html")
if err != nil {
log.Fatal(err)
}
_ = f.Close()
// queries
- http.Handle("/", http.FileServer(http.Dir(rootdir)))
+ http.Handle("/", http.FileServer(http.Dir(*rootdir)))
// actions
// withdraw, draw, deposit, process, clear
http.HandleFunc("/submit", submitHandler)
- log.Printf("start service on %s, server key id: %s\n", addr, key.Id(serverkey))
- log.Fatal(http.ListenAndServe(addr, nil))
+ log.Printf("start service on %s, server key id: %s\n", *addr, key.Id(serverkey))
+ log.Fatal(http.ListenAndServe(*addr, nil))
}