Implement --no-proxy to disable all uses proxies and proxy providers

This prevents a service from setting a proxy if geofenced, and also discards any manually provided proxy from `--proxy`.
This commit is contained in:
rlaphoenix 2024-01-09 02:40:49 +00:00
parent f28a6dc28a
commit 58cb00b18b
2 changed files with 77 additions and 71 deletions

View File

@ -145,6 +145,7 @@ class dl:
def __init__( def __init__(
self, self,
ctx: click.Context, ctx: click.Context,
no_proxy: bool,
profile: Optional[str] = None, profile: Optional[str] = None,
proxy: Optional[str] = None, proxy: Optional[str] = None,
group: Optional[str] = None, group: Optional[str] = None,
@ -192,8 +193,11 @@ class dl:
self.vaults.load(vault_type, **vault) self.vaults.load(vault_type, **vault)
self.log.info(f"Loaded {len(self.vaults)} Vaults") self.log.info(f"Loaded {len(self.vaults)} Vaults")
with console.status("Loading Proxy Providers...", spinner="dots"):
self.proxy_providers = [] self.proxy_providers = []
if no_proxy:
ctx.params["proxy"] = None
else:
with console.status("Loading Proxy Providers...", spinner="dots"):
if config.proxy_providers.get("basic"): if config.proxy_providers.get("basic"):
self.proxy_providers.append(Basic(**config.proxy_providers["basic"])) self.proxy_providers.append(Basic(**config.proxy_providers["basic"]))
if config.proxy_providers.get("nordvpn"): if config.proxy_providers.get("nordvpn"):
@ -274,6 +278,7 @@ class dl:
skip_dl: bool, skip_dl: bool,
export: Optional[Path], export: Optional[Path],
cdm_only: Optional[bool], cdm_only: Optional[bool],
no_proxy: bool,
no_folder: bool, no_folder: bool,
no_source: bool, no_source: bool,
workers: int, workers: int,

View File

@ -41,12 +41,13 @@ class Service(metaclass=ABCMeta):
self.session = self.get_session() self.session = self.get_session()
self.cache = Cacher(self.__class__.__name__) self.cache = Cacher(self.__class__.__name__)
if not ctx.parent or not ctx.parent.params.get("no_proxy"):
if ctx.parent: if ctx.parent:
self.proxy = ctx.parent.params["proxy"] proxy = ctx.parent.params["proxy"]
else: else:
self.proxy = None proxy = None
if not self.proxy: if not proxy:
# don't override the explicit proxy set by the user, even if they may be geoblocked # don't override the explicit proxy set by the user, even if they may be geoblocked
with console.status("Checking if current region is Geoblocked...", spinner="dots"): with console.status("Checking if current region is Geoblocked...", spinner="dots"):
if self.GEOFENCE: if self.GEOFENCE:
@ -58,16 +59,16 @@ class Service(metaclass=ABCMeta):
requested_proxy = self.GEOFENCE[0] # first is likely main region requested_proxy = self.GEOFENCE[0] # first is likely main region
self.log.info(f"Service is Geoblocked in your region, getting a Proxy to {requested_proxy}") self.log.info(f"Service is Geoblocked in your region, getting a Proxy to {requested_proxy}")
for proxy_provider in ctx.obj.proxy_providers: for proxy_provider in ctx.obj.proxy_providers:
self.proxy = proxy_provider.get_proxy(requested_proxy) proxy = proxy_provider.get_proxy(requested_proxy)
if self.proxy: if proxy:
self.log.info(f"Got Proxy from {proxy_provider.__class__.__name__}") self.log.info(f"Got Proxy from {proxy_provider.__class__.__name__}")
break break
else: else:
self.log.info("Service has no Geofence") self.log.info("Service has no Geofence")
if self.proxy: if proxy:
self.session.proxies.update({"all": self.proxy}) self.session.proxies.update({"all": proxy})
proxy_parse = urlparse(self.proxy) proxy_parse = urlparse(proxy)
if proxy_parse.username and proxy_parse.password: if proxy_parse.username and proxy_parse.password:
self.session.headers.update({ self.session.headers.update({
"Proxy-Authorization": base64.b64encode( "Proxy-Authorization": base64.b64encode(