Zum Hauptinhalt springen

Members API

Base URL: https://api.fwv-raura.ch

Verwaltung von Mitgliedern, Authentifizierung, Rollen, Fotos, Löschanträgen und Synchronisierung mit Authentik.

Öffentliche Endpoints

Vorstand anzeigen

GET /vorstand

Gibt alle Vorstandsmitglieder zurück (öffentlich).

Response:

[
{
"id": 1,
"vorname": "René",
"nachname": "Käslin",
"funktion": "Präsident",
"foto": null,
"email": "praesident@fwv-raura.ch"
}
]

Vereinsfunktionen

GET /funktionen

Gibt alle verfügbaren Funktionen/Positionen im Verein zurück.

Health Check

GET /health

Response:

{
"status": "ok",
"service": "api-members",
"version": "1.145.0"
}

Authentifizierung

Authentik-Login (Mitglieder)

GET /auth/login

Leitet zur Authentik-Login-Seite weiter (OAuth2 Authorization Code Flow).

Authentik Callback

POST /auth/callback

Verarbeitet den OAuth-Callback von Authentik und erstellt eine Session.

Aktueller Benutzer (Mitglied)

GET /auth/me
Authorization: Bearer <token>

Gibt das aktuelle Mitglieder-Profil zurück.

Vorstand-Login (IMAP)

POST /auth/vorstand/login
Content-Type: application/json

{
"email": "praesident@fwv-raura.ch",
"password": "xxx"
}

Authentifiziert über IMAP gegen den Mail-Server. Gibt bei Erfolg einen HS256-JWT (8h gültig) zurück.

Response:

{
"token": "eyJhbGciOiJIUzI1NiI...",
"email": "praesident@fwv-raura.ch",
"type": "vorstand"
}

Vorstand-Session prüfen

GET /auth/vorstand/me
Authorization: Bearer <token>

Prüft ob der Vorstand-Token noch gültig ist.

Mitglieder CRUD

Authentifizierung erforderlich

Diese Endpoints erfordern einen gültigen Bearer Token.

Alle Mitglieder

GET /members
Authorization: Bearer <token>

Query Parameter:

  • status - Filter nach Status (Aktivmitglied, Passivmitglied, Ehrenmitglied)

Eigenes Profil

GET /members/me
Authorization: Bearer <token>

Mitglied nach ID

GET /members/:id
Authorization: Bearer <token>

Mitglied erstellen

POST /members
Authorization: Bearer <token>
Content-Type: application/json

{
"vorname": "Max",
"nachname": "Muster",
"email": "max@example.com",
"status": "Aktivmitglied"
}

Eigenes Profil aktualisieren

PUT /members/me
Authorization: Bearer <token>
Content-Type: application/json

{
"phone": "+41 79 123 45 67"
}

Mitglied aktualisieren (Vorstand)

PUT /members/:id
Authorization: Bearer <token>
Content-Type: application/json

{
"phone": "+41 79 123 45 67",
"funktion": "Beisitzer"
}

Mitglied löschen (Vorstand)

DELETE /members/:id
Authorization: Bearer <token>

Fotos

Eigenes Foto hochladen

POST /members/me/photo
Authorization: Bearer <token>
Content-Type: multipart/form-data

photo: <Bilddatei>

Eigenes Foto löschen

DELETE /members/me/photo
Authorization: Bearer <token>

Mitglieder-Foto hochladen (Vorstand)

POST /members/:id/photo
Authorization: Bearer <token>
Content-Type: multipart/form-data

photo: <Bilddatei>

Mitglieder-Foto löschen (Vorstand)

DELETE /members/:id/photo
Authorization: Bearer <token>

Löschanträge (DSGVO)

Löschung bestätigen

GET /members/deletion-confirm/:token

Bestätigt einen Löschantrag per Token (aus E-Mail-Link).

Offene Löschanträge abrufen (Vorstand)

GET /deletion-requests
Authorization: Bearer <token>

Löschantrag ablehnen (Vorstand)

DELETE /deletion-requests/:id
Authorization: Bearer <token>

Statistiken & Berichte

Mitglieder-Statistiken

GET /members/stats/overview
Authorization: Bearer <token>

Gibt eine Übersicht der Mitglieder nach Status, Funktion etc. zurück.

Telefonliste als PDF (Vorstand)

GET /members/pdf/telefonliste
Authorization: Bearer <token>

Generiert eine PDF-Telefonliste aller Mitglieder.

E-Mail-Verwaltung

Zustellungs-Verteilerlisten

GET /members/emails/zustellung
Authorization: Bearer <token>

Gibt Mitglieder gruppiert nach Zustellungsart (E-Mail/Post) zurück.

E-Mail-Alias-Konfiguration

GET /members/emails/alias-config
Authorization: Bearer <token>

Aliases synchronisieren

POST /members/emails/sync-alias
Authorization: Bearer <token>

Synchronisiert E-Mail-Aliases mit Mailcow basierend auf Vereinsfunktionen.

Rollen & Zugriff

Verfügbare Rollen

GET /roles
Authorization: Bearer <token>

Eigene Cloud-Zugriffe

GET /members/me/accesses
Authorization: Bearer <token>

Gibt die Cloud-Zugriffe (Nextcloud etc.) des aktuellen Mitglieds zurück.

Nextcloud & Gruppen

Nextcloud-Admin-Zugriff

GET /members/:id/nextcloud-admin
POST /members/:id/nextcloud-admin
Authorization: Bearer <token>

Prüft/gewährt Nextcloud-Admin-Zugriff für ein Mitglied.

Vorstand-Gruppe

GET /members/:id/vorstand-group
POST /members/:id/vorstand-group
Authorization: Bearer <token>

Prüft/setzt Mitgliedschaft in der Vorstand-Verzeichnisgruppe.

Social-Media-Gruppe

GET /members/:id/social-media-group
POST /members/:id/social-media-group
Authorization: Bearer <token>

Mitgliedschaftsanträge

Offene Anträge (Vorstand)

GET /member-registrations
Authorization: Bearer <token>

Antrag-Details

GET /member-registrations/:id
Authorization: Bearer <token>

Anzahl offener Anträge

GET /member-registrations/count/pending
Authorization: Bearer <token>

Antrag genehmigen

POST /member-registrations/:id/approve
Authorization: Bearer <token>

Antrag ablehnen

POST /member-registrations/:id/reject
Authorization: Bearer <token>

Synchronisierung

Mitglieder mit Authentik synchronisieren

POST /members/sync-authentik
Authorization: Bearer <token>

Synchronisiert Mitglieder-Daten zwischen der lokalen Datenbank und Authentik.

Gruppen synchronisieren

POST /members/sync-authentik-groups
Authorization: Bearer <token>

Synchronisiert Authentik-Gruppen mit lokalen Gruppen.

Benachrichtigungen & Einstellungen

Benachrichtigungs-Einstellungen

GET /members/me/notifications
PUT /members/me/notifications
Authorization: Bearer <token>
Content-Type: application/json

{
"email_events": true,
"email_newsletter": true
}

Funktions-E-Mail-Passwort ändern

PUT /members/me/function-email-password
Authorization: Bearer <token>
Content-Type: application/json

{
"password": "neuesPasswort"
}

Audit Log

Log abrufen

GET /audit?limit=50&offset=0
Authorization: Bearer <token>

Query Parameter:

  • limit - Anzahl Ergebnisse (Standard: 50)
  • offset - Offset für Paginierung
  • action - Filter nach Aktion (create, update, delete)
  • entity - Filter nach Entität (member, event, etc.)

Zeigt alle Aktivitäten im System. Wird automatisch via Datenbank-Trigger bei Änderungen befüllt.