diff --git a/lib/streaming_providers/providers/joyn/auth.py b/lib/streaming_providers/providers/joyn/auth.py index 65636b8..012e5e2 100644 --- a/lib/streaming_providers/providers/joyn/auth.py +++ b/lib/streaming_providers/providers/joyn/auth.py @@ -400,6 +400,24 @@ class JoynAuthenticator(BaseOAuth2Authenticator): } clean_headers.setdefault("User-Agent", JOYN_USER_AGENT) clean_headers.setdefault("Accept", "*/*") + # Browser-realistic headers to prevent Cloudflare managed challenges. + # CF uses sec-fetch-* and ch-ua hints to distinguish real browsers from bots. + clean_headers.setdefault("Accept-Language", "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7") + clean_headers.setdefault("Accept-Encoding", "gzip, deflate, br") + clean_headers.setdefault("Cache-Control", "no-cache") + clean_headers.setdefault("Pragma", "no-cache") + clean_headers.setdefault("sec-ch-ua", '"Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"') + clean_headers.setdefault("sec-ch-ua-mobile", "?0") + clean_headers.setdefault("sec-ch-ua-platform", '"Windows"') + if method.upper() == "POST": + clean_headers.setdefault("Sec-Fetch-Site", "same-site") + clean_headers.setdefault("Sec-Fetch-Mode", "cors") + clean_headers.setdefault("Sec-Fetch-Dest", "empty") + else: + clean_headers.setdefault("Sec-Fetch-Site", "none") + clean_headers.setdefault("Sec-Fetch-Mode", "navigate") + clean_headers.setdefault("Sec-Fetch-Dest", "document") + clean_headers.setdefault("Sec-Fetch-User", "?1") content_type = kwargs.pop("content_type", None) if content_type: diff --git a/resources/settings.xml b/resources/settings.xml index ee2b35c..ee4b386 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -1,167 +1,236 @@ + + + - - - 1 - URL to download XMLTV EPG data. Can be .xml or .xml.gz format. Leave empty to use default. + + 0 + Port number for the Ultimate Backend service + + + + 0 + URL to download XMLTV EPG data. Can be .xml or .xml.gz format. + + + + 0 + Default country code for providers that support multiple countries + + + + 1 + Default enabled state for providers not explicitly configured. Disabled is recommended to avoid unexpected channels. - 2 Force clear EPG cache and re-download on next request - RunScript(special://home/addons/YOUR_ADDON_ID/clear_epg_cache.py) - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - - - - + + + + + - - - + + - - - - - + + + + + - - - - - 0 - - false - - - - - 0 - - false - - - - - - + + + + + + + + + + + + + - - - - + + + + + + - - - - + + + + + - - - - - + + - - - - - + + - - - - - + + - - - - - + + - - - - - + + + + + - - - - - - + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Master enable/disable for ALL M3U playlist groups. Individual groups cannot be controlled separately. + + + + + + + + + + + Enable/disable custom script-based provider + + \ No newline at end of file