Skip to content

lennart-k/rustical

Repository files navigation

RustiCal

a CalDAV/CardDAV server

Warning: State of the project

This software is not stable yet and things are subject to change.

Installation

Manual

cargo install --git https://github.com/lennart-k/rustical

Docker

docker run -p 4000:4000 -v YOUR_CONFIG_TOML:/etc/rustical/config.toml -v YOUR_DATA_DIRECTORY:YOUR_DATA_DIRECTORY ghcr.io/lennart-k/rustical

Configuration

You can generate a default config.toml with

rustical gen-config

There, you can customize your username, password, and app tokens. Password hashes can be generated with

rustical pwhash

Password vs app tokens

The password is meant as a password you use to log in to the frontend. Since it's sensitive information, the secure but slow hash algorithm argon2 is chosen.

I recommend to generate random app tokens for each CalDAV/CardDAV client. These can use the faster pbkdf2 algorithm.

Todo

  • CalDAV
    • Support for VEVENT, VTODO, VJOURNAL
    • Proper filtering for REPORT method
      • comp-filter
      • time-range filter
      • good enough to use
      • prop-filter
    • ICS parsing
      • Datetime parsing
    • Implement PROPPATCH
  • CardDAV
  • Auth
    • current state: RustiCal should be safe against unauthenticated request, however many routes are not checked for authorization yet
    • static authentication
    • Access control
    • preparation for different principal types (groups)
    • authentication rewrite? (argon2 is very slow for each request)
      • solved through app tokens
  • Web UI
  • Trash bin
    • Hiding calendars instead of deleting them
    • Restore endpoint
  • Packaging
    • Ensure cargo install works
    • Docker image
    • Releases
  • Testing such that I'm confident enough to use it myself :)
  • WebDAV sync extension RFC 6578
    • implement getctag see
    • implement WebDAV If header
  • Ensure proper routing
  • Onboarding
    • config generation
    • usable documentation
    • usable frontend

Relevant RFCs

  • Versioning Extensions to WebDAV: RFC 3253
    • provides the REPORT method
  • Calendaring Extensions to WebDAV (CalDAV): RFC 4791
  • Scheduling Extensions to CalDAV: RFC 6638
    • not sure yet whether to implement this
  • Collection Synchronization WebDAV RFC 6578
    • We need to implement sync-token, etc.
    • This is important for more efficient synchronisation
  • iCalendar RFC 2445

Sync-token

  • a returned version of a resource is marked with a sync token
  • the client can send the sync token to find out about changes after this sync token