aboutsummaryrefslogtreecommitdiff
path: root/src/router.rs
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-07-08 05:15:47 +0000
committerFuwn <[email protected]>2025-07-08 05:15:47 +0000
commit22299ccd501324fc348788c65e67e2080c705547 (patch)
treef047076b73899f793cd92a2a56830f1a790b0013 /src/router.rs
parentrefactor(router): Smarter trailing slash clipper (diff)
downloadwindmark-22299ccd501324fc348788c65e67e2080c705547.tar.xz
windmark-22299ccd501324fc348788c65e67e2080c705547.zip
feat(router): Add missing trailing slash corrector
Diffstat (limited to 'src/router.rs')
-rw-r--r--src/router.rs26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/router.rs b/src/router.rs
index a82ea1e..461d698 100644
--- a/src/router.rs
+++ b/src/router.rs
@@ -423,13 +423,25 @@ impl Router {
let mut path = url.path().to_string();
let mut route = self.routes.at(&path);
- if route.is_err()
- && self.options.contains(&RouterOption::TrimTrailingSlashes)
- && path.ends_with('/')
- && path != "/"
- {
- path = path.trim_end_matches('/').to_string();
- route = self.routes.at(&path);
+ if route.is_err() {
+ if self.options.contains(&RouterOption::TrimTrailingSlashes)
+ && path.ends_with('/')
+ && path != "/"
+ {
+ path = path.trim_end_matches('/').to_string();
+ route = self.routes.at(&path);
+ } else if self
+ .options
+ .contains(&RouterOption::AddMissingTrailingSlash)
+ && !path.ends_with('/')
+ {
+ let path_with_slash = format!("{path}/");
+
+ if self.routes.at(&path_with_slash).is_ok() {
+ path = path_with_slash;
+ route = self.routes.at(&path);
+ }
+ }
}
let peer_certificate = stream.ssl().peer_certificate();