pub mod datainpulse;
pub mod evomi;
pub mod iproyale;
pub mod webshare;
use iproyale::WhitelistEntry;
use reqwest::Client;
use webshare::ProxyIP;
#[derive(Default, Clone, Debug)]
pub struct IPRoyaleConfiguration {
pub residential_user_hash: String,
pub port: u16,
pub configuration: String,
pub whitelist_entry: Option<WhitelistEntry>,
}
#[derive(Default, Clone, Debug)]
pub struct WebShareConfiguration {
pub whitelist_entry: Option<ProxyIP>,
}
#[derive(Default, Clone, Debug)]
pub struct DatainpulseConfiguration(bool);
#[derive(Default, Clone, Debug)]
pub struct EvomiConfiguration(bool);
#[derive(Default, Clone, Debug)]
pub struct Proxier {
pub iproyale: Option<IPRoyaleConfiguration>,
pub webshare: Option<WebShareConfiguration>,
pub datainpulse: Option<DatainpulseConfiguration>,
pub evomi: Option<EvomiConfiguration>,
pub client: Client,
pub server_ip: String,
}
impl Proxier {
pub fn new(server_ip: &str) -> Proxier {
Proxier {
server_ip: server_ip.into(),
..Default::default()
}
}
pub async fn setup_proxies(
&mut self,
iproyale: Option<IPRoyaleConfiguration>,
webshare: Option<WebShareConfiguration>,
datainpulse: Option<DatainpulseConfiguration>,
evomi: Option<EvomiConfiguration>,
) {
if self.server_ip.is_empty() {
self.server_ip = webshare::get_ip(&self.client).await;
}
self.iproyale = iproyale;
self.webshare = webshare;
self.datainpulse = datainpulse;
self.evomi = evomi;
}
pub async fn whitelist(&mut self) {
self.whitelist_webshare().await;
self.whitelist_datainpulse().await;
self.whitelist_iproyale().await;
self.whitelist_evomi().await;
}
pub async fn whitelist_datainpulse(&mut self) {
if let Some(datainpulse) = self.datainpulse.as_mut() {
datainpulse::create_whitelist_entry(&self.client, &self.server_ip).await;
datainpulse.0 = true;
}
}
pub async fn whitelist_evomi(&mut self) {
if let Some(evomi) = self.evomi.as_mut() {
evomi::setup_proxy(&self.client, &self.server_ip, false).await;
evomi.0 = true;
}
}
pub async fn whitelist_webshare(&mut self) {
if let Some(webshare) = self.webshare.as_mut() {
let proxy_results = webshare::setup_proxy(&self.client, &self.server_ip, false).await;
let _ = webshare.whitelist_entry.insert(proxy_results);
}
}
pub async fn whitelist_iproyale(&mut self) {
if let Some(iproyale) = self.iproyale.as_mut() {
let proxy_results = iproyale::create_whitelist_entry(
&self.client,
&iproyale.residential_user_hash,
&self.server_ip,
iproyale.port,
&iproyale.configuration,
)
.await;
let _ = iproyale.whitelist_entry.insert(proxy_results);
}
}
pub async fn delist(&mut self) {
self.delist_webshare().await;
self.delist_datainpulse().await;
self.delist_iproyale().await;
self.delist_evomi().await;
}
pub async fn delist_datainpulse(&mut self) {
if let Some(_) = self.datainpulse.take() {
datainpulse::delete_whitelist_entry(&self.client, &self.server_ip).await;
}
}
pub async fn delist_evomi(&mut self) {
if let Some(evomi) = self.evomi.as_mut() {
evomi::setup_proxy(&self.client, &self.server_ip, true).await;
evomi.0 = true;
}
}
pub async fn delist_webshare(&mut self) {
if let Some(webshare) = self.webshare.as_mut() {
if let Some(whitelist_entry) = webshare.whitelist_entry.as_mut().take() {
webshare::setup_proxy(&self.client, &whitelist_entry.id.to_string(), true).await;
}
}
}
pub async fn delist_iproyale(&mut self) {
if let Some(iproyale) = self.iproyale.as_mut() {
if let Some(whitelist_entry) = iproyale.whitelist_entry.as_mut().take() {
iproyale::delete_whitelist_entry(
&self.client,
&iproyale.residential_user_hash,
&whitelist_entry.hash,
)
.await
}
}
}
}