diff --git a/cautils/getter/downloadreleasedpolicy.go b/cautils/getter/downloadreleasedpolicy.go index 1740888a..cad48259 100644 --- a/cautils/getter/downloadreleasedpolicy.go +++ b/cautils/getter/downloadreleasedpolicy.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "net/http" + "time" "github.com/armosec/kubescape/cautils/opapolicy" ) @@ -22,7 +23,7 @@ type DownloadReleasedPolicy struct { func NewDownloadReleasedPolicy() *DownloadReleasedPolicy { return &DownloadReleasedPolicy{ hostURL: "", - httpClient: &http.Client{}, + httpClient: &http.Client{Timeout: 61 * time.Second}, } } diff --git a/cautils/getter/getpoliciesutils.go b/cautils/getter/getpoliciesutils.go index 8eba7a87..05259f5f 100644 --- a/cautils/getter/getpoliciesutils.go +++ b/cautils/getter/getpoliciesutils.go @@ -5,8 +5,8 @@ import ( "fmt" "io" "net/http" - "net/url" "os" + "path" "path/filepath" "strings" @@ -21,14 +21,26 @@ func GetDefaultPath(name string) string { return defaultfilePath } -func SaveFrameworkInFile(framework *opapolicy.Framework, path string) error { +func SaveFrameworkInFile(framework *opapolicy.Framework, pathStr string) error { encodedData, err := json.Marshal(framework) if err != nil { return err } - err = os.WriteFile(path, []byte(fmt.Sprintf("%v", string(encodedData))), 0644) + err = os.WriteFile(pathStr, []byte(fmt.Sprintf("%v", string(encodedData))), 0644) if err != nil { - return err + if os.IsNotExist(err) { + pathDir := path.Dir(pathStr) + if err := os.Mkdir(pathDir, 0744); err != nil { + return err + } + } else { + return err + + } + err = os.WriteFile(pathStr, []byte(fmt.Sprintf("%v", string(encodedData))), 0644) + if err != nil { + return err + } } return nil } @@ -86,29 +98,3 @@ func httpRespToString(resp *http.Response) (string, error) { return respStr, err } - -// URLEncoder encode url -func urlEncoder(oldURL string) string { - fullURL := strings.Split(oldURL, "?") - baseURL, err := url.Parse(fullURL[0]) - if err != nil { - return "" - } - - // Prepare Query Parameters - if len(fullURL) > 1 { - params := url.Values{} - queryParams := strings.Split(fullURL[1], "&") - for _, i := range queryParams { - queryParam := strings.Split(i, "=") - val := "" - if len(queryParam) > 1 { - val = queryParam[1] - } - params.Add(queryParam[0], val) - } - baseURL.RawQuery = params.Encode() - } - - return baseURL.String() -} diff --git a/cmd/download.go b/cmd/download.go index a27123ac..550c42f8 100644 --- a/cmd/download.go +++ b/cmd/download.go @@ -11,7 +11,7 @@ import ( var downloadInfo cautils.DownloadInfo var downloadCmd = &cobra.Command{ - Use: fmt.Sprintf("Download framework [flags]\nSupported frameworks: %s", validFrameworks), + Use: fmt.Sprintf("download framework [flags]\nSupported frameworks: %s", validFrameworks), Short: "Download framework controls", Long: ``, Args: func(cmd *cobra.Command, args []string) error { diff --git a/cmd/framework.go b/cmd/framework.go index 6ac188a6..b5f1e0c9 100644 --- a/cmd/framework.go +++ b/cmd/framework.go @@ -107,10 +107,14 @@ func CliSetup() error { flagValidation() var k8s *k8sinterface.KubernetesApi + var clusterConfig cautils.IClusterConfig if !scanInfo.ScanRunningCluster() { k8sinterface.ConnectedToCluster = false + clusterConfig = cautils.NewEmptyConfig() } else { k8s = k8sinterface.NewKubernetesApi() + // setup cluster config + clusterConfig = cautils.ClusterConfigSetup(&scanInfo, k8s, getter.NewArmoAPI()) } processNotification := make(chan *cautils.OPASessionObj) @@ -119,8 +123,6 @@ func CliSetup() error { // policy handler setup policyHandler := policyhandler.NewPolicyHandler(&processNotification, k8s) - // setup cluster config - clusterConfig := cautils.ClusterConfigSetup(&scanInfo, k8s, getter.NewArmoAPI()) if err := clusterConfig.SetCustomerGUID(scanInfo.Account); err != nil { fmt.Println(err) } diff --git a/policyhandler/handlepullpolicies.go b/policyhandler/handlepullpolicies.go index 858ea5d9..ddceff4b 100644 --- a/policyhandler/handlepullpolicies.go +++ b/policyhandler/handlepullpolicies.go @@ -2,6 +2,7 @@ package policyhandler import ( "fmt" + "strings" "github.com/armosec/kubescape/cautils" "github.com/armosec/kubescape/cautils/armotypes" @@ -24,6 +25,9 @@ func (policyHandler *PolicyHandler) GetPoliciesFromBackend(notification *opapoli exceptionPolicies = append(exceptionPolicies, recExceptionPolicies...) } } else if err != nil { + if strings.Contains(err.Error(), "unsupported protocol scheme") { + err = fmt.Errorf("failed to download from GitHub release, try running with `--use-default` flag") + } return nil, nil, fmt.Errorf("kind: %v, name: %s, error: %s", rule.Kind, rule.Name, err.Error()) }