Skip to content

Commit 35bbf49

Browse files
authored
Merge pull request #5 from SpeedSX/improvements
Improvements
2 parents 980c06f + ce778a3 commit 35bbf49

8 files changed

Lines changed: 119 additions & 68 deletions

File tree

Cargo.lock

Lines changed: 28 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ uuid = { version = "^1.0", features = ["v4"] }
2020
chrono = { version = "^0.4", features = ["serde"] }
2121
colored = "^3.0"
2222
indicatif = "^0.18"
23-
windows-sys = { version = "0.61.0", features = ["Win32_Foundation", "Win32_System_Console"] }
23+
windows-sys = { version = "0.61.1", features = ["Win32_Foundation", "Win32_System_Console"] }
2424
anyhow = "^1.0"
2525
toml = "^0.9"
2626
url = "^2.4"

config.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ default_interval = 3
1212
# Display settings
1313
show_headers_by_default = false
1414
show_full_body_by_default = false
15+
body_preview_length = 80

src/client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ impl WebhookClient {
2424
}
2525

2626
pub async fn get_requests(&self, token: &str, count: u32) -> Result<Vec<WebhookRequest>> {
27-
let url = format!("{}/{}/log/{}", self.base_url, token, count);
27+
let url = Config::join_url_segments(&self.base_url, &[token, "log", &count.to_string()]);
2828

2929
let response = self
3030
.client

src/commands.rs

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@ use uuid::Uuid;
88
use crate::client::WebhookClient;
99
use crate::config::Config;
1010
use crate::display::{
11-
print_full_request_body, print_request_body, print_request_details, print_request_headers,
12-
print_request_summary,
11+
print_full_request_body, print_request_details, print_request_headers, print_request_summary,
1312
};
1413

1514
pub async fn generate_token(config: &Config) -> Result<()> {
1615
let token = Uuid::new_v4();
17-
let webhook_url = format!("{}/{}", config.get_base_url(), token);
16+
let webhook_url = Config::join_url_segments(config.get_base_url(), &[&token.to_string()]);
1817

1918
println!("{}", "New webhook token generated!".bright_green().bold());
2019
println!();
@@ -37,8 +36,10 @@ pub async fn generate_token(config: &Config) -> Result<()> {
3736
Ok(())
3837
}
3938

39+
#[allow(clippy::too_many_arguments)]
4040
pub async fn monitor_requests(
4141
client: &WebhookClient,
42+
config: &Config,
4243
token: &str,
4344
initial_count: u32,
4445
interval: u64,
@@ -67,7 +68,7 @@ pub async fn monitor_requests(
6768
.into_iter()
6869
.filter(|req| {
6970
method_filter.is_none_or(|method| {
70-
req.message_object.method.to_lowercase() == method.to_lowercase()
71+
req.message_object.method.eq_ignore_ascii_case(method)
7172
})
7273
})
7374
.collect();
@@ -85,8 +86,13 @@ pub async fn monitor_requests(
8586
"Found".bright_blue(),
8687
filtered_requests.len()
8788
);
88-
for request in &filtered_requests {
89-
print_request_summary(request);
89+
// Reverse the order so latest requests appear at the end
90+
for request in filtered_requests.iter().rev() {
91+
print_request_summary(
92+
request,
93+
!full_body,
94+
config.get_body_preview_length(),
95+
); // Don't show body preview in full body mode
9096
if show_headers {
9197
print_request_headers(request);
9298
}
@@ -106,14 +112,16 @@ pub async fn monitor_requests(
106112
.collect();
107113
for request in &new_requests {
108114
println!("{}", "NEW REQUEST".bright_green().bold());
109-
print_request_summary(request);
115+
print_request_summary(
116+
request,
117+
!full_body,
118+
config.get_body_preview_length(),
119+
); // Don't show body preview in full body mode
110120
if show_headers {
111121
print_request_headers(request);
112122
}
113123
if full_body {
114124
print_full_request_body(request);
115-
} else {
116-
print_request_body(request);
117125
}
118126
println!("{}", "─".repeat(80).bright_black());
119127
last_seen_ids.insert(request.id.clone());
@@ -131,6 +139,7 @@ pub async fn monitor_requests(
131139

132140
pub async fn show_logs(
133141
client: &WebhookClient,
142+
config: &Config,
134143
token: &str,
135144
count: u32,
136145
method_filter: Option<&str>,
@@ -150,9 +159,8 @@ pub async fn show_logs(
150159
let filtered_requests: Vec<_> = requests
151160
.into_iter()
152161
.filter(|req| {
153-
method_filter.is_none_or(|method| {
154-
req.message_object.method.to_lowercase() == method.to_lowercase()
155-
})
162+
method_filter
163+
.is_none_or(|method| req.message_object.method.eq_ignore_ascii_case(method))
156164
})
157165
.collect();
158166

@@ -176,8 +184,9 @@ pub async fn show_logs(
176184
}
177185

178186
println!("{}", "─".repeat(80).bright_black());
179-
for request in &filtered_requests {
180-
print_request_summary(request);
187+
// Reverse the order so latest requests appear at the end
188+
for request in filtered_requests.iter().rev() {
189+
print_request_summary(request, !full_body, config.get_body_preview_length()); // Don't show body preview in full body mode
181190
if show_headers {
182191
print_request_headers(request);
183192
}

src/config.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ pub struct WebhookConfig {
1515
pub default_interval: u64,
1616
pub show_headers_by_default: bool,
1717
pub show_full_body_by_default: bool,
18+
#[serde(default = "WebhookConfig::default_body_preview_length")]
19+
pub body_preview_length: usize,
20+
}
21+
22+
impl WebhookConfig {
23+
fn default_body_preview_length() -> usize {
24+
80
25+
}
1826
}
1927

2028
impl Config {
@@ -42,6 +50,7 @@ impl Config {
4250
default_interval: 3,
4351
show_headers_by_default: false,
4452
show_full_body_by_default: false,
53+
body_preview_length: WebhookConfig::default_body_preview_length(),
4554
},
4655
};
4756

@@ -53,7 +62,31 @@ impl Config {
5362
Ok(default_config)
5463
}
5564

65+
/// Normalize a base URL by removing trailing slash
66+
fn normalize_base_url(url: &str) -> &str {
67+
url.trim_end_matches('/')
68+
}
69+
70+
/// Join URL segments properly without creating double slashes
71+
pub fn join_url_segments(base: &str, segments: &[&str]) -> String {
72+
let normalized_base = Self::normalize_base_url(base);
73+
let mut url = normalized_base.to_string();
74+
75+
for segment in segments {
76+
if !segment.is_empty() {
77+
url.push('/');
78+
url.push_str(segment);
79+
}
80+
}
81+
82+
url
83+
}
84+
5685
pub fn get_base_url(&self) -> &str {
5786
&self.webhook.base_url
5887
}
88+
89+
pub fn get_body_preview_length(&self) -> usize {
90+
self.webhook.body_preview_length
91+
}
5992
}

0 commit comments

Comments
 (0)