From 5e1a810ca51a676f38a799d8fc22b61fd0711305 Mon Sep 17 00:00:00 2001 From: Felix Date: Sat, 14 Feb 2026 13:23:16 +0200 Subject: [PATCH] feat(config): add webcorshost support for CORS proxy routing Add new `webcorshost` configuration option that allows routing all HTTP requests through a CORS proxy for modules that require it. This feature enables compatibility with modules that need CORS bypass while maintaining support for existing features like `streamproxy` and `apn`. Also reduces disconnect time from max 16 hours to 4 hours for improved reconnection behavior. --- .gitignore | 1 + AnimeON/AnimeONInvoke.cs | 15 +++++++++------ AnimeON/Controller.cs | 6 +++--- AnimeON/ModInit.cs | 4 ++-- Bamboo/BambooInvoke.cs | 6 +++--- Bamboo/ModInit.cs | 4 ++-- Makhno/MakhnoInvoke.cs | 12 ++++++------ Makhno/ModInit.cs | 4 ++-- Mikai/MikaiInvoke.cs | 11 +++++++---- Mikai/ModInit.cs | 4 ++-- README.md | 6 ++++++ StarLight/ModInit.cs | 4 ++-- StarLight/StarLightInvoke.cs | 8 ++++---- UaTUT/ModInit.cs | 4 ++-- UaTUT/UaTUTInvoke.cs | 8 ++++---- Uaflix/Controller.cs | 2 +- Uaflix/ModInit.cs | 4 ++-- Uaflix/UaflixInvoke.cs | 27 +++++++++++++++------------ Unimay/ModInit.cs | 4 ++-- Unimay/UnimayInvoke.cs | 4 ++-- 20 files changed, 77 insertions(+), 61 deletions(-) diff --git a/.gitignore b/.gitignore index ad21350..058e82b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /.idea/ /AIDocumentation/ /Lampac/ +/lampac/ /BanderaBackend/ /Kinovezha/ /.clinerules/moduls.md diff --git a/AnimeON/AnimeONInvoke.cs b/AnimeON/AnimeONInvoke.cs index 7f68469..acabbc9 100644 --- a/AnimeON/AnimeONInvoke.cs +++ b/AnimeON/AnimeONInvoke.cs @@ -32,6 +32,9 @@ namespace AnimeON if (!ApnHelper.IsAshdiUrl(url)) return url; + if (!string.IsNullOrWhiteSpace(_init.webcorshost)) + return url; + return ApnHelper.WrapUrl(_init, url); } @@ -53,7 +56,7 @@ namespace AnimeON string searchUrl = $"{_init.host}/api/anime/search?text={System.Web.HttpUtility.UrlEncode(query)}"; _onLog($"AnimeON: using proxy {_proxyManager.CurrentProxyIp} for {searchUrl}"); - string searchJson = await Http.Get(searchUrl, headers: headers, proxy: _proxyManager.Get()); + string searchJson = await Http.Get(_init.cors(searchUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(searchJson)) return null; @@ -116,7 +119,7 @@ namespace AnimeON string fundubsUrl = $"{_init.host}/api/player/{animeId}/translations"; _onLog($"AnimeON: using proxy {_proxyManager.CurrentProxyIp} for {fundubsUrl}"); - string fundubsJson = await Http.Get(fundubsUrl, headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }, proxy: _proxyManager.Get()); + string fundubsJson = await Http.Get(_init.cors(fundubsUrl), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(fundubsJson)) return null; @@ -142,7 +145,7 @@ namespace AnimeON string episodesUrl = $"{_init.host}/api/player/{animeId}/episodes?take=100&skip=-1&playerId={playerId}&translationId={fundubId}"; _onLog($"AnimeON: using proxy {_proxyManager.CurrentProxyIp} for {episodesUrl}"); - string episodesJson = await Http.Get(episodesUrl, headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }, proxy: _proxyManager.Get()); + string episodesJson = await Http.Get(_init.cors(episodesUrl), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(episodesJson)) return null; @@ -161,7 +164,7 @@ namespace AnimeON }; _onLog($"AnimeON: using proxy {_proxyManager.CurrentProxyIp} for {requestUrl}"); - string html = await Http.Get(requestUrl, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(requestUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(html)) return null; @@ -191,7 +194,7 @@ namespace AnimeON string requestUrl = AshdiRequestUrl(url); _onLog($"AnimeON: using proxy {_proxyManager.CurrentProxyIp} for {requestUrl}"); - string html = await Http.Get(requestUrl, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(requestUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(html)) return null; @@ -216,7 +219,7 @@ namespace AnimeON string url = $"{_init.host}/api/player/{episodeId}/episode"; _onLog($"AnimeON: using proxy {_proxyManager.CurrentProxyIp} for {url}"); - string json = await Http.Get(url, headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }, proxy: _proxyManager.Get()); + string json = await Http.Get(_init.cors(url), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(json)) return null; diff --git a/AnimeON/Controller.cs b/AnimeON/Controller.cs index b125a9d..0b1ad97 100644 --- a/AnimeON/Controller.cs +++ b/AnimeON/Controller.cs @@ -248,7 +248,7 @@ namespace AnimeON.Controllers { string fundubsUrl = $"{init.host}/api/player/{animeId}/translations"; - string fundubsJson = await Http.Get(fundubsUrl, headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", init.host) }); + string fundubsJson = await Http.Get(init.cors(fundubsUrl), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", init.host) }); if (string.IsNullOrEmpty(fundubsJson)) return null; @@ -273,7 +273,7 @@ namespace AnimeON.Controllers { string episodesUrl = $"{init.host}/api/player/{animeId}/episodes?take=100&skip=-1&playerId={playerId}&translationId={fundubId}"; - string episodesJson = await Http.Get(episodesUrl, headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", init.host) }); + string episodesJson = await Http.Get(init.cors(episodesUrl), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", init.host) }); if (string.IsNullOrEmpty(episodesJson)) return null; @@ -297,7 +297,7 @@ namespace AnimeON.Controllers string searchUrl = $"{init.host}/api/anime/search?text={HttpUtility.UrlEncode(query)}"; - string searchJson = await Http.Get(searchUrl, headers: headers); + string searchJson = await Http.Get(init.cors(searchUrl), headers: headers); if (string.IsNullOrEmpty(searchJson)) return null; diff --git a/AnimeON/ModInit.cs b/AnimeON/ModInit.cs index 29c135c..640f4f5 100644 --- a/AnimeON/ModInit.cs +++ b/AnimeON/ModInit.cs @@ -25,7 +25,7 @@ namespace AnimeON { public class ModInit { - public static double Version => 3.4; + public static double Version => 3.5; public static OnlinesSettings AnimeON; public static bool ApnHostProvided; @@ -159,7 +159,7 @@ namespace AnimeON else { _disconnectTime = Connect?.IsNoiseEnabled == true - ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 16)) + ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 4)) : DateTime.UtcNow; } } diff --git a/Bamboo/BambooInvoke.cs b/Bamboo/BambooInvoke.cs index c22ad96..ece0bd0 100644 --- a/Bamboo/BambooInvoke.cs +++ b/Bamboo/BambooInvoke.cs @@ -50,7 +50,7 @@ namespace Bamboo }; _onLog?.Invoke($"Bamboo search: {searchUrl}"); - string html = await Http.Get(searchUrl, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(searchUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(html)) return null; @@ -109,7 +109,7 @@ namespace Bamboo }; _onLog?.Invoke($"Bamboo series page: {href}"); - string html = await Http.Get(href, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(href), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(html)) return null; @@ -183,7 +183,7 @@ namespace Bamboo }; _onLog?.Invoke($"Bamboo movie page: {href}"); - string html = await Http.Get(href, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(href), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(html)) return null; diff --git a/Bamboo/ModInit.cs b/Bamboo/ModInit.cs index 658479d..c4673e8 100644 --- a/Bamboo/ModInit.cs +++ b/Bamboo/ModInit.cs @@ -24,7 +24,7 @@ namespace Bamboo { public class ModInit { - public static double Version => 3.5; + public static double Version => 3.6; public static OnlinesSettings Bamboo; public static bool ApnHostProvided; @@ -158,7 +158,7 @@ namespace Bamboo else { _disconnectTime = Connect?.IsNoiseEnabled == true - ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 16)) + ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 4)) : DateTime.UtcNow; } } diff --git a/Makhno/MakhnoInvoke.cs b/Makhno/MakhnoInvoke.cs index a1f5393..b96a845 100644 --- a/Makhno/MakhnoInvoke.cs +++ b/Makhno/MakhnoInvoke.cs @@ -46,7 +46,7 @@ namespace Makhno new HeadersModel("User-Agent", Http.UserAgent) }; - string response = await Http.Get(url, timeoutSeconds: 4, headers: headers, proxy: _proxyManager.Get()); + string response = await Http.Get(_init.cors(url), timeoutSeconds: 4, headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrWhiteSpace(response)) return null; @@ -98,7 +98,7 @@ namespace Makhno new HeadersModel("User-Agent", Http.UserAgent) }; - var response = await Http.Get(url, headers: headers, proxy: _proxyManager.Get()); + var response = await Http.Get(_init.cors(url), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(response)) return null; @@ -127,7 +127,7 @@ namespace Makhno { new HeadersModel("User-Agent", Http.UserAgent) }; - var response = await Http.Get(url, headers: headers, proxy: _proxyManager.Get()); + var response = await Http.Get(_init.cors(url), headers: headers, proxy: _proxyManager.Get()); return response; } @@ -212,12 +212,12 @@ namespace Makhno headers.Add(new HeadersModel("Referer", "https://ashdi.vip/")); } - if (ApnHelper.IsAshdiUrl(playerUrl) && ApnHelper.IsEnabled(_init)) + if (ApnHelper.IsAshdiUrl(playerUrl) && ApnHelper.IsEnabled(_init) && string.IsNullOrWhiteSpace(_init.webcorshost)) requestUrl = ApnHelper.WrapUrl(_init, playerUrl); _onLog($"Makhno getting player data from: {requestUrl}"); - var response = await Http.Get(requestUrl, headers: headers, proxy: _proxyManager.Get()); + var response = await Http.Get(_init.cors(requestUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(response)) return null; @@ -725,7 +725,7 @@ namespace Makhno }; string json = JsonConvert.SerializeObject(payload, Formatting.None); - await Http.Post(WormholeHost, json, timeoutSeconds: 6, headers: headers, proxy: _proxyManager.Get()); + await Http.Post(_init.cors(WormholeHost), json, timeoutSeconds: 6, headers: headers, proxy: _proxyManager.Get()); return true; } catch (Exception ex) diff --git a/Makhno/ModInit.cs b/Makhno/ModInit.cs index 1e173c8..15d661e 100644 --- a/Makhno/ModInit.cs +++ b/Makhno/ModInit.cs @@ -23,7 +23,7 @@ namespace Makhno { public class ModInit { - public static double Version => 1.7; + public static double Version => 1.8; public static OnlinesSettings Makhno; public static bool ApnHostProvided; @@ -159,7 +159,7 @@ namespace Makhno else { _disconnectTime = Connect?.IsNoiseEnabled == true - ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 16)) + ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 4)) : DateTime.UtcNow; } } diff --git a/Mikai/MikaiInvoke.cs b/Mikai/MikaiInvoke.cs index ac88ebc..2f8039e 100644 --- a/Mikai/MikaiInvoke.cs +++ b/Mikai/MikaiInvoke.cs @@ -44,7 +44,7 @@ namespace Mikai var headers = DefaultHeaders(); _onLog($"Mikai: using proxy {_proxyManager.CurrentProxyIp} for {searchUrl}"); - string json = await Http.Get(searchUrl, headers: headers, proxy: _proxyManager.Get()); + string json = await Http.Get(_init.cors(searchUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(json)) return null; @@ -88,7 +88,7 @@ namespace Mikai var headers = DefaultHeaders(); _onLog($"Mikai: using proxy {_proxyManager.CurrentProxyIp} for {url}"); - string json = await Http.Get(url, headers: headers, proxy: _proxyManager.Get()); + string json = await Http.Get(_init.cors(url), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(json)) return null; @@ -139,7 +139,7 @@ namespace Mikai }; _onLog($"Mikai: using proxy {_proxyManager.CurrentProxyIp} for {requestUrl}"); - string html = await Http.Get(requestUrl, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(requestUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(html)) return null; @@ -160,6 +160,9 @@ namespace Mikai if (!ApnHelper.IsAshdiUrl(url)) return url; + if (!string.IsNullOrWhiteSpace(_init.webcorshost)) + return url; + return ApnHelper.WrapUrl(_init, url); } @@ -175,7 +178,7 @@ namespace Mikai string requestUrl = AshdiRequestUrl(url); _onLog($"Mikai: using proxy {_proxyManager.CurrentProxyIp} for {requestUrl}"); - string html = await Http.Get(requestUrl, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(requestUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(html)) return null; diff --git a/Mikai/ModInit.cs b/Mikai/ModInit.cs index e3cba11..5853535 100644 --- a/Mikai/ModInit.cs +++ b/Mikai/ModInit.cs @@ -24,7 +24,7 @@ namespace Mikai { public class ModInit { - public static double Version => 3.5; + public static double Version => 3.6; public static OnlinesSettings Mikai; public static bool ApnHostProvided; @@ -160,7 +160,7 @@ namespace Mikai else { _disconnectTime = Connect?.IsNoiseEnabled == true - ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 16)) + ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 4)) : DateTime.UtcNow; } } diff --git a/README.md b/README.md index 745d34a..c2d49b5 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ modules - optional, if not specified, all modules from the repository will be in "enable": true, "domain": "https://uaflix.net", "displayname": "Uaflix", + "webcorshost": null, "streamproxy": false, "useproxy": false, "proxy": { @@ -76,6 +77,11 @@ modules - optional, if not specified, all modules from the repository will be in } ``` +Parameter compatibility: +- `webcorshost` + `useproxy`: work together (parsing via CORS host, and network output can go through a proxy with `useproxy`). +- `webcorshost` does not conflict with `streamproxy`: CORS is used for parsing, `streamproxy` is used for streaming. +- `webcorshost` does not conflict with `apn`: APN is used at the streaming stage, not for regular parsing. + ## APN support Sources with APN support: diff --git a/StarLight/ModInit.cs b/StarLight/ModInit.cs index 699e416..2bc30be 100644 --- a/StarLight/ModInit.cs +++ b/StarLight/ModInit.cs @@ -24,7 +24,7 @@ namespace StarLight { public class ModInit { - public static double Version => 3.2; + public static double Version => 3.3; public static OnlinesSettings StarLight; public static bool ApnHostProvided; @@ -158,7 +158,7 @@ namespace StarLight else { _disconnectTime = Connect?.IsNoiseEnabled == true - ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 16)) + ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 4)) : DateTime.UtcNow; } } diff --git a/StarLight/StarLightInvoke.cs b/StarLight/StarLightInvoke.cs index 5e909b5..bfe7134 100644 --- a/StarLight/StarLightInvoke.cs +++ b/StarLight/StarLightInvoke.cs @@ -54,7 +54,7 @@ namespace StarLight try { _onLog?.Invoke($"StarLight search: {url}"); - string payload = await Http.Get(url, headers: headers, proxy: _proxyManager.Get()); + string payload = await Http.Get(_init.cors(url), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(payload)) return null; @@ -112,7 +112,7 @@ namespace StarLight try { _onLog?.Invoke($"StarLight project: {href}"); - string payload = await Http.Get(href, headers: headers, proxy: _proxyManager.Get()); + string payload = await Http.Get(_init.cors(href), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(payload)) return null; @@ -193,7 +193,7 @@ namespace StarLight try { _onLog?.Invoke($"StarLight season: {seasonUrl}"); - string payload = await Http.Get(seasonUrl, headers: headers, proxy: _proxyManager.Get()); + string payload = await Http.Get(_init.cors(seasonUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(payload)) continue; @@ -279,7 +279,7 @@ namespace StarLight try { _onLog?.Invoke($"StarLight stream: {url}"); - string payload = await Http.Get(url, headers: headers, proxy: _proxyManager.Get()); + string payload = await Http.Get(_init.cors(url), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(payload)) return null; diff --git a/UaTUT/ModInit.cs b/UaTUT/ModInit.cs index db955f9..2ed2987 100644 --- a/UaTUT/ModInit.cs +++ b/UaTUT/ModInit.cs @@ -24,7 +24,7 @@ namespace UaTUT { public class ModInit { - public static double Version => 3.5; + public static double Version => 3.6; public static OnlinesSettings UaTUT; public static bool ApnHostProvided; @@ -159,7 +159,7 @@ namespace UaTUT else { _disconnectTime = Connect?.IsNoiseEnabled == true - ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 16)) + ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 4)) : DateTime.UtcNow; } } diff --git a/UaTUT/UaTUTInvoke.cs b/UaTUT/UaTUTInvoke.cs index 96ae3d2..9ead66e 100644 --- a/UaTUT/UaTUTInvoke.cs +++ b/UaTUT/UaTUTInvoke.cs @@ -65,7 +65,7 @@ namespace UaTUT _onLog($"UaTUT searching: {url}"); var headers = new List() { new HeadersModel("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36") }; - var response = await Http.Get(url, headers: headers, proxy: _proxyManager.Get()); + var response = await Http.Get(_init.cors(url), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(response)) return null; @@ -91,7 +91,7 @@ namespace UaTUT _onLog($"UaTUT getting movie page: {url}"); var headers = new List() { new HeadersModel("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36") }; - var response = await Http.Get(url, headers: headers, proxy: _proxyManager.Get()); + var response = await Http.Get(_init.cors(url), headers: headers, proxy: _proxyManager.Get()); return response; } @@ -130,13 +130,13 @@ namespace UaTUT try { string requestUrl = playerUrl; - if (ApnHelper.IsAshdiUrl(playerUrl) && ApnHelper.IsEnabled(_init)) + if (ApnHelper.IsAshdiUrl(playerUrl) && ApnHelper.IsEnabled(_init) && string.IsNullOrWhiteSpace(_init.webcorshost)) requestUrl = ApnHelper.WrapUrl(_init, playerUrl); _onLog($"UaTUT getting player data from: {requestUrl}"); var headers = new List() { new HeadersModel("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36") }; - var response = await Http.Get(requestUrl, headers: headers, proxy: _proxyManager.Get()); + var response = await Http.Get(_init.cors(requestUrl), headers: headers, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(response)) return null; diff --git a/Uaflix/Controller.cs b/Uaflix/Controller.cs index 7512907..c144dc9 100644 --- a/Uaflix/Controller.cs +++ b/Uaflix/Controller.cs @@ -56,7 +56,7 @@ namespace Uaflix.Controllers string searchUrl = $"{init.host}/index.php?do=search&subaction=search&story={System.Web.HttpUtility.UrlEncode(filmTitle)}"; var headers = new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", init.host) }; - var searchHtml = await Http.Get(searchUrl, headers: headers, proxy: proxyManager.Get(), timeoutSeconds: 10); + var searchHtml = await Http.Get(init.cors(searchUrl), headers: headers, proxy: proxyManager.Get(), timeoutSeconds: 10); // Швидка перевірка наявності результатів без повного парсингу if (!string.IsNullOrEmpty(searchHtml) && diff --git a/Uaflix/ModInit.cs b/Uaflix/ModInit.cs index 87b62c1..23ae079 100644 --- a/Uaflix/ModInit.cs +++ b/Uaflix/ModInit.cs @@ -25,7 +25,7 @@ namespace Uaflix { public class ModInit { - public static double Version => 3.5; + public static double Version => 3.6; public static OnlinesSettings UaFlix; public static bool ApnHostProvided; @@ -164,7 +164,7 @@ namespace Uaflix else { _disconnectTime = Connect?.IsNoiseEnabled == true - ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 16)) + ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 4)) : DateTime.UtcNow; } } diff --git a/Uaflix/UaflixInvoke.cs b/Uaflix/UaflixInvoke.cs index 112f279..900b0b6 100644 --- a/Uaflix/UaflixInvoke.cs +++ b/Uaflix/UaflixInvoke.cs @@ -38,6 +38,9 @@ namespace Uaflix if (!ApnHelper.IsAshdiUrl(url)) return url; + if (!string.IsNullOrWhiteSpace(_init.webcorshost)) + return url; + return ApnHelper.WrapUrl(_init, url); } @@ -99,7 +102,7 @@ namespace Uaflix } } - string html = await Http.Get(AshdiRequestUrl(requestUrl), headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(AshdiRequestUrl(requestUrl)), headers: headers, proxy: _proxyManager.Get()); // Знайти JSON у new Playerjs({file:'...'}) var match = Regex.Match(html, @"file:'(\[.+?\])'", RegexOptions.Singleline); @@ -210,7 +213,7 @@ namespace Uaflix try { - string html = await Http.Get(iframeUrl, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(iframeUrl), headers: headers, proxy: _proxyManager.Get()); // Знайти file:"url" var match = Regex.Match(html, @"file:\s*""([^""]+\.m3u8)"""); @@ -244,7 +247,7 @@ namespace Uaflix try { - string html = await Http.Get(iframeUrl, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(iframeUrl), headers: headers, proxy: _proxyManager.Get()); // Шукаємо Playerjs конфігурацію з file параметром var match = Regex.Match(html, @"file:\s*'?([^'""\s,}]+\.m3u8)'?"); @@ -350,7 +353,7 @@ namespace Uaflix new HeadersModel("Referer", _init.host) }; - string html = await Http.Get(firstEpisode.url, headers: headers, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(firstEpisode.url), headers: headers, proxy: _proxyManager.Get()); var doc = new HtmlDocument(); doc.LoadHtml(html); @@ -566,7 +569,7 @@ namespace Uaflix string searchUrl = $"{_init.host}/index.php?do=search&subaction=search&story={System.Web.HttpUtility.UrlEncode(filmTitle)}"; var headers = new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }; - var searchHtml = await Http.Get(searchUrl, headers: headers, proxy: _proxyManager.Get()); + var searchHtml = await Http.Get(_init.cors(searchUrl), headers: headers, proxy: _proxyManager.Get()); var doc = new HtmlDocument(); doc.LoadHtml(searchHtml); @@ -658,7 +661,7 @@ namespace Uaflix try { var headers = new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }; - var filmHtml = await Http.Get(filmUrl, headers: headers, proxy: _proxyManager.Get()); + var filmHtml = await Http.Get(_init.cors(filmUrl), headers: headers, proxy: _proxyManager.Get()); var doc = new HtmlDocument(); doc.LoadHtml(filmHtml); @@ -733,7 +736,7 @@ namespace Uaflix try { var headers = new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }; - var filmHtml = await Http.Get(filmUrl, headers: headers, proxy: _proxyManager.Get()); + var filmHtml = await Http.Get(_init.cors(filmUrl), headers: headers, proxy: _proxyManager.Get()); var filmDoc = new HtmlDocument(); filmDoc.LoadHtml(filmHtml); @@ -771,7 +774,7 @@ namespace Uaflix if (safeSeasonUrls.Count == 0) return null; - var seasonTasks = safeSeasonUrls.Select(url => Http.Get(url, headers: headers, proxy: _proxyManager.Get())); + var seasonTasks = safeSeasonUrls.Select(url => Http.Get(_init.cors(url), headers: headers, proxy: _proxyManager.Get())); var seasonPagesHtml = await Task.WhenAll(seasonTasks); foreach (var html in seasonPagesHtml) @@ -832,7 +835,7 @@ namespace Uaflix var result = new Uaflix.Models.PlayResult() { streams = new List<(string, string)>() }; try { - string html = await Http.Get(url, headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }, proxy: _proxyManager.Get()); + string html = await Http.Get(_init.cors(url), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", _init.host) }, proxy: _proxyManager.Get()); var doc = new HtmlDocument(); doc.LoadHtml(html); @@ -938,7 +941,7 @@ namespace Uaflix async Task> ParseAllZetvideoSources(string iframeUrl) { var result = new List<(string link, string quality)>(); - var html = await Http.Get(iframeUrl, headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", "https://zetvideo.net/") }, proxy: _proxyManager.Get()); + var html = await Http.Get(_init.cors(iframeUrl), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", "https://zetvideo.net/") }, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(html)) return result; var doc = new HtmlDocument(); @@ -969,7 +972,7 @@ namespace Uaflix async Task> ParseAllAshdiSources(string iframeUrl) { var result = new List<(string link, string quality)>(); - var html = await Http.Get(AshdiRequestUrl(iframeUrl), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", "https://ashdi.vip/") }, proxy: _proxyManager.Get()); + var html = await Http.Get(_init.cors(AshdiRequestUrl(iframeUrl)), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", "https://ashdi.vip/") }, proxy: _proxyManager.Get()); if (string.IsNullOrEmpty(html)) return result; var doc = new HtmlDocument(); @@ -989,7 +992,7 @@ namespace Uaflix async Task GetAshdiSubtitles(string id) { string url = $"https://ashdi.vip/vod/{id}"; - var html = await Http.Get(AshdiRequestUrl(url), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", "https://ashdi.vip/") }, proxy: _proxyManager.Get()); + var html = await Http.Get(_init.cors(AshdiRequestUrl(url)), headers: new List() { new HeadersModel("User-Agent", "Mozilla/5.0"), new HeadersModel("Referer", "https://ashdi.vip/") }, proxy: _proxyManager.Get()); string subtitle = new Regex("subtitle(\")?:\"([^\"]+)\"").Match(html).Groups[2].Value; if (!string.IsNullOrEmpty(subtitle)) { diff --git a/Unimay/ModInit.cs b/Unimay/ModInit.cs index 4f15197..5f03068 100644 --- a/Unimay/ModInit.cs +++ b/Unimay/ModInit.cs @@ -30,7 +30,7 @@ namespace Unimay { public class ModInit { - public static double Version => 3.3; + public static double Version => 3.4; public static OnlinesSettings Unimay; @@ -147,7 +147,7 @@ namespace Unimay else { _disconnectTime = Connect?.IsNoiseEnabled == true - ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 16)) + ? DateTime.UtcNow.AddHours(Random.Shared.Next(1, 4)) : DateTime.UtcNow; } } diff --git a/Unimay/UnimayInvoke.cs b/Unimay/UnimayInvoke.cs index 7706fd9..fc5ac65 100644 --- a/Unimay/UnimayInvoke.cs +++ b/Unimay/UnimayInvoke.cs @@ -39,7 +39,7 @@ namespace Unimay string searchUrl = $"{_init.host}/release/search?page=0&page_size=10&title={searchQuery}"; var headers = httpHeaders(_init); - SearchResponse root = await Http.Get(searchUrl, timeoutSeconds: 8, proxy: _proxyManager.Get(), headers: headers); + SearchResponse root = await Http.Get(_init.cors(searchUrl), timeoutSeconds: 8, proxy: _proxyManager.Get(), headers: headers); if (root == null || root.Content == null || root.Content.Count == 0) { @@ -69,7 +69,7 @@ namespace Unimay string releaseUrl = $"{_init.host}/release?code={code}"; var headers = httpHeaders(_init); - ReleaseResponse root = await Http.Get(releaseUrl, timeoutSeconds: 8, proxy: _proxyManager.Get(), headers: headers); + ReleaseResponse root = await Http.Get(_init.cors(releaseUrl), timeoutSeconds: 8, proxy: _proxyManager.Get(), headers: headers); if (root == null) {