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