Fix: Rest
Some checks failed
Word Count / count-words (push) Failing after 31s

This commit is contained in:
2026-03-23 15:12:35 +01:00
parent 69c01af8d4
commit f673460e07
6 changed files with 75 additions and 69 deletions

View File

@@ -1,4 +1,4 @@
\newpage
\cleardoublepage
# Kurzfassung {.unnumbered .unlisted}
@@ -7,13 +7,17 @@ In dieser Diplomarbeit geht es um die Entwicklung von „AlumniHub“ einer
Die technische Arbeit haben wir uns im Team aufgeteilt: Konstantin Hintermayer hat als Product Owner die Linux-Serverinfrastruktur, die PostgreSQL-Datenbank und die CI/CD-Pipelines aufgesetzt sowie das digitale „Schwarze Brett“ programmiert. Adam Gaiswinkler hat das responsive Design im Stil der Schule entworfen und das Event-Anmeldetool sowie die „Hall of Fame“ inklusive PDF-Export umgesetzt. Florian Edlmayer war für den Premiumbereich mit seinem Freigabe-Workflow verantwortlich, hat die DSGVO-Vorgaben umgesetzt und den sicheren Login über LinkedIn (OAuth 2.0) eingebaut. Das Ergebnis ist eine leistungsstarke Plattform, die dem Verein die tägliche Verwaltungsarbeit deutlich erleichtert.
\cleardoublepage
\cleardoublepage
# Abstract {.unnumbered .unlisted}
This diploma thesis covers the development of "AlumniHub," a web platform designed for the alumni association of the HTL Ungargasse. Our goal was to replace their old, manual administration with an automated system using ASP.NET Core, Blazor, and the Oqtane CMS. The platform now handles communication, event planning, and networking in one central place.
The technical work was split between the team: Konstantin Hintermayer (Product Owner) was responsible for the Linux server infrastructure, the PostgreSQL database, and CI/CD pipelines, while also building the digital "Blackboard." Adam Gaiswinkler created the responsive UI in the schools style and implemented the event registration tool and the "Hall of Fame" with automated PDF exports. Florian Edlmayer developed the premium area and its approval workflow, ensured GDPR compliance, and integrated the LinkedIn Login (OAuth 2.0). Overall, we built a high-performance system that significantly simplifies the associations daily administrative work.
\newpage
\cleardoublepage
# Danksagung {.unnumbered .unlisted}
@@ -29,13 +33,14 @@ Als wir im Oktober kurzfristig eine neue Produktionsumgebung benötigten, wurde
Für den „frischen Wind“ und das sorgfältige Korrekturlesen der Arbeit bedanken wir uns herzlich bei Frau Prof. Gertrude Brindlmayer. Ihr geschulter Blick auf Details, die dem Team im Arbeitsprozess entgangen waren, stellte eine große Bereicherung für die finale Qualität dieser Arbeit dar.
\newpage
\cleardoublepage
# Vorwort {.unnumbered .unlisted}
Diese Diplomarbeit ist im Schuljahr 2025/2026 an der HTL SZU Ungargasse im Rahmen des Projekts Alumnihub entstanden. Unser Ziel war es, zusammen mit dem Absolventenverein die veraltete Mitgliederverwaltung zu modernisieren und eine neue digitale Plattform für ehemalige Schülerinnen und Schüler zu entwickeln. Was am Anfang nur eine Pflichtaufgabe für die Schule war, wurde für uns schnell zu einem Projekt, mit dem wir uns voll identifiziert haben. Besonders herausfordernd war, dass unser Team im Laufe der Zeit kleiner wurde und wir am Ende nur noch zu dritt waren. Konstantin Hintermayer, Florian Edlmayer und Adam Gaiswinkler mussten deshalb viel mehr Verantwortung übernehmen und technisches Wissen schneller aufbauen als eigentlich geplant. Die Arbeit am AlumniHub war für uns die ideale Chance, das Wissen aus der Theorie endlich mal in einem echten und anspruchsvollen Softwareprojekt einzusetzen. Es war eine stressige, aber sehr lehrreiche Zeit, und wir sind stolz auf das, was wir am Ende als Team abgeliefert haben.
\newpage
\cleardoublepage
# Einsatz Künstlicher Intelligenz (KI-Disclaimer) {.unnumbered .unlisted}

View File

@@ -66,9 +66,9 @@
\hrulefill
\end{titlepage}
\newpage
\pagenumbering{Roman}
\thispagestyle{empty}
\cleardoublepage
\pagenumbering{Roman}
\section*{Eidesstattliche Erklärung}
Ich erkläre, dass ich die vorliegende Diplomarbeit selbstständig und ohne fremde Hilfe verfasst, andere als die angegebenen Quellen und Hilfsmittel nicht benutzt, sowie die aus anderen Werken übernommene Inhalte durch Quellenangaben erkenntlich gemacht habe.

View File

@@ -2,4 +2,4 @@
# Inhaltsverzeichnis {.unnumbered .unlisted}
\tableofcontents
\tableofcontents

View File

@@ -133,13 +133,13 @@ graph TD
Filter2 --> Result[Sichtbare Navigation<br/>~3 Inhaltsseiten im Menü]
Result -.-> Note[Neue Seiten im CMS erscheinen automatisch im Menü kein Code nötig]
style Start fill:#444441,stroke:#B4B2A9,color:#D3D1C7
style Filter1 fill:#3C3489,stroke:#AFA9EC,color:#CECBE6
style Filter2 fill:#3C3489,stroke:#AFA9EC,color:#CECBE6
style Rejected1 fill:#791F1F,stroke:#F09595,color:#F7C1C1
style Rejected2 fill:#791F1F,stroke:#F09595,color:#F7C1C1
style Result fill:#085041,stroke:#5DCAA5,color:#9FE1CF
style Note fill:none,stroke:#B4B2A9,stroke-dasharray: 5 5,color:#B4B2A9
style Start fill:#F5F5F3,stroke:#B4B2A9,color:#000000
style Filter1 fill:#E8E6FF,stroke:#3C3489,color:#000000
style Filter2 fill:#E8E6FF,stroke:#3C3489,color:#000000
style Rejected1 fill:#FFE8E8,stroke:#791F1F,color:#000000
style Rejected2 fill:#FFE8E8,stroke:#791F1F,color:#000000
style Result fill:#E6FFF9,stroke:#085041,color:#000000
style Note fill:none,stroke:#B4B2A9,stroke-dasharray: 5 5,color:#000000
```
Dies reduziert den Wartungsaufwand erheblich und stellt sicher, dass die Navigation stets dem aktuellen Stand der Plattform entspricht.
@@ -283,15 +283,15 @@ graph TD
Admin -- Verstoß --> Deleted[Gelöscht<br/>→ neuer Eintrag möglich]
%% Styling to match original SVG
style Start fill:#444441,stroke:#B4B2A9,color:#D3D1C7
style Create fill:#3C3489,stroke:#AFA9EC,color:#CECBE6
style Rejected fill:#791F1F,stroke:#F09595,color:#F7C1C1
style Draft fill:#085041,stroke:#5DCAA5,color:#9FE1CF
style Published fill:#085041,stroke:#5DCAA5,color:#9FE1CF
style Reported fill:#633806,stroke:#EF9F27,color:#FAC775
style Admin fill:#444441,stroke:#B4B2A9,color:#D3D1C7
style Approved fill:#27500A,stroke:#97C459,color:#C0DD97
style Deleted fill:#791F1F,stroke:#F09595,color:#F7C1C1
style Start fill:#F5F5F3,stroke:#B4B2A9,color:#000000
style Create fill:#E8E6FF,stroke:#3C3489,color:#000000
style Rejected fill:#FFE8E8,stroke:#791F1F,color:#000000
style Draft fill:#E6FFF9,stroke:#085041,color:#000000
style Published fill:#E6FFF9,stroke:#085041,color:#000000
style Reported fill:#FFF2E0,stroke:#633806,color:#000000
style Admin fill:#F5F5F3,stroke:#B4B2A9,color:#000000
style Approved fill:#F0FFE6,stroke:#27500A,color:#000000
style Deleted fill:#FFE8E8,stroke:#791F1F,color:#000000
```
##### Meldefunktion
@@ -304,6 +304,7 @@ Die Meldefunktion ist dabei nicht direkt im Hall-of-Fame-Modul implementiert, so
<!--![Ablauf des globalen Reporting-Systems](./images/06-Adam/reporting_sequence_diagram.svg)-->
```mermaid
%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
%%| filename: reporting_sequence_diagram
%%| fig-cap: Ablauf des globalen Reporting-Systems

View File

@@ -22,7 +22,7 @@ Für den Verein bedeutet das: rechtskonforme Datenverarbeitung, gesicherte Daten
\
**Premiumbereich:**
- **Premiumbereich:**
Ein Schwerpunkt der Arbeit ist die Entwicklung eines Oqtane-Moduls, das einen Premiumbereich bereitstellt. Dieser Bereich soll ausschließlich autorisierten Benutzerinnen und Benutzern zugänglich sein und spezielle Inhalte oder Funktionen anbieten wie zum Beispiel das hochladen und ansehen von Ingeneuranträgen als Vorlage oder das finden und Kontakt aufnehmen mit anderen Benutzern. Dabei werden grundlegende Konzepte wie Benutzerrollen, Zugriffsrechte und die Integration in das bestehende CMS eingebunden.
##### Erstellung einer Datenschutzerklärung
@@ -152,9 +152,9 @@ Durch diese Architektur wird sichergestellt, dass die eigentliche Logik der Anwe
Ein weiterer Vorteil von ASP.NET besteht in der klar strukturierten Architektur moderner Webanwendungen. Typischerweise wird eine Anwendung in mehrere Schichten unterteilt, beispielsweise:
Präsentationsschicht (Benutzeroberfläche)
Geschäftslogik
Datenzugriffsschicht
- Präsentationsschicht (Benutzeroberfläche)
- Geschäftslogik
- Datenzugriffsschicht
Diese Struktur erleichtert die Wartung und Erweiterung der Anwendung erheblich, da Änderungen gezielt innerhalb einzelner Komponenten vorgenommen werden können.
@@ -166,16 +166,16 @@ Eine relationale Datenbank speichert Informationen in Tabellen, die aus Zeilen u
Durch diese Struktur kann beispielsweise gespeichert werden:
welcher Benutzer existiert
welche Veranstaltungen geplant sind
welcher Benutzer sich für welches Event angemeldet hat
- welcher Benutzer existiert
- welche Veranstaltungen geplant sind
- welcher Benutzer sich für welches Event angemeldet hat
PostgreSQL bietet darüber hinaus zahlreiche Funktionen, die für moderne Webanwendungen wichtig sind. Dazu gehören unter anderem:
hohe Stabilität und Zuverlässigkeit
Unterstützung komplexer Datenabfragen mittels SQL
Transaktionssicherheit zur Vermeidung von Datenverlust
Erweiterbarkeit durch zusätzliche Module
- hohe Stabilität und Zuverlässigkeit
- Unterstützung komplexer Datenabfragen mittels SQL
- Transaktionssicherheit zur Vermeidung von Datenverlust
- Erweiterbarkeit durch zusätzliche Module
Ein weiterer wichtiger Vorteil besteht darin, dass PostgreSQL sehr gut mit modernen Webframeworks wie ASP.NET zusammenarbeitet. Dadurch kann die Anwendung effizient auf gespeicherte Daten zugreifen und diese verarbeiten.
@@ -199,16 +199,16 @@ Der Anwendungsbereich der DSGVO umfasst alle Verarbeitungen personenbezogener Da
Die DSGVO verfolgt mehrere grundsätzliche Ziele:
Schutz der Grundrechte natürlicher Personen bei der Verarbeitung ihrer personenbezogenen Daten sowie die Gewährleistung ihrer Grundfreiheiten.
Einheitlicher Datenschutz in der EU, sodass sowohl Unternehmen innerhalb als auch außerhalb der EU, die Daten von EU-Bürgern verarbeiten, denselben Regeln unterliegen.
Schaffung klarer Pflichten für Datenverantwortliche und -verarbeiter zur rechtskonformen Datenverarbeitung.
- Schutz der Grundrechte natürlicher Personen bei der Verarbeitung ihrer personenbezogenen Daten sowie die Gewährleistung ihrer Grundfreiheiten.
- Einheitlicher Datenschutz in der EU, sodass sowohl Unternehmen innerhalb als auch außerhalb der EU, die Daten von EU-Bürgern verarbeiten, denselben Regeln unterliegen.
- Schaffung klarer Pflichten für Datenverantwortliche und -verarbeiter zur rechtskonformen Datenverarbeitung.
Die DSGVO enthält dabei zentral die Grundsätze der Datenverarbeitung (Art. 5 DSGVO), die sicherstellen, dass personenbezogene Daten nur rechtmäßig, zweckgebunden und in transparentem Umfang verarbeitet werden. Dazu gehören unter anderem:
Rechtmäßigkeit, Fairness und Transparenz der Verarbeitung
Zweckbindung der Datenerhebung
Datenminimierung und Speicherbegrenzung
Integrität und Vertraulichkeit der Datenverarbeitung
- Rechtmäßigkeit, Fairness und Transparenz der Verarbeitung
- Zweckbindung der Datenerhebung
- Datenminimierung und Speicherbegrenzung
- Integrität und Vertraulichkeit der Datenverarbeitung
Die Einhaltung dieser Prinzipien ist für jede Organisation verpflichtend, die personenbezogene Daten verarbeitet unabhängig von ihrer Größe oder Branche. Dies umfasst sowohl technische Aspekte der Datenverarbeitung als auch die Informationspflichten gegenüber Betroffenen, wie sie etwa in Datenschutzerklärungen umgesetzt werden müssen.
@@ -220,21 +220,21 @@ Im Rahmen der Diplomarbeit wurde eine umfassende Analyse der Datenschutzanforder
Ein zentrales Element der Umsetzung war die Erstellung einer gesetzeskonformen Datenschutzerklärung. Diese informiert die Nutzerinnen und Nutzer über:
die Art der verarbeiteten personenbezogenen Daten,
den Zweck der Datenverarbeitung,
die Rechtsgrundlagen der Verarbeitung,
die Speicherdauer der Daten,
die Weitergabe von Daten an Dritte
sowie über die Rechte der Betroffenen gemäß Art. 1522 DSGVO.
- die Art der verarbeiteten personenbezogenen Daten,
- den Zweck der Datenverarbeitung,
- die Rechtsgrundlagen der Verarbeitung,
- die Speicherdauer der Daten,
- die Weitergabe von Daten an Dritte
- sowie über die Rechte der Betroffenen gemäß Art. 1522 DSGVO.
Die Datenschutzerklärung wird auf der Webseite gut sichtbar eingebunden und ist für alle Nutzerinnen und Nutzer jederzeit zugänglich.
Neben der Informationspflicht wurden auch technische und organisatorische Maßnahmen umgesetzt, um die Sicherheit der verarbeiteten Daten zu gewährleisten. Dazu gehören unter anderem:
Verschlüsselte Übertragung von Daten mittels HTTPS
Passwortgeschützter Zugriff auf sensible Daten
Regelmäßige Sicherheitsupdates der eingesetzten Software
Minimierung der Datenerhebung auf das Notwendige: Es werden nur die Daten erhoben, die für die Funktion der Webseite unbedingt erforderlich sind. (Grundprinzip der Datenminimierung nach Art. 5 Abs. 1 lit. c DSGVO)
- Verschlüsselte Übertragung von Daten mittels HTTPS
- Passwortgeschützter Zugriff auf sensible Daten
- Regelmäßige Sicherheitsupdates der eingesetzten Software
- Minimierung der Datenerhebung auf das Notwendige: Es werden nur die Daten erhoben, die für die Funktion der Webseite unbedingt erforderlich sind. (Grundprinzip der Datenminimierung nach Art. 5 Abs. 1 lit. c DSGVO)
#### Schutz personenbezogener Daten der Benutzer [@dsb]
@@ -398,9 +398,9 @@ Die erste Zeile definiert den Interpreter, mit dem das Skript ausgeführt wird.
Die Anweisung set -euo pipefail erhöht die Sicherheit und Stabilität des Skripts:
`-e` beendet das Skript sofort, wenn ein Befehl fehlschlägt
`-u` verhindert die Verwendung nicht definierter Variablen
`-o pipefail` sorgt dafür, dass auch Fehler innerhalb von Befehls-Pipelines erkannt werden
- `-e` beendet das Skript sofort, wenn ein Befehl fehlschlägt
- `-u` verhindert die Verwendung nicht definierter Variablen
- `-o pipefail` sorgt dafür, dass auch Fehler innerhalb von Befehls-Pipelines erkannt werden
Diese Einstellungen verhindern, dass das Backup bei Fehlern unbemerkt unvollständig ausgeführt wird.
@@ -434,11 +434,11 @@ Diese Meldungen werden bei automatischer Ausführung über den Cronjob in eine L
Die Implementierung zeichnet sich durch folgende Eigenschaften aus:
vollständige Sicherung von Datenbank und Anwendungsdateien
automatische tägliche Ausführung
integrierte Fehlerbehandlung
strukturierte Archivierung mit Zeitstempel
automatische Speicherverwaltung durch Rotationsmechanismus
- vollständige Sicherung von Datenbank und Anwendungsdateien
- automatische tägliche Ausführung
- integrierte Fehlerbehandlung
- strukturierte Archivierung mit Zeitstempel
- automatische Speicherverwaltung durch Rotationsmechanismus
Durch diese Umsetzung wurde ein zuverlässiges und wartbares Backup-System geschaffen, das den kontinuierlichen Betrieb der Webanwendung unterstützt und im Fehlerfall eine schnelle Wiederherstellung ermöglicht.
@@ -557,8 +557,8 @@ Die technische Umsetzung der LinkedIn-Authentifizierung erfolgte über das integ
Für die Verbindung mit LinkedIn wurde zunächst eine Entwickleranwendung im LinkedIn Developer Portal [@linkedin_auth_flow] erstellt. Dabei werden zwei zentrale Zugangsdaten generiert:
Client ID
Client Secret
- Client ID
- Client Secret
Diese dienen zur Identifikation der Webanwendung gegenüber den LinkedIn-Servern.
@@ -576,9 +576,9 @@ Zusätzlich wurde eine sogenannte Redirect-URL definiert. Diese URL wird von Lin
In der Konfiguration wurde außerdem festgelegt, welche Benutzerdaten von LinkedIn übernommen werden sollen. Dazu gehören unter anderem:
Benutzername
E-Mail-Adresse
eindeutige Benutzer-ID
- Benutzername
- E-Mail-Adresse
- eindeutige Benutzer-ID
Diese Daten werden von Oqtane als sogenannte Claims verarbeitet und anschließend dem Benutzerkonto der Plattform zugeordnet.

View File

@@ -106,11 +106,11 @@ Um die Interaktion der Benutzer mit den Modulen zu verdeutlichen, wurden folgend
| ID | Name | Akteur | Beschreibung |
| :---- | :---------------------- | :----------------- | :----------------------------------------------------------- |
| UC-01 | Veranstaltung erstellen | Administrator | Ein Administrator legt ein neues Absolvententreffen mit Ort und Datum an. |
| UC-02 | Zu Event anmelden | Mitglied | Ein Absolvent bestätigt seine Teilnahme an einem Event über die Weboberfläche. |
| UC-03 | Inhalt melden | Mitglied | Ein Benutzer meldet einen beleidigenden Post am Schwarzen Brett über den "Melden"-Button. |
| UC-04 | Meldung bearbeiten | Moderator | Ein Vorstandsmitglied sichtet eine Meldung und löscht den entsprechenden Beitrag. |
| UC-05 | Rundmail versenden | Administrator | Der Vorstand erstellt eine Einladung zur Generalversammlung für alle 500 Mitglieder. |
| 1 | Veranstaltung erstellen | Administrator | Ein Administrator legt ein neues Absolvententreffen mit Ort und Datum an. |
| 2 | Zu Event anmelden | Mitglied | Ein Absolvent bestätigt seine Teilnahme an einem Event über die Weboberfläche. |
| 3 | Inhalt melden | Mitglied | Ein Benutzer meldet einen beleidigenden Post am Schwarzen Brett über den "Melden"-Button. |
| 4 | Meldung bearbeiten | Moderator | Ein Vorstandsmitglied sichtet eine Meldung und löscht den entsprechenden Beitrag. |
| 5 | Rundmail versenden | Administrator | Der Vorstand erstellt eine Einladung zur Generalversammlung für alle 500 Mitglieder. |
Table: Wesentliche Use Cases der entwickelten Module