Add a two-way application calendar (CalDAV / SOGo)

New lib/caldav.js speaks CalDAV over Basic auth (shared mail account):
reads events in a window, and creates/updates/deletes iCalendar VEVENTs
with a reminder alarm. DST-correct Europe/Berlin <-> UTC handling.

Appointments (Vorstellungsgespräch / general) are managed per application
in a new "Termine" section and mirrored to the SOGo calendar; recording a
"Vorstellungsgespräch" status suggests a prefilled calendar entry
(confirm + click). A dashboard widget lists upcoming appointments. A
background poller reconciles remote edits/deletions via the collection
ctag. Config: CALDAV_URL (+ CALDAV_ALARM_MIN, CALDAV_POLL_MS); disabled
gracefully when unset.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-04 20:06:38 +02:00
co-authored by Claude Opus 4.8
parent 89c8c6db97
commit 95b5b8510d
5 changed files with 660 additions and 0 deletions
+9
View File
@@ -25,6 +25,15 @@ MAIL_FROM=name@example.com
MAIL_IMAP_MAILBOX=INBOX
MAIL_POLL_MS=180000
# --- Bewerbungskalender (CalDAV, z. B. SOGo) ---
# Voll-URL der Kalender-Sammlung (mit abschließendem /). Auth läuft über die
# oben gesetzten MAIL_USER/MAIL_PASSWORD (gleiches Konto). Ohne CALDAV_URL sind
# die Kalender-Funktionen deaktiviert.
# CALDAV_URL=https://mail.example.com/SOGo/dav/name@example.com/Calendar/XXXX/
# Standard-Erinnerung (Minuten vor Terminbeginn) und Sync-Intervall (ms).
CALDAV_ALARM_MIN=60
CALDAV_POLL_MS=300000
# --- REST-API für Drittanbietersoftware (/api/v1) ---
# Ist dieser Schlüssel gesetzt, ist die API aktiv und erwartet den Wert im
# Header "X-API-Key" jedes Requests. Ohne Schlüssel antwortet die API (bis auf