use crate::models::{Proxy, HTTP_DEFAULT_GROUP};
use crate::utils::url::url_decode;
use url::Url;
pub fn explode_http(link: &str, node: &mut Proxy) -> bool {
let url_str = if link.contains("://") {
link.to_string()
} else {
format!("http://_dummy_host_/?{}", link)
};
let url = match Url::parse(&url_str) {
Ok(u) => u,
Err(_) => return false,
};
let mut server = String::new();
let mut port = String::new();
let mut username = String::new();
let mut password = String::new();
let mut remarks = String::new();
let mut group = String::new();
for (key, value) in url.query_pairs() {
match key.as_ref() {
"server" => server = url_decode(&value),
"port" => port = url_decode(&value),
"user" => username = url_decode(&value),
"pass" => password = url_decode(&value),
"remarks" => remarks = url_decode(&value),
"group" => group = url_decode(&value),
_ => {}
}
}
let group = if group.is_empty() {
HTTP_DEFAULT_GROUP
} else {
&group
};
let remarks = if remarks.is_empty() {
format!("{}:{}", server, port)
} else {
remarks
};
if port == "0" {
return false;
}
let is_https = link.contains("/https");
let port_num = match port.parse::<u16>() {
Ok(p) => p,
Err(_) => return false,
};
*node = Proxy::http_construct(
group, &remarks, &server, port_num, &username, &password, is_https, None, None, None, "",
);
true
}