mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 22:52:22 +00:00
6747fde623191061891f280e2e5f8f23b46bba17
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
Languages
Rust
91.4%
TypeScript
4.7%
HTML
2.1%
CSS
1.2%
Handlebars
0.3%
Other
0.3%