cleanups
[epoint] / logic / logic.go
index a9fd15b..c09054f 100644 (file)
@@ -38,11 +38,11 @@ func AddKeys(d []byte) (err error) {
                if err != nil {
                        return
                }
-               err = db.Append("fprlist/64", fpr[len(fpr)-16:], []byte(fpr))
+               err = db.Append("keysby/64", fpr[len(fpr)-16:], []byte(fpr))
                if err != nil {
                        return
                }
-               err = db.Append("fprlist/32", fpr[len(fpr)-8:], []byte(fpr))
+               err = db.Append("keysby/32", fpr[len(fpr)-8:], []byte(fpr))
                if err != nil {
                        return
                }
@@ -51,7 +51,7 @@ func AddKeys(d []byte) (err error) {
 }
 
 func CertByDraft(draftid string) (d []byte, err error) {
-       certid, err := db.Get("certid/debit", draftid)
+       certid, err := db.Get("certby/draft", draftid)
        if err != nil {
                // TODO: we have the draft but the cert is not ready
                return
@@ -65,7 +65,7 @@ func CertByDraft(draftid string) (d []byte, err error) {
 }
 
 func CertByDebitCert(debitid string) (d []byte, err error) {
-       creditid, err := db.Get("certid/credit", debitid)
+       creditid, err := db.Get("certby/debit", debitid)
        if err != nil {
                // TODO: we have the debit cert but the credit cert is not ready
                return
@@ -90,26 +90,26 @@ func ParseDraft(d []byte) (draft *document.Draft, draftid string, err error) {
                return
        }
        draftid = document.Id(signed)
-/*
-       k, err := db.Get("key", draft.Drawer)
-       if err != nil {
-               return
-       }
-       kr, err := openpgp.ReadKeyRing(bytes.NewBuffer(k))
-       if err != nil {
-               // internal error: pubkey cannot be parsed
-               return
-       }
-       cleaned, err = document.Verify(signed, kr)
-       if err != nil {
-               return
-       }
-       // TODO: verify issuer
-       _, err = db.Get("key", draft.Beneficiary)
-       if err != nil {
-               return
-       }
-*/
+       /*
+               k, err := db.Get("key", draft.Drawer)
+               if err != nil {
+                       return
+               }
+               kr, err := openpgp.ReadKeyRing(bytes.NewBuffer(k))
+               if err != nil {
+                       // internal error: pubkey cannot be parsed
+                       return
+               }
+               cleaned, err = document.Verify(signed, kr)
+               if err != nil {
+                       return
+               }
+               // TODO: verify issuer
+               _, err = db.Get("key", draft.Beneficiary)
+               if err != nil {
+                       return
+               }
+       */
        // TODO: do various format checks (AuthorizedBy check etc)
        if draft.Amount <= 0 || draft.Amount >= IntLimit {
                err = fmt.Errorf("draft amount is invalid: %d", draft.Amount)
@@ -128,23 +128,23 @@ func ParseDebitCert(d []byte) (cert *document.DebitCert, certid string, err erro
                err = fmt.Errorf("ParseDebitCert: expected a debit docuent")
                return
        }
-/*
-       // TODO: keep our key at hand
-       k, err := db.Get("key", cert.AuthorizedBy)
-       if err != nil {
-               return
-       }
-       kr, err := openpgp.ReadKeyRing(bytes.NewBuffer(k))
-       if err != nil {
-               // internal error: pubkey cannot be parsed
-               return
-       }
-       // must clean up to make sure the hash is ok
-       cleaned, err = document.Verify(signed, kr)
-       if err != nil {
-               return
-       }
-*/
+       /*
+               // TODO: keep our key at hand
+               k, err := db.Get("key", cert.AuthorizedBy)
+               if err != nil {
+                       return
+               }
+               kr, err := openpgp.ReadKeyRing(bytes.NewBuffer(k))
+               if err != nil {
+                       // internal error: pubkey cannot be parsed
+                       return
+               }
+               // must clean up to make sure the hash is ok
+               cleaned, err = document.Verify(signed, kr)
+               if err != nil {
+                       return
+               }
+       */
        certid = document.Id(signed)
        return
 }
@@ -160,7 +160,7 @@ func NewDebitCert(draftid string, draft *document.Draft) (*document.DebitCert, e
        cert.Draft = draftid
        cert.Beneficiary = draft.Beneficiary
 
-       oid, err := db.Get("certid/last", draft.Drawer)
+       oid, err := db.Get("certby/key", draft.Drawer)
        oldcertid := string(oid)
        if err != nil {
                // first cert: drawer is issuer
@@ -218,7 +218,7 @@ func NewCreditCert(draftid string, draft *document.Draft, dcertid string, dcert
        cert.Drawer = dcert.Holder
        cert.DebitCert = dcertid
 
-       oid, err := db.Get("certid/last", dcert.Beneficiary)
+       oid, err := db.Get("certby/key", dcert.Beneficiary)
        oldcertid := string(oid)
        if err != nil {
                // this is the first cert
@@ -260,7 +260,6 @@ func NewCreditCert(draftid string, draft *document.Draft, dcertid string, dcert
        return cert, nil
 }
 
-// TODO: draft ref
 func EvalDraft(d []byte, sk *openpgp.Entity) (r []byte, err error) {
        draft, draftid, err := ParseDraft(d)
        if err != nil {
@@ -277,6 +276,17 @@ func EvalDraft(d []byte, sk *openpgp.Entity) (r []byte, err error) {
                // internal error
                return
        }
+       // TODO: db.Insert: fails if key exists
+       _, err = db.Get("draftby/nonce", draft.Nonce)
+       if err == nil {
+               err = fmt.Errorf("draft nonce is not unique")
+               return
+       }
+       err = db.Set("draftby/nonce", draft.Nonce, d)
+       if err != nil {
+               // internal error
+               return
+       }
 
        // debit cert
        cert, err := NewDebitCert(draftid, draft)
@@ -290,18 +300,18 @@ func EvalDraft(d []byte, sk *openpgp.Entity) (r []byte, err error) {
                // internal error
                return
        }
-       err = db.Set("certid/debit", draftid, []byte(certid))
+       err = db.Set("certby/draft", draftid, []byte(certid))
        if err != nil {
                // internal error
                return
        }
-       err = db.Set("certid/last", cert.Holder, []byte(certid))
+       err = db.Set("certby/key", cert.Holder, []byte(certid))
        if err != nil {
                // internal error
                return
        }
        // TODO: append?
-       err = db.Set("certid/all", fmt.Sprintf("%s.%09d", cert.Holder, cert.Serial), []byte(certid))
+       err = db.Set("certby/key.serial", fmt.Sprintf("%s.%09d", cert.Holder, cert.Serial), []byte(certid))
        if err != nil {
                // internal error
                return
@@ -356,18 +366,18 @@ func EvalDebitCert(d []byte, sk *openpgp.Entity) (r []byte, err error) {
                // internal error
                return
        }
-       err = db.Set("certid/credit", dcertid, []byte(certid))
+       err = db.Set("certby/debit", dcertid, []byte(certid))
        if err != nil {
                // internal error
                return
        }
-       err = db.Set("certid/last", cert.Holder, []byte(certid))
+       err = db.Set("certby/key", cert.Holder, []byte(certid))
        if err != nil {
                // internal error
                return
        }
        // TODO: append?
-       err = db.Set("certid/all", fmt.Sprintf("%s.%09d", cert.Holder, cert.Serial), []byte(certid))
+       err = db.Set("certby/key.serial", fmt.Sprintf("%s.%09d", cert.Holder, cert.Serial), []byte(certid))
        if err != nil {
                // internal error
                return
@@ -375,8 +385,8 @@ func EvalDebitCert(d []byte, sk *openpgp.Entity) (r []byte, err error) {
        return
 }
 
-func Init() (err error) {
-       db, err = store.Open("teststore")
+func Init(rootdir string) (err error) {
+       db, err = store.Open(rootdir)
        if err != nil {
                return
        }
@@ -392,27 +402,31 @@ func Init() (err error) {
        if err != nil {
                return
        }
-       err = db.Ensure("certid/credit")
+       err = db.Ensure("certby/draft")
+       if err != nil {
+               return
+       }
+       err = db.Ensure("certby/debit")
        if err != nil {
                return
        }
-       err = db.Ensure("certid/debit")
+       err = db.Ensure("certby/key")
        if err != nil {
                return
        }
-       err = db.Ensure("certid/last")
+       err = db.Ensure("certby/key.serial")
        if err != nil {
                return
        }
-       err = db.Ensure("certid/all")
+       err = db.Ensure("draftby/nonce")
        if err != nil {
                return
        }
-       err = db.Ensure("fprlist/64")
+       err = db.Ensure("keysby/64")
        if err != nil {
                return
        }
-       err = db.Ensure("fprlist/32")
+       err = db.Ensure("keysby/32")
        if err != nil {
                return
        }