libsubconverter/parser/explodes/
http.rs1use crate::models::{Proxy, HTTP_DEFAULT_GROUP};
2use crate::utils::url::url_decode;
3use url::Url;
4
5pub fn explode_http(link: &str, node: &mut Proxy) -> bool {
8 let url_str = if link.contains("://") {
10 link.to_string()
11 } else {
12 format!("http://_dummy_host_/?{}", link)
13 };
14
15 let url = match Url::parse(&url_str) {
17 Ok(u) => u,
18 Err(_) => return false,
19 };
20
21 let mut server = String::new();
23 let mut port = String::new();
24 let mut username = String::new();
25 let mut password = String::new();
26 let mut remarks = String::new();
27 let mut group = String::new();
28
29 for (key, value) in url.query_pairs() {
31 match key.as_ref() {
32 "server" => server = url_decode(&value),
33 "port" => port = url_decode(&value),
34 "user" => username = url_decode(&value),
35 "pass" => password = url_decode(&value),
36 "remarks" => remarks = url_decode(&value),
37 "group" => group = url_decode(&value),
38 _ => {}
39 }
40 }
41
42 let group = if group.is_empty() {
44 HTTP_DEFAULT_GROUP
45 } else {
46 &group
47 };
48
49 let remarks = if remarks.is_empty() {
51 format!("{}:{}", server, port)
52 } else {
53 remarks
54 };
55
56 if port == "0" {
58 return false;
59 }
60
61 let is_https = link.contains("/https");
63
64 let port_num = match port.parse::<u16>() {
66 Ok(p) => p,
67 Err(_) => return false,
68 };
69
70 *node = Proxy::http_construct(
72 group, &remarks, &server, port_num, &username, &password, is_https, None, None, None, "",
73 );
74
75 true
76}