From 87cae05747fda2d0bd60d109e9f75273c20b25eb Mon Sep 17 00:00:00 2001 From: Abhinav Singh Date: Tue, 30 Jan 2024 21:51:44 +0000 Subject: [PATCH] feat: different openapi for harness code (#997) --- app/api/openapi/openapi.go | 10 +++++++++- app/api/openapi/service.go | 21 +++++++++++++++++++++ app/api/openapi/wire.go | 28 ++++++++++++++++++++++++++++ app/router/web.go | 4 +++- app/router/wire.go | 5 +++-- cli/swagger.go | 3 ++- cmd/gitness/wire.go | 2 ++ cmd/gitness/wire_gen.go | 4 +++- 8 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 app/api/openapi/service.go create mode 100644 app/api/openapi/wire.go diff --git a/app/api/openapi/openapi.go b/app/api/openapi/openapi.go index dfd0c782a..9e44c5bb5 100644 --- a/app/api/openapi/openapi.go +++ b/app/api/openapi/openapi.go @@ -28,10 +28,18 @@ type ( } ) +var _ Service = (*OpenAPI)(nil) + +type OpenAPI struct{} + +func NewOpenAPIService() *OpenAPI { + return &OpenAPI{} +} + // Generate is a helper function that constructs the // openapi specification object, which can be marshaled // to json or yaml, as needed. -func Generate() *openapi3.Spec { +func (*OpenAPI) Generate() *openapi3.Spec { reflector := openapi3.Reflector{} reflector.Spec = &openapi3.Spec{Openapi: "3.0.0"} reflector.Spec.Info. diff --git a/app/api/openapi/service.go b/app/api/openapi/service.go new file mode 100644 index 000000000..e6a94aef8 --- /dev/null +++ b/app/api/openapi/service.go @@ -0,0 +1,21 @@ +// Copyright 2023 Harness, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package openapi + +import "github.com/swaggest/openapi-go/openapi3" + +type Service interface { + Generate() *openapi3.Spec +} diff --git a/app/api/openapi/wire.go b/app/api/openapi/wire.go new file mode 100644 index 000000000..ef295c8cf --- /dev/null +++ b/app/api/openapi/wire.go @@ -0,0 +1,28 @@ +// Copyright 2023 Harness, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package openapi + +import ( + "github.com/google/wire" +) + +// WireSet provides a wire set for this package. +var WireSet = wire.NewSet( + ProvideOpenAPIService, +) + +func ProvideOpenAPIService() Service { + return NewOpenAPIService() +} diff --git a/app/router/web.go b/app/router/web.go index c3bba8a7c..7646514dc 100644 --- a/app/router/web.go +++ b/app/router/web.go @@ -33,7 +33,9 @@ type WebHandler interface { } // NewWebHandler returns a new WebHandler. -func NewWebHandler(config *types.Config) WebHandler { +func NewWebHandler(config *types.Config, + openapi openapi.Service, +) WebHandler { // Use go-chi router for inner routing r := chi.NewRouter() // create middleware to enforce security best practices for diff --git a/app/router/wire.go b/app/router/wire.go index e86c13198..1c3fd8dc2 100644 --- a/app/router/wire.go +++ b/app/router/wire.go @@ -38,6 +38,7 @@ import ( "github.com/harness/gitness/app/api/controller/upload" "github.com/harness/gitness/app/api/controller/user" "github.com/harness/gitness/app/api/controller/webhook" + "github.com/harness/gitness/app/api/openapi" "github.com/harness/gitness/app/auth/authn" "github.com/harness/gitness/app/url" "github.com/harness/gitness/types" @@ -116,6 +117,6 @@ func ProvideAPIHandler( githookCtrl, saCtrl, userCtrl, principalCtrl, checkCtrl, sysCtrl, blobCtrl, searchCtrl) } -func ProvideWebHandler(config *types.Config) WebHandler { - return NewWebHandler(config) +func ProvideWebHandler(config *types.Config, openapi openapi.Service) WebHandler { + return NewWebHandler(config, openapi) } diff --git a/cli/swagger.go b/cli/swagger.go index 9dcaa00bc..efff6c5cb 100644 --- a/cli/swagger.go +++ b/cli/swagger.go @@ -27,7 +27,8 @@ type swaggerCommand struct { } func (c *swaggerCommand) run(*kingpin.ParseContext) error { - spec := openapi.Generate() + openAPIGenerator := openapi.NewOpenAPIService() + spec := openAPIGenerator.Generate() data, _ := spec.MarshalYAML() if c.path == "" { os.Stdout.Write(data) diff --git a/cmd/gitness/wire.go b/cmd/gitness/wire.go index 13413507a..e31b69a4b 100644 --- a/cmd/gitness/wire.go +++ b/cmd/gitness/wire.go @@ -31,6 +31,7 @@ import ( "github.com/harness/gitness/app/api/controller/upload" "github.com/harness/gitness/app/api/controller/user" controllerwebhook "github.com/harness/gitness/app/api/controller/webhook" + "github.com/harness/gitness/app/api/openapi" "github.com/harness/gitness/app/auth/authn" "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/bootstrap" @@ -179,6 +180,7 @@ func initSystem(ctx context.Context, config *types.Config) (*cliserver.System, e keywordsearch.WireSet, controllerkeywordsearch.WireSet, usergroup.WireSet, + openapi.WireSet, ) return &cliserver.System{}, nil } diff --git a/cmd/gitness/wire_gen.go b/cmd/gitness/wire_gen.go index 189eabb9c..6c83fa293 100644 --- a/cmd/gitness/wire_gen.go +++ b/cmd/gitness/wire_gen.go @@ -30,6 +30,7 @@ import ( "github.com/harness/gitness/app/api/controller/upload" "github.com/harness/gitness/app/api/controller/user" webhook2 "github.com/harness/gitness/app/api/controller/webhook" + "github.com/harness/gitness/app/api/openapi" "github.com/harness/gitness/app/auth/authn" "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/bootstrap" @@ -277,7 +278,8 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro keywordsearchController := keywordsearch2.ProvideController(authorizer, searcher, repoController, spaceController) apiHandler := router.ProvideAPIHandler(ctx, config, authenticator, repoController, executionController, logsController, spaceController, pipelineController, secretController, triggerController, connectorController, templateController, pluginController, pullreqController, webhookController, githookController, serviceaccountController, controller, principalController, checkController, systemController, uploadController, keywordsearchController) gitHandler := router.ProvideGitHandler(provider, authenticator, repoController) - webHandler := router.ProvideWebHandler(config) + openapiService := openapi.ProvideOpenAPIService() + webHandler := router.ProvideWebHandler(config, openapiService) routerRouter := router.ProvideRouter(apiHandler, gitHandler, webHandler, provider) serverServer := server2.ProvideServer(config, routerRouter) executionManager := manager.ProvideExecutionManager(config, executionStore, pipelineStore, provider, streamer, fileService, converterService, logStore, logStream, checkStore, repoStore, schedulerScheduler, secretStore, stageStore, stepStore, principalStore)