diff --git a/Wire.go b/Wire.go index 2dcfed7..6cb4d72 100644 --- a/Wire.go +++ b/Wire.go @@ -1,4 +1,5 @@ -//+build wireinject +//go:build wireinject +// +build wireinject package main @@ -25,6 +26,8 @@ func InitializeApp() (*App, error) { pkg.NewWebhookSecretValidatorImpl, wire.Bind(new(pkg.WebhookSecretValidator), new(*pkg.WebhookSecretValidatorImpl)), util.NewModuleConfig, + pkg.NewPresetDockerRegistryConfigServiceImpl, + wire.Bind(new(pkg.PresetDockerRegistryConfigService), new(*pkg.PresetDockerRegistryConfigServiceImpl)), ) return &App{}, nil } diff --git a/api/RestHandler.go b/api/RestHandler.go index 963c043..42a7691 100644 --- a/api/RestHandler.go +++ b/api/RestHandler.go @@ -16,15 +16,18 @@ type RestHandler interface { GetReleases(w http.ResponseWriter, r *http.Request) ReleaseWebhookHandler(w http.ResponseWriter, r *http.Request) GetModules(w http.ResponseWriter, r *http.Request) + GetPresetContainerRegistry(w http.ResponseWriter, r *http.Request) } func NewRestHandlerImpl(logger *zap.SugaredLogger, releaseNoteService pkg.ReleaseNoteService, - webhookSecretValidator pkg.WebhookSecretValidator, client *util.GitHubClient) *RestHandlerImpl { + webhookSecretValidator pkg.WebhookSecretValidator, client *util.GitHubClient, + dockerRegistryConfig pkg.PresetDockerRegistryConfigService) *RestHandlerImpl { return &RestHandlerImpl{ logger: logger, releaseNoteService: releaseNoteService, webhookSecretValidator: webhookSecretValidator, client: client, + dockerRegistryConfig: dockerRegistryConfig, } } @@ -33,6 +36,7 @@ type RestHandlerImpl struct { releaseNoteService pkg.ReleaseNoteService webhookSecretValidator pkg.WebhookSecretValidator client *util.GitHubClient + dockerRegistryConfig pkg.PresetDockerRegistryConfigService } func setupResponse(w *http.ResponseWriter, req *http.Request) { @@ -158,3 +162,8 @@ func (impl *RestHandlerImpl) ReleaseWebhookHandler(w http.ResponseWriter, r *htt impl.WriteJsonResp(w, err, flag, http.StatusOK) return } + +func (impl *RestHandlerImpl) GetPresetContainerRegistry(w http.ResponseWriter, r *http.Request) { + dockerRegistryConfig := impl.dockerRegistryConfig.GetConfig() + impl.WriteJsonResp(w, nil, dockerRegistryConfig, http.StatusOK) +} diff --git a/api/Router.go b/api/Router.go index 7cf906c..6714935 100644 --- a/api/Router.go +++ b/api/Router.go @@ -38,5 +38,6 @@ func (r MuxRouter) Init() { r.Router.Path("/release/notes").HandlerFunc(r.restHandler.GetReleases).Methods("GET") r.Router.Path("/release/webhook").HandlerFunc(r.restHandler.ReleaseWebhookHandler).Methods("POST") r.Router.Path("/modules").HandlerFunc(r.restHandler.GetModules).Methods("GET") + r.Router.Path("/presetCR").HandlerFunc(r.restHandler.GetPresetContainerRegistry).Methods("GET") } diff --git a/common/PresetDockerRegistryConfig.go b/common/PresetDockerRegistryConfig.go new file mode 100644 index 0000000..1347870 --- /dev/null +++ b/common/PresetDockerRegistryConfig.go @@ -0,0 +1,34 @@ +package common + +import ( + "github.com/caarlos0/env" + "go.uber.org/zap" +) + +type PresetDockerRegistryConfig struct { + PluginId string `env:"PRESET_REGISTRY_PLUGIN_ID" envDefault:"cd.go.artifact.docker.registry"` + RegistryURL string `env:"PRESET_REGISTRY_URL" envDefault:"ttl.sh"` + RegistryType string `env:"PRESET_REGISTRY_TYPE" envDefault:"other"` + AWSAccessKeyId string `env:"PRESET_REGISTRY_AWS_ACCESS_KEY" envDefault:""` + AWSSecretAccessKey string `env:"PRESET_REGISTRY_AWS_SECRET_KEY" envDefault:""` + AWSRegion string `env:"PRESET_REGISTRY_AWS_REGION" envDefault:""` + Username string `env:"PRESET_REGISTRY_USERNAME" envDefault:"a"` + Password string `env:"PRESET_REGISTRY_PASSWORD" envDefault:"a"` + IsDefault bool `env:"PRESET_REGISTRY_IS_DEFAULT" envDefault:"false"` + Connection string `env:"PRESET_REGISTRY_CONNECTION" envDefault:"secure"` + Cert string `env:"PRESET_REGISTRY_CERT" envDefault:""` + Active bool `env:"PRESET_REGISTRY_ACTIVE" envDefault:"true"` + ExpiryTime int `env:"PRESET_REGISTRY_IMAGE_EXPIRY_TIME_SECs" envDefault:"86400"` + PresetRegistryRepoName string `env:"PRESET_REGISTRY_REPO_NAME" envDefault:"devtron-preset-registry-repo"` +} + +func NewPresetDockerRegistryConfig(logger *zap.SugaredLogger) (*PresetDockerRegistryConfig, error) { + + cfg := &PresetDockerRegistryConfig{} + err := env.Parse(cfg) + if err != nil { + logger.Errorw("error on parsing docker preset container registry config", "err", err) + return &PresetDockerRegistryConfig{}, err + } + return cfg, nil +} diff --git a/common/bean.go b/common/bean.go index 2f92e34..5a5be77 100644 --- a/common/bean.go +++ b/common/bean.go @@ -42,3 +42,20 @@ type Module struct { Icon string `json:"icon"` Info string `json:"info"` } + +type DockerRegistry struct { + PluginId string `json:"pluginId,omitempty"` + RegistryURL string `json:"registryUrl,omitempty"` + RegistryType string `json:"registryType,omitempty"` + AWSAccessKeyId string `json:"awsAccessKeyId,omitempty" ` + AWSSecretAccessKey string `json:"awsSecretAccessKey,omitempty"` + AWSRegion string `json:"awsRegion,omitempty"` + Username string `json:"username,omitempty"` + Password string `json:"password,omitempty"` + IsDefault bool `json:"isDefault"` + Connection string `json:"connection,omitempty"` + Cert string `json:"cert,omitempty"` + Active bool `json:"active"` + PresetRepoName string `json:"presetRepoName"` + ExpiryTimeInSecs int `json:"expiryTimeInSecs"` +} diff --git a/pkg/PresetDockerRegistryConfigService.go b/pkg/PresetDockerRegistryConfigService.go new file mode 100644 index 0000000..993599e --- /dev/null +++ b/pkg/PresetDockerRegistryConfigService.go @@ -0,0 +1,41 @@ +package pkg + +import ( + "github.com/devtron-labs/central-api/common" + "go.uber.org/zap" +) + +type PresetDockerRegistryConfigService interface { + GetConfig() *common.DockerRegistry +} + +type PresetDockerRegistryConfigServiceImpl struct { + config *common.PresetDockerRegistryConfig +} + +func NewPresetDockerRegistryConfigServiceImpl(logger *zap.SugaredLogger) *PresetDockerRegistryConfigServiceImpl { + config, _ := common.NewPresetDockerRegistryConfig(logger) + + return &PresetDockerRegistryConfigServiceImpl{ + config: config, + } +} + +func (configService *PresetDockerRegistryConfigServiceImpl) GetConfig() *common.DockerRegistry { + return &common.DockerRegistry{ + PluginId: configService.config.PluginId, + RegistryURL: configService.config.RegistryURL, + RegistryType: configService.config.RegistryType, + AWSAccessKeyId: configService.config.AWSAccessKeyId, + AWSSecretAccessKey: configService.config.AWSSecretAccessKey, + AWSRegion: configService.config.AWSRegion, + Username: configService.config.Username, + Password: configService.config.Password, + IsDefault: configService.config.IsDefault, + Connection: configService.config.Connection, + Cert: configService.config.Cert, + Active: configService.config.Active, + PresetRepoName: configService.config.PresetRegistryRepoName, + ExpiryTimeInSecs: configService.config.ExpiryTime, + } +} diff --git a/wire_gen.go b/wire_gen.go index c6eb3b2..3f8fb07 100644 --- a/wire_gen.go +++ b/wire_gen.go @@ -1,7 +1,8 @@ // Code generated by Wire. DO NOT EDIT. -//go:generate wire -//+build !wireinject +//go:generate go run github.com/google/wire/cmd/wire +//go:build !wireinject +// +build !wireinject package main @@ -27,7 +28,8 @@ func InitializeApp() (*App, error) { } releaseNoteServiceImpl := pkg.NewReleaseNoteServiceImpl(sugaredLogger, gitHubClient, releaseCache, moduleConfig) webhookSecretValidatorImpl := pkg.NewWebhookSecretValidatorImpl(sugaredLogger, gitHubClient) - restHandlerImpl := api.NewRestHandlerImpl(sugaredLogger, releaseNoteServiceImpl, webhookSecretValidatorImpl, gitHubClient) + presetDockerRegistryConfigServiceImpl := pkg.NewPresetDockerRegistryConfigServiceImpl(sugaredLogger) + restHandlerImpl := api.NewRestHandlerImpl(sugaredLogger, releaseNoteServiceImpl, webhookSecretValidatorImpl, gitHubClient, presetDockerRegistryConfigServiceImpl) muxRouter := api.NewMuxRouter(sugaredLogger, restHandlerImpl) app := NewApp(muxRouter, sugaredLogger) return app, nil