switched request module, so no need for burpsuite anymore
This commit is contained in:
@@ -12,8 +12,8 @@ futures = "0.3.31"
|
|||||||
htmlentity = "1.3.2"
|
htmlentity = "1.3.2"
|
||||||
ntex = { version = "2.0", features = ["tokio"] }
|
ntex = { version = "2.0", features = ["tokio"] }
|
||||||
ntex-files = "2.0.0"
|
ntex-files = "2.0.0"
|
||||||
reqwest = { version = "0.12.18", features = ["blocking", "json", "rustls-tls"] }
|
|
||||||
serde = "1.0.219"
|
serde = "1.0.219"
|
||||||
serde_json = "1.0.140"
|
serde_json = "1.0.140"
|
||||||
tokio = "1.45.1"
|
tokio = { version = "1", features = ["full"] }
|
||||||
|
wreq = { version = "5", features = ["full"] }
|
||||||
|
wreq-util = "2"
|
||||||
21
Dockerfile
21
Dockerfile
@@ -1,7 +1,5 @@
|
|||||||
#FROM debian
|
FROM debian
|
||||||
FROM consol/debian-xfce-vnc:latest
|
# FROM consol/debian-xfce-vnc:latest
|
||||||
ENV REFRESHED_AT 2025_06_03
|
|
||||||
|
|
||||||
# Switch to root user to install additional software
|
# Switch to root user to install additional software
|
||||||
USER 0
|
USER 0
|
||||||
|
|
||||||
@@ -30,20 +28,5 @@ RUN apt install -yq libssl-dev \
|
|||||||
sudo \
|
sudo \
|
||||||
&& apt-get clean
|
&& 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
|
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
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
use std::vec;
|
use std::vec;
|
||||||
use std::env;
|
use std::env;
|
||||||
use error_chain::error_chain;
|
use error_chain::error_chain;
|
||||||
use reqwest::{Proxy};
|
|
||||||
use futures::future::join_all;
|
use futures::future::join_all;
|
||||||
|
use wreq::Client;
|
||||||
|
use wreq_util::Emulation;
|
||||||
use crate::db;
|
use crate::db;
|
||||||
use crate::providers::Provider;
|
use crate::providers::Provider;
|
||||||
use crate::util::cache::VideoCache;
|
use crate::util::cache::VideoCache;
|
||||||
@@ -14,7 +14,7 @@ use crate::USER_AGENT; // Make sure Provider trait is imported
|
|||||||
error_chain! {
|
error_chain! {
|
||||||
foreign_links {
|
foreign_links {
|
||||||
Io(std::io::Error);
|
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() {
|
let client = Client::builder()
|
||||||
Ok(burp_url) =>
|
.emulation(Emulation::Firefox136)
|
||||||
reqwest::Client::builder()
|
.build()?;
|
||||||
.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 url = format!("https://h.freeanimehentai.net/api/v8/video?id={}&", hit.slug);
|
let url = format!("https://h.freeanimehentai.net/api/v8/video?id={}&", hit.slug);
|
||||||
let response = client.get(url).send().await?;
|
let response = client.get(url).send().await?;
|
||||||
|
|
||||||
@@ -228,18 +219,9 @@ impl HanimeProvider {
|
|||||||
.search_text(query.clone())
|
.search_text(query.clone())
|
||||||
.order_by(order_by)
|
.order_by(order_by)
|
||||||
.ordering(ordering);
|
.ordering(ordering);
|
||||||
let client = match env::var("BURP_URL").as_deref() {
|
let client = Client::builder()
|
||||||
Ok(burp_url) =>
|
.emulation(Emulation::Firefox136)
|
||||||
reqwest::Client::builder()
|
.build()?;
|
||||||
.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 response = client.post("https://search.htv-services.com/search")
|
let response = client.post("https://search.htv-services.com/search")
|
||||||
.json(&search)
|
.json(&search)
|
||||||
.send().await?;
|
.send().await?;
|
||||||
@@ -288,7 +270,6 @@ impl Provider for HanimeProvider {
|
|||||||
let _ = featured;
|
let _ = featured;
|
||||||
let _ = per_page;
|
let _ = per_page;
|
||||||
let _ = sort;
|
let _ = sort;
|
||||||
println!("Sort: {:?}", sort);
|
|
||||||
let videos: std::result::Result<Vec<VideoItem>, Error> = match query {
|
let videos: std::result::Result<Vec<VideoItem>, Error> = match query {
|
||||||
Some(q) => self.get(cache, pool, page.parse::<u8>().unwrap_or(1), q, sort).await,
|
Some(q) => self.get(cache, pool, page.parse::<u8>().unwrap_or(1), q, sort).await,
|
||||||
None => self.get(cache, pool, page.parse::<u8>().unwrap_or(1), "".to_string(), sort).await,
|
None => self.get(cache, pool, page.parse::<u8>().unwrap_or(1), "".to_string(), sort).await,
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ use std::vec;
|
|||||||
use std::env;
|
use std::env;
|
||||||
use error_chain::error_chain;
|
use error_chain::error_chain;
|
||||||
use htmlentity::entity::{decode, ICodedDataTrait};
|
use htmlentity::entity::{decode, ICodedDataTrait};
|
||||||
use reqwest::{Proxy};
|
|
||||||
use futures::future::join_all;
|
use futures::future::join_all;
|
||||||
|
use wreq::Client;
|
||||||
|
use wreq_util::Emulation;
|
||||||
use crate::db;
|
use crate::db;
|
||||||
use crate::providers::Provider;
|
use crate::providers::Provider;
|
||||||
use crate::util::cache::VideoCache;
|
use crate::util::cache::VideoCache;
|
||||||
@@ -17,7 +17,7 @@ use crate::USER_AGENT; // Make sure Provider trait is imported
|
|||||||
error_chain! {
|
error_chain! {
|
||||||
foreign_links {
|
foreign_links {
|
||||||
Io(std::io::Error);
|
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() {
|
let client = Client::builder()
|
||||||
Ok(burp_url) =>
|
.emulation(Emulation::Firefox136)
|
||||||
reqwest::Client::builder()
|
.build()?;
|
||||||
.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 response = client.get(url.clone()).send().await?;
|
let response = client.get(url.clone()).send().await?;
|
||||||
// print!("Response: {:?}\n", response);
|
// print!("Response: {:?}\n", response);
|
||||||
@@ -141,18 +132,9 @@ impl PerverzijaProvider {
|
|||||||
vec![]
|
vec![]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let client = match env::var("BURP_URL").as_deref() {
|
let client = Client::builder()
|
||||||
Ok(burp_url) =>
|
.emulation(Emulation::Firefox136)
|
||||||
reqwest::Client::builder()
|
.build()?;
|
||||||
.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 response = client.get(url.clone()).send().await?;
|
let response = client.get(url.clone()).send().await?;
|
||||||
if response.status().is_success() {
|
if response.status().is_success() {
|
||||||
@@ -384,18 +366,9 @@ impl PerverzijaProvider {
|
|||||||
drop(conn);
|
drop(conn);
|
||||||
|
|
||||||
|
|
||||||
let client = match env::var("BURP_URL").as_deref() {
|
let client = Client::builder()
|
||||||
Ok(burp_url) =>
|
.emulation(Emulation::Firefox136)
|
||||||
reqwest::Client::builder()
|
.build()?;
|
||||||
.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 response = client.get(lookup_url.clone()).send().await?;
|
let response = client.get(lookup_url.clone()).send().await?;
|
||||||
let text = match response.status().is_success(){
|
let text = match response.status().is_success(){
|
||||||
|
|||||||
@@ -3,28 +3,24 @@ use std::env;
|
|||||||
use error_chain::error_chain;
|
use error_chain::error_chain;
|
||||||
use futures::future::join_all;
|
use futures::future::join_all;
|
||||||
use htmlentity::entity::{decode, ICodedDataTrait};
|
use htmlentity::entity::{decode, ICodedDataTrait};
|
||||||
use ntex::channel::pool;
|
|
||||||
use reqwest::Client;
|
|
||||||
use reqwest::{Proxy};
|
|
||||||
use crate::db;
|
use crate::db;
|
||||||
use crate::providers::Provider;
|
use crate::providers::Provider;
|
||||||
use crate::util::cache::VideoCache;
|
use crate::util::cache::VideoCache;
|
||||||
use crate::util::flaresolverr::{FlareSolverrRequest, Flaresolverr};
|
use crate::util::flaresolverr::{FlareSolverrRequest, Flaresolverr};
|
||||||
use crate::videos::{self, VideoItem};
|
use crate::videos::{VideoItem};
|
||||||
use crate::DbPool;
|
use crate::DbPool;
|
||||||
use crate::USER_AGENT; // Make sure Provider trait is imported
|
use crate::USER_AGENT; // Make sure Provider trait is imported
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::time::Duration;
|
use wreq::Client;
|
||||||
use tokio::time::sleep;
|
use wreq_util::Emulation;
|
||||||
|
|
||||||
error_chain! {
|
error_chain! {
|
||||||
foreign_links {
|
foreign_links {
|
||||||
Io(std::io::Error);
|
Io(std::io::Error);
|
||||||
HttpRequest(reqwest::Error);
|
HttpRequest(wreq::Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct SpankbangProvider {
|
pub struct SpankbangProvider {
|
||||||
url: String,
|
url: String,
|
||||||
@@ -55,18 +51,9 @@ impl SpankbangProvider {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
let client = match env::var("BURP_URL").as_deref() {
|
let client = Client::builder()
|
||||||
Ok(burp_url) =>
|
.emulation(Emulation::Firefox136)
|
||||||
reqwest::Client::builder()
|
.build()?;
|
||||||
.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 response = client.get(url.clone()).send().await?;
|
let response = client.get(url.clone()).send().await?;
|
||||||
let mut cookies_string = String::new();
|
let mut cookies_string = String::new();
|
||||||
@@ -151,18 +138,9 @@ impl SpankbangProvider {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
let client = match env::var("BURP_URL").as_deref() {
|
let client = Client::builder()
|
||||||
Ok(burp_url) =>
|
.emulation(Emulation::Firefox136)
|
||||||
reqwest::Client::builder()
|
.build()?;
|
||||||
.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 response = client.get(url.clone()).send().await?;
|
let response = client.get(url.clone()).send().await?;
|
||||||
let mut cookies_string = String::new();
|
let mut cookies_string = String::new();
|
||||||
@@ -277,7 +255,6 @@ impl SpankbangProvider {
|
|||||||
|
|
||||||
let vid = html.split("\n").collect::<Vec<&str>>();
|
let vid = html.split("\n").collect::<Vec<&str>>();
|
||||||
if vid.len() > 200 {
|
if vid.len() > 200 {
|
||||||
println!("Video item has too many lines: {}", vid.len());
|
|
||||||
return Err("Video item has too many lines".into());
|
return Err("Video item has too many lines".into());
|
||||||
}
|
}
|
||||||
// for (index ,line) in vid.iter().enumerate() {
|
// for (index ,line) in vid.iter().enumerate() {
|
||||||
@@ -303,13 +280,13 @@ impl SpankbangProvider {
|
|||||||
// else{
|
// else{
|
||||||
// preview = preview_line.split("data-src=\"").collect::<Vec<&str>>()[1].split("\"").collect::<Vec<&str>>()[0].to_string();
|
// preview = preview_line.split("data-src=\"").collect::<Vec<&str>>()[1].split("\"").collect::<Vec<&str>>()[0].to_string();
|
||||||
// }
|
// }
|
||||||
let duration_str = vid.iter().find(|s| s.contains("<span class=\"video-badge l\">")).unwrap().split("<span class=\"video-badge l\">").collect::<Vec<&str>>()[1].split("m<").collect::<Vec<&str>>()[0];
|
let duration_str = vid[64].split("m").collect::<Vec<&str>>()[0];
|
||||||
let duration: u32 = duration_str.parse::<u32>().unwrap_or(0) * 60;
|
let duration: u32 = duration_str.parse::<u32>().unwrap_or(0) * 60;
|
||||||
let view_and_rating_str: Vec<&str> = vid.iter().copied().filter(|s| s.contains("<span class=\"md:text-body-md\">")).collect();
|
// let view_and_rating_str: Vec<&str> = vid.iter().copied().filter(|s| s.contains("<span class=\"md:text-body-md\">")).collect();
|
||||||
let views_str = view_and_rating_str[0].split(">").collect::<Vec<&str>>()[1].split("K<").collect::<Vec<&str>>()[0];
|
// let views_str = view_and_rating_str[0].split(">").collect::<Vec<&str>>()[1].split("K<").collect::<Vec<&str>>()[0];
|
||||||
let views = (views_str.parse::<f32>().unwrap_or(0.0) * 1000.0) as u32;
|
// let views = (views_str.parse::<f32>().unwrap_or(0.0) * 1000.0) as u32;
|
||||||
let rate_str = view_and_rating_str[1].split(">").collect::<Vec<&str>>()[1].split("%<").collect::<Vec<&str>>()[0];
|
// let rate_str = view_and_rating_str[1].split(">").collect::<Vec<&str>>()[1].split("%<").collect::<Vec<&str>>()[0];
|
||||||
let rating = rate_str.parse::<f32>().unwrap_or(0.0);
|
// let rating = rate_str.parse::<f32>().unwrap_or(0.0);
|
||||||
let url_part = vid.iter().find(|s| s.contains("<a href=\"/")).unwrap().split("<a href=\"/").collect::<Vec<&str>>()[1].split("\"").collect::<Vec<&str>>()[0];
|
let url_part = vid.iter().find(|s| s.contains("<a href=\"/")).unwrap().split("<a href=\"/").collect::<Vec<&str>>()[1].split("\"").collect::<Vec<&str>>()[0];
|
||||||
let url = match self.get_video_url(self.url.clone() + url_part, client, cookies, pool).await {
|
let url = match self.get_video_url(self.url.clone() + url_part, client, cookies, pool).await {
|
||||||
Ok(video_url) => video_url,
|
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)
|
let video_item = VideoItem::new(id, title, url.clone().to_string(), "spankbang".to_string(), thumb, duration)
|
||||||
.views(views)
|
// .views(views)
|
||||||
.rating(rating)
|
// .rating(rating)
|
||||||
// .formats(vec![format])
|
// .formats(vec![format])
|
||||||
// .preview(preview)
|
// .preview(preview)
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use reqwest::{Client, Proxy};
|
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
use wreq::Client;
|
||||||
|
use wreq_util::Emulation;
|
||||||
|
|
||||||
#[derive(serde::Serialize, serde::Deserialize, Debug)]
|
#[derive(serde::Serialize, serde::Deserialize, Debug)]
|
||||||
pub struct FlareSolverrRequest {
|
pub struct FlareSolverrRequest {
|
||||||
@@ -78,9 +79,7 @@ impl Flaresolverr {
|
|||||||
request: FlareSolverrRequest,
|
request: FlareSolverrRequest,
|
||||||
) -> Result<FlareSolverrResponse, Box<dyn std::error::Error>> {
|
) -> Result<FlareSolverrResponse, Box<dyn std::error::Error>> {
|
||||||
let client = Client::builder()
|
let client = Client::builder()
|
||||||
.proxy(Proxy::https("http://192.168.0.101:8080").unwrap())
|
.emulation(Emulation::Firefox136)
|
||||||
.proxy(Proxy::http("http://192.168.0.101:8080").unwrap())
|
|
||||||
.danger_accept_invalid_certs(true)
|
|
||||||
.build()?;
|
.build()?;
|
||||||
|
|
||||||
let response = client
|
let response = client
|
||||||
|
|||||||
Reference in New Issue
Block a user