various fixes to make testing possible
[epoint] / cmd / epoint-server / epoint-server.go
index 6e3bccd..292d8bd 100644 (file)
@@ -1,18 +1,21 @@
 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
@@ -70,7 +73,7 @@ func submitHandler(w http.ResponseWriter, r *http.Request) {
                        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))
@@ -78,19 +81,31 @@ func submitHandler(w http.ResponseWriter, r *http.Request) {
        }
 }
 
+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)
        }
@@ -114,12 +129,12 @@ where 'name' is 'key', 'draft' or 'debit'.
        _ = 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))
 }