mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 16:59:12 +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
|
@ -6,6 +6,8 @@ package irc
|
|||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"golang.org/x/net/proxy"
|
||||
"net/url"
|
||||
"slices"
|
||||
"strings"
|
||||
"time"
|
||||
|
@ -220,6 +222,37 @@ func (h *Handler) Run() (err error) {
|
|||
Log: subLogger,
|
||||
}
|
||||
|
||||
if h.network.UseProxy && h.network.Proxy != nil {
|
||||
if !h.network.Proxy.Enabled {
|
||||
h.log.Debug().Msgf("proxy disabled, skip")
|
||||
} else {
|
||||
if h.network.Proxy.Addr == "" {
|
||||
return errors.New("proxy addr missing")
|
||||
}
|
||||
|
||||
proxyUrl, err := url.Parse(h.network.Proxy.Addr)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not parse proxy url: %s", h.network.Proxy.Addr)
|
||||
}
|
||||
|
||||
// set user and pass if not empty
|
||||
if h.network.Proxy.User != "" && h.network.Proxy.Pass != "" {
|
||||
proxyUrl.User = url.UserPassword(h.network.Proxy.User, h.network.Proxy.Pass)
|
||||
}
|
||||
|
||||
proxyDialer, err := proxy.FromURL(proxyUrl, proxy.Direct)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not create proxy dialer from url: %s", h.network.Proxy.Addr)
|
||||
}
|
||||
proxyContextDialer, ok := proxyDialer.(proxy.ContextDialer)
|
||||
if !ok {
|
||||
return errors.Wrap(err, "proxy dialer does not expose DialContext(): %v", proxyDialer)
|
||||
}
|
||||
|
||||
client.DialContext = proxyContextDialer.DialContext
|
||||
}
|
||||
}
|
||||
|
||||
if h.network.Auth.Mechanism == domain.IRCAuthMechanismSASLPlain {
|
||||
if h.network.Auth.Account != "" && h.network.Auth.Password != "" {
|
||||
client.SASLLogin = h.network.Auth.Account
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue