dav: Fix Destination header percent decoding

This commit is contained in:
Lennart
2025-06-14 16:49:34 +02:00
parent 829d4a4385
commit 0c48507f0c
4 changed files with 7 additions and 6 deletions

3
Cargo.lock generated
View File

@@ -1625,10 +1625,11 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
[[package]]
name = "matchit-serde"
version = "0.1.0"
source = "git+https://github.com/lennart-k/matchit-serde?rev=a6efbcee#a6efbcee66deb95e2a1dad5bf770ab457ce4f3aa"
source = "git+https://github.com/lennart-k/matchit-serde?rev=f0591d13#f0591d139ea1c88fa4ee397f3fcb4225fad4c6dc"
dependencies = [
"derive_more",
"matchit",
"percent-encoding",
"serde",
"thiserror 2.0.12",
]

View File

@@ -134,7 +134,7 @@ reqwest = { version = "0.12", features = [
], default-features = false }
openidconnect = "4.0"
clap = { version = "4.5", features = ["derive", "env"] }
matchit-serde = { git = "https://github.com/lennart-k/matchit-serde", rev = "a6efbcee" }
matchit-serde = { git = "https://github.com/lennart-k/matchit-serde", rev = "f0591d13" }
[dependencies]
rustical_store = { workspace = true }

View File

@@ -33,8 +33,8 @@ pub(crate) async fn axum_route_copy<R: ResourceService>(
let mut router = matchit::Router::new();
router.insert(matched_path.as_str(), ()).unwrap();
if let Ok(matchit::Match { params, .. }) = router.at(destination) {
let params: Vec<(&str, &str)> = params.iter().collect();
let params = matchit_serde::Params(&params);
let params =
matchit_serde::Params::try_from(&params).map_err(|_| crate::Error::Forbidden)?;
let dest_path = R::PathComponents::deserialize(&ParamsDeserializer::new(params))
.map_err(|_| crate::Error::Forbidden)?;

View File

@@ -33,8 +33,8 @@ pub(crate) async fn axum_route_move<R: ResourceService>(
let mut router = matchit::Router::new();
router.insert(matched_path.as_str(), ()).unwrap();
if let Ok(matchit::Match { params, .. }) = router.at(destination) {
let params: Vec<(&str, &str)> = params.iter().collect();
let params = matchit_serde::Params(&params);
let params =
matchit_serde::Params::try_from(&params).map_err(|_| crate::Error::Forbidden)?;
let dest_path = R::PathComponents::deserialize(&ParamsDeserializer::new(params))
.map_err(|_| crate::Error::Forbidden)?;