diff --git a/router/downloader/downloader.go b/router/downloader/downloader.go index c27a2cb..905bdd2 100644 --- a/router/downloader/downloader.go +++ b/router/downloader/downloader.go @@ -4,8 +4,10 @@ import ( "context" "emperror.dev/errors" "encoding/json" + "fmt" "github.com/google/uuid" "github.com/pterodactyl/wings/server" + "github.com/pterodactyl/wings/system" "io" "net/http" "net/url" @@ -109,6 +111,7 @@ func (dl *Download) Execute() error { defer dl.Cancel() req, _ := http.NewRequestWithContext(ctx, http.MethodGet, dl.req.URL.String(), nil) + req.Header.Set("User-Agent", fmt.Sprintf("Pterodactyl Panel (Wings v%s) (https://pterodactyl.io)", system.Version)) res, err := client.Do(req) if err != nil { return errors.New("downloader: failed opening request to download file") diff --git a/router/router_server_files.go b/router/router_server_files.go index 05e8ee2..8cd7a6d 100644 --- a/router/router_server_files.go +++ b/router/router_server_files.go @@ -271,6 +271,13 @@ func postServerPullRemoteFile(c *gin.Context) { WithError(c, err) return } + // Do not allow more than three simultaneous remote file downloads at one time. + if len(downloader.ByServer(s.Id())) >= 3 { + c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{ + "error": "This server has reached its limit of 3 simultaneous remote file downloads at once. Please wait for one to complete before trying again.", + }) + return + } dl := downloader.New(s, downloader.DownloadRequest{ URL: u,