PR-3051: Fix download deploy package out of k8s cluster (#3136)

* Fix download deploy package out of k8s cluster

Signed-off-by: LiuXiang <lx1036@126.com>

* Fix pkg getdeploy cli command to fetch pkgs stored in storagesvc and remote pkgs

Signed-off-by: Md Soharab Ansari <soharab.ansari@infracloud.io>

* Instead of Contains, parse url and check path for better validation

Signed-off-by: Md Soharab Ansari <soharab.ansari@infracloud.io>

---------

Signed-off-by: LiuXiang <lx1036@126.com>
Signed-off-by: Md Soharab Ansari <soharab.ansari@infracloud.io>
Co-authored-by: LiuXiang <lx1036@126.com>
This commit is contained in:
soharab-ic
2025-01-13 12:55:50 +05:30
committed by GitHub
co-authored by LiuXiang
parent cd23fc6f63
commit a8157e94a9
2 changed files with 66 additions and 2 deletions
+34 -2
View File
@@ -165,12 +165,19 @@ func DownloadURL(fileUrl string) (io.ReadCloser, error) {
func DownloadStrorageURL(ctx context.Context, client cmd.Client, fileUrl string) (io.ReadCloser, error) {
var resp *http.Response
storagesvcURL, err := util.GetStorageURL(ctx, client)
var err error
valid, err := validArchiveURL(fileUrl)
if err != nil {
return nil, err
}
if strings.HasPrefix(fileUrl, storagesvcURL.String()+"/v1/archive?id=") {
if valid {
storagesvcURL, err := util.GetStorageURL(ctx, client)
if err != nil {
return nil, err
}
url, err := url.Parse(fileUrl)
if err != nil {
return nil, err
@@ -229,3 +236,28 @@ func PrintPackageSummary(writer io.Writer, pkg *fv1.Package) {
fmt.Fprintf(w, "%v\n%v", "Build Logs:", buildlog)
w.Flush()
}
// validArchiveURL checks if the given URL is a valid archive URL
func validArchiveURL(urlStr string) (bool, error) {
// Parse the URL string into a URL object
parsedURL, err := url.Parse(urlStr)
if err != nil {
return false, fmt.Errorf("failed to parse URL: %v", err)
}
// Check if the path starts with /v1/archive
if !strings.HasPrefix(parsedURL.Path, "/v1/archive") {
return false, nil
}
// Get query parameters
queryParams := parsedURL.Query()
// Check if 'id' parameter exists
if queryParams.Get("id") == "" {
return false, nil
}
// URL matches all criteria
return true, nil
}