summaryrefslogtreecommitdiff
path: root/Infrastruktur/Software/membersys.mdwn
blob: 1cf94ad727fcb109ade614ea333d82dcf34ecf65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[[!meta title="Mitgliederverwaltungssystem"]]

* Quellcode: <https://github.com/starshipfactory/membersys>
* URL: <https://members.starship-factory.ch/>, <https://join.starship-factory.ch/>, <https://members.starship-factory.ch/admin>

## Requirements

* Formular zum Anmelden neuer Mitglieder
* Verwaltung von Mitgliedern und Anträgen durch den Vorstand
* DSGVO-kompatible maschinenlesbare Datenschutzauskunft für Mitglieder
    * Welche Daten werden über das Mitglied gespeichert?
    * Wann und aus welchem Grund wird von wem auf die Daten zugegriffen? (Derzeit nicht implementiert)
* Anlegen und Löschen von LDAP-Accounts für Mitglieder

## Funktionalität

Die Webseite <https://join.starship-factory.ch/> beinhaltet ein HTML-Formular, um einen Antrag auf Aufnahme in den Verein zu stellen. Der erstellte Antrag erhält eine UUID und wird mittels einem Barcode markiert, um einfacher in der Datenbank gefunden werden zu können (z.B. im Falle eines Spamproblems).

<https://members.starship-factory.ch/admin> beinhaltet gleichzeitig 2 Funktionen:

* Für Mitglieder des Vorstands wird dort ein Webinterface zur Anzeige aller aktiven Mitglieder, aller in den letzten 30 Tagen gekündigten Mitglieder, aller Mitgliedsanträge und aller in Erstellung oder Löschung befindliche Mitglieder angezeigt.
* Für alle anderen Mitglieder werden dort maschinenlesbare Daten über die eigene Mitgliedschaft (Name, Adresse, vereinbarter Mitgliedsbeitrag, herunterladbare VCF-Visitenkarte) angezeigt, um die Anforderungen der Datenschutzgrundverordnung der EU zu erfüllen.

Im Hintergrund läuft täglich ein Job namens *member_creator*, welcher LDAP-Benutzeraccounts für Neumitglieder anlegt und die ausgeschiedener Mitglieder löscht.

## Technische Details

Der Dienst ist als Go-Programm implementiert, welches einen HTTPS-Dienst bereitstellt. Die Daten werden in einer Apache Cassandra-Datenbank gespeichert.

*member_creator* ist ein Go-Programm, welches als Kubernetes-CronJob läuft.

## Bekannte Probleme

* Die DSGVO-Vorschrift, für den Benutzer transparent abzubilden, wann, von wem und aus welchem Grund auf seine Daten zugegriffen wird, ist derzeit noch nicht umgesetzt.
* Der verwendete Cassandra-Clientcode ist veraltet und sollte auf [gocql](https://github.com/gocql/gocql) umgestellt werden.
* membersys verwendet derzeit keine [OpenZipkin](https://zipkin.io/)-Traces, welche das Debuggen von bereits geschehenen Fehlern deutlich erleichtern würde.
* [[Allgemeine Monitoring-Problematik (Kubernetes und Prometheus)|Infrastruktur/Projekte/prometheus-kubernetes]]

## Zukünftige Verbesserungsideen

* Die E-Mailadresse eines Antragstellers sollte möglichst in einem Zwei-Wege-Handshakeverfahren überprüft werden, bevor der Antrag für den Vorstand zur Genehmigung gestellt wird.
* Backups der Datenbank werden im Moment im Ganzen erstellt; es wäre besser, ein applikationsspezifisches Backup zu implementieren, welches die Daten als Protocol Buffer exportiert.