X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=cmd%2Fepoint-client%2Fepoint-client.go;fp=cmd%2Fepoint-client%2Fepoint-client.go;h=21541c34094a8e1e51646132b63df6aa6a492b34;hb=d24526e0d767f7b45956d362180d2684e1e17294;hp=7ddd923b1232e906862eda0d0503a63bde9b9dbf;hpb=b9595460ff43dfd8cf07fe56f9908583456dc9c6;p=epoint diff --git a/cmd/epoint-client/epoint-client.go b/cmd/epoint-client/epoint-client.go index 7ddd923..21541c3 100644 --- a/cmd/epoint-client/epoint-client.go +++ b/cmd/epoint-client/epoint-client.go @@ -8,6 +8,7 @@ import ( "epoint/document" "epoint/key" "epoint/store" + "flag" "fmt" "io" "log" @@ -17,23 +18,30 @@ import ( "strconv" ) -// TODO: store documents, query document by id, easy submit +// TODO: create certby/ draftby/ +// TODO: query document by id, easy submit var db *store.Conn -const usage = `usage: ./epoint-client [i|h|d|r|q|s|v|c] [args..] < [seed|document] -server is http://localhost:8080 by default +const usage = `usage: ./epoint-client [flags] [i|h|d|r|q|s|v|c] [args..] < [seed|document] +flags - one of -help, -dir rootdir, -server serveraddr i - make issuer key, use seed for generation, args: denomination h - make holder key, use seed for generation, args: issuer d - make draft, use seed for signing key, args: targetid value r - sign raw document, use seed for signing key, args: document -q - query document, args: k|d|c id [server] -s - submit a (key|draft|cert) document, args: k|d|c [server] +q - query document, args: k|d|c id +s - submit a (key|draft|cert) document, args: k|d|c v - verify a document (prints body of the document if ok) -c - connect to server and get server key, args: [server] +c - connect to server and get server key ` +var ( + rootdir = flag.String("dir", "", "root dir for storage, empty sets a sane default") + server = flag.String("server", "http://localhost:8080", "server address") + // TODO: verbose +) + func rnd(n int) (r []byte, err error) { r = make([]byte, n) _, err = io.ReadFull(rand.Reader, r) @@ -223,7 +231,7 @@ func q(cmd, id, server string) (err error) { log.Printf("found %s in local store", id) return } - resp, err := http.Get(server+"/"+k+"/"+id) + resp, err := http.Get(server + "/" + k + "/" + id) if err != nil { return } @@ -376,6 +384,10 @@ func s(d []byte, cmd, server string) (err error) { if err != nil { return } + if cmd == "k" { + // TODO: signed reply? + return + } cert, s, err := document.Parse(b) if err != nil { return @@ -462,7 +474,7 @@ func c(server string) (err error) { // TODO: commmon code with server func initstore(dir string) (db *store.Conn, err error) { - log.Printf("using root dir %s", dir) + // log.Printf("using root dir %s", dir) db, err = store.Open(dir) if err != nil { return @@ -487,11 +499,11 @@ func initstore(dir string) (db *store.Conn, err error) { if err != nil { return } - err = db.Ensure("certby/key") + err = db.Ensure("certby/key.issuer") if err != nil { return } - err = db.Ensure("certby/key.serial") + err = db.Ensure("certby/key.issuer.serial") if err != nil { return } @@ -529,67 +541,62 @@ func read() []byte { return b } +func cmdargs() (cmd string, args []string) { + a := flag.Args() + cmd = a[0] + args = a[1:] + return +} + func main() { - if len(os.Args) < 2 { + flag.Parse() + if flag.NArg() < 1 { log.Fatal(usage) } + cmd, args := cmdargs() var err error - db, err = initstore(storedir()) - server := "http://localhost:8080" - switch os.Args[1] { + dir := *rootdir + if dir == "" { + dir = storedir() + } + db, err = initstore(dir) + switch cmd { case "h", "i": - if len(os.Args) != 3 { + if len(args) != 1 { log.Fatal(usage) } - err = k(read(), os.Args[1], os.Args[2]) + err = k(read(), cmd, args[0]) case "d": - if len(os.Args) != 4 { + if len(args) != 2 { log.Fatal(usage) } - err = d(read(), os.Args[2], os.Args[3]) + err = d(read(), args[0], args[1]) case "r": - if len(os.Args) != 3 { + if len(os.Args) != 1 { log.Fatal(usage) } - err = raw(read(), os.Args[2]) + err = raw(read(), args[0]) case "q": - cmd := "" - id := "" - if len(os.Args) == 5 { - cmd = os.Args[2] - id = os.Args[3] - server = os.Args[4] - } else if len(os.Args) == 4 { - cmd = os.Args[2] - id = os.Args[3] - } else { + if len(args) != 2 { log.Fatal(usage) } - err = q(cmd, id, server) + err = q(args[0], args[1], *server) case "s": - cmd := "" - if len(os.Args) == 4 { - cmd = os.Args[2] - server = os.Args[3] - } else if len(os.Args) == 3 { - cmd = os.Args[2] - } else { + if len(args) != 1 { log.Fatal(usage) } - err = s(read(), cmd, server) + err = s(read(), args[0], *server) case "v": - if len(os.Args) != 2 { + if len(args) != 0 { log.Fatal(usage) } err = v(read()) case "c": - if len(os.Args) == 3 { - server = os.Args[2] - } else if len(os.Args) != 2 { + if len(args) != 0 { log.Fatal(usage) } - err = c(server) + err = c(*server) default: log.Fatal(usage) }