2 个版本
0.2.10 | 2023 年 9 月 4 日 |
---|---|
0.2.8 | 2023 年 5 月 23 日 |
#2 in #caldav
395KB
7.5K SLoC
Xandikos 是一个轻量级但功能齐全的 CardDAV/CalDAV 服务器,它基于 Git 仓库。
Xandikos (Ξανδικός 或 Ξανθικός)的名字来源于古代马其顿历法中三月的名字,这种历法在公元前一千年前的马其顿使用。
详细文档可在主页找到。
实现的标准
以下标准已实现
- RFC 4918/RFC 2518 (核心 WebDAV) - 已实现,除 COPY/MOVE/LOCK 操作外
- RFC 4791 (CalDAV) - 完全实现
- RFC 6352 (CardDAV) - 完全实现
- RFC 5397 (当前主体) - 完全实现
- RFC 3253 (版本扩展) - 部分实现,仅实现 REPORT 方法及 {DAV:}expand-property 属性
- RFC 3744 (访问控制) - 部分实现
- RFC 5995 (通过 POST 创建成员) - 完全实现
- RFC 5689 (扩展 MKCOL) - 完全实现
- RFC 6578 (WebDAV 集合同步) - 完全实现
以下标准尚未实现
- RFC 6638 (CalDAV 调度扩展) - 未实现
- RFC 7809 (CalDAV 时区扩展) - 未实现
- RFC 7529 (WebDAV 配额) - 未实现
- RFC 4709 (WebDAV 挂载) - 故意 未实现
- RFC 5546 (iCal iTIP) - 未实现
- RFC 4324 (iCAL CAP) - 未实现
- RFC 7953 (iCal 可用性) - 未实现
有关规范兼容性的更多详细信息,请参阅 DAV 兼容性。
限制
- 不支持多用户
- 不支持 CalDAV 调度扩展
支持的客户端
Xandikos 已经过测试,并与以下 CalDAV/CardDAV 客户端兼容
依赖项
目前,Xandikos支持Python 3(请参阅pyproject.toml以获取具体版本)以及Pypy 3。它还使用了Dulwich、Jinja2、icalendar和defusedxml。
例如,在Debian上安装这些依赖项
sudo apt install python3-dulwich python3-defusedxml python3-icalendar python3-jinja2
或者使用pip安装它们
python setup.py develop
Docker
还提供了一个Dockerfile;请参阅文件顶部的注释以获取配置说明。Docker镜像定期构建并发布在ghcr.io/jelmer/xandikos。请参阅examples/docker-compose.yml和手册页以获取更多信息。
运行
Xandikos可以直接监听一个普通的HTTP套接字,或者它可以在反向HTTP代理后面运行。
测试
要运行一个独立的(无认证)Xandikos实例,其中包含预先创建的日历和地址簿(数据存储在$HOME/dav)
./bin/xandikos --defaults -d $HOME/dav
服务器现在正在监听localhost:8080。
请注意,除非指定了--defaults,否则Xandikos不会创建任何集合。您还可以从您的CalDAV/CardDAV客户端创建集合,或者通过在它创建的contacts或calendars目录下创建git仓库来创建集合。
生产
在生产中运行Xandikos最简单的方法是在其前面运行Apache或nginx等反向HTTP代理。xandikos脚本可以监听特定端口上的本地主机,或者它可以监听Unix域套接字。
例如,请参阅examples/中的初始化系统配置。
客户端说明
一些客户端可以从DAV服务器自动发现日历和地址簿的URL(如果它们支持RFC:5397)。对于此类客户端,您可以在设置期间仅提供Xandikos的基本URL。
缺少此类自动发现功能(例如Thunderbird Lightning)的客户端需要直接访问日历或地址簿的URL。在这种情况下,您应提供日历或地址簿的完整URL;如果您使用上一节中提到的--defaults参数初始化了Xandikos,则这些URL看起来可能如下所示
http://dav.example.com/user/calendars/calendar http://dav.example.com/user/contacts/addressbook
贡献
Xandikos非常欢迎贡献。如果您遇到错误或有功能请求,请通过GitHub提交问题。如果您对贡献代码或文档感兴趣,请阅读CONTRIBUTING。在GitHub上标记为new-contributor的问题非常适合新贡献者。
依赖项
~6–13MB
~119K SLoC