Verify downloads
This commit is contained in:
@@ -19,6 +19,7 @@ type ConfigInterface interface {
|
|||||||
EnableRetainRDTorrentName() bool
|
EnableRetainRDTorrentName() bool
|
||||||
GetRandomPreferredHost() string
|
GetRandomPreferredHost() string
|
||||||
ShouldServeFromRclone() bool
|
ShouldServeFromRclone() bool
|
||||||
|
ShouldVerifyDownloadLink() bool
|
||||||
ShouldForceIPv6() bool
|
ShouldForceIPv6() bool
|
||||||
GetRealDebridTimeout() int
|
GetRealDebridTimeout() int
|
||||||
GetRetriesUntilFailed() int
|
GetRetriesUntilFailed() int
|
||||||
@@ -49,6 +50,7 @@ type ZurgConfig struct {
|
|||||||
PreferredHosts []string `yaml:"preferred_hosts" json:"preferred_hosts"`
|
PreferredHosts []string `yaml:"preferred_hosts" json:"preferred_hosts"`
|
||||||
NetworkBufferSize int `yaml:"network_buffer_size" json:"network_buffer_size"`
|
NetworkBufferSize int `yaml:"network_buffer_size" json:"network_buffer_size"`
|
||||||
ServeFromRclone bool `yaml:"serve_from_rclone" json:"serve_from_rclone"`
|
ServeFromRclone bool `yaml:"serve_from_rclone" json:"serve_from_rclone"`
|
||||||
|
VerifyDownloadLink bool `yaml:"verify_download_link" json:"verify_download_link"`
|
||||||
ForceIPv6 bool `yaml:"force_ipv6" json:"force_ipv6"`
|
ForceIPv6 bool `yaml:"force_ipv6" json:"force_ipv6"`
|
||||||
|
|
||||||
OnLibraryUpdate string `yaml:"on_library_update" json:"on_library_update"`
|
OnLibraryUpdate string `yaml:"on_library_update" json:"on_library_update"`
|
||||||
@@ -125,6 +127,10 @@ func (z *ZurgConfig) ShouldServeFromRclone() bool {
|
|||||||
return z.ServeFromRclone
|
return z.ServeFromRclone
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (z *ZurgConfig) ShouldVerifyDownloadLink() bool {
|
||||||
|
return z.VerifyDownloadLink
|
||||||
|
}
|
||||||
|
|
||||||
func (z *ZurgConfig) ShouldForceIPv6() bool {
|
func (z *ZurgConfig) ShouldForceIPv6() bool {
|
||||||
return z.ForceIPv6
|
return z.ForceIPv6
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,9 +54,16 @@ func (gf *GetFile) HandleGetRequest(directory, torrentName, fileName string, res
|
|||||||
link := file.Link
|
link := file.Link
|
||||||
|
|
||||||
if download, exists := torMgr.DownloadCache.Get(link); exists {
|
if download, exists := torMgr.DownloadCache.Get(link); exists {
|
||||||
if cfg.ShouldServeFromRclone() && torMgr.Api.CanFetchFirstByte(download.Download) {
|
if cfg.ShouldServeFromRclone() {
|
||||||
redirect(resp, req, download.Download, cfg)
|
if cfg.ShouldVerifyDownloadLink() {
|
||||||
return
|
if torMgr.Api.CanFetchFirstByte(download.Download) {
|
||||||
|
redirect(resp, req, download.Download, cfg)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
redirect(resp, req, download.Download, cfg)
|
||||||
|
return
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
err := gf.streamCachedLinkToResponse(download.Download, resp, req, torMgr, cfg, log)
|
err := gf.streamCachedLinkToResponse(download.Download, resp, req, torMgr, cfg, log)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@@ -93,6 +100,13 @@ func (gf *GetFile) HandleGetRequest(directory, torrentName, fileName string, res
|
|||||||
}
|
}
|
||||||
torMgr.DownloadCache.Set(link, unrestrict)
|
torMgr.DownloadCache.Set(link, unrestrict)
|
||||||
if cfg.ShouldServeFromRclone() {
|
if cfg.ShouldServeFromRclone() {
|
||||||
|
if cfg.ShouldVerifyDownloadLink() {
|
||||||
|
if !torMgr.Api.CanFetchFirstByte(unrestrict.Download) {
|
||||||
|
log.Warnf("File %s is not available", fileName)
|
||||||
|
http.Error(resp, "File is not available", http.StatusNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
redirect(resp, req, unrestrict.Download, cfg)
|
redirect(resp, req, unrestrict.Download, cfg)
|
||||||
} else {
|
} else {
|
||||||
gf.streamFileToResponse(torrent, file, unrestrict, resp, req, torMgr, cfg, log)
|
gf.streamFileToResponse(torrent, file, unrestrict, resp, req, torMgr, cfg, log)
|
||||||
|
|||||||
Reference in New Issue
Block a user