From 62927825d56c0af7e3cc58e629b10840e493ca63 Mon Sep 17 00:00:00 2001 From: Warren Date: Sat, 20 Jun 2026 01:14:55 +0800 Subject: [PATCH] feat(web): Add WebDAV endpoint to web server (Port 11438) --- data/auth.sqlite | Bin 73728 -> 73728 bytes markbase-core/src/server.rs | 37 +++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/data/auth.sqlite b/data/auth.sqlite index 6797d40a70ea400dd2b7d49eb5586a42c305f702..09e7041c9839ca2fc0b12bdf8d20d4632baf3332 100644 GIT binary patch delta 430 zcmZoTz|wGlWr8%L-$WT_M!$^-?J|rmlMhNMOy-ci!&dR6iKE|b^D9|4Mj*SfuHSX? zH@QDd6;C#Qk$=uFd6bt~mMJ$sH#M)MsFM8{C$lJ1N@{LC`;pCG^gr+m9A#zZWMV(Y zz`z1#07dPwiu(We=QCwM0$iIJ3z!v{O*!Q!vmZ$2;B4YdfLGmV-&&bh6=T z5nj`ZC(OmA$;qk3#quT?BF0dWg>W@S7$Sxsk||x;WMbdN zz`z1#07dPwiu(We=QCtL0$iIJ3z!v{4LKK2W*&l#J?0F|wzUAJ$) -> anyhow::Result<()> { } }); + // WebDAV handler creation (Phase 20) + let webdav_user = "demo"; + let webdav_home = std::path::PathBuf::from("/Users/accusys/momentry/var/sftpgo/data").join(webdav_user); + + let webdav_vfs = Box::new(crate::vfs::local_fs::LocalFs::new()); + let webdav_fs = crate::webdav::VfsDavFs::new( + webdav_vfs, + webdav_home, + None, // upload_hook + webdav_user.to_string(), + ); + + let webdav_handler = DavHandler::builder() + .filesystem(webdav_fs) + .locksystem(FakeLs::new()) + .strip_prefix("/webdav") + .build_handler(); + + log::info!("WebDAV handler created for user: {}", webdav_user); + let app = Router::new() .route("/", get(root_handler)) .route("/display", post(display_handler)) @@ -234,6 +256,11 @@ pub async fn run(port: u16, file: Option) -> anyhow::Result<()> { .route("/files", get(|| async { Html(include_str!("file_list.html")) })) .route("/products", get(|| async { Html(include_str!("product_manager.html")) })) .route("/downloads", get(|| async { Html(include_str!("category_view.html")) })) + // WebDAV API endpoints (Phase 20) + .route("/webdav", any(handle_webdav)) + .route("/webdav/", any(handle_webdav)) + .route("/webdav/*path", any(handle_webdav)) + .layer(Extension(webdav_handler)) .layer(DefaultBodyLimit::disable()) .with_state(state); @@ -2418,3 +2445,11 @@ async fn search_files_handler(Query(query): Query) -> impl IntoResp .into_response(), } } + +// WebDAV handler (Phase 20) +async fn handle_webdav( + Extension(dav): Extension, + req: axum::extract::Request, +) -> impl IntoResponse { + dav.handle(req).await +}