diff --git a/go.mod b/go.mod index b705b1b..2304167 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module gitea.tbdevent.eu/ilbinek/reforger_utils go 1.25.0 + +require golang.org/x/net v0.44.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..0df1aae --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= +golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= diff --git a/util.go b/util.go index a429438..4154b85 100644 --- a/util.go +++ b/util.go @@ -9,11 +9,26 @@ import ( "path/filepath" "slices" "strings" + + "golang.org/x/net/proxy" ) var Debug = false +var Tor = false var DownThreads = 8 +func getHttpClient() (*http.Client, error) { + if Tor { + dialer, err := proxy.SOCKS5("tcp", "127.0.0.1:9050", nil, proxy.Direct) + if err != nil { + return nil, err + } + transport := &http.Transport{Dial: dialer.Dial} + return &http.Client{Transport: transport}, nil + } + return http.DefaultClient, nil +} + func DoAssetsRequest(addonID, version string) (AssetsReply, error) { url := "https://api-ar-workshop.bistudio.com/workshop-api/api/v3.0/s2s/assets/download-list" body := `{"assets":{"` + addonID + `":"` + version + `"}}` @@ -28,7 +43,11 @@ func DoAssetsRequest(addonID, version string) (AssetsReply, error) { req.Header.Add("user-agent", "Arma Reforger/1.4.0.53 (Headless; Windows)") req.Header.Add("content-length", fmt.Sprintf("%d", len(body))) - res, err := http.DefaultClient.Do(req) + client, err := getHttpClient() + if err != nil { + return AssetsReply{}, err + } + res, err := client.Do(req) if err != nil { return AssetsReply{}, err } @@ -58,7 +77,11 @@ func GetManifest(manifestUrl string) (Manifest, error) { return Manifest{}, err } - res, err := http.DefaultClient.Do(req) + client, err := getHttpClient() + if err != nil { + return Manifest{}, err + } + res, err := client.Do(req) if err != nil { return Manifest{}, err } @@ -165,7 +188,11 @@ func Download(manifest Manifest, downloadDir string, filen string) ([]byte, erro } func getContent(url string) ([]byte, error) { - resp, err := http.Get(url) + client, err := getHttpClient() + if err != nil { + return nil, err + } + resp, err := client.Get(url) if err != nil { return nil, err }