mirror of
https://github.com/UrloMythus/UnHided.git
synced 2026-04-11 11:50:51 +00:00
New version
This commit is contained in:
@@ -3,8 +3,9 @@ import re
|
||||
from typing import AsyncGenerator
|
||||
from urllib import parse
|
||||
|
||||
from mediaflow_proxy.configs import settings
|
||||
from mediaflow_proxy.utils.crypto_utils import encryption_handler
|
||||
from mediaflow_proxy.utils.http_utils import encode_mediaflow_proxy_url, get_original_scheme
|
||||
from mediaflow_proxy.utils.http_utils import encode_mediaflow_proxy_url, encode_stremio_proxy_url, get_original_scheme
|
||||
|
||||
|
||||
class M3U8Processor:
|
||||
@@ -39,7 +40,7 @@ class M3U8Processor:
|
||||
if "URI=" in line:
|
||||
processed_lines.append(await self.process_key_line(line, base_url))
|
||||
elif not line.startswith("#") and line.strip():
|
||||
processed_lines.append(await self.proxy_url(line, base_url))
|
||||
processed_lines.append(await self.proxy_content_url(line, base_url))
|
||||
else:
|
||||
processed_lines.append(line)
|
||||
return "\n".join(processed_lines)
|
||||
@@ -104,7 +105,7 @@ class M3U8Processor:
|
||||
if "URI=" in line:
|
||||
return await self.process_key_line(line, base_url)
|
||||
elif not line.startswith("#") and line.strip():
|
||||
return await self.proxy_url(line, base_url)
|
||||
return await self.proxy_content_url(line, base_url)
|
||||
else:
|
||||
return line
|
||||
|
||||
@@ -129,9 +130,9 @@ class M3U8Processor:
|
||||
line = line.replace(f'URI="{original_uri}"', f'URI="{new_uri}"')
|
||||
return line
|
||||
|
||||
async def proxy_url(self, url: str, base_url: str) -> str:
|
||||
async def proxy_content_url(self, url: str, base_url: str) -> str:
|
||||
"""
|
||||
Proxies a URL, encoding it with the MediaFlow proxy URL.
|
||||
Proxies a content URL based on the configured routing strategy.
|
||||
|
||||
Args:
|
||||
url (str): The URL to proxy.
|
||||
@@ -141,6 +142,51 @@ class M3U8Processor:
|
||||
str: The proxied URL.
|
||||
"""
|
||||
full_url = parse.urljoin(base_url, url)
|
||||
|
||||
# Determine routing strategy based on configuration
|
||||
routing_strategy = settings.m3u8_content_routing
|
||||
|
||||
# For playlist URLs, always use MediaFlow proxy regardless of strategy
|
||||
if ".m3u" in full_url:
|
||||
return await self.proxy_url(full_url, base_url, use_full_url=True)
|
||||
|
||||
# Route non-playlist content URLs based on strategy
|
||||
if routing_strategy == "direct":
|
||||
# Return the URL directly without any proxying
|
||||
return full_url
|
||||
elif routing_strategy == "stremio" and settings.stremio_proxy_url:
|
||||
# Use Stremio proxy for content URLs
|
||||
query_params = dict(self.request.query_params)
|
||||
request_headers = {k[2:]: v for k, v in query_params.items() if k.startswith("h_")}
|
||||
response_headers = {k[2:]: v for k, v in query_params.items() if k.startswith("r_")}
|
||||
|
||||
return encode_stremio_proxy_url(
|
||||
settings.stremio_proxy_url,
|
||||
full_url,
|
||||
request_headers=request_headers if request_headers else None,
|
||||
response_headers=response_headers if response_headers else None,
|
||||
)
|
||||
else:
|
||||
# Default to MediaFlow proxy (routing_strategy == "mediaflow" or fallback)
|
||||
return await self.proxy_url(full_url, base_url, use_full_url=True)
|
||||
|
||||
async def proxy_url(self, url: str, base_url: str, use_full_url: bool = False) -> str:
|
||||
"""
|
||||
Proxies a URL, encoding it with the MediaFlow proxy URL.
|
||||
|
||||
Args:
|
||||
url (str): The URL to proxy.
|
||||
base_url (str): The base URL to resolve relative URLs.
|
||||
use_full_url (bool): Whether to use the URL as-is (True) or join with base_url (False).
|
||||
|
||||
Returns:
|
||||
str: The proxied URL.
|
||||
"""
|
||||
if use_full_url:
|
||||
full_url = url
|
||||
else:
|
||||
full_url = parse.urljoin(base_url, url)
|
||||
|
||||
query_params = dict(self.request.query_params)
|
||||
has_encrypted = query_params.pop("has_encrypted", False)
|
||||
# Remove the response headers from the query params to avoid it being added to the consecutive requests
|
||||
|
||||
Reference in New Issue
Block a user