diff --git a/Cargo.toml b/Cargo.toml index 316921b..c0b49d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,8 +12,8 @@ futures = "0.3.31" htmlentity = "1.3.2" ntex = { version = "2.0", features = ["tokio"] } ntex-files = "2.0.0" -reqwest = { version = "0.12.18", features = ["blocking", "json", "rustls-tls"] } serde = "1.0.219" serde_json = "1.0.140" -tokio = "1.45.1" - +tokio = { version = "1", features = ["full"] } +wreq = { version = "5", features = ["full"] } +wreq-util = "2" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 293a128..8fb2179 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,5 @@ -#FROM debian -FROM consol/debian-xfce-vnc:latest -ENV REFRESHED_AT 2025_06_03 - +FROM debian +# FROM consol/debian-xfce-vnc:latest # Switch to root user to install additional software USER 0 @@ -30,20 +28,5 @@ RUN apt install -yq libssl-dev \ sudo \ && apt-get clean - -RUN mkdir -p /usr/share/man/man1 && \ - curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor -o /etc/apt/trusted.gpg.d/adoptium.gpg && \ - echo "deb https://packages.adoptium.net/artifactory/deb bullseye main" > /etc/apt/sources.list.d/adoptium.list && \ - apt-get update && \ - apt-get install -y temurin-21-jdk -RUN java -version - -RUN curl https://portswigger.net/burp/releases/download \ - -o burpsuite_community.jar - USER 1000 - -RUN python3 -m venv ~/.venv && bash -c "source ~/.venv/bin/activate && pip3 install pyautogui pillow opencv-python" -RUN echo "source ~/.venv/bin/activate" >> ~/.bashrc - diff --git a/src/providers/hanime.rs b/src/providers/hanime.rs index 6e28742..3f1fad9 100644 --- a/src/providers/hanime.rs +++ b/src/providers/hanime.rs @@ -1,9 +1,9 @@ use std::vec; use std::env; use error_chain::error_chain; -use reqwest::{Proxy}; use futures::future::join_all; - +use wreq::Client; +use wreq_util::Emulation; use crate::db; use crate::providers::Provider; use crate::util::cache::VideoCache; @@ -14,7 +14,7 @@ use crate::USER_AGENT; // Make sure Provider trait is imported error_chain! { foreign_links { Io(std::io::Error); - HttpRequest(reqwest::Error); + HttpRequest(wreq::Error); } } @@ -152,18 +152,9 @@ impl HanimeProvider { } } - let client = match env::var("BURP_URL").as_deref() { - Ok(burp_url) => - reqwest::Client::builder() - .user_agent(USER_AGENT) - .proxy(Proxy::https(burp_url).unwrap()) - .danger_accept_invalid_certs(true) - .build()?, - Err(_) => reqwest::Client::builder() - .user_agent(USER_AGENT) - .danger_accept_invalid_certs(true) - .build()?, - }; + let client = Client::builder() + .emulation(Emulation::Firefox136) + .build()?; let url = format!("https://h.freeanimehentai.net/api/v8/video?id={}&", hit.slug); let response = client.get(url).send().await?; @@ -228,18 +219,9 @@ impl HanimeProvider { .search_text(query.clone()) .order_by(order_by) .ordering(ordering); - let client = match env::var("BURP_URL").as_deref() { - Ok(burp_url) => - reqwest::Client::builder() - .user_agent(USER_AGENT) - .proxy(Proxy::https(burp_url).unwrap()) - .danger_accept_invalid_certs(true) - .build()?, - Err(_) => reqwest::Client::builder() - .user_agent(USER_AGENT) - .danger_accept_invalid_certs(true) - .build()?, - }; + let client = Client::builder() + .emulation(Emulation::Firefox136) + .build()?; let response = client.post("https://search.htv-services.com/search") .json(&search) .send().await?; @@ -288,7 +270,6 @@ impl Provider for HanimeProvider { let _ = featured; let _ = per_page; let _ = sort; - println!("Sort: {:?}", sort); let videos: std::result::Result, Error> = match query { Some(q) => self.get(cache, pool, page.parse::().unwrap_or(1), q, sort).await, None => self.get(cache, pool, page.parse::().unwrap_or(1), "".to_string(), sort).await, diff --git a/src/providers/perverzija.rs b/src/providers/perverzija.rs index 91e576a..c778b65 100644 --- a/src/providers/perverzija.rs +++ b/src/providers/perverzija.rs @@ -2,9 +2,9 @@ use std::vec; use std::env; use error_chain::error_chain; use htmlentity::entity::{decode, ICodedDataTrait}; -use reqwest::{Proxy}; use futures::future::join_all; - +use wreq::Client; +use wreq_util::Emulation; use crate::db; use crate::providers::Provider; use crate::util::cache::VideoCache; @@ -17,7 +17,7 @@ use crate::USER_AGENT; // Make sure Provider trait is imported error_chain! { foreign_links { Io(std::io::Error); - HttpRequest(reqwest::Error); + HttpRequest(wreq::Error); } } @@ -59,18 +59,9 @@ impl PerverzijaProvider { }; - let client = match env::var("BURP_URL").as_deref() { - Ok(burp_url) => - reqwest::Client::builder() - .user_agent(USER_AGENT) - .proxy(Proxy::https(burp_url).unwrap()) - .danger_accept_invalid_certs(true) - .build()?, - Err(_) => reqwest::Client::builder() - .user_agent(USER_AGENT) - .danger_accept_invalid_certs(true) - .build()?, - }; + let client = Client::builder() + .emulation(Emulation::Firefox136) + .build()?; let response = client.get(url.clone()).send().await?; // print!("Response: {:?}\n", response); @@ -141,18 +132,9 @@ impl PerverzijaProvider { vec![] } }; - let client = match env::var("BURP_URL").as_deref() { - Ok(burp_url) => - reqwest::Client::builder() - .user_agent(USER_AGENT) - .proxy(Proxy::https(burp_url).unwrap()) - .danger_accept_invalid_certs(true) - .build()?, - Err(_) => reqwest::Client::builder() - .user_agent(USER_AGENT) - .danger_accept_invalid_certs(true) - .build()?, - }; + let client = Client::builder() + .emulation(Emulation::Firefox136) + .build()?; let response = client.get(url.clone()).send().await?; if response.status().is_success() { @@ -384,18 +366,9 @@ impl PerverzijaProvider { drop(conn); - let client = match env::var("BURP_URL").as_deref() { - Ok(burp_url) => - reqwest::Client::builder() - .user_agent(USER_AGENT) - .proxy(Proxy::https(burp_url).unwrap()) - .danger_accept_invalid_certs(true) - .build()?, - Err(_) => reqwest::Client::builder() - .user_agent(USER_AGENT) - .danger_accept_invalid_certs(true) - .build()?, - }; + let client = Client::builder() + .emulation(Emulation::Firefox136) + .build()?; let response = client.get(lookup_url.clone()).send().await?; let text = match response.status().is_success(){ diff --git a/src/providers/spankbang.rs b/src/providers/spankbang.rs index ab5747e..aa1b858 100644 --- a/src/providers/spankbang.rs +++ b/src/providers/spankbang.rs @@ -3,28 +3,24 @@ use std::env; use error_chain::error_chain; use futures::future::join_all; use htmlentity::entity::{decode, ICodedDataTrait}; -use ntex::channel::pool; -use reqwest::Client; -use reqwest::{Proxy}; use crate::db; use crate::providers::Provider; use crate::util::cache::VideoCache; use crate::util::flaresolverr::{FlareSolverrRequest, Flaresolverr}; -use crate::videos::{self, VideoItem}; +use crate::videos::{VideoItem}; use crate::DbPool; use crate::USER_AGENT; // Make sure Provider trait is imported use std::collections::HashMap; -use std::time::Duration; -use tokio::time::sleep; +use wreq::Client; +use wreq_util::Emulation; error_chain! { foreign_links { Io(std::io::Error); - HttpRequest(reqwest::Error); + HttpRequest(wreq::Error); } } - #[derive(Debug, Clone)] pub struct SpankbangProvider { url: String, @@ -55,18 +51,9 @@ impl SpankbangProvider { }; - let client = match env::var("BURP_URL").as_deref() { - Ok(burp_url) => - reqwest::Client::builder() - .user_agent(USER_AGENT) - .proxy(Proxy::https(burp_url).unwrap()) - .danger_accept_invalid_certs(true) - .build()?, - Err(_) => reqwest::Client::builder() - .user_agent(USER_AGENT) - .danger_accept_invalid_certs(true) - .build()?, - }; + let client = Client::builder() + .emulation(Emulation::Firefox136) + .build()?; let response = client.get(url.clone()).send().await?; let mut cookies_string = String::new(); @@ -151,18 +138,9 @@ impl SpankbangProvider { }; - let client = match env::var("BURP_URL").as_deref() { - Ok(burp_url) => - reqwest::Client::builder() - .user_agent(USER_AGENT) - .proxy(Proxy::https(burp_url).unwrap()) - .danger_accept_invalid_certs(true) - .build()?, - Err(_) => reqwest::Client::builder() - .user_agent(USER_AGENT) - .danger_accept_invalid_certs(true) - .build()?, - }; + let client = Client::builder() + .emulation(Emulation::Firefox136) + .build()?; let response = client.get(url.clone()).send().await?; let mut cookies_string = String::new(); @@ -277,7 +255,6 @@ impl SpankbangProvider { let vid = html.split("\n").collect::>(); if vid.len() > 200 { - println!("Video item has too many lines: {}", vid.len()); return Err("Video item has too many lines".into()); } // for (index ,line) in vid.iter().enumerate() { @@ -303,13 +280,13 @@ impl SpankbangProvider { // else{ // preview = preview_line.split("data-src=\"").collect::>()[1].split("\"").collect::>()[0].to_string(); // } - let duration_str = vid.iter().find(|s| s.contains("")).unwrap().split("").collect::>()[1].split("m<").collect::>()[0]; + let duration_str = vid[64].split("m").collect::>()[0]; let duration: u32 = duration_str.parse::().unwrap_or(0) * 60; - let view_and_rating_str: Vec<&str> = vid.iter().copied().filter(|s| s.contains("")).collect(); - let views_str = view_and_rating_str[0].split(">").collect::>()[1].split("K<").collect::>()[0]; - let views = (views_str.parse::().unwrap_or(0.0) * 1000.0) as u32; - let rate_str = view_and_rating_str[1].split(">").collect::>()[1].split("%<").collect::>()[0]; - let rating = rate_str.parse::().unwrap_or(0.0); + // let view_and_rating_str: Vec<&str> = vid.iter().copied().filter(|s| s.contains("")).collect(); + // let views_str = view_and_rating_str[0].split(">").collect::>()[1].split("K<").collect::>()[0]; + // let views = (views_str.parse::().unwrap_or(0.0) * 1000.0) as u32; + // let rate_str = view_and_rating_str[1].split(">").collect::>()[1].split("%<").collect::>()[0]; + // let rating = rate_str.parse::().unwrap_or(0.0); let url_part = vid.iter().find(|s| s.contains(">()[1].split("\"").collect::>()[0]; let url = match self.get_video_url(self.url.clone() + url_part, client, cookies, pool).await { Ok(video_url) => video_url, @@ -332,8 +309,8 @@ impl SpankbangProvider { }; let video_item = VideoItem::new(id, title, url.clone().to_string(), "spankbang".to_string(), thumb, duration) - .views(views) - .rating(rating) + // .views(views) + // .rating(rating) // .formats(vec![format]) // .preview(preview) ; diff --git a/src/util/flaresolverr.rs b/src/util/flaresolverr.rs index 7169f40..29ba7d2 100644 --- a/src/util/flaresolverr.rs +++ b/src/util/flaresolverr.rs @@ -1,7 +1,8 @@ use std::collections::HashMap; -use reqwest::{Client, Proxy}; use serde_json::json; +use wreq::Client; +use wreq_util::Emulation; #[derive(serde::Serialize, serde::Deserialize, Debug)] pub struct FlareSolverrRequest { @@ -77,11 +78,9 @@ impl Flaresolverr { &self, request: FlareSolverrRequest, ) -> Result> { - let client = Client::builder() - .proxy(Proxy::https("http://192.168.0.101:8080").unwrap()) - .proxy(Proxy::http("http://192.168.0.101:8080").unwrap()) - .danger_accept_invalid_certs(true) - .build()?; + let client = Client::builder() + .emulation(Emulation::Firefox136) + .build()?; let response = client .post(&self.url)