2 个版本

0.2.10 2023 年 9 月 4 日
0.2.8 2023 年 5 月 23 日

#2 in #caldav

GPL-3.0+

395KB
7.5K SLoC

Python 7.5K SLoC // 0.2% comments Shell 126 SLoC // 0.1% comments Bitbake 16 SLoC INI 7 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 集合同步) - 完全实现

以下标准尚未实现

有关规范兼容性的更多详细信息,请参阅 DAV 兼容性

限制

  • 不支持多用户
  • 不支持 CalDAV 调度扩展

依赖项

目前,Xandikos支持Python 3(请参阅pyproject.toml以获取具体版本)以及Pypy 3。它还使用了DulwichJinja2icalendardefusedxml

例如,在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客户端创建集合,或者通过在它创建的contactscalendars目录下创建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的问题非常适合新贡献者。

帮助

OFTC IRC网络中有一个#xandikos IRC频道,以及一个Xandikos邮件列表。

依赖项

~6–13MB
~119K SLoC