mirror of https://github.com/devine-dl/devine.git
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:
parent
f28a6dc28a
commit
58cb00b18b
|
@ -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,
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in New Issue