0c5d160bd2d4f6d2fb349bc56d699abef655903a
- 硬性边界:不许 systemctl/pkill/碰生产端口/加第三方依赖(Go 只准 x/net,npm 只准 SPEC 列出的 7 个) - 数据布局 /data/davbox/(accounts.json 明文+0600 / admin 用 bcrypt / secret.key 会话密钥) - WebDAV:/<账号>/ 前缀 chroot、401 必带 WWW-Authenticate、只读账号 403、路径逃逸显式拒绝 - admin/client API 全部端点与前端页面规格、视觉与文案硬要求 - 交付前自测 11 项 + 完成报告要求
davbox
一个概念只有两个的自建 WebDAV 服务:admin 管账号,client 登账号管文件。 主要给 App 用(思源笔记、Joplin 等通过 WebDAV 同步),一个应用一个账号一个目录,互不可见。
为什么自己做
市面上的开源 WebDAV 服务要么是给运维用的平台(SFTPGo:十几个概念、管理端全英文), 要么只有启动参数没有管理界面(dufs),要么隔离实测不可信(hacdias/webdav)。 需要的缺口只有薄薄一层:极简的账号管理 + 可信的目录隔离。协议层不重写,用 Go 官方实现。
技术栈
- 后端:Go 1.24 +
golang.org/x/net/webdav(官方协议实现,不自研协议) - 前端:React + Vite + TypeScript,构建产物
//go:embed进二进制 - 账号:JSON 文件(+ JSONL 审计日志),不上数据库
- 交付:单个静态二进制
选型依据与全部被否方案见 docs/DECISIONS.md。
形态
admin 页 ── 新增/删除应用账号、改密码、看每个账号的目录与用量
client 页 ── 账号登录后浏览/上传/下载/删除/新建文件夹
WebDAV ── https://<域名>/<应用名>/ ← 思源、Joplin 等 App 直接填这个
目录结构
cmd/davbox/ 程序入口
internal/ 账号、隔离、admin/client API
web/ 前端源码(Vite + React + TS)
docs/ 需求与选型文档
状态
阶段一:底盘(账号隔离 + 六动词 WebDAV)—— 需求已定稿,待实现 阶段二:admin 页 + client 页 阶段三(可选):配额、用量统计、只读账号、分享链接
Description
极简自托管 WebDAV 服务:一个应用一个账号一个目录,自带 admin/client 页,单二进制
143 KiB
0 Stars
1 Watchers
0 Forks
Languages
Go
47.1%
Shell
29.9%
TypeScript
17.5%
CSS
5%
Makefile
0.3%
Other
0.2%