add fixes by marcell
[epoint] / pkg / server / server.go
index 71bd3fc..53ef664 100644 (file)
@@ -24,7 +24,7 @@ func StoreSk(sk *openpgp.Entity) (err error) {
        if err != nil {
                return
        }
-       return db.Set("key", fmt.Sprintf("%X", sk.PrimaryKey.Fingerprint), b.Bytes())
+       return db.Set("key", key.Id(sk), b.Bytes())
 }
 
 func GetKeys(fpr string) (es openpgp.EntityList, err error) {
@@ -52,22 +52,27 @@ func AddKeys(d []byte) (err error) {
        }
        for _, e := range entities {
                // TODO: various checks..
+               // TODO: collect errors instead of aborting addkeys
                isIssuer, issuer, denom, err1 := key.Check(e)
                err = err1
                if err != nil {
-                       // TODO..
-                       continue
+                       return
                }
                if !isIssuer {
-                       es, err := GetKeys(issuer)
+                       es, err1 := GetKeys(issuer)
+                       err = err1
+                       if err != nil {
+                               return
+                       }
+                       ok, _, den, err1 := key.Check(es[0])
+                       err = err1
                        if err != nil {
-                               // TODO..
-                               continue
+                               // internal error
+                               return
                        }
-                       ok, _, den, err := key.Check(es[0])
-                       if !ok || err != nil || den != denom {
-                               // TODO..
-                               continue
+                       if !ok || den != denom {
+                               err = fmt.Errorf("Issuer key check failed")
+                               return
                        }
                }
                b := new(bytes.Buffer)
@@ -75,8 +80,8 @@ func AddKeys(d []byte) (err error) {
                if err != nil {
                        return
                }
-               fpr := fmt.Sprintf("%X", e.PrimaryKey.Fingerprint)
-               err = db.Set("key", fpr, b.Bytes())
+               fpr := key.Id(e)
+               err = db.Insert("key", fpr, b.Bytes())
                if err != nil {
                        return
                }
@@ -128,7 +133,7 @@ func ParseDraft(d []byte) (draft *document.Draft, draftid string, err error) {
        }
        draft, ok := iv.(*document.Draft)
        if !ok {
-               err = fmt.Errorf("ParseDraft: expected a draft docuent")
+               err = fmt.Errorf("ParseDraft: expected a draft document")
                return
        }
        draftid = document.Id(signed)
@@ -213,7 +218,7 @@ func ParseDebitCert(d []byte) (cert *document.DebitCert, certid string, err erro
 func NewDebitCert(draftid string, draft *document.Draft) (*document.DebitCert, error) {
        cert := new(document.DebitCert)
        cert.Holder = draft.Drawer
-       cert.Date = time.Seconds()
+       cert.Date = time.Now().Unix()
        cert.Denomination = "epoint"
        cert.Issuer = draft.Issuer
        cert.AuthorizedBy = draft.AuthorizedBy
@@ -226,7 +231,7 @@ func NewDebitCert(draftid string, draft *document.Draft) (*document.DebitCert, e
        if err != nil {
                // first cert: drawer is issuer
                if draft.Drawer != draft.Issuer {
-                       return nil, fmt.Errorf("drawer must be the issuer when drawing an empty account")
+                       return nil, fmt.Errorf("drawer must be the issuer when drawing an empty account (%s != %s)", draft.Drawer, draft.Issuer)
                }
                cert.Serial = 1
                cert.Balance = cert.Difference
@@ -259,7 +264,7 @@ func NewDebitCert(draftid string, draft *document.Draft) (*document.DebitCert, e
                }
                cert.LastDebitSerial = oldcert.LastDebitSerial
                cert.LastCreditSerial = oldcert.LastCreditSerial
-               if _,ok := iv.(*document.DebitCert); ok {
+               if _, ok := iv.(*document.DebitCert); ok {
                        cert.LastDebitSerial = oldcert.Serial
                } else {
                        cert.LastCreditSerial = oldcert.Serial
@@ -273,7 +278,7 @@ func NewCreditCert(draftid string, draft *document.Draft, dcertid string, dcert
        cert := new(document.CreditCert)
        // TODO: get from old cert instead?
        cert.Holder = dcert.Beneficiary
-       cert.Date = time.Seconds()
+       cert.Date = time.Now().Unix()
        // TODO: get these from the cert holder pubkey
        cert.Denomination = "epoint"
        cert.Issuer = draft.Issuer
@@ -315,7 +320,7 @@ func NewCreditCert(draftid string, draft *document.Draft, dcertid string, dcert
                }
                cert.LastDebitSerial = oldcert.LastDebitSerial
                cert.LastCreditSerial = oldcert.LastCreditSerial
-               if _,ok := iv.(*document.DebitCert); ok {
+               if _, ok := iv.(*document.DebitCert); ok {
                        cert.LastDebitSerial = oldcert.Serial
                } else {
                        cert.LastCreditSerial = oldcert.Serial