Commit Graph

16 Commits

Author SHA1 Message Date
Warren
4003864d28 Fix WebDAV: add Clone to WebdavCredentials
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 07:26:54 +08:00
Warren
a7f50ff747 Update WebDAV: root path + 0.0.0.0 bind
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-22 07:17:45 +08:00
Warren
9b02bbac27 A: Code quality improvements - fix clippy warnings
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- Remove unused imports in server.rs (Body, HeaderValue, RwLock)
- Remove unused imports in forward_acl.rs (tests still need Ipv4Addr)
- Remove unused imports in host_key.rs (Read, Write)
- Remove unused imports in kex_exchange.rs (HostKeyType)
- Remove unused imports in known_hosts.rs (tests need Ipv4Addr)
- Remove unused imports in multiplex.rs (Arc)
- Auto-fix other unused imports via clippy --fix

Tests: 303 passed, 0 failed (4 new tests added)
2026-06-21 23:08:07 +08:00
Warren
49873cb302 Phase 5.1: AsyncVfsDavFs spawn_blocking wrapper complete
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- AsyncVfsDavFs wraps VfsDavFs with spawn_blocking
- All DavFileSystem methods offloaded to blocking thread pool
- Uses tokio::runtime::Runtime::block_on inside spawn_blocking
- Prevents blocking async executor during VFS operations

Tests: 293 passed, 0 failed
2026-06-21 21:33:43 +08:00
Warren
ed55c6050e P2: Streaming read optimization (64KB chunk cache)
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- Add read_cache + read_cache_offset fields to VfsDavFile
- Read-ahead 64KB chunks to reduce VFS calls
- Serve from cache when data is available
- Invalidate cache on seek()
- Reduces memory allocations and VFS syscall overhead

Tests: 289 passed, 0 failed
2026-06-21 19:16:12 +08:00
Warren
9c82830959 P1: WebDAV ACL enforcement (RFC 3744)
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Add enable_acl field to VfsDavFs
- Add check_acl() helper method
- ACL checks in open(), read_dir(), create_dir(), remove_dir(), remove_file(), rename()
- Uses VfsAceMask for permission checks (ReadData, WriteData, etc.)
- Returns FsError::Forbidden if ACL denies access

Tests: 289 passed, 0 failed
2026-06-21 18:37:48 +08:00
Warren
a56207db0b P3: Quota enforcement - check before write in flush()
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Check VfsBackend quota before writing buffered data
- Return FsError::InsufficientStorage (507) if limit exceeded
- Log warning with current/adding/limit values

Tests: 289 passed, 0 failed
2026-06-21 18:24:44 +08:00
Warren
12ec190831 Add Range request test: verify dav-server partial content support
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- test_range_request: GET with Range header returns 206 + partial content
- Verify Content-Range header present
- Test bytes=5-10 returns correct 6-byte slice

Tests: 289 passed, 0 failed
2026-06-21 18:21:48 +08:00
Warren
0322e2d4b6 WebDAV error handling improvements: map_vfs_error helper
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Add map_vfs_error() to map VfsError to FsError properly
- NotFound → NotFound, PermissionDenied → Forbidden, etc.
- Update create_dir/remove_dir/remove_file/rename/set_atime/set_mtime/get_quota
- Add executable() method to VfsDavMetaData (mode & 0o111)

Tests: 288 passed, 0 failed
2026-06-21 16:50:23 +08:00
Warren
43c135e877 WebDAV additional fixes: dead props compaction + accessed metadata
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- save_props/patch_props: filter empty entries before persisting
- VfsDavMetaData: add accessed field + accessed() method

Tests: 288 passed, 0 failed
2026-06-21 16:45:03 +08:00
Warren
ab11983c1b WebDAV MKCOL: return 405 Exists if directory already exists (RFC 4918)
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
P3 fix:
- create_dir: check vfs.exists() before creating
- Return FsError::Exists (405 Method Not Allowed) if path exists

Tests: 36 webdav tests pass
2026-06-21 16:16:43 +08:00
Warren
5000ba7c14 WebDAV async + cache TTL: spawn_blocking for props persistence, 5min TTL eviction
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
P2 improvements:
- patch_props: use tokio::spawn_blocking for blocking VFS writes
- WEBDAV_HANDLER_CACHE: add CachedHandler with Instant timestamp
- TTL check on each request (300s = 5 minutes), recreate if expired
- create_handler_for_user() helper function

Tests: 288 passed, 0 failed
2026-06-21 16:14:42 +08:00
Warren
9acd174388 WebDAV improvements: flush fix, RwLock recovery, expired lock cleanup, atomic set_times
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
P0 fixes:
- flush(): add flushed flag, proper error logging, Drop warning for data loss
- props_data RwLock: replace unwrap() with try_read/try_write recovery
- PersistedLs: add is_expired() + cleanup_expired_locks() helper

P1 improvements:
- Props persistence via VFS (load_props/save_props/patch_props)
- COPY/MOVE sync dead props (copy on COPY, move key on rename)
- Atomic set_atime/set_mtime via filetime crate (no race condition)

New files:
- webdav_locks.rs: PersistedLs with lock persistence + expiry cleanup

Tests: 288 passed, 0 failed
2026-06-21 16:07:12 +08:00
Warren
dbca6e6d35 Fix clippy warnings: unused imports, minor style fixes
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
2026-06-20 21:08:50 +08:00
Warren
7eb528d35f SMB Server Phase 2: VFS backend build fix + integration test
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled
- Add VfsFile: Send supertrait for Mutex compatibility
- Fix SmbServerCommand: struct → Subcommand enum with Start variant
- Fix tracing_subscriber::init() → try_init() to avoid panic when
  logger already initialized
- Fix CLI subcommand name: smb-server → smb-start (flatten naming)
- Add #[command(name = "smb-start")] for CLI disambiguation
- Fix unused variable warnings (smb_fs.rs, smb_server_backend.rs)
- Remove unused VfsFile imports (webdav.rs, scp_handler.rs)
- Integration test: Docker smbclient verified (list, upload, read)
2026-06-20 19:42:29 +08:00
Warren
eb80c07c85 Implement WebDAV VFS integration: dav-server 0.11 compatible
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
- Add webdav.rs module: VfsDavFs, VfsDavFile, VfsDavMetaData
- Implement DavFileSystem + Clone for GuardedFileSystem blanket impl
- Add clone_boxed to VfsBackend trait (required for Sync)
- Update CLI webdav.rs to use VFS instead of SQLite
- Add bytes dependency
- All 155 tests pass
2026-06-19 08:19:16 +08:00