From 50caa2c088f8d6e4bcd75b3e1318d565023663d9 Mon Sep 17 00:00:00 2001 From: Ben Adrian Sarmiento Date: Sat, 29 Jun 2024 05:17:35 +0200 Subject: [PATCH] Set api client token statically, unrestrict client dynamically and download client nothing --- internal/app.go | 7 +++++-- internal/torrent/manager.go | 22 ++++++++++++++++++++++ pkg/http/client.go | 14 +++++--------- pkg/realdebrid/api.go | 7 +++---- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/internal/app.go b/internal/app.go index 8017c7b..1648ae8 100644 --- a/internal/app.go +++ b/internal/app.go @@ -61,8 +61,8 @@ func MainApp(configPath string) { proxyURL = os.Getenv("PROXY") } - repoClient4 := http.NewHTTPClient(0, 1, false, []string{}, proxyURL, log.Named("network_test")) - repoClient6 := http.NewHTTPClient(0, 1, true, []string{}, proxyURL, log.Named("network_test")) + repoClient4 := http.NewHTTPClient("", 0, 1, false, []string{}, proxyURL, log.Named("network_test")) + repoClient6 := http.NewHTTPClient("", 0, 1, true, []string{}, proxyURL, log.Named("network_test")) repo := http.NewIPRepository(repoClient4, repoClient6, "", log.Named("network_test")) var hosts []string @@ -84,6 +84,7 @@ func MainApp(configPath string) { } apiClient := http.NewHTTPClient( + config.GetToken(), config.GetRetriesUntilFailed(), // default retries = 2 config.GetApiTimeoutSecs(), // default api timeout = 60 false, // no need for ipv6 support @@ -93,6 +94,7 @@ func MainApp(configPath string) { ) unrestrictClient := http.NewHTTPClient( + "", config.GetRetriesUntilFailed(), // default retries = 2 config.GetDownloadTimeoutSecs(), // default download timeout = 10 false, // no need for ipv6 support @@ -102,6 +104,7 @@ func MainApp(configPath string) { ) downloadClient := http.NewHTTPClient( + "", config.GetRetriesUntilFailed(), config.GetDownloadTimeoutSecs(), config.ShouldForceIPv6(), diff --git a/internal/torrent/manager.go b/internal/torrent/manager.go index 1ca8886..a822294 100644 --- a/internal/torrent/manager.go +++ b/internal/torrent/manager.go @@ -1,9 +1,11 @@ package torrent import ( + "bytes" "context" "fmt" "io" + "net/http" "os" "path/filepath" "strings" @@ -207,6 +209,25 @@ func (t *TorrentManager) writeTorrentToFile(torrent *Torrent) { // t.log.Debugf("Saved torrent %s to file", t.GetKey(torrent)) } +func (t *TorrentManager) sendTorrentToAPI(torrent *Torrent) { + torrent.Version = t.requiredVersion + jsonData, err := json.Marshal(torrent) + if err != nil { + return + } + req, err := http.NewRequest( + "POST", + "https://zurgtorrent.debridmediamanager.com/api/torrents", + bytes.NewBuffer(jsonData), + ) + if err != nil { + return + } + req.Header.Set("Content-Type", "application/json") + client := &http.Client{} + client.Do(req) +} + func (t *TorrentManager) applyMediaInfoDetails(torrent *Torrent) error { changesApplied := false bwLimitReached := false @@ -241,6 +262,7 @@ func (t *TorrentManager) applyMediaInfoDetails(torrent *Torrent) error { }) if changesApplied { t.writeTorrentToFile(torrent) + t.sendTorrentToAPI(torrent) } if bwLimitReached { t.log.Warnf("Your account has reached the bandwidth limit, cannot apply media info details to the rest of the files") diff --git a/pkg/http/client.go b/pkg/http/client.go index e4b28a3..2a9ec5b 100644 --- a/pkg/http/client.go +++ b/pkg/http/client.go @@ -12,7 +12,6 @@ import ( "net/http" "net/url" "strings" - "sync/atomic" "time" "github.com/debridmediamanager/zurg/pkg/logutil" @@ -23,12 +22,12 @@ import ( ) type HTTPClient struct { + token string client *http.Client maxRetries int timeoutSecs int rateLimitSleepSecs int backoff func(attempt int) time.Duration - token atomic.Value dnsCache cmap.ConcurrentMap[string, string] hosts []string log *logutil.Logger @@ -53,6 +52,7 @@ func (e *DownloadErrorResponse) Error() string { } func NewHTTPClient( + token string, maxRetries int, timeoutSecs int, forceIPv6 bool, @@ -61,6 +61,7 @@ func NewHTTPClient( log *logutil.Logger, ) *HTTPClient { client := HTTPClient{ + token: token, client: &http.Client{}, maxRetries: maxRetries, timeoutSecs: timeoutSecs, @@ -127,14 +128,9 @@ func NewHTTPClient( return &client } -func (r *HTTPClient) SetToken(token string) { - r.token.Store(token) -} - func (r *HTTPClient) Do(req *http.Request) (*http.Response, error) { - token := r.token.Load() - if token != nil && token.(string) != "" { - req.Header.Set("Authorization", "Bearer "+token.(string)) + if r.token != "" { + req.Header.Set("Authorization", "Bearer "+r.token) } var resp *http.Response diff --git a/pkg/realdebrid/api.go b/pkg/realdebrid/api.go index 627311b..450eda5 100644 --- a/pkg/realdebrid/api.go +++ b/pkg/realdebrid/api.go @@ -49,8 +49,6 @@ func NewRealDebrid(apiClient, unrestrictClient, downloadClient *zurghttp.HTTPCli log: log, } - apiClient.SetToken(mainToken) - unrestrictClient.SetToken(mainToken) for _, token := range downloadTokens { rd.UnrestrictMap.Set(token, cmap.New[*Download]()) } @@ -88,7 +86,7 @@ func (rd *RealDebrid) UnrestrictAndVerify(link string) (*Download, error) { return download, nil } - download, err := rd.UnrestrictLink(link) + download, err := rd.UnrestrictLinkWithToken(link, token) if err != nil { return nil, err } @@ -111,7 +109,7 @@ func (rd *RealDebrid) UnrestrictAndVerify(link string) (*Download, error) { } } -func (rd *RealDebrid) UnrestrictLink(link string) (*Download, error) { +func (rd *RealDebrid) UnrestrictLinkWithToken(link, token string) (*Download, error) { data := url.Values{} if strings.HasPrefix(link, "https://real-debrid.com/d/") { // set link to max 39 chars (26 + 13) @@ -126,6 +124,7 @@ func (rd *RealDebrid) UnrestrictLink(link string) (*Download, error) { return nil, err } + req.Header.Set("Authorization", "Bearer "+token) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") // at this point, any errors mean that the link has expired and we need to repair it