Decode necessary query params

#7
This commit is contained in:
Keivan-sf
2025-07-26 16:05:38 +03:30
parent 6f7b9ca06a
commit 714e5afe70

View File

@@ -123,7 +123,7 @@ fn parse_vless_address(raw_data: &str) -> models::VlessAddress {
let parsed = address_wo_slash.parse::<Uri>().unwrap(); let parsed = address_wo_slash.parse::<Uri>().unwrap();
return models::VlessAddress { return models::VlessAddress {
uuid, uuid: url_decode(Some(uuid)).unwrap(),
address: parsed.host().unwrap().to_string(), address: parsed.host().unwrap().to_string(),
port: parsed.port().unwrap().as_u16(), port: parsed.port().unwrap().as_u16(),
}; };
@@ -133,42 +133,38 @@ fn parse_vless_query(raw_query: &str) -> models::VlessQuery {
let query: Vec<(&str, &str)> = querystring::querify(raw_query); let query: Vec<(&str, &str)> = querystring::querify(raw_query);
let a = models::VlessQuery { let a = models::VlessQuery {
alpn: get_parameter_value(&query, "alpn").and_then(|s| { alpn: url_decode(get_parameter_value(&query, "alpn")),
urlencoding::decode(&s) path: url_decode(get_parameter_value(&query, "path")),
.ok() authority: url_decode(get_parameter_value(&query, "authority")),
.map(|decoded| decoded.into_owned()) pbk: url_decode(get_parameter_value(&query, "pbk")),
}),
path: get_parameter_value(&query, "path").and_then(|s| {
urlencoding::decode(&s)
.ok()
.map(|decoded| decoded.into_owned())
}),
authority: get_parameter_value(&query, "authority").and_then(|s| {
urlencoding::decode(&s)
.ok()
.map(|decoded| decoded.into_owned())
}),
pbk: get_parameter_value(&query, "pbk"),
security: get_parameter_value(&query, "security"), security: get_parameter_value(&query, "security"),
sid: get_parameter_value(&query, "sid"), sid: url_decode(get_parameter_value(&query, "sid")),
flow: get_parameter_value(&query, "flow"), flow: get_parameter_value(&query, "flow"),
sni: get_parameter_value(&query, "sni"), sni: get_parameter_value(&query, "sni"),
fp: get_parameter_value(&query, "fp"), fp: url_decode(get_parameter_value(&query, "fp")),
r#type: get_parameter_value(&query, "type"), r#type: get_parameter_value(&query, "type"),
encryption: get_parameter_value(&query, "encryption"), encryption: get_parameter_value(&query, "encryption"),
header_type: get_parameter_value(&query, "headerType"), header_type: get_parameter_value(&query, "headerType"),
host: get_parameter_value(&query, "host"), host: url_decode(get_parameter_value(&query, "host")),
seed: get_parameter_value(&query, "seed"), seed: url_decode(get_parameter_value(&query, "seed")),
quic_security: get_parameter_value(&query, "quicSecurity"), quic_security: get_parameter_value(&query, "quicSecurity"),
key: get_parameter_value(&query, "key"), key: get_parameter_value(&query, "key"),
mode: get_parameter_value(&query, "mode"), mode: url_decode(get_parameter_value(&query, "mode")),
service_name: get_parameter_value(&query, "serviceName"), service_name: url_decode(get_parameter_value(&query, "serviceName")),
slpn: get_parameter_value(&query, "slpn"), slpn: get_parameter_value(&query, "slpn"),
spx: get_parameter_value(&query, "spx"), spx: url_decode(get_parameter_value(&query, "spx")),
}; };
return a; return a;
} }
fn url_decode(value: Option<String>) -> Option<String> {
return value.and_then(|s| {
urlencoding::decode(&s)
.ok()
.map(|decoded| decoded.into_owned())
});
}
fn get_parameter_value(query: &Vec<(&str, &str)>, param: &str) -> Option<String> { fn get_parameter_value(query: &Vec<(&str, &str)>, param: &str) -> Option<String> {
return query return query
.iter() .iter()