aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--endpoint.go21
-rw-r--r--endpoint_test.go48
-rw-r--r--instance.go18
-rw-r--r--types/types.go41
-rw-r--r--types/types_test.go53
5 files changed, 81 insertions, 100 deletions
diff --git a/endpoint.go b/endpoint.go
index 19ea388..9be55b4 100644
--- a/endpoint.go
+++ b/endpoint.go
@@ -5,33 +5,12 @@ import (
"crypto/ed25519"
"fmt"
"net/http"
- "strings"
"github.com/golang/glog"
"github.com/google/trillian"
"github.com/system-transparency/stfe/types"
)
-// Endpoint is a named HTTP API endpoint
-type Endpoint string
-
-const (
- EndpointAddEntry = Endpoint("add-leaf")
- EndpointAddCosignature = Endpoint("add-cosignature")
- EndpointGetLatestSth = Endpoint("get-tree-head-latest")
- EndpointGetStableSth = Endpoint("get-tree-head-to-sign")
- EndpointGetCosignedSth = Endpoint("get-tree-head-cosigned")
- EndpointGetProofByHash = Endpoint("get-proof-by-hash")
- EndpointGetConsistencyProof = Endpoint("get-consistency-proof")
- EndpointGetEntries = Endpoint("get-leaves")
-)
-
-// Path joins a number of components to form a full endpoint path, e.g., base
-// ("example.com"), prefix ("st/v1"), and the endpoint itself ("get-sth").
-func (e Endpoint) Path(components ...string) string {
- return strings.Join(append(components, string(e)), "/")
-}
-
func addEntry(ctx context.Context, i *Instance, w http.ResponseWriter, r *http.Request) (int, error) {
glog.V(3).Info("handling add-entry request")
leaf, err := i.LogParameters.parseAddEntryV1Request(r)
diff --git a/endpoint_test.go b/endpoint_test.go
index aab2c54..e515635 100644
--- a/endpoint_test.go
+++ b/endpoint_test.go
@@ -452,54 +452,6 @@ func TestEndpointGetEntriesV1(t *testing.T) {
}
}
-func TestEndpointPath(t *testing.T) {
- base, prefix, proto := "http://example.com", "test", "st/v1"
- for _, table := range []struct {
- endpoint Endpoint
- want string
- }{
- {
- endpoint: EndpointAddEntry,
- want: "http://example.com/test/st/v1/add-entry",
- },
- {
- endpoint: EndpointAddCosignature,
- want: "http://example.com/test/st/v1/add-cosignature",
- },
- {
- endpoint: EndpointGetLatestSth,
- want: "http://example.com/test/st/v1/get-latest-sth",
- },
- {
- endpoint: EndpointGetStableSth,
- want: "http://example.com/test/st/v1/get-stable-sth",
- },
- {
- endpoint: EndpointGetCosignedSth,
- want: "http://example.com/test/st/v1/get-cosigned-sth",
- },
- {
- endpoint: EndpointGetConsistencyProof,
- want: "http://example.com/test/st/v1/get-consistency-proof",
- },
- {
- endpoint: EndpointGetProofByHash,
- want: "http://example.com/test/st/v1/get-proof-by-hash",
- },
- {
- endpoint: EndpointGetEntries,
- want: "http://example.com/test/st/v1/get-entries",
- },
- } {
- if got, want := table.endpoint.Path(base+"/"+prefix+"/"+proto), table.want; got != want {
- t.Errorf("got endpoint\n%s\n\tbut wanted\n%s\n\twith one component", got, want)
- }
- if got, want := table.endpoint.Path(base, prefix, proto), table.want; got != want {
- t.Errorf("got endpoint\n%s\n\tbut wanted\n%s\n\tmultiple components", got, want)
- }
- }
-}
-
// TODO: TestWriteOctetResponse
func TestWriteOctetResponse(t *testing.T) {
}
diff --git a/instance.go b/instance.go
index 5d358c1..4425770 100644
--- a/instance.go
+++ b/instance.go
@@ -22,14 +22,14 @@ type Instance struct {
// Handlers returns a list of STFE handlers
func (i *Instance) Handlers() []Handler {
return []Handler{
- Handler{Instance: i, Handler: addEntry, Endpoint: EndpointAddEntry, Method: http.MethodPost},
- Handler{Instance: i, Handler: addCosignature, Endpoint: EndpointAddCosignature, Method: http.MethodPost},
- Handler{Instance: i, Handler: getLatestSth, Endpoint: EndpointGetLatestSth, Method: http.MethodGet},
- Handler{Instance: i, Handler: getStableSth, Endpoint: EndpointGetStableSth, Method: http.MethodGet},
- Handler{Instance: i, Handler: getCosignedSth, Endpoint: EndpointGetCosignedSth, Method: http.MethodGet},
- Handler{Instance: i, Handler: getProofByHash, Endpoint: EndpointGetProofByHash, Method: http.MethodPost},
- Handler{Instance: i, Handler: getConsistencyProof, Endpoint: EndpointGetConsistencyProof, Method: http.MethodPost},
- Handler{Instance: i, Handler: getEntries, Endpoint: EndpointGetEntries, Method: http.MethodPost},
+ Handler{Instance: i, Handler: addEntry, Endpoint: types.EndpointAddLeaf, Method: http.MethodPost},
+ Handler{Instance: i, Handler: addCosignature, Endpoint: types.EndpointAddCosignature, Method: http.MethodPost},
+ Handler{Instance: i, Handler: getLatestSth, Endpoint: types.EndpointGetTreeHeadLatest, Method: http.MethodGet},
+ Handler{Instance: i, Handler: getStableSth, Endpoint: types.EndpointGetTreeHeadToSign, Method: http.MethodGet},
+ Handler{Instance: i, Handler: getCosignedSth, Endpoint: types.EndpointGetTreeHeadCosigned, Method: http.MethodGet},
+ Handler{Instance: i, Handler: getProofByHash, Endpoint: types.EndpointGetProofByHash, Method: http.MethodPost},
+ Handler{Instance: i, Handler: getConsistencyProof, Endpoint: types.EndpointGetConsistencyProof, Method: http.MethodPost},
+ Handler{Instance: i, Handler: getEntries, Endpoint: types.EndpointGetLeaves, Method: http.MethodPost},
}
}
@@ -37,7 +37,7 @@ func (i *Instance) Handlers() []Handler {
// to an STFE server instance as well as a function that uses it.
type Handler struct {
Instance *Instance
- Endpoint Endpoint
+ Endpoint types.Endpoint
Method string
Handler func(context.Context, *Instance, http.ResponseWriter, *http.Request) (int, error)
}
diff --git a/types/types.go b/types/types.go
index 2da40da..d031b29 100644
--- a/types/types.go
+++ b/types/types.go
@@ -3,17 +3,34 @@ package types
import (
"crypto/ed25519"
"crypto/sha256"
+ "strings"
)
const (
HashSize = sha256.Size
SignatureSize = ed25519.SignatureSize
VerificationKeySize = ed25519.PublicKeySize
+
+ EndpointAddLeaf = Endpoint("add-leaf")
+ EndpointAddCosignature = Endpoint("add-cosignature")
+ EndpointGetTreeHeadLatest = Endpoint("get-tree-head-latest")
+ EndpointGetTreeHeadToSign = Endpoint("get-tree-head-to-sign")
+ EndpointGetTreeHeadCosigned = Endpoint("get-tree-head-cosigned")
+ EndpointGetProofByHash = Endpoint("get-proof-by-hash")
+ EndpointGetConsistencyProof = Endpoint("get-consistency-proof")
+ EndpointGetLeaves = Endpoint("get-leaves")
)
+// Endpoint is a named HTTP API endpoint
+type Endpoint string
+
+// Path joins a number of components to form a full endpoint path. For example,
+// EndpointAddLeaf.Path("example.com", "st/v0") -> example.com/st/v0/add-leaf.
+func (e Endpoint) Path(components ...string) string {
+ return strings.Join(append(components, string(e)), "/")
+}
+
// Leaf is the log's Merkle tree leaf.
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#merkle-tree-leaf
type Leaf struct {
Message
SigIdent
@@ -35,18 +52,12 @@ type SigIdent struct {
// SignedTreeHead is composed of a tree head and a list of signature-signer
// pairs. Each signature is computed over the Trunnel-serialized tree head.
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#get-tree-head-cosigned
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#get-tree-head-to-sign
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#get-tree-head-latest
type SignedTreeHead struct {
TreeHead
SigIdent []*SigIdent
}
// TreeHead is the log's tree head.
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#merkle-tree-head
type TreeHead struct {
Timestamp uint64
TreeSize uint64
@@ -55,8 +66,6 @@ type TreeHead struct {
// ConsistencyProof is a consistency proof that proves the log's append-only
// property.
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#get-consistency-proof
type ConsistencyProof struct {
NewSize uint64
OldSize uint64
@@ -65,8 +74,6 @@ type ConsistencyProof struct {
// InclusionProof is an inclusion proof that proves a leaf is included in the
// log.
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#get-proof-by-hash
type InclusionProof struct {
TreeSize uint64
LeafIndex uint64
@@ -77,32 +84,24 @@ type InclusionProof struct {
type LeafList []*Leaf
// ConsistencyProofRequest is a get-consistency-proof request
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#get-consistency-proof
type ConsistencyProofRequest struct {
NewSize uint64
OldSize uint64
}
// InclusionProofRequest is a get-proof-by-hash request
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#get-proof-by-hash
type InclusionProofRequest struct {
LeafHash *[HashSize]byte
TreeSize uint64
}
// LeavesRequest is a get-leaves request
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#get-leaves
type LeavesRequest struct {
StartSize uint64
EndSize uint64
}
// LeafRequest is an add-leaf request
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#add-leaf
type LeafRequest struct {
Message
Signature *[SignatureSize]byte
@@ -111,8 +110,6 @@ type LeafRequest struct {
}
// CosignatureRequest is an add-cosignature request
-//
-// Ref: https://github.com/system-transparency/stfe/blob/design/doc/api.md#add-cosignature
type CosignatureRequest struct {
SigIdent
}
diff --git a/types/types_test.go b/types/types_test.go
new file mode 100644
index 0000000..9d76c73
--- /dev/null
+++ b/types/types_test.go
@@ -0,0 +1,53 @@
+package types
+
+import (
+ "testing"
+)
+
+func TestEndpointPath(t *testing.T) {
+ base, prefix, proto := "example.com", "log", "st/v0"
+ for _, table := range []struct {
+ endpoint Endpoint
+ want string
+ }{
+ {
+ endpoint: EndpointAddLeaf,
+ want: "example.com/log/st/v0/add-leaf",
+ },
+ {
+ endpoint: EndpointAddCosignature,
+ want: "example.com/log/st/v0/add-cosignature",
+ },
+ {
+ endpoint: EndpointGetTreeHeadLatest,
+ want: "example.com/log/st/v0/get-tree-head-latest",
+ },
+ {
+ endpoint: EndpointGetTreeHeadToSign,
+ want: "example.com/log/st/v0/get-tree-head-to-sign",
+ },
+ {
+ endpoint: EndpointGetTreeHeadCosigned,
+ want: "example.com/log/st/v0/get-tree-head-cosigned",
+ },
+ {
+ endpoint: EndpointGetConsistencyProof,
+ want: "example.com/log/st/v0/get-consistency-proof",
+ },
+ {
+ endpoint: EndpointGetProofByHash,
+ want: "example.com/log/st/v0/get-proof-by-hash",
+ },
+ {
+ endpoint: EndpointGetLeaves,
+ want: "example.com/log/st/v0/get-leaves",
+ },
+ } {
+ if got, want := table.endpoint.Path(base+"/"+prefix+"/"+proto), table.want; got != want {
+ t.Errorf("got endpoint\n%s\n\tbut wanted\n%s\n\twith one component", got, want)
+ }
+ if got, want := table.endpoint.Path(base, prefix, proto), table.want; got != want {
+ t.Errorf("got endpoint\n%s\n\tbut wanted\n%s\n\tmultiple components", got, want)
+ }
+ }
+}