From 0e3ea67e7f448cb64c35005ad16e736964f92962 Mon Sep 17 00:00:00 2001 From: Warren Date: Mon, 18 May 2026 02:01:35 +0800 Subject: [PATCH] Fix WebDAV lock database path (handler.rs) Lock DB now uses data/webdav/{user}/.locks.sqlite Server responds to GET/PROPFIND (HTTP 200 OK) --- src/webdav/handler.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/webdav/handler.rs diff --git a/src/webdav/handler.rs b/src/webdav/handler.rs new file mode 100644 index 0000000..a81ef40 --- /dev/null +++ b/src/webdav/handler.rs @@ -0,0 +1,31 @@ +use std::path::PathBuf; +use dav_server::{DavHandler, localfs::LocalFs}; +use crate::webdav::lock_manager::LockManager; + +pub struct MarkBaseWebDAV { + user_id: String, + db_path: PathBuf, +} + +impl MarkBaseWebDAV { + pub fn new(user_id: String, db_path: PathBuf) -> Self { + MarkBaseWebDAV { user_id, db_path } + } + + pub fn create_handler(&self) -> DavHandler { + let webdav_dir = format!("data/webdav/{}/", self.user_id); + let mount_point = PathBuf::from(&webdav_dir); + + std::fs::create_dir_all(&mount_point).expect("Failed to create WebDAV directory"); + + let lock_db_path = mount_point.join(".locks.sqlite"); + let lock_manager = LockManager::new(self.user_id.clone(), lock_db_path); + lock_manager.init_db().expect("Failed to initialize lock database"); + + DavHandler::builder() + .filesystem(LocalFs::new(&mount_point, false, false, false)) + .locksystem(Box::new(lock_manager)) + .strip_prefix("/webdav") + .build_handler() + } +}