From 043bfc8b45b6621f4d72b1a7ec2eae8f3da556ab Mon Sep 17 00:00:00 2001 From: ChengPlay <31820853+zhengkunwang223@users.noreply.github.com> Date: Wed, 30 Apr 2025 18:41:52 +0800 Subject: [PATCH] feat: sync appstore use proxy (#8525) --- agent/app/service/app.go | 3 ++- agent/utils/files/utils.go | 22 ++++++++++++++++++++++ agent/utils/req_helper/request.go | 3 ++- agent/utils/xpack/xpack.go | 17 +++++++++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/agent/app/service/app.go b/agent/app/service/app.go index 59c7d8cc4..c044c6f45 100644 --- a/agent/app/service/app.go +++ b/agent/app/service/app.go @@ -834,9 +834,10 @@ func getAppFromRepo(downloadPath string) error { global.LOG.Infof("[AppStore] download file from %s", downloadUrl) fileOp := files.NewFileOp() packagePath := filepath.Join(global.Dir.ResourceDir, filepath.Base(downloadUrl)) - if err := fileOp.DownloadFile(downloadUrl, packagePath); err != nil { + if err := files.DownloadFileWithProxy(downloadUrl, packagePath); err != nil { return err } + if err := fileOp.Decompress(packagePath, global.Dir.ResourceDir, files.SdkZip, ""); err != nil { return err } diff --git a/agent/utils/files/utils.go b/agent/utils/files/utils.go index 5347ce964..0181e3b4f 100644 --- a/agent/utils/files/utils.go +++ b/agent/utils/files/utils.go @@ -2,7 +2,10 @@ package files import ( "bufio" + "bytes" "fmt" + "github.com/1Panel-dev/1Panel/agent/constant" + "github.com/1Panel-dev/1Panel/agent/utils/req_helper" "io" "net/http" "os" @@ -167,3 +170,22 @@ func IsEmptyDir(dir string) bool { _, err = f.Readdirnames(1) return err == io.EOF } + +func DownloadFileWithProxy(url, dst string) error { + _, resp, err := req_helper.HandleRequest(url, http.MethodGet, constant.TimeOut5m) + if err != nil { + return err + } + + out, err := os.Create(dst) + if err != nil { + return fmt.Errorf("create download file [%s] error, err %s", dst, err.Error()) + } + defer out.Close() + + reader := bytes.NewReader(resp) + if _, err = io.Copy(out, reader); err != nil { + return fmt.Errorf("save download file [%s] error, err %s", dst, err.Error()) + } + return nil +} diff --git a/agent/utils/req_helper/request.go b/agent/utils/req_helper/request.go index 40c119a18..3438552c2 100644 --- a/agent/utils/req_helper/request.go +++ b/agent/utils/req_helper/request.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "errors" + "github.com/1Panel-dev/1Panel/agent/utils/xpack" "io" "net" "net/http" @@ -52,7 +53,7 @@ func HandleRequest(url, method string, timeout int) (int, []byte, error) { } }() - transport := loadRequestTransport() + transport := xpack.LoadRequestTransport() client := http.Client{Timeout: time.Duration(timeout) * time.Second, Transport: transport} ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeout)*time.Second) defer cancel() diff --git a/agent/utils/xpack/xpack.go b/agent/utils/xpack/xpack.go index f4c5fd2b9..840a56134 100644 --- a/agent/utils/xpack/xpack.go +++ b/agent/utils/xpack/xpack.go @@ -3,8 +3,12 @@ package xpack import ( + "crypto/tls" "fmt" + "net" + "net/http" "strings" + "time" "github.com/1Panel-dev/1Panel/agent/app/dto" "github.com/1Panel-dev/1Panel/agent/app/model" @@ -64,3 +68,16 @@ func GetAlert(alertBase dto.AlertBase) uint { func PushAlert(pushAlert dto.PushAlert) error { return nil } + +func LoadRequestTransport() *http.Transport { + return &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + DialContext: (&net.Dialer{ + Timeout: 60 * time.Second, + KeepAlive: 60 * time.Second, + }).DialContext, + TLSHandshakeTimeout: 5 * time.Second, + ResponseHeaderTimeout: 10 * time.Second, + IdleConnTimeout: 15 * time.Second, + } +}