mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 21:42:34 +00:00
dav: Fix Destination header percent decoding
This commit is contained in:
3
Cargo.lock
generated
3
Cargo.lock
generated
@@ -1625,10 +1625,11 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "matchit-serde"
|
name = "matchit-serde"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"derive_more",
|
"derive_more",
|
||||||
"matchit",
|
"matchit",
|
||||||
|
"percent-encoding",
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ reqwest = { version = "0.12", features = [
|
|||||||
], default-features = false }
|
], default-features = false }
|
||||||
openidconnect = "4.0"
|
openidconnect = "4.0"
|
||||||
clap = { version = "4.5", features = ["derive", "env"] }
|
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]
|
[dependencies]
|
||||||
rustical_store = { workspace = true }
|
rustical_store = { workspace = true }
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ pub(crate) async fn axum_route_copy<R: ResourceService>(
|
|||||||
let mut router = matchit::Router::new();
|
let mut router = matchit::Router::new();
|
||||||
router.insert(matched_path.as_str(), ()).unwrap();
|
router.insert(matched_path.as_str(), ()).unwrap();
|
||||||
if let Ok(matchit::Match { params, .. }) = router.at(destination) {
|
if let Ok(matchit::Match { params, .. }) = router.at(destination) {
|
||||||
let params: Vec<(&str, &str)> = params.iter().collect();
|
let params =
|
||||||
let params = matchit_serde::Params(¶ms);
|
matchit_serde::Params::try_from(¶ms).map_err(|_| crate::Error::Forbidden)?;
|
||||||
let dest_path = R::PathComponents::deserialize(&ParamsDeserializer::new(params))
|
let dest_path = R::PathComponents::deserialize(&ParamsDeserializer::new(params))
|
||||||
.map_err(|_| crate::Error::Forbidden)?;
|
.map_err(|_| crate::Error::Forbidden)?;
|
||||||
|
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ pub(crate) async fn axum_route_move<R: ResourceService>(
|
|||||||
let mut router = matchit::Router::new();
|
let mut router = matchit::Router::new();
|
||||||
router.insert(matched_path.as_str(), ()).unwrap();
|
router.insert(matched_path.as_str(), ()).unwrap();
|
||||||
if let Ok(matchit::Match { params, .. }) = router.at(destination) {
|
if let Ok(matchit::Match { params, .. }) = router.at(destination) {
|
||||||
let params: Vec<(&str, &str)> = params.iter().collect();
|
let params =
|
||||||
let params = matchit_serde::Params(¶ms);
|
matchit_serde::Params::try_from(¶ms).map_err(|_| crate::Error::Forbidden)?;
|
||||||
let dest_path = R::PathComponents::deserialize(&ParamsDeserializer::new(params))
|
let dest_path = R::PathComponents::deserialize(&ParamsDeserializer::new(params))
|
||||||
.map_err(|_| crate::Error::Forbidden)?;
|
.map_err(|_| crate::Error::Forbidden)?;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user