2024-12-31 19:07:37 +01:00
2024-12-31 19:07:37 +01:00
2024-12-21 16:25:55 +01:00
2024-10-31 17:10:07 +01:00
2024-10-03 19:48:09 +02:00
2024-10-05 19:07:50 +02:00
2024-12-25 17:34:12 +01:00
2024-12-25 17:34:12 +01:00
2024-10-14 10:23:49 +02:00
2024-12-22 19:59:30 +01:00

RustiCal

a CalDAV/CardDAV server

Caution

RustiCal is not production-ready! There can be changes to the database without migrations and there's no guarantee that all endpoints are secured yet. If you still want to play around with it in its current state, absolutely feel free to do so but know that not even I use it productively yet.

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
Description
No description provided
Readme AGPL-3.0 6.6 MiB
Languages
Rust 91.4%
TypeScript 4.7%
HTML 2.1%
CSS 1.2%
Handlebars 0.3%
Other 0.3%