From 2793442e21f19fc3f764e1f848b83d96076dcfb0 Mon Sep 17 00:00:00 2001 From: Rasmus Dahlberg Date: Thu, 22 Oct 2020 15:08:47 +0200 Subject: added parameter parsing for get-entries --- handler.go | 9 ++++++++- type.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/handler.go b/handler.go index 7b986c1..6c81d3e 100644 --- a/handler.go +++ b/handler.go @@ -112,9 +112,16 @@ func unpackRequest(r *http.Request, unpack interface{}) error { return nil } -// getEntries provides with a list of entries from the Trillian backend +// getEntries provides a list of entries from the Trillian backend func getEntries(ctx context.Context, i *instance, w http.ResponseWriter, r *http.Request) (int, error) { glog.Info("in getEntries") + + var request GetEntriesRequest + if err := request.Unpack(r); err != nil { + return http.StatusBadRequest, err + } + glog.Infof("valid request: %v", request) + return http.StatusOK, nil // TODO } diff --git a/type.go b/type.go index 031ae8d..dcb2a9a 100644 --- a/type.go +++ b/type.go @@ -2,8 +2,10 @@ package stfe import ( "fmt" + "strconv" "encoding/base64" + "net/http" "github.com/google/certificate-transparency-go/tls" ) @@ -98,3 +100,32 @@ type AddEntryRequest struct { Signature string `json:"signature"` Certificate string `json:"certificate"` } + +// GetEntriesRequest is a collection of get-entry input parameters +type GetEntriesRequest struct { + Start int64 + End int64 +} + +func (r *GetEntriesRequest) Unpack(httpRequest *http.Request) error { + var err error + + r.Start, err = strconv.ParseInt(httpRequest.FormValue("start"), 10, 64) + if err != nil { + return fmt.Errorf("bad start parameter: %v", err) + } + r.End, err = strconv.ParseInt(httpRequest.FormValue("end"), 10, 64) + if err != nil { + return fmt.Errorf("bad end parameter: %v", err) + } + + if r.Start < 0 { + return fmt.Errorf("bad parameters: start(%v) must have a non-negative value", r.Start) + } + if r.Start > r.End { + return fmt.Errorf("bad parameters: start(%v) must be larger than end(%v)", r.Start, r.End) + } + // TODO: check that range is not larger than the max range. Yes -> truncate + // TODO: check that end is not past the most recent STH. Yes -> truncate + return nil +} -- cgit v1.2.3