mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 00:39:13 +00:00
feat: add support for proxies to use with IRC and Indexers (#1421)
* feat: add support for proxies * fix(http): release handler * fix(migrations): define proxy early * fix(migrations): pg proxy * fix(proxy): list update delete * fix(proxy): remove log and imports * feat(irc): use proxy * feat(irc): tests * fix(web): update imports for ProxyForms.tsx * fix(database): migration * feat(proxy): test * feat(proxy): validate proxy type * feat(proxy): validate and test * feat(proxy): improve validate and test * feat(proxy): fix db schema * feat(proxy): add db tests * feat(proxy): handle http errors * fix(http): imports * feat(proxy): use proxy for indexer downloads * feat(proxy): indexerforms select proxy * feat(proxy): handle torrent download * feat(proxy): skip if disabled * feat(proxy): imports * feat(proxy): implement in Feeds * feat(proxy): update helper text indexer proxy * feat(proxy): add internal cache
This commit is contained in:
parent
472d327308
commit
bc0f4cc055
59 changed files with 2533 additions and 371 deletions
|
@ -7,7 +7,6 @@ import (
|
|||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/autobrr/autobrr/internal/action"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
|
@ -17,9 +16,11 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/autobrr/autobrr/internal/action"
|
||||
"github.com/autobrr/autobrr/internal/domain"
|
||||
"github.com/autobrr/autobrr/internal/indexer"
|
||||
"github.com/autobrr/autobrr/internal/logger"
|
||||
"github.com/autobrr/autobrr/internal/releasedownload"
|
||||
"github.com/autobrr/autobrr/internal/utils"
|
||||
"github.com/autobrr/autobrr/pkg/errors"
|
||||
"github.com/autobrr/autobrr/pkg/sharedhttp"
|
||||
|
@ -53,11 +54,12 @@ type service struct {
|
|||
releaseRepo domain.ReleaseRepo
|
||||
indexerSvc indexer.Service
|
||||
apiService indexer.APIService
|
||||
downloadSvc *releasedownload.DownloadService
|
||||
|
||||
httpClient *http.Client
|
||||
}
|
||||
|
||||
func NewService(log logger.Logger, repo domain.FilterRepo, actionSvc action.Service, releaseRepo domain.ReleaseRepo, apiService indexer.APIService, indexerSvc indexer.Service) Service {
|
||||
func NewService(log logger.Logger, repo domain.FilterRepo, actionSvc action.Service, releaseRepo domain.ReleaseRepo, apiService indexer.APIService, indexerSvc indexer.Service, downloadSvc *releasedownload.DownloadService) Service {
|
||||
return &service{
|
||||
log: log.With().Str("module", "filter").Logger(),
|
||||
repo: repo,
|
||||
|
@ -65,6 +67,7 @@ func NewService(log logger.Logger, repo domain.FilterRepo, actionSvc action.Serv
|
|||
actionService: actionSvc,
|
||||
apiService: apiService,
|
||||
indexerSvc: indexerSvc,
|
||||
downloadSvc: downloadSvc,
|
||||
httpClient: &http.Client{
|
||||
Timeout: time.Second * 120,
|
||||
Transport: sharedhttp.TransportTLSInsecure,
|
||||
|
@ -504,9 +507,9 @@ func (s *service) AdditionalSizeCheck(ctx context.Context, f *domain.Filter, rel
|
|||
l.Trace().Msgf("(%s) preparing to download torrent metafile", f.Name)
|
||||
|
||||
// if indexer doesn't have api, download torrent and add to tmpPath
|
||||
if err := release.DownloadTorrentFileCtx(ctx); err != nil {
|
||||
if err := s.downloadSvc.DownloadRelease(ctx, release); err != nil {
|
||||
l.Error().Err(err).Msgf("(%s) could not download torrent file with id: '%s' from: %s", f.Name, release.TorrentID, release.Indexer.Identifier)
|
||||
return false, err
|
||||
return false, errors.Wrap(err, "could not download torrent file for release: %s", release.TorrentName)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -584,8 +587,8 @@ func (s *service) execCmd(ctx context.Context, external domain.FilterExternal, r
|
|||
s.log.Trace().Msgf("filter exec release: %s", release.TorrentName)
|
||||
|
||||
if release.TorrentTmpFile == "" && strings.Contains(external.ExecArgs, "TorrentPathName") {
|
||||
if err := release.DownloadTorrentFileCtx(ctx); err != nil {
|
||||
return 0, errors.Wrap(err, "error downloading torrent file for release: %s", release.TorrentName)
|
||||
if err := s.downloadSvc.DownloadRelease(ctx, release); err != nil {
|
||||
return 0, errors.Wrap(err, "could not download torrent file for release: %s", release.TorrentName)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -686,7 +689,7 @@ func (s *service) webhook(ctx context.Context, external domain.FilterExternal, r
|
|||
|
||||
// if webhook data contains TorrentPathName or TorrentDataRawBytes, lets download the torrent file
|
||||
if release.TorrentTmpFile == "" && (strings.Contains(external.WebhookData, "TorrentPathName") || strings.Contains(external.WebhookData, "TorrentDataRawBytes")) {
|
||||
if err := release.DownloadTorrentFileCtx(ctx); err != nil {
|
||||
if err := s.downloadSvc.DownloadRelease(ctx, release); err != nil {
|
||||
return 0, errors.Wrap(err, "webhook: could not download torrent file for release: %s", release.TorrentName)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue