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
|
@ -5,7 +5,6 @@ package domain
|
|||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/autobrr/autobrr/pkg/errors"
|
||||
|
@ -60,43 +59,69 @@ type Action struct {
|
|||
Client *DownloadClient `json:"client,omitempty"`
|
||||
}
|
||||
|
||||
// ParseMacros parse all macros on action
|
||||
func (a *Action) ParseMacros(release *Release) error {
|
||||
var err error
|
||||
|
||||
// CheckMacrosNeedTorrentTmpFile check if macros needs torrent downloaded
|
||||
func (a *Action) CheckMacrosNeedTorrentTmpFile(release *Release) bool {
|
||||
if release.TorrentTmpFile == "" &&
|
||||
(strings.Contains(a.ExecArgs, "TorrentPathName") || strings.Contains(a.ExecArgs, "TorrentDataRawBytes") ||
|
||||
strings.Contains(a.WebhookData, "TorrentPathName") || strings.Contains(a.WebhookData, "TorrentDataRawBytes") ||
|
||||
strings.Contains(a.SavePath, "TorrentPathName") || a.Type == ActionTypeWatchFolder) {
|
||||
if err := release.DownloadTorrentFile(); err != nil {
|
||||
return errors.Wrap(err, "webhook: could not download torrent file for release: %v", release.TorrentName)
|
||||
}
|
||||
(strings.Contains(a.ExecArgs, "TorrentPathName") ||
|
||||
strings.Contains(a.ExecArgs, "TorrentDataRawBytes") ||
|
||||
strings.Contains(a.WebhookData, "TorrentPathName") ||
|
||||
strings.Contains(a.WebhookData, "TorrentDataRawBytes") ||
|
||||
strings.Contains(a.SavePath, "TorrentPathName") ||
|
||||
a.Type == ActionTypeWatchFolder) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (a *Action) CheckMacrosNeedRawDataBytes(release *Release) bool {
|
||||
// if webhook data contains TorrentDataRawBytes, lets read the file into bytes we can then use in the macro
|
||||
if len(release.TorrentDataRawBytes) == 0 &&
|
||||
(strings.Contains(a.ExecArgs, "TorrentDataRawBytes") || strings.Contains(a.WebhookData, "TorrentDataRawBytes") ||
|
||||
a.Type == ActionTypeWatchFolder) {
|
||||
t, err := os.ReadFile(release.TorrentTmpFile)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not read torrent file: %v", release.TorrentTmpFile)
|
||||
}
|
||||
|
||||
release.TorrentDataRawBytes = t
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// ParseMacros parse all macros on action
|
||||
func (a *Action) ParseMacros(release *Release) error {
|
||||
var err error
|
||||
|
||||
m := NewMacro(*release)
|
||||
|
||||
a.ExecArgs, err = m.Parse(a.ExecArgs)
|
||||
a.WatchFolder, err = m.Parse(a.WatchFolder)
|
||||
a.Category, err = m.Parse(a.Category)
|
||||
a.Tags, err = m.Parse(a.Tags)
|
||||
a.Label, err = m.Parse(a.Label)
|
||||
a.SavePath, err = m.Parse(a.SavePath)
|
||||
a.WebhookData, err = m.Parse(a.WebhookData)
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not parse macros for action: %v", a.Name)
|
||||
return errors.Wrap(err, "could not parse exec args")
|
||||
}
|
||||
|
||||
a.WatchFolder, err = m.Parse(a.WatchFolder)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not parse watch folder")
|
||||
}
|
||||
|
||||
a.Category, err = m.Parse(a.Category)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not parse category")
|
||||
}
|
||||
|
||||
a.Tags, err = m.Parse(a.Tags)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not parse tags")
|
||||
}
|
||||
|
||||
a.Label, err = m.Parse(a.Label)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not parse label")
|
||||
}
|
||||
a.SavePath, err = m.Parse(a.SavePath)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not parse save_path")
|
||||
}
|
||||
a.WebhookData, err = m.Parse(a.WebhookData)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not parse webhook_data")
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue