mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 22:52:22 +00:00
First attempt at some documentation
This commit is contained in:
42
.github/workflows/docs.yml
vendored
Normal file
42
.github/workflows/docs.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
name: docs
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: 3.x
|
||||||
|
|
||||||
|
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Set up build cache
|
||||||
|
uses: actions/cache/restore@v4
|
||||||
|
with:
|
||||||
|
key: mkdocs-material-${{ hashfiles('.cache/**') }}
|
||||||
|
path: .cache
|
||||||
|
restore-keys: |
|
||||||
|
mkdocs-material-
|
||||||
|
- run: pip install mkdocs-material
|
||||||
|
- run: mkdocs build --clean
|
||||||
|
|
||||||
|
- name: Upload to GitHub Pages
|
||||||
|
uses: actions/upload-pages-artifact@v3
|
||||||
|
with:
|
||||||
|
path: site
|
||||||
|
|
||||||
|
- name: Deploy to GitHub Pages
|
||||||
|
uses: actions/deploy-pages@v4
|
||||||
|
|
||||||
|
- name: Save build cache
|
||||||
|
uses: actions/cache/save@v4
|
||||||
|
with:
|
||||||
|
key: mkdocs-material-${{ hashfiles('.cache/**') }}
|
||||||
|
path: .cache
|
||||||
18
docs/index.md
Normal file
18
docs/index.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# RustiCal
|
||||||
|
|
||||||
|
a CalDAV/CardDAV server
|
||||||
|
|
||||||
|
!!! warning
|
||||||
|
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.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- easy to backup, everything saved in one SQLite database
|
||||||
|
- [WebDAV Push](https://github.com/bitfireAT/webdav-push/) support, so near-instant synchronisation to DAVx5
|
||||||
|
- lightweight (the container image contains only one binary)
|
||||||
|
- adequately fast (I'd say blazingly fast™ :fire: if I did the benchmarks to back that claim up)
|
||||||
|
- deleted calendars are recoverable
|
||||||
|
- Nextcloud login flow (In DAVx5 you can login through the Nextcloud flow and automatically generate an app token)
|
||||||
|
- [OpenID Connect](setup/oidc.md) support (with option to disable password login)
|
||||||
39
docs/installation.md
Normal file
39
docs/installation.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Installation
|
||||||
|
|
||||||
|
## Manual
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cargo install --locked --git https://github.com/lennart-k/rustical
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
```sh
|
||||||
|
docker run \
|
||||||
|
-p 4000:4000 \
|
||||||
|
-v YOUR_DATA_DIR:/var/lib/rustical/ \
|
||||||
|
-v YOUR_CONFIG_TOML:/etc/rustical/config.toml \
|
||||||
|
-v YOUR_PRINCIPALS_TOML:/etc/rustical/principals.toml \
|
||||||
|
ghcr.io/lennart-k/rustical
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### TOML
|
||||||
|
|
||||||
|
### Environment variables
|
||||||
|
|
||||||
|
The options in `config.toml` can also be configured using environment variables. Names translate the following:
|
||||||
|
|
||||||
|
```toml title="config.toml"
|
||||||
|
[data_store.toml]
|
||||||
|
path = "asd"
|
||||||
|
```
|
||||||
|
|
||||||
|
becomes `RUSTICAL_DATA_STORE__TOML__PATH`.
|
||||||
|
Every variable is
|
||||||
|
|
||||||
|
- uppercase
|
||||||
|
- prefixed by `RUSTICAL_`
|
||||||
|
- Dots become `__`
|
||||||
|
- Arrays are JSON-encoded
|
||||||
3
docs/rfcs.md
Normal file
3
docs/rfcs.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# RFCs
|
||||||
|
|
||||||
|
Collection of RFCs relevant to this project
|
||||||
34
docs/setup/oidc.md
Normal file
34
docs/setup/oidc.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# OpenID Connect
|
||||||
|
|
||||||
|
You can set up RustiCal with an OpenID Connect identity provider
|
||||||
|
|
||||||
|
## Example: Authelia
|
||||||
|
|
||||||
|
```toml title="RustiCal configuration"
|
||||||
|
[frontend.oidc]
|
||||||
|
name = "Authelia"
|
||||||
|
issuer = "https://auth.example.com"
|
||||||
|
client_id = "rustical"
|
||||||
|
client_secret = "secret..."
|
||||||
|
claim_userid = "preferred_username" # (1)!
|
||||||
|
scopes = ["openid", "profile", "groups"]
|
||||||
|
require_group = "app/rustical" # (2)!
|
||||||
|
allow_sign_up = false
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Can be either `preferred_username` or `sub`
|
||||||
|
2. Optional: You can require a user to be in a certain group to use RustiCal
|
||||||
|
|
||||||
|
```yaml title="Authelia configuration"
|
||||||
|
identity_providers:
|
||||||
|
oidc:
|
||||||
|
clients:
|
||||||
|
- client_id: rustical
|
||||||
|
client_secret: secret...
|
||||||
|
public: false
|
||||||
|
consent_mode: implicit
|
||||||
|
scopes: [openid, profile, groups]
|
||||||
|
token_endpoint_auth_method: client_secret_basic
|
||||||
|
redirect_uris:
|
||||||
|
- https://rustical.example.com/frontend/login/oidc/callback
|
||||||
|
```
|
||||||
62
mkdocs.yml
Normal file
62
mkdocs.yml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
site_name: RustiCal Documentation
|
||||||
|
site_url: https://lennart-k.github.io/rustical/
|
||||||
|
site_description: a CalDAV/CardDAV server
|
||||||
|
|
||||||
|
repo_name: lennart-k/rustical
|
||||||
|
repo_url: https://github.com/lennart-k/rustical
|
||||||
|
|
||||||
|
theme:
|
||||||
|
name: material
|
||||||
|
palette:
|
||||||
|
- media: "(prefers-color-scheme)"
|
||||||
|
toggle:
|
||||||
|
icon: material/link
|
||||||
|
name: Switch to light mode
|
||||||
|
- media: "(prefers-color-scheme: light)"
|
||||||
|
scheme: default
|
||||||
|
primary: indigo
|
||||||
|
accent: indigo
|
||||||
|
toggle:
|
||||||
|
icon: material/toggle-switch
|
||||||
|
name: Switch to dark mode
|
||||||
|
- media: "(prefers-color-scheme: dark)"
|
||||||
|
scheme: slate
|
||||||
|
primary: black
|
||||||
|
accent: indigo
|
||||||
|
toggle:
|
||||||
|
icon: material/toggle-switch-off
|
||||||
|
name: Switch to system preference
|
||||||
|
font:
|
||||||
|
text: Roboto
|
||||||
|
code: Roboto Mono
|
||||||
|
favicon: assets/favicon.png
|
||||||
|
icon:
|
||||||
|
logo: logo
|
||||||
|
features:
|
||||||
|
- content.code.copy
|
||||||
|
- content.code.annotate
|
||||||
|
- content.tooltips
|
||||||
|
- navigation.indices
|
||||||
|
- navigation.tabs
|
||||||
|
|
||||||
|
markdown_extensions:
|
||||||
|
- fenced_code
|
||||||
|
- smarty
|
||||||
|
- pymdownx.highlight:
|
||||||
|
anchor_linenums: true
|
||||||
|
line_spans: __span
|
||||||
|
pygments_lang_class: true
|
||||||
|
- pymdownx.inlinehilite
|
||||||
|
- pymdownx.snippets
|
||||||
|
- pymdownx.superfences
|
||||||
|
- admonition
|
||||||
|
- attr_list
|
||||||
|
- pymdownx.emoji:
|
||||||
|
emoji_index: !!python/name:material.extensions.emoji.twemoji
|
||||||
|
emoji_generator: !!python/name:material.extensions.emoji.to_svg
|
||||||
|
|
||||||
|
nav:
|
||||||
|
- Home: index.md
|
||||||
|
- Installation: installation.md
|
||||||
|
- OpenID Connect: setup/oidc.md
|
||||||
|
- RFCs: rfcs.md
|
||||||
Reference in New Issue
Block a user