diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ec000d679f3ca6122cf364216ea4834742190304..50907fed986d0308c21502ce804a4936ee4a683c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -64,8 +64,6 @@ jobs: - uses: actions/checkout@v2 - name: Docker Build run: docker-compose build - - name: Docker Compose Start - run: docker-compose up -d - uses: actions/setup-go@v2 with: go-version: ${{ env.GOVERSION }} diff --git a/cmd/server/app/serve.go b/cmd/server/app/serve.go index a5afa99c84f0b06dc66a61d9f8dda41f20717afa..7f086cd729e918eb73a9838a7b0af63627d5d997 100644 --- a/cmd/server/app/serve.go +++ b/cmd/server/app/serve.go @@ -18,6 +18,7 @@ package app import ( "github.com/go-openapi/loads" + "github.com/projectrekor/rekor/pkg/api" "github.com/projectrekor/rekor/pkg/generated/restapi/operations" "github.com/projectrekor/rekor/pkg/log" "github.com/projectrekor/rekor/pkg/types/rekord" @@ -58,6 +59,8 @@ var serveCmd = &cobra.Command{ server.Host = viper.GetString("rekor_server.address") server.Port = int(viper.GetUint("rekor_server.port")) + + api.ConfigureAPI() server.ConfigureAPI() if err := server.Serve(); err != nil { log.Logger.Fatal(err) diff --git a/docker-compose.yml b/docker-compose.yml index 6f752530c7cef889c6faa067a1caaa60dd53d6f3..919db78f84e74cba7faa502ab5b8edac8fa125f4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.1' services: mysql: - image: gcr.io/trillian-opensource-ci/db_server + image: gcr.io/trillian-opensource-ci/db_server:3c8193ebb2d7fedb44d18e9c810d0d2e4dbb7e4d environment: - MYSQL_ROOT_PASSWORD=zaphod - MYSQL_DATABASE=test diff --git a/pkg/api/api.go b/pkg/api/api.go index 2cdd5c37a916e7d7c01cd312b38353133c4f82cd..7e70f51be86de343cbfa1644217682ee22bd06bc 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -81,21 +81,20 @@ func NewAPI() (*API, error) { }, nil } -type ctxKeyRekorAPI int - -const rekorAPILookupKey ctxKeyRekorAPI = 0 - -func AddAPIToContext(ctx context.Context, api *API) context.Context { - return context.WithValue(ctx, rekorAPILookupKey, api) -} +var ( + api *API +) -func NewTrillianClient(ctx context.Context) *TrillianClient { - api := ctx.Value(rekorAPILookupKey).(*API) - if api == nil { - return nil +func ConfigureAPI() { + var err error + api, err = NewAPI() + if err != nil { + log.Logger.Panic(err) } +} - return &TrillianClient{ +func NewTrillianClient(ctx context.Context) TrillianClient { + return TrillianClient{ client: api.logClient, logID: api.logID, context: ctx, diff --git a/pkg/api/entries.go b/pkg/api/entries.go index a65657b3fc5066607df278033bfe49734ccf670c..72dbc8da9bfce457facc8071fb863116e0472e79 100644 --- a/pkg/api/entries.go +++ b/pkg/api/entries.go @@ -43,9 +43,6 @@ import ( func GetLogEntryByIndexHandler(params entries.GetLogEntryByIndexParams) middleware.Responder { tc := NewTrillianClient(params.HTTPRequest.Context()) - if tc == nil { - return handleRekorAPIError(params, http.StatusInternalServerError, errors.New("unable to get client from request context"), trillianCommunicationError) - } resp := tc.getLeafByIndex(params.LogIndex) switch resp.status { @@ -86,9 +83,6 @@ func CreateLogEntryHandler(params entries.CreateLogEntryParams) middleware.Respo } tc := NewTrillianClient(httpReq.Context()) - if tc == nil { - return handleRekorAPIError(params, http.StatusInternalServerError, errors.New("unable to get client from request context"), trillianCommunicationError) - } resp := tc.addLeaf(leaf) switch resp.status { @@ -119,9 +113,6 @@ func GetLogEntryByUUIDHandler(params entries.GetLogEntryByUUIDParams) middleware hashes := [][]byte{hashValue} tc := NewTrillianClient(params.HTTPRequest.Context()) - if tc == nil { - return handleRekorAPIError(params, http.StatusInternalServerError, errors.New("unable to get client from request context"), trillianCommunicationError) - } resp := tc.getLeafByHash(hashes) // TODO: if this API is deprecated, we need to ask for inclusion proof and then use index in proof result to get leaf switch resp.status { @@ -154,9 +145,6 @@ func GetLogEntryByUUIDHandler(params entries.GetLogEntryByUUIDParams) middleware func GetLogEntryProofHandler(params entries.GetLogEntryProofParams) middleware.Responder { hashValue, _ := hex.DecodeString(params.EntryUUID) tc := NewTrillianClient(params.HTTPRequest.Context()) - if tc == nil { - return handleRekorAPIError(params, http.StatusInternalServerError, errors.New("unable to get client from request context"), trillianCommunicationError) - } resp := tc.getProofByHash(hashValue) switch resp.status { @@ -202,9 +190,6 @@ func SearchLogQueryHandler(params entries.SearchLogQueryParams) middleware.Respo httpReqCtx := params.HTTPRequest.Context() resultPayload := []models.LogEntry{} tc := NewTrillianClient(httpReqCtx) - if tc == nil { - return handleRekorAPIError(params, http.StatusInternalServerError, errors.New("unable to get client from request context"), trillianCommunicationError) - } //TODO: parallelize this into different goroutines to speed up search searchHashes := [][]byte{} diff --git a/pkg/api/tlog.go b/pkg/api/tlog.go index 142e1abdbf94a22fe3a21beee42b7b6cdef85e73..9e735660d67d6cca4883e2090e82c109eac44f02 100644 --- a/pkg/api/tlog.go +++ b/pkg/api/tlog.go @@ -35,9 +35,6 @@ import ( func GetLogInfoHandler(params tlog.GetLogInfoParams) middleware.Responder { tc := NewTrillianClient(params.HTTPRequest.Context()) - if tc == nil { - return handleRekorAPIError(params, http.StatusInternalServerError, errors.New("unable to get client from request context"), trillianCommunicationError) - } resp := tc.getLatest(0) if resp.status != codes.OK { @@ -71,9 +68,6 @@ func GetLogProofHandler(params tlog.GetLogProofParams) middleware.Responder { return handleRekorAPIError(params, http.StatusBadRequest, nil, fmt.Sprintf(firstSizeLessThanLastSize, *params.FirstSize, params.LastSize)) } tc := NewTrillianClient(params.HTTPRequest.Context()) - if tc == nil { - return handleRekorAPIError(params, http.StatusInternalServerError, errors.New("unable to get client from request context"), trillianCommunicationError) - } resp := tc.getConsistencyProof(*params.FirstSize, params.LastSize) if resp.status != codes.OK { diff --git a/pkg/generated/restapi/configure_rekor_server.go b/pkg/generated/restapi/configure_rekor_server.go index 11eb0f96ed2de5daec5b1739798bc0ede7784000..0429556dffd186dbb803b03ef8b6b419f3123987 100644 --- a/pkg/generated/restapi/configure_rekor_server.go +++ b/pkg/generated/restapi/configure_rekor_server.go @@ -113,8 +113,6 @@ func setupGlobalMiddleware(handler http.Handler) http.Handler { returnHandler = middleware.Logger(returnHandler) returnHandler = middleware.Heartbeat("/ping")(returnHandler) - // add the Trillian API object in context for all endpoints - returnHandler = addTrillianAPI(handler) return middleware.RequestID(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ctx := r.Context() r = r.WithContext(log.WithRequestID(ctx, middleware.GetReqID(ctx))) @@ -138,17 +136,6 @@ func cacheForever(handler http.Handler) http.Handler { }) } -func addTrillianAPI(handler http.Handler) http.Handler { - api, err := pkgapi.NewAPI() - if err != nil { - log.Logger.Panic(err) - } - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - apiCtx := pkgapi.AddAPIToContext(r.Context(), api) - handler.ServeHTTP(w, r.WithContext(apiCtx)) - }) -} - func logAndServeError(w http.ResponseWriter, r *http.Request, err error) { log.RequestIDLogger(r).Error(err) requestFields := map[string]interface{}{} diff --git a/tests/e2e-test.sh b/tests/e2e-test.sh index 443b63af27268b2eacaf0eadede8a6a8a4ef5418..c0889420e79a686bbffa616d763bac402f47bad0 100755 --- a/tests/e2e-test.sh +++ b/tests/e2e-test.sh @@ -2,8 +2,10 @@ set -ex testdir=$(dirname "$0") +docker-compose up -d + # Node nodedir=${testdir}/node go run ./cmd/cli/ upload \ --artifact $(< ${nodedir}/url) --sha $(< ${nodedir}/sha) \ - --signature=${nodedir}/sig --public-key=${nodedir}/key + --signature=${nodedir}/sig --public-key=${nodedir}/key \ No newline at end of file