Fix WebDAV: middleware use extensions().get() to not consume
This commit is contained in:
@@ -71,10 +71,12 @@ async fn run_webdav_server(
|
||||
let dav_handler = crate::webdav::create_webdav_handler(vfs, home_dir.clone(), upload_hook, user.clone());
|
||||
|
||||
async fn webdav_auth_middleware(
|
||||
Extension(expected): Extension<crate::webdav::WebdavCredentials>,
|
||||
req: Request,
|
||||
next: middleware::Next,
|
||||
) -> impl IntoResponse {
|
||||
// Get credentials from extensions (without consuming)
|
||||
let expected = req.extensions().get::<crate::webdav::WebdavCredentials>().cloned();
|
||||
|
||||
let auth = req
|
||||
.headers()
|
||||
.get("Authorization")
|
||||
@@ -90,9 +92,12 @@ async fn run_webdav_server(
|
||||
Some((creds[..colon].to_string(), creds[colon + 1..].to_string()))
|
||||
});
|
||||
|
||||
let valid = auth.is_some_and(|(u, p)| {
|
||||
u == expected.username && expected.password.as_ref().is_none_or(|exp| p == *exp)
|
||||
});
|
||||
let valid = match (auth, expected) {
|
||||
(Some((u, p)), Some(exp)) => {
|
||||
u == exp.username && exp.password.as_ref().is_none_or(|exp_p| p == *exp_p)
|
||||
}
|
||||
_ => false,
|
||||
};
|
||||
|
||||
if !valid {
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user