18 var serverkey *openpgp.Entity
20 // todo: http header limit: 64K, body limit: 64K
22 // getPubkey(db, fpr) (pk, err)
23 // putPubkey(db, fpr, pk) (err)
24 // getDraft(db, id) (draft, err)
25 // putDraft(db, id, draft) (err)
27 // getCert(db, id) (cert, err)
28 // putCert(db, id, cert) (err)
29 // getCertBySerial(db, fpr, sn) (cert, err)
30 // getCertByFpr(db, fpr) (cert, err)
32 // todo: update cert (inc serial..)
34 // Dummy initialization of serverkey
35 func initkey() (err error) {
36 f, err := os.Open(seckey)
40 keys, err := openpgp.ReadKeyRing(f)
50 err = os.MkdirAll(rootdir, 0755)
54 f, err = os.Create(rootdir + "/serverkey")
58 err = serverkey.Serialize(f)
62 // TODO: make sure pubkey is replicated and available
71 func defaultHandler(w http.ResponseWriter, r *http.Request) {
72 log.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL.Raw)
73 fmt.Fprintf(w, "not implemented: %s %s\n", r.Method, r.URL.Raw)
76 func submitHandler(w http.ResponseWriter, r *http.Request) {
77 log.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL.Raw)
78 draft := r.FormValue("draft")
79 debit := r.FormValue("debit")
81 cert, err := logic.EvalDraft([]byte(draft), serverkey)
83 log.Printf("eval draft fail: %s", err)
84 fmt.Fprintf(w, "eval draft fail: %s\n", err)
88 } else if len(debit) > 0 {
89 cert, err := logic.EvalDebitCert([]byte(debit), serverkey)
91 log.Printf("eval debit fail: %s", err)
92 fmt.Fprintf(w, "eval debit fail: %s\n", err)
97 fmt.Fprintf(w, "expected draft or debit param, got: %s %s\n", r.Method, r.URL.Raw)
111 http.HandleFunc("/", defaultHandler)
114 http.HandleFunc("/serverkey", func(w http.ResponseWriter, r *http.Request) {
115 http.ServeFile(w, r, rootdir+"/serverkey")
117 // http.HandleFunc("/status", defaultHandler)
118 // http.HandleFunc("/pubkey", defaultHandler)
119 // http.HandleFunc("/daft", defaultHandler)
120 // http.HandleFunc("/cert", defaultHandler)
123 // withdraw, draw, deposit, process, clear
124 http.HandleFunc("/submit", submitHandler)
126 log.Printf("start service, server id: %X\n", serverkey.PrimaryKey.Fingerprint)
127 log.Fatal(http.ListenAndServe(port, nil))