Commit Graph
128 Commits
Author SHA1 Message Date
MarSeventh 39ae1a7407 feat: configure image resizing in security settings 2026-07-28 11:54:01 +08:00
MarSeventh 4fdd6be188 fix: harden batch delete request handling 2026-07-23 11:43:33 +08:00
caoyong 65cd72b8b9 feat(manage): add concurrent batch image deletion 2026-07-22 19:59:04 +08:00
MarSeventh 6ef954f877 docs(metadata): add utility comments 2026-06-15 14:36:52 +08:00
MarSeventh 9b6461a272 feat: support custom upload IP query API 2026-06-14 14:45:00 +08:00
MarSeventh 9fb3cf723a fix: fail closed when security config is unavailable 2026-06-09 19:22:31 +08:00
MarSeventh 6e90b6bf3a fix: clamp session max age before KV write 2026-06-09 18:56:44 +08:00
MarSeventh 7e1b3f72f3 fix: match renamed channels from persisted metadata 2026-06-05 11:16:49 +08:00
MarSeventh 82f3b700ab refactor: remove dead metadata url fallbacks 2026-06-03 12:40:30 +08:00
MarSeventh eb84f209ce refactor: simplify metadata helpers 2026-06-03 12:04:58 +08:00
MarSeventh 6caf75f524 refactor: share metadata channel config lookup 2026-06-03 11:59:22 +08:00
MarSeventh e9cb8cbdff refactor: simplify webdav channel config fields 2026-06-03 11:17:22 +08:00
MarSeventh d061353ddd refactor: rely on config for channel metadata 2026-06-03 10:57:51 +08:00
MarSeventh fb11c6d148 fix: prefer config derived channel urls 2026-06-02 22:37:24 +08:00
MarSeventh 3a9c201c54 fix: refresh derived metadata from config 2026-06-02 22:26:13 +08:00
MarSeventh 4ac7f0ca53 refactor: group metadata utilities 2026-06-02 22:09:45 +08:00
MarSeventh 9b5a3520e1 refactor: trim stored channel metadata 2026-06-02 22:04:47 +08:00
MarSeventh 6a8e4e83bf Unify WebDAV credential resolution 2026-06-02 19:19:43 +08:00
sean908 ceeba86188 fix: strip WebDAV metadata userinfo on move rename 2026-06-02 09:34:52 +00:00
sean908 b9182fdc85 fix: prevent metadata credential leaks 2026-06-02 09:34:52 +00:00
MarSeventh 92fbd0260e fix: keep HuggingFace ranges unchanged 2026-05-30 18:04:18 +08:00
MarSeventh 399e3d35a7 fix: limit HuggingFace open-ended ranges 2026-05-30 17:46:20 +08:00
MarSeventh ef9c14163b revert: undo HuggingFace range streaming changes 2026-05-30 17:25:21 +08:00
MarSeventh 8c083db63a fix: stabilize HuggingFace range responses 2026-05-30 17:17:18 +08:00
MarSeventh 4ebe607f6a fix: improve HuggingFace range streaming 2026-05-30 16:44:59 +08:00
MarSeventh 84246a2210 feat: add upload trend stats 2026-05-25 12:50:04 +08:00
MarSeventh 392ef53409 refactor: move storage api utils into subdirectory 2026-04-28 17:54:43 +08:00
MarSeventh 9d84a0b34a fix: migrate session storage to manage@ prefix and fix D1 adapter routing
- Change SESSION_PREFIX from 'session@' to 'manage@session@' to prevent
  sessions from appearing in file index and backups
- Add KV expirationTtl for automatic session cleanup on expiry
- Fix D1 adapter: route all manage@ keys to settings table instead of
  files table (fixes blockipList and session storage in wrong table)
- Fix D1 list({ prefix: 'manage@' }) not matching settings table
  (fixes backup not containing settings data)
- Exclude manage@session@ keys from settings backup export
2026-04-28 17:04:41 +08:00
htazq f046b15e6a Keep WebDAV secrets out of file metadata
WebDAV upload records now store only the channel identity and object/public paths. Read, delete, move, and rename operations resolve credentials and headers from the current WebDAV channel config by ChannelName, with a legacy metadata fallback so already-created records remain usable.

Constraint: Preserve existing WebDAV object lifecycle behavior while reducing metadata exposure

Rejected: Keep credentials on every file record | expands exposure through metadata reads, backups, and logs

Confidence: high

Scope-risk: moderate

Directive: Keep WebDAV credentials in upload config/env; do not reintroduce per-file credential metadata

Tested: npm test; node deploy/worker/generate-routes.js; npx wrangler deploy --dry-run --config deploy/worker/wrangler.toml; git diff --check

Not-tested: Live WebDAV provider move/delete/read workflow
2026-04-28 09:42:03 +08:00
htazq 9c7a2b4336 Enable third-party WebDAV storage without new runtime dependencies
Cloudflare Workers and Pages already provide the Fetch/Web APIs needed for WebDAV verbs, so the storage integration uses a small local helper instead of adding a Node-oriented WebDAV client. The channel now participates in upload, read, delete, move, rename, channel listing, and runtime config, with chunked uploads explicitly guarded because WebDAV has no portable server-side compose primitive.

Constraint: Preserve Pages Functions and generated Worker deployment paths
Constraint: No new npm dependency for WebDAV client behavior
Rejected: Add a WebDAV npm client | likely Node API/compatibility and package-lock churn
Rejected: Treat WebDAV as External URL only | not a complete storage channel lifecycle
Confidence: high
Scope-risk: moderate
Directive: WebDAV here is third-party storage; keep it distinct from the built-in /dav server settings
Tested: npm test; node worker/generate-routes.js; npx wrangler deploy --dry-run --config worker/wrangler.toml; git diff --cached --check
Not-tested: Live third-party WebDAV provider credentials; Digest-only WebDAV authentication
2026-04-28 00:05:12 +08:00
MarSeventh 61f210e0cb feat: 会话安全策略 - 后端支持动态 Secure/MaxAge 配置
- 扩展 getSecurityConfig 和 fetchSecurityConfig 默认值,新增 sessionSecure、userSessionMaxAge、adminSessionMaxAge 字段
- 改造 buildSessionCookie 支持 secure 参数
- createSession 根据 authType 动态读取配置计算 maxAge
- destroySession 读取 sessionSecure 确保清除 Cookie 属性一致
2026-04-21 10:58:54 +08:00
MarSeventh 9d0cc7d2b8 fix: remove Secure flag from session cookie for HTTP Docker compatibility 2026-04-19 20:16:36 +08:00
MarSeventh 876e94b790 refactor: extract rehashIfNeeded to passwordHash.js, deduplicate login rehash logic 2026-04-18 15:35:13 +08:00
MarSeventh 56464b68e4 fix: return explicit authType instead of null when auth is unconfigured
- checkAdmin: return 'admin' when admin auth not configured
- checkUser: return 'user' when authCode not configured
- directoryTree: use authType !== 'admin' to gate user-only checks
2026-04-18 15:28:01 +08:00
MarSeventh b45867920b refactor: split authCore into checkAdmin/checkUser, extract API Token to public layer 2026-04-18 15:05:49 +08:00
MarSeventh 7ef317265f refactor: remove Basic Auth, add /api/auth/adminLogin endpoint
- Remove Basic Auth (verifyBasicAuth, parseBasicAuth) from authCore.js
- Add /api/auth/adminLogin POST endpoint for admin login via JSON body
- Delete legacy /api/manage/check, login, logout (no longer referenced)
- Fix adminConfigured to consider password-only config
2026-04-18 14:49:01 +08:00
MarSeventh 4d2796f54a refactor: unify auth logic into authCore with authScope parameter
- Extract shared authentication logic into utils/auth/authCore.js
- Replace enableBasicAuth/enableAuthCode flags with clear authScope enum (ADMIN/USER/EITHER)
- Move all auth-related files into utils/auth/ subdirectory
- Eliminate duplicated admin auth logic between _middleware.js and dualAuth.js
- Fix: user session no longer grants access to admin-only endpoints
- Fix: dualAuth no longer bypasses authCode when admin is not configured
- Update all 17 import references across the codebase
- Preserve original function signatures (userAuthCheck, dualAuthCheck) for zero caller changes
2026-04-18 13:24:53 +08:00
MarSeventh 636f23375a security: upgrade password hashing to PBKDF2 and fix API token generation
- Replace single-round SHA-256 with PBKDF2 (100k iterations) via Web Crypto API
- Auto-rehash old SHA-256/plaintext passwords to PBKDF2 on successful login
- Add timing-safe comparison to prevent timing attacks
- Replace Math.random() with crypto.getRandomValues() for API token and token ID generation
- Maintain full backward compatibility with existing SHA-256 hashes and plaintext passwords
2026-04-18 00:45:04 +08:00
MarSeventh 62c5aa0eed feat: session-based auth with password hashing
- Add passwordHash.js: SHA-256 + salt hashing with plaintext backward compatibility
- Add sessionManager.js: HttpOnly cookie sessions with separate admin_session/user_session
- Add sessionCheck.js: session validation endpoint for frontend route guards
- Add logout.js: session destruction endpoint with authType support
- Update login.js: return user_session cookie on successful login
- Update check.js: return admin_session cookie on successful admin auth
- Update _middleware.js: check admin_session before Basic Auth, remove WWW-Authenticate header
- Update security.js: hash passwords on save, mask in GET, clear sessions on password change
- Update dualAuth.js/userAuth.js: use verifyPassword and session validation
2026-04-17 23:11:45 +08:00
MarSeventh 2628de051d feat: 添加 API Token 过期时间后端支持
- 新增 tokenExpiration.js 工具模块(过期判定、自动删除过滤)
- apiTokens.js 支持 expiresAt/autoDelete 字段的创建、更新、自动清理
- 新增 getTokenData 导出函数
- tokenValidator.js 增加过期检查逻辑
2026-03-10 10:52:01 +08:00
MarSeventh 2d83c9cd04 Bug:修复HF渠道上传较大文本文件栈溢出的错误 2026-03-08 21:58:32 +08:00
copilot-swe-agent[bot]andMarSeventh 50e97d5d3d Fix Docker deployment issues: add request.cf mock, boolean binding in SQLite, caches API mock, graceful purgeCFCache error handling
Co-authored-by: MarSeventh <[email protected]>
2026-03-03 16:46:40 +00:00
MarSeventh 2c1ff7241b 目录树设置和体验优化 2026-03-01 11:25:39 +08:00
MarSeventh 3dcf08e8b2 目录树设置和体验优化 2026-03-01 11:13:43 +08:00
MarSeventh 610866d88f v2.6.1:增加文件夹候选项;部分安全和体验优化 2026-02-28 16:58:42 +08:00
MarSeventh 99e1443102 v2.6.1:增加文件夹候选项;部分安全和体验优化 2026-02-28 16:50:46 +08:00
MarSeventh e92a8e0ef1 update v2.5.7 2026-01-30 16:14:19 +08:00
MarSeventh 7ed5686727 update v2.5.5 2026-01-25 15:29:35 +08:00
MarSeventh 952cae2936 update v2.5.4 2026-01-23 21:58:25 +08:00
MarSeventh c6ec6f0ec7 Feat:支持自定义上传页面logo跳转链接;管理端支持跳转到指定页码;一些使用细节优化 2026-01-08 12:03:57 +08:00