From 3cde10bcac2cfe7442a411d7966fc42edd64c54f Mon Sep 17 00:00:00 2001 From: Matt Hook Date: Mon, 18 Oct 2021 15:08:27 +1300 Subject: [PATCH] fix(helm) allow settings to be saved offline EE-1907 (#5907) * allow settings to be saved offline. Due to helm repo validation not working for bitnami when offline! * @hookenz dont validate the helm repo if the repo hasn't changed or is the default --- api/http/handler/settings/settings_update.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/api/http/handler/settings/settings_update.go b/api/http/handler/settings/settings_update.go index 476b2d70b..0a64e7d33 100644 --- a/api/http/handler/settings/settings_update.go +++ b/api/http/handler/settings/settings_update.go @@ -54,11 +54,8 @@ func (payload *settingsUpdatePayload) Validate(r *http.Request) error { if payload.TemplatesURL != nil && *payload.TemplatesURL != "" && !govalidator.IsURL(*payload.TemplatesURL) { return errors.New("Invalid external templates URL. Must correspond to a valid URL format") } - if payload.HelmRepositoryURL != nil && *payload.HelmRepositoryURL != "" { - err := libhelm.ValidateHelmRepositoryURL(*payload.HelmRepositoryURL) - if err != nil { - return errors.Wrap(err, "Invalid Helm repository URL. Must correspond to a valid URL format") - } + if payload.HelmRepositoryURL != nil && *payload.HelmRepositoryURL != "" && !govalidator.IsURL(*payload.HelmRepositoryURL) { + return errors.New("Invalid Helm repository URL. Must correspond to a valid URL format") } if payload.UserSessionTimeout != nil { _, err := time.ParseDuration(*payload.UserSessionTimeout) @@ -114,7 +111,16 @@ func (handler *Handler) settingsUpdate(w http.ResponseWriter, r *http.Request) * } if payload.HelmRepositoryURL != nil { - settings.HelmRepositoryURL = strings.TrimSuffix(strings.ToLower(*payload.HelmRepositoryURL), "/") + newHelmRepo := strings.TrimSuffix(strings.ToLower(*payload.HelmRepositoryURL), "/") + + if newHelmRepo != settings.HelmRepositoryURL && newHelmRepo != portainer.DefaultHelmRepositoryURL { + err := libhelm.ValidateHelmRepositoryURL(*payload.HelmRepositoryURL) + if err != nil { + return &httperror.HandlerError{http.StatusBadRequest, "Invalid Helm repository URL. Must correspond to a valid URL format", err} + } + } + + settings.HelmRepositoryURL = newHelmRepo } if payload.BlackListedLabels != nil {