diff options
-rw-r--r-- | handler.go | 9 | ||||
-rw-r--r-- | type.go | 31 |
2 files changed, 39 insertions, 1 deletions
@@ -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 } @@ -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 +} |