diff options
-rw-r--r-- | trillian.go | 65 |
1 files changed, 53 insertions, 12 deletions
diff --git a/trillian.go b/trillian.go index 233d5e8..162ec77 100644 --- a/trillian.go +++ b/trillian.go @@ -12,19 +12,36 @@ import ( ) func checkQueueLeaf(rsp *trillian.QueueLeafResponse, err error) error { - if err != nil || rsp == nil || rsp.QueuedLeaf == nil { - return fmt.Errorf("%v", err) + if err != nil { + return fmt.Errorf("Trillian error: %v", err) + } + if rsp == nil { + return fmt.Errorf("Trillian error: empty response") + } + if rsp.QueuedLeaf == nil { + return fmt.Errorf("Trillian error: empty QueuedLeaf") } if codes.Code(rsp.QueuedLeaf.GetStatus().GetCode()) == codes.AlreadyExists { - // no need to report this as an invalid request, just (re)issue sdi glog.V(3).Infof("queued leaf is a duplicate => %X", rsp.QueuedLeaf.Leaf.LeafValue) } return nil } func checkGetLeavesByRange(req *GetEntriesRequest, rsp *trillian.GetLeavesByRangeResponse, err error) (int, error) { - if err != nil || rsp == nil || len(rsp.Leaves) == 0 || rsp.SignedLogRoot == nil || rsp.SignedLogRoot.LogRoot == nil { - return http.StatusInternalServerError, fmt.Errorf("%v", err) // TODO: break up into multiple returns? + if err != nil { + return http.StatusInternalServerError, fmt.Errorf("Trillian Error: %v", err) + } + if rsp == nil { + return http.StatusInternalServerError, fmt.Errorf("Trillian error: empty response") + } + if rsp.SignedLogRoot == nil { + return http.StatusInternalServerError, fmt.Errorf("Trillian error: no signed log root") + } + if rsp.SignedLogRoot.LogRoot == nil { + return http.StatusInternalServerError, fmt.Errorf("Trillian error: no log root") + } + if len(rsp.Leaves) == 0 { + return http.StatusInternalServerError, fmt.Errorf("Trillian error: no leaves") } if len(rsp.Leaves) > int(req.End-req.Start+1) { return http.StatusInternalServerError, fmt.Errorf("too many leaves: %d for [%d,%d]", len(rsp.Leaves), req.Start, req.End) @@ -45,26 +62,50 @@ func checkGetLeavesByRange(req *GetEntriesRequest, rsp *trillian.GetLeavesByRang return http.StatusInternalServerError, fmt.Errorf("invalid leaf index: wanted %d, got %d", req.Start+int64(i), leaf.LeafIndex) } } - return 0, nil + return http.StatusOK, nil } func checkGetInclusionProofByHash(lp *LogParameters, rsp *trillian.GetInclusionProofByHashResponse, err error) error { - if err != nil || rsp == nil || len(rsp.Proof) == 0 || rsp.Proof[0] == nil { - return fmt.Errorf("%v", err) + if err != nil { + return fmt.Errorf("Trillian Error: %v", err) + } + if rsp == nil { + return fmt.Errorf("Trillian error: empty response") + } + if len(rsp.Proof) == 0 { + return fmt.Errorf("Trillian error: no proofs") + } + if rsp.Proof[0] == nil { + return fmt.Errorf("Trillian error: no proof") } return checkHashPath(lp.HashType.Size(), rsp.Proof[0].Hashes) } func checkGetConsistencyProof(lp *LogParameters, rsp *trillian.GetConsistencyProofResponse, err error) error { - if err != nil || rsp == nil || rsp.Proof == nil { - return fmt.Errorf("%v", err) + if err != nil { + return fmt.Errorf("Trillian Error: %v", err) + } + if rsp == nil { + return fmt.Errorf("Trillian error: empty response") + } + if rsp.Proof == nil { + return fmt.Errorf("Trillian error: no proof") } return checkHashPath(lp.HashType.Size(), rsp.Proof.Hashes) } func checkGetLatestSignedLogRoot(lp *LogParameters, rsp *trillian.GetLatestSignedLogRootResponse, err error, out *types.LogRootV1) error { - if err != nil || rsp == nil || rsp.SignedLogRoot == nil || rsp.SignedLogRoot.LogRoot == nil { - return fmt.Errorf("%v", err) + if err != nil { + return fmt.Errorf("Trillian Error: %v", err) + } + if rsp == nil { + return fmt.Errorf("Trillian error: empty response") + } + if rsp.SignedLogRoot == nil { + return fmt.Errorf("Trillian error: no signed log root") + } + if rsp.SignedLogRoot.LogRoot == nil { + return fmt.Errorf("Trillian error: no log root") } if err := out.UnmarshalBinary(rsp.SignedLogRoot.LogRoot); err != nil { return fmt.Errorf("cannot unmarshal log root: %v", err) |