From 82a5942af7708e53c4ca493ec6961e9a45c0cd88 Mon Sep 17 00:00:00 2001 From: Keivan-sf Date: Mon, 28 Jul 2025 18:06:31 +0330 Subject: [PATCH 1/6] fix: decode vmess name when not presented as base64 --- src/parser/vmess/data.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser/vmess/data.rs b/src/parser/vmess/data.rs index 4f579fe..22e68f7 100644 --- a/src/parser/vmess/data.rs +++ b/src/parser/vmess/data.rs @@ -76,7 +76,7 @@ fn get_raw_data_from_uri(data: &str) -> RawData { let query: Vec<(&str, &str)> = querystring::querify(raw_query); return RawData { - remarks: String::from(name), + remarks: url_decode(Some(String::from(name))).unwrap_or(String::from("")), uuid: Some(parsed_address.uuid), port: Some(parsed_address.port), address: Some(parsed_address.address), From 1dfb45412f22e20fdb9cd25a31cd2b46399168c4 Mon Sep 17 00:00:00 2001 From: Keivan-sf Date: Mon, 28 Jul 2025 18:09:14 +0330 Subject: [PATCH 2/6] feat: get config metadata This will replace --get-name add provide both name and protocol in a single json object --- src/config_models/mod.rs | 7 +++++++ src/main.rs | 12 ++++++------ src/parser/mod.rs | 17 +++++++++++------ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/config_models/mod.rs b/src/config_models/mod.rs index a836175..9e37177 100644 --- a/src/config_models/mod.rs +++ b/src/config_models/mod.rs @@ -265,3 +265,10 @@ pub struct RawData { pub server_method: Option, pub username: Option, } + +#[derive(Serialize, Deserialize)] +#[allow(non_snake_case)] +pub struct ConfigMetaData { + pub name: String, + pub protocol: String, +} diff --git a/src/main.rs b/src/main.rs index abfc3f4..986d3a2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,9 +28,9 @@ fn main() { .value_parser(value_parser!(u16)), ) .arg( - Arg::new("get_name") - .long("get-name") - .help("Only print the config name") + Arg::new("get_metadata") + .long("get-metadata") + .help("Only print config meta data") .action(clap::ArgAction::SetTrue), ) .get_matches(); @@ -38,10 +38,10 @@ fn main() { let uri = matches.get_one::("uri").unwrap(); let socksport = matches.get_one::("socksport").copied(); let httpport = matches.get_one::("httpport").copied(); - let get_name = matches.get_flag("get_name"); + let get_metadata = matches.get_flag("get_metadata"); - if get_name { - print!("{}", parser::get_name(uri)); + if get_metadata { + print!("{}", parser::get_metadata(uri)); return; } diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 4ac9d9c..67653bd 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -1,7 +1,7 @@ use crate::config_models::{ - self, GRPCSettings, KCPSettings, NonHeaderObject, Outbound, OutboundSettings, QuicSettings, - RawData, RealitySettings, StreamSettings, TCPHeader, TCPSettings, TlsSettings, WsSettings, - XHTTPSettings, + self, ConfigMetaData, GRPCSettings, KCPSettings, NonHeaderObject, Outbound, OutboundSettings, + QuicSettings, RawData, RealitySettings, StreamSettings, TCPHeader, TCPSettings, TlsSettings, + WsSettings, XHTTPSettings, }; use crate::utils::{inbound_generator, parse_raw_json}; @@ -12,9 +12,14 @@ mod uri_identifier; mod vless; mod vmess; -pub fn get_name(uri: &str) -> String { - let (_, data, _) = get_uri_data(uri); - return data.remarks; +pub fn get_metadata(uri: &str) -> String { + let (protocol, data, _) = get_uri_data(uri); + let meta_data = ConfigMetaData { + name: data.remarks, + protocol, + }; + let serialized = serde_json::to_string(&meta_data).unwrap(); + return serialized; } pub fn create_json_config(uri: &str, socks_port: Option, http_port: Option) -> String { From 0577205c2d90a2aeb4d064a086dff0aa66c44acc Mon Sep 17 00:00:00 2001 From: Keivan-sf Date: Mon, 28 Jul 2025 18:10:22 +0330 Subject: [PATCH 3/6] chore: update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4da3a47..7faed42 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Arguments: Options: --socksport Optional SOCKS5 proxy port for inbound --httpport Optional HTTP proxy port for inbound - --get-name Only print the config name + --get-metadata Only print config meta data -h, --help Print help -V, --version Print version ``` From 3a2a0702e8d912f1315047eb113a408bdb986594 Mon Sep 17 00:00:00 2001 From: Keivan-sf Date: Mon, 28 Jul 2025 18:10:34 +0330 Subject: [PATCH 4/6] chore: remove useless struct file --- src/parser/structs.rs | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 src/parser/structs.rs diff --git a/src/parser/structs.rs b/src/parser/structs.rs deleted file mode 100644 index d6abfc5..0000000 --- a/src/parser/structs.rs +++ /dev/null @@ -1,5 +0,0 @@ - - -pub struct Outboud { - vnext: Option>, -} From b4f53be7eee16e064026001b11027b65b38c2c4b Mon Sep 17 00:00:00 2001 From: Keivan-sf Date: Mon, 28 Jul 2025 18:11:36 +0330 Subject: [PATCH 5/6] chore: remove unused imports --- src/parser/uri_identifier.rs | 2 -- src/parser/vless/mod.rs | 2 +- src/parser/vmess/mod.rs | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/parser/uri_identifier.rs b/src/parser/uri_identifier.rs index d57ae89..941408b 100644 --- a/src/parser/uri_identifier.rs +++ b/src/parser/uri_identifier.rs @@ -1,5 +1,3 @@ -use regex::Regex; - pub enum Protocols { Vmess, Vless, diff --git a/src/parser/vless/mod.rs b/src/parser/vless/mod.rs index 9a2d18d..3fbaae6 100644 --- a/src/parser/vless/mod.rs +++ b/src/parser/vless/mod.rs @@ -1,6 +1,6 @@ pub mod data; mod models; -use crate::{config_models::*, utils::parse_raw_json}; +use crate::config_models::*; pub fn create_outbound_settings(data: &RawData) -> OutboundSettings { return OutboundSettings::Vless(VlessOutboundSettings { diff --git a/src/parser/vmess/mod.rs b/src/parser/vmess/mod.rs index 63ae87e..7845b4b 100644 --- a/src/parser/vmess/mod.rs +++ b/src/parser/vmess/mod.rs @@ -1,6 +1,6 @@ pub mod data; mod models; -use crate::{config_models::*, utils::parse_raw_json}; +use crate::config_models::*; pub fn create_outbound_settings(data: &RawData) -> OutboundSettings { return OutboundSettings::Vmess(VmessOutboundSettings { From f526588ac65261da2415cb04e9e75d02471f2ae9 Mon Sep 17 00:00:00 2001 From: Keivan-sf Date: Mon, 28 Jul 2025 18:12:48 +0330 Subject: [PATCH 6/6] chore: bump version to 0.3.0 --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/main.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 748105d..76692c9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -279,7 +279,7 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "v2parser" -version = "0.2.0" +version = "0.3.0" dependencies = [ "base64", "clap", diff --git a/Cargo.toml b/Cargo.toml index 999d279..c688a96 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "v2parser" -version = "0.2.0" +version = "0.3.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/main.rs b/src/main.rs index 986d3a2..5387280 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,7 @@ pub mod utils; fn main() { let matches = Command::new("v2parser") - .version("0.2.0") + .version("0.3.0") .about("Parses V2ray URI and generates JSON config for xray") .arg( Arg::new("uri")