diff --git a/cmd/crowdsec-cli/hub.go b/cmd/crowdsec-cli/hub.go index 5a97b9039..4fec8fc8d 100644 --- a/cmd/crowdsec-cli/hub.go +++ b/cmd/crowdsec-cli/hub.go @@ -1,6 +1,7 @@ package main import ( + "errors" "fmt" "github.com/fatih/color" @@ -98,7 +99,15 @@ Fetches the [.index.json](https://github.com/crowdsecurity/hub/blob/master/.inde log.Fatal(err) } if err := cwhub.UpdateHubIdx(csConfig.Hub); err != nil { - log.Fatalf("Failed to get Hub index : %v", err) + if errors.Is(err, cwhub.ErrIndexNotFound) { + log.Warnf("Could not find index file for branch '%s', using 'master'", cwhub.HubBranch) + cwhub.HubBranch = "master" + if err := cwhub.UpdateHubIdx(csConfig.Hub); err != nil { + log.Fatalf("Failed to get Hub index after retry : %v", err) + } + } else { + log.Fatalf("Failed to get Hub index : %v", err) + } } //use LocalSync to get warnings about tainted / outdated items _, warn := cwhub.LocalSync(csConfig.Hub) diff --git a/pkg/cwhub/download.go b/pkg/cwhub/download.go index 1aab64734..6923c6d05 100644 --- a/pkg/cwhub/download.go +++ b/pkg/cwhub/download.go @@ -18,6 +18,8 @@ import ( "gopkg.in/yaml.v2" ) +var ErrIndexNotFound = fmt.Errorf("index not found") + func UpdateHubIdx(hub *csconfig.Hub) error { bidx, err := DownloadHubIdx(hub) @@ -47,10 +49,13 @@ func DownloadHubIdx(hub *csconfig.Hub) ([]byte, error) { if err != nil { return nil, errors.Wrap(err, "failed http request for hub index") } + defer resp.Body.Close() if resp.StatusCode != http.StatusOK { + if resp.StatusCode == http.StatusNotFound { + return nil, ErrIndexNotFound + } return nil, fmt.Errorf("bad http code %d while requesting %s", resp.StatusCode, req.URL.String()) } - defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return nil, errors.Wrap(err, "failed to read request answer for hub index") @@ -81,7 +86,7 @@ func DownloadHubIdx(hub *csconfig.Hub) ([]byte, error) { return body, nil } -//DownloadLatest will download the latest version of Item to the tdir directory +// DownloadLatest will download the latest version of Item to the tdir directory func DownloadLatest(hub *csconfig.Hub, target Item, overwrite bool, updateOnly bool) (Item, error) { var err error diff --git a/pkg/cwhub/helpers.go b/pkg/cwhub/helpers.go index 95d874b6d..af1e938d7 100644 --- a/pkg/cwhub/helpers.go +++ b/pkg/cwhub/helpers.go @@ -16,12 +16,14 @@ import ( func chooseHubBranch() (string, error) { latest, err := cwversion.Latest() if err != nil { + log.Warningf("Unable to retrieve latest crowdsec version: %s, defaulting to master", err) //lint:ignore nilerr reason return "master", nil // ignore } csVersion := cwversion.VersionStrip() if csVersion == latest { + log.Debugf("current version is equal to latest (%s)", csVersion) return "master", nil }