# davina ## Beschreibung - bereitet rohe Kalender-Daten aus verschiedenen Quellen mittels CalDAV auf und stellt diese als Server bereit - basiert auf [sabre/dav](https://sabre.io/dav/) ## Erstellung ### Voraussetzungen (keine) ### Anweisungen - `tools/build` ausführen (Schalter `-h` anfügen für Erklärungen) ## Betrieb ### Voraussetzungen - Web-Server mit PHP-FPM-Unterstützung (für Test-Zwecke reicht der PHP-Development-Server) ### Anweisungen Zum lokalen Testen: - im build-Verzeichnis `php -S localhost:8000` ausführen - CalDAV-Client einrichten mit Ziel-URL - URL: `http://localhost:8000/calendars/-/rides` - Nutzername: `` - Passwort: `` Für den Produktiv-Betrieb: - Host-Konfiguration für den Web-Server anlegen - Web-Server neustarten ## Dokumentation Der grobe Aufbau einer Konfigurations-Datei lässt sich in der [Beispiel-Konfiguration](misc/conf-example.dvn.json) sehen. ### Bezüge _Bezüge_/_Realms_ dienen die Daten-Quellen. Sie sind in der Konfiguration im Knoten `realms` zu erfassen. Jeder Bezug hat: - einen Namen (`name`), - eine Zugangs-Definition (`auth`) - eine Quell-Definition (`source`) Beispiel: ```json "realms": [ { "name": "foo", "auth": … "source": … }, { "name": "bar", "auth": … "source": … } ] … ``` ### Authentifizierungen _Authentifizierungen_ steuern wie auf einen Bezug zugegriffen wird. #### Fest - es wird ein festes Passwort erwartet - Beispiel: ```json "auth": { "kind": "static", "data": { "password": "secret" } } ``` #### Durchleiten - es wird kein bestimmtes Passwort erwartet - das eingegebene Passwort wird an den Aufruf der Quelle weitergeleitet - Beispiel: ```json "auth": { "kind": "pass_through" } ``` ### Quellen _Quellen_ sind die Stellen, die aufgerufen werden um die rohen Kalender-Daten zu erhalten. #### ICS-Feed Kalender-Daten, welche im [iCalendar](https://de.wikipedia.org/wiki/ICalendar)-Format `ics` vorliegen, können wie folgt eingebunden werden: ```json "source" :{ "kind": "ics_feed", "data": { "url": "https://events.example.org/concerts.ics", "conflate": true } } ``` `url` ist hierbei schlicht die URL zur `ics`-Datei. Diese kann man den Platzhaltern `{{username}}` und `{{password}}` versehen sein. Im Fall einer Authentifizierung mittels Durchleiten, werden diese Platzhalter durch die konkret vorliegenden Werte ersetzt. Der Schalter `conflate` steuert, ob die erhaltenen Termine in einen Kalender zusammengefasst werden sollen, statt sie gemäß ihrer `VEVENT`-Feld-Werte `CATEGORIES` aufzutrennen. Das hat Auswirkungen auf die URL, die man im CalDAV-Client einstellen muss. Kommen in einer `ics`-Datei bspw. die `CATEGORIES`-Werte `day` und `night` vor und der Bezug hat den Name `music`, dann würden bei `"conflate": false` die Ziel-URL-Pfade `/calendars/-/music-day` und `/calendars/-/music-night` anliegen; bei `"conflate": true` nur `/calendars/-/music`. ### Angaben für Clients - Kalender-URL: `/calendars/-/[-]` - Nutzername: `[-]` - Passwort: ``