Go to file
Simon Ser 228384530e storage/filesystem: atomically check for IfNoneMatch
Using a separate os.Stat() call may result in a race where another
request handler running concurrently creates the file in-between
the os.Stat() call and the os.Create() call.

Use O_EXCL to avoid this situation.
2022-06-03 10:15:23 +02:00
auth auth/imap: close IMAP connection earlier 2022-05-24 13:27:15 +02:00
cmd/tokidoki Allow PROPPATCH method 2022-05-18 10:21:31 +02:00
debug Add CalDAV support, refactor 2022-05-03 16:06:47 +02:00
storage storage/filesystem: atomically check for IfNoneMatch 2022-06-03 10:15:23 +02:00
.build.yml Add build manifest with build and lint steps 2022-05-20 09:55:51 +02:00
go.mod Update go-webdav dependency 2022-06-03 09:49:00 +02:00
go.sum Update go-webdav dependency 2022-06-03 09:49:00 +02:00
LICENSE Initial commit 2022-02-21 09:52:55 +01:00
README.md Add usage notes to README 2022-05-20 09:45:17 +02:00

tokidoki

Tokidoki is a (WIP) carddav and caldav server.

Architecture

Tokidoki relies on go-webdav for the protocol implementation. It provides the storage backend and authentication, both of which are easily pluggable.

It currently provides:

Authentication:

  • IMAP (working)

Storage:

  • Filesystem (working)
  • PostgreSQL (planned)

Building

  • cd cmd/tokidoki && go build

Running

Using the IMAP authentication backend and the filesystem storage backend (directory must exist), listening on port 8080 on all interfaces:

  • ./tokidoki -addr ":8080" -auth.url imaps://imap.example.com:993 -storage.url file:///path/to/storage -debug

Tokidoki does not support HTTPS at this time, use a reverse TLS proxy if needed.

Usage

Only a single address book and calendar per user are supported at the moment, this is currently a limitation in go-webdav.

Tokidoki supports calendar and address book auto-discovery via /.well-known/caldav and /.well-known/carddav respectively, as defined in RFC 6764, section 6. Hence, most clients should be able to discover resources by just pointing them at the server root.