diff --git a/src/stremio_app/stremio_wevbiew/constants.rs b/src/stremio_app/stremio_wevbiew/constants.rs new file mode 100644 index 0000000..7e37b3c --- /dev/null +++ b/src/stremio_app/stremio_wevbiew/constants.rs @@ -0,0 +1,15 @@ +pub const WARNING_URL: &str = "https://www.stremio.com/warning#"; +pub const WHITELISTED_HOSTS: &[&str] = &[ + "stremio.com", + "strem.io", + "stremio.zendesk.com", + "google.com", + "youtube.com", + "twitch.tv", + "twitter.com", + "x.com", + "netflix.com", + "adex.network", + "amazon.com", + "forms.gle", +]; diff --git a/src/stremio_app/stremio_wevbiew/mod.rs b/src/stremio_app/stremio_wevbiew/mod.rs index 9f9d4a9..0ea5b33 100644 --- a/src/stremio_app/stremio_wevbiew/mod.rs +++ b/src/stremio_app/stremio_wevbiew/mod.rs @@ -1,2 +1,4 @@ +mod constants; + pub mod wevbiew; pub use wevbiew::WebView; diff --git a/src/stremio_app/stremio_wevbiew/wevbiew.rs b/src/stremio_app/stremio_wevbiew/wevbiew.rs index 585aac5..6b394f5 100644 --- a/src/stremio_app/stremio_wevbiew/wevbiew.rs +++ b/src/stremio_app/stremio_wevbiew/wevbiew.rs @@ -9,11 +9,14 @@ use std::mem; use std::rc::Rc; use std::sync::{Arc, Mutex}; use std::thread; +use url::Url; use urlencoding::decode; use webview2::Controller; use winapi::shared::windef::HWND; use winapi::um::winuser::{GetClientRect, VK_F7, WM_SETFOCUS}; +use super::constants::{WARNING_URL, WHITELISTED_HOSTS}; + #[derive(Default)] pub struct WebView { pub endpoint: Rc>, @@ -104,7 +107,21 @@ impl PartialUi for WebView { // Handle window.open and href webview.add_new_window_requested(move |_webview, event| { if let Ok(uri) = event.get_uri() { - open::that(uri)?; + if let Ok(url) = Url::parse(&uri) { + let is_whitelisted = url.host().is_some_and(|host| { + WHITELISTED_HOSTS.iter().any(|whitelisted_host| host.to_string().ends_with(whitelisted_host)) + }); + + let final_url = if is_whitelisted { + url.to_string() + } else { + format!("{}{}", WARNING_URL, urlencoding::encode(url.as_ref())) + }; + + if let Err(e) = open::that(final_url) { + eprintln!("Failed to open URL: {}", e); + } + } } Ok(())