Compare commits
23 Commits
04bc48133b
...
doc-0.0.0-
| Author | SHA1 | Date | |
|---|---|---|---|
| ea9479628c | |||
| aa704577ad | |||
| 15eb9d9d5e | |||
| f11fcb68fe | |||
| 8da8374a1b | |||
| d397f0cd60 | |||
| b450fd6475 | |||
| 6789fa6f9d | |||
| 2061cdc218 | |||
| 6b0c4f7884 | |||
| ad47997aab | |||
| b337833410 | |||
| 69d898bc86 | |||
| 29fda2257b | |||
| caedd3ba9e | |||
| 710667481b | |||
| 2e4353bf8e | |||
| a38cbd0dfe | |||
| 9aad0c5394 | |||
| e774cec6d5 | |||
| 9a0cb1ffa0 | |||
| 4e0861147a | |||
| 35a0ebd15a |
28
.gitea/workflows/create-presentation.yml
Normal file
28
.gitea/workflows/create-presentation.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
name: build-debian-package
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "doc-*"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build the debian package
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: "Git clone"
|
||||
run: git clone ${{ gitea.server_url }}/${{ gitea.repository }}.git .
|
||||
- name: "Git checkout"
|
||||
run: git checkout "${{ gitea.sha }}"
|
||||
- name: "Submodules auschecken"
|
||||
run: git submodule update --init
|
||||
- uses: docker://pandoc/core:3.8
|
||||
with:
|
||||
args: "--help" # gets appended to pandoc command
|
||||
- name: "Build .deb"
|
||||
run: cd ./Defensio && ./pandoc.sh
|
||||
- name: "Create release"
|
||||
uses: akkuman/gitea-release-action@v1
|
||||
with:
|
||||
files: |-
|
||||
./Defensio/defensio.pdf
|
||||
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -1,6 +1,6 @@
|
||||
[submodule "Defensio/libs/awesome-beamer"]
|
||||
path = Defensio/libs/awesome-beamer
|
||||
url = https://codeberg.org/LukasPietzschmann/awesome-beamer
|
||||
url = https://git.kocoder.xyz/kocoded/awesome-beamer
|
||||
[submodule "Defensio/libs/smile"]
|
||||
path = Defensio/libs/smile
|
||||
url = https://codeberg.org/LukasPietzschmann/smile
|
||||
|
||||
34
Artikel_Schulhomepage.md
Normal file
34
Artikel_Schulhomepage.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# AlumniHub – Die neue digitale Plattform des Absolventenvereins
|
||||
|
||||
Im Rahmen ihrer Diplomarbeit an der HTL SZU Ungargasse haben **Konstantin Hintermayer**, **Florian Edlmayer** und **Adam Gaiswinkler** (5BHITN, Schuljahr 2025/26) eine moderne Webanwendung für den Absolventenverein entwickelt: den **AlumniHub**.
|
||||
|
||||
## Worum geht es?
|
||||
|
||||
Der Absolventenverein der HTL Ungargasse verwaltet rund 300 Alumni – bisher über Excel-Tabellen und abgelaufene Softwarelizenzen. Das Diplomarbeitsteam hat eine zentrale Plattform geschaffen, die Mitgliederverwaltung, Event-Organisation und Kommunikation unter einem Dach vereint.
|
||||
|
||||
## Was kann der AlumniHub?
|
||||
|
||||
- **Anmeldetool für Treffen** – Veranstaltungen erstellen, Einladungen verschicken und Anmeldungen verwalten
|
||||
- **Hall of Fame** – Absolventen können ihre Erfolge präsentieren, inklusive PDF-Export
|
||||
- **Schwarzes Brett** – Ein interaktiver Feed für Neuigkeiten, Events und Jobangebote
|
||||
- **Premiumbereich** – Exklusive Inhalte für Premiummitglieder mit eigenem Freigabe-Workflow
|
||||
- **LinkedIn-Login** – Sichere Anmeldung über OAuth 2.0
|
||||
- **DSGVO-konform** – Datenschutz von Anfang an mitgedacht
|
||||
|
||||
## Die Technik dahinter
|
||||
|
||||
Die Anwendung basiert auf dem Content-Management-System **Oqtane** mit **ASP.NET Core** und **Blazor**. Gehostet wird das Ganze auf einem Linux-Server mit PostgreSQL-Datenbank – betrieben in der Schulinfrastruktur. Gearbeitet wurde agil nach **Scrum** in zweiwöchigen Sprints.
|
||||
|
||||
## Das Team
|
||||
|
||||
| Name | Schwerpunkt |
|
||||
| :---------------------- | :----------------------------------------------------------------- |
|
||||
| Konstantin Hintermayer | Projektleitung, Serverinfrastruktur, Schwarzes Brett, Auswertungen |
|
||||
| Florian Edlmayer | Premiumbereich, LinkedIn-OAuth, Datenschutz (DSGVO) |
|
||||
| Adam Gaiswinkler | Anmeldetool, Hall of Fame, CMS-Konfiguration, UI/UX-Design |
|
||||
|
||||
**Betreuung:** Ing. Thomas Gürth & Johannes Kreuzer
|
||||
|
||||
---
|
||||
|
||||
*Das Projektteam bedankt sich bei allen Unterstützern – insbesondere beim Absolventenverein als Auftraggeber und bei der Schule für die Bereitstellung der Infrastruktur.*
|
||||
@@ -2,6 +2,17 @@
|
||||
|
||||
\providecommand{\tightlist}{%
|
||||
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||
\makeatletter
|
||||
\newsavebox\pandoc@box
|
||||
\newcommand*\pandocbounded[1]{% scales image to fit the slide if it's too large
|
||||
\sbox\pandoc@box{#1}%
|
||||
\ifdim\wd\pandoc@box>\linewidth
|
||||
\makebox[\linewidth][c]{\resizebox{\linewidth}{!}{\usebox\pandoc@box}}%
|
||||
\else
|
||||
\usebox\pandoc@box
|
||||
\fi
|
||||
}
|
||||
\makeatother
|
||||
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage[utf8]{inputenc}
|
||||
@@ -12,7 +23,11 @@
|
||||
\newcommand{\imagepath}{Images}
|
||||
|
||||
\definecolor{orange}{HTML}{f87a01}
|
||||
\usetheme[german, color, coloraccent=orange]{awesome}
|
||||
\usetheme[german, color, coloraccent=orange, notoc]{awesome}
|
||||
\makeatletter
|
||||
\newcommand{\nonumberson}{\awesome@nonumbersinframetitletrue}
|
||||
\newcommand{\nonumbersoff}{\awesome@nonumbersinframetitlefalse}
|
||||
\makeatother
|
||||
|
||||
% \usepackage{firamath-otf}
|
||||
\usepackage{pgfplots}
|
||||
@@ -57,21 +72,32 @@
|
||||
\institute{Schulzentrum HTL HAK Ungargasse}
|
||||
\uni{Schulzentrum HTL HAK Ungargasse}
|
||||
\location{Wien}
|
||||
\background{background.png}
|
||||
\background{./Images/images/background/title-slide/background.png}
|
||||
\logo{\includegraphics[width=3cm]{\imagepath/images/logos/logo.png}}
|
||||
\date\today
|
||||
\date{22. April 2026}
|
||||
|
||||
|
||||
\AtBeginSection[]
|
||||
{
|
||||
\begin{frame}[noframenumbering,plain]{Agenda}
|
||||
\tableofcontents[currentsection, hideothersubsections]
|
||||
\end{frame}
|
||||
}
|
||||
\begingroup
|
||||
\nonumberson
|
||||
\begin{frame}[noframenumbering,plain]{Agenda}
|
||||
\tableofcontents[currentsection]
|
||||
\end{frame}
|
||||
\endgroup
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
\maketitle
|
||||
|
||||
$body$
|
||||
\begingroup
|
||||
\nonumberson
|
||||
\begin{frame}[noframenumbering,plain]{Agenda}
|
||||
\tableofcontents
|
||||
\end{frame}
|
||||
\endgroup
|
||||
|
||||
\end{document}
|
||||
$body$
|
||||
|
||||
\end{document}
|
||||
@@ -2,7 +2,37 @@
|
||||
|
||||
## Rolle im Projekt
|
||||
|
||||
## Infrastruktur & CI/CD
|
||||
::: columns
|
||||
|
||||
:::: column
|
||||
Aufgabenbereiche:
|
||||
|
||||
- Infrastruktur & CI/CD
|
||||
- Product Owner
|
||||
- Kundenschnittstelle
|
||||
- Softwareentwicklung:
|
||||
- Event Registration
|
||||
- Black Board
|
||||
- Report System
|
||||
- Mass Mailer
|
||||
::::
|
||||
|
||||
:::: column
|
||||
|
||||
\begin{tikzpicture}
|
||||
\clip (0,0) circle (3em);
|
||||
\node at (0,0) {\includegraphics[width=6em]{./Images/images/konstantin/profile.jpg}};
|
||||
\draw[accent, line width=3pt] (0,0) circle (3em);
|
||||
\end{tikzpicture}
|
||||
|
||||
::::
|
||||
|
||||
:::
|
||||
|
||||
## Infrastruktur
|
||||
|
||||
::: columns
|
||||
:::: column
|
||||
|
||||
Systemaufbau:
|
||||
|
||||
@@ -11,18 +41,47 @@ Systemaufbau:
|
||||
- NginX
|
||||
- Asp.Net Core
|
||||
|
||||
::::
|
||||
:::: column
|
||||
|
||||
Entwicklungsumgebung:
|
||||
|
||||
- Gitea Server
|
||||
- Wireguard
|
||||
- Docker
|
||||
- Transfer: GitHub
|
||||
- Gitea Actions
|
||||
|
||||
::::
|
||||
:::
|
||||
|
||||
|
||||
## CI/CD
|
||||
|
||||
CI:
|
||||
|
||||
- Gitea Actions
|
||||
- Debian Packages (.deb)
|
||||
- Code-Reviewing:
|
||||
- KI
|
||||
- Git-Flow
|
||||
|
||||
## Softwarearchitektur
|
||||
|
||||
- Open-Closed Principle
|
||||
- Strategy Pattern
|
||||
- Dependency Injection
|
||||
|
||||
## Technischer Vergleich
|
||||
|
||||
Bisherige Erfahrungen:
|
||||
|
||||
- Go
|
||||
- Typescript
|
||||
- GRPC (interprozess Kommunikation)
|
||||
|
||||
Untersuchungsgebiete:
|
||||
|
||||
- Typisierung
|
||||
- Konsistenz
|
||||
|
||||
@@ -39,3 +98,5 @@ right
|
||||
::::
|
||||
|
||||
:::
|
||||
|
||||
## Fazit
|
||||
@@ -1,95 +1,65 @@
|
||||
# Adam Gaiswinkler
|
||||
|
||||
## Individueller Teil: Adam Gaiswinkler
|
||||
**Entwicklung von CMS-Modulen & Frontend-Design**
|
||||
**CMS‑Modul & Frontend**
|
||||
|
||||
---
|
||||
|
||||
## Ausgangslage & Motivation
|
||||
- **Ausgangssituation**: Bedarf an einer modernen Plattform für den Absolventenverein der HTL Ungargasse.
|
||||
- **Ausgangssituation**: Moderne Frontend‑Plattform für den Absolventenverein (responsive, neue Features).
|
||||
- **Persönliche Motivation**:
|
||||
- Steigende Verantwortung durch Teamverkleinerung (von 6 auf 3 Personen).
|
||||
- Identifikation mit dem Projekt wuchs deutlich.
|
||||
- Praktische Anwendung von Blazor & ASP.NET in einem realen Umfeld.
|
||||
- **Individuelle Ziele**:
|
||||
- Entwicklung von Oqtane-Modulen (Anmeldetool & Hall of Fame).
|
||||
- Web-Entwicklung mit Fokus auf responsives und nutzerfreundliches UI/UX.
|
||||
- Team‑Verkleinerung (6 → 3) → mehr Verantwortung.
|
||||
- Projektidentifikation & Praxis‑Blazor/ASP.NET.
|
||||
- **Ziele**:
|
||||
- Oqtane‑Module (Anmeldetool, Hall‑of‑Fame).
|
||||
- Responsives UI/UX.
|
||||
|
||||
---
|
||||
|
||||
## Eingesetzte Technologien
|
||||
- **Backend & Core**: C#, ASP.NET Core
|
||||
- **Frontend**: Blazor (für interaktive Weboberflächen direkt in C#)
|
||||
- **CMS**: Oqtane Framework
|
||||
- **Styling**: Bootstrap & Custom CSS
|
||||
- **Spezielle Tools**: QuestPDF (PDF-Generierung), Gitea (Versionskontrolle)
|
||||
- **Entwicklungsumgebung**: Visual Studio 2022 & JetBrains Rider (macOS)
|
||||
- **Tech‑Stack**: Bootstrap + Custom‑CSS, QuestPDF, Gitea, VS 2022 wechsel zu VS Code (macOS).
|
||||
|
||||
---
|
||||
|
||||
## Umsetzung: Oqtane Theme
|
||||
- **Ziel**: Modernes, schlichtes Design im Stil der HTL Ungargasse (szu.at).
|
||||
- **Technische Highlights**:
|
||||
- Vollständige Eigenentwicklung der Navigationslogik (über `PageState.Pages`).
|
||||
- Dynamisches Ausblenden von Systemseiten via LINQ.
|
||||
- **Responsive Design**: Einsatz von CSS Media Queries und einer komplett CSS-basierten Burger-Menü-Lösung.
|
||||
- Integration eines `ControlPanels` und Cookie-Consent.
|
||||
- Eigen‑Navigation (bootstrap Komponenten haben nicht gepasst ).
|
||||
- Systemseiten per LINQ ausblenden.
|
||||
- Responsive CSS‑Media‑Queries + reines CSS‑Burger‑Menu.
|
||||
- ControlPanel & Cookie‑Consent.
|
||||
|
||||
---
|
||||
|
||||
## Umsetzung: Hall of Fame (1)
|
||||
- **Zweck**: Sichtbarmachung von erfolgreichen Absolventinnen und Absolventen.
|
||||
- **UI & UX**:
|
||||
- Responsive Kartenübersicht der Personen mit Such- und Sortierfunktion (Echtzeit).
|
||||
- Detailseite im modernen "Glasmorphismus"-Design.
|
||||
- **Datenerfassung & Workflow**:
|
||||
- Rich-Text-Editor zur Eingabe des Werdegangs.
|
||||
- Bild-Upload-System (Live-Vorschau, max. 5 MB) statt manueller URLs.
|
||||
- Statusverwaltung ("Entwurf" vs. "Veröffentlicht") inkl. Eigentümerprüfung.
|
||||
## Umsetzung: Hall of Fame
|
||||
- **Karten‑Grid**: Responsive Übersicht, Live‑Suche & Sortierung.
|
||||
- **Detail‑Seite**: Glasmorphismus‑Design.
|
||||
- **Workflow**: Rich‑Text‑Editor, Bild‑Upload (max 5 MB), Status (Entwurf/Veröffentlicht) inkl. Eigentümer‑Check.
|
||||
- **PDF‑Export**: QuestPDF.
|
||||
- **Moderation**: Meldesystem über Interfaces‑Paket.
|
||||
|
||||
---
|
||||
|
||||
## Umsetzung: Hall of Fame (2)
|
||||
- **PDF-Export**: Dynamische Generierung eines ansprechenden Profil-PDFs mittels *QuestPDF*.
|
||||
- **Moderation**:
|
||||
- Integriertes Meldesystem (Reporting) direkt über ein separates Interfaces-Paket angesteuert.
|
||||
- **Datenbank & Persistenz**:
|
||||
- Entity Framework Core inkl. Migrationen (`HallOfFame` und `HallOfFameReport` Tabellen).
|
||||
|
||||
---
|
||||
|
||||
## Umsetzung: Anmeldetool für Treffen
|
||||
- **Zweck**: Vereinfachung der Planung und Teilnehmerverwaltung.
|
||||
- **Funktion**:
|
||||
- Klare, farblich getrennte Zusage- und Absage-Buttons.
|
||||
- Live-Rückmeldung bei Statusänderung dank Blazor.
|
||||
- Saubere Trennung von UI-Komponente und Backend-API.
|
||||
- **UX-Optimierung**:
|
||||
- Fokus auf Overlay-Darstellung und Mobile-Clipping-Vermeidung.
|
||||
## Umsetzung: Anmeldetool
|
||||
- Klar getrennte Ja/Nein‑Buttons.
|
||||
- Live‑Status‑Updates via Blazor.
|
||||
- UI‑Overlay, mobile‑freundlich.
|
||||
|
||||
---
|
||||
|
||||
## Herausforderungen & Lösungen
|
||||
- **Plattformwechsel (Windows zu macOS)**: Oqtane ist stark an Windows gekoppelt; gelöst durch Einsatz von JetBrains Rider.
|
||||
- **Zeitdruck & Infrastruktur-Ausfälle**:
|
||||
- Probleme mit Hosting (Hetzner).
|
||||
- **Lösung**: Entwicklung einer schlanken "Übergangslösung" (Node.js/HTML) im Sommer 2025 zur zeitgerechten Event-Abwicklung.
|
||||
- **Entity Framework Concurrency Issues**: Gelöst durch Transaktions-Gliederung bei Löschvorgängen (Reports vs. Main Entity).
|
||||
- **Plattformwechsel**: Windows → macOS → JetBrains Rider.
|
||||
- **Hosting‑Probleme**: Node.js/HTML‑Übergangslösung 2025.
|
||||
|
||||
---
|
||||
|
||||
## Learnings
|
||||
- **Technisch**: Tieferes Verständnis von Version Control (Git), CSS/Flexbox (Responsiveness) und C#/Blazor-Tiefen.
|
||||
- **Methodisch**: Eine klare Aufgabenaufteilung sowie regelmäßige Team-Meetings sind unerlässlich für den Projekterfolg.
|
||||
- **Persönlich**: Bedeutsamkeit von Eigeninitiative und Verantwortungsübernahme, gerade in schwierigen Projektphasen.
|
||||
- **Technisch**: Git, CSS‑Flexbox, Blazor.
|
||||
- **Methodisch**: Aufgabenverteilung, regelmäßige Meetings.
|
||||
- **Persönlich**: Eigeninitiative & Verantwortung.
|
||||
|
||||
---
|
||||
|
||||
## Fazit & Ausblick
|
||||
- **Erreichtes**:
|
||||
- Theme ist final in Oqtane integriert und mobil optimiert.
|
||||
- Hall of Fame und Anmeldetool sind voll funktionstüchtig.
|
||||
- **Ausblick**:
|
||||
- Integration einer umfassenden Teilnehmerlisten-Auswertung (Datenbank).
|
||||
- Limit-Funktion für maximale Anmeldungen bei Veranstaltungen.
|
||||
- Automatische E-Mail-Erinnerungen für Events.
|
||||
- Theme final, mobil, Hall of Fame & Anmeldetool funktionsfähig.
|
||||
- **Erweiterungen**: Teilnehmer‑Auswertung, Anmelde‑Limit, automatische E‑Mail‑Erinnerungen.
|
||||
|
||||
|
||||
|
||||
@@ -6,13 +6,14 @@
|
||||
---
|
||||
|
||||
## Ausgangslage & Zielsetzung
|
||||
- **Ausgangssituation**: Fehlen einer sicheren, datenschutzkonformen digitalen Vernetzung der Absolventen der HTL Ungargasse.
|
||||
- **Ausgangssituation**:
|
||||
- Keine digitale, sichere Absolventen-Vernetzung.
|
||||
- **Mein Beitrag**:
|
||||
- DSGVO-konforme Datenschutzimplementierung.
|
||||
- Robuste, automatisierte Backups & Restore-Systeme.
|
||||
- Externes Login mittels LinkedIn (OAuth 2.0).
|
||||
- Konzeption und Entwicklung des Premium-Bereichs.
|
||||
- **Nutzen**: Rechtskonformer Betrieb, hohe Ausfallsicherheit, einfache Nutzung, Förderung des Engagements.
|
||||
- Datenschutz (DSGVO).
|
||||
- Automatisierte Backups & Restore.
|
||||
- LinkedIn-Login (OAuth 2.0).
|
||||
- Premium-Bereich.
|
||||
- **Nutzen**: Rechtssicherheit, Ausfallsicherheit, hohes Engagement.
|
||||
|
||||
---
|
||||
|
||||
@@ -25,71 +26,105 @@
|
||||
---
|
||||
|
||||
## DSGVO & Datenschutz
|
||||
- **Notwendigkeit**: Einhaltung gesetzlicher Rahmenbedingungen (DSGVO, DSG).
|
||||
- **Rechtliche Basis**: Einhaltung von DSGVO & DSG.
|
||||
- **Umsetzung**:
|
||||
- Erstellung und Einbindung einer rechtskonformen Datenschutzerklärung.
|
||||
- **Datenminimierung**: Es werden nur absolut notwendige Daten für den Vereinszweck erhoben.
|
||||
- **Vertraulichkeit**: TLS/HTTPS-Verschlüsselung, lokales Hosting der Daten in Österreich (LiveDesign).
|
||||
- Sicherstellung aller Betroffenenrechte (Auskunft, Löschung).
|
||||
- **Datenschutzerklärung**: Rechtskonform integriert.
|
||||
- **Datenminimierung**: Nur zwingend benötigte Daten.
|
||||
- **Vertraulichkeit**: TLS/HTTPS & lokales Austria-Hosting.
|
||||
- **Betroffenenrechte**: Auskunft & Löschung garantiert.
|
||||
|
||||
---
|
||||
|
||||
## Backup- & Restore-Systeme (1)
|
||||
- **Problem**: Schutz der Daten vor Hardwareausfällen, Softwarefehlern oder Cyberangriffen.
|
||||
- **Lösung: Vollautomatisiertes Backup-Skript**
|
||||
- **Cronjob** führt Skript nachtschlafend (`02:30 Uhr`) aus.
|
||||
- Sichert die `PostgreSQL`-Datenbank im Custom-Format (`pg_dump -Fc`).
|
||||
- Komprimiert den gesamten App-Dateibaum mittels `tar -cvpzf`.
|
||||
- Alle Backups erhalten UTC-Zeitstempel für ordentliche Strukturierung.
|
||||
- **Problem**: Datenverlust (Hardware, Software, Cyberangriffe).
|
||||
- **Lösung**: Vollautomatisiertes Backup-Skript.
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
Start((Start: Cronjob 02:30)) --> Init[Initialisierung]
|
||||
Init --> Vars[Konfiguration laden]
|
||||
|
||||
subgraph Sicherungsphase
|
||||
Dir[Erstelle Backup-Ordner] --> DB[Datenbank-Backup]
|
||||
DB --> Files[Dateisystem sichern]
|
||||
end
|
||||
|
||||
Files --> Check{Fehler?}
|
||||
Check -- Ja --> Mail[Log Error & Abbruch]
|
||||
Check -- Nein --> Rotate[Lade Backups-Liste]
|
||||
|
||||
subgraph Speicherverwaltung
|
||||
Rotate --> Count{Anzahl > 30?}
|
||||
Count -- Ja --> Delete[Älteste löschen]
|
||||
Count -- Nein --> Finish[Abschluss]
|
||||
Delete --> Finish
|
||||
end
|
||||
|
||||
Finish --> Ende((Ende))
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Backup- & Restore-Systeme (2)
|
||||
- **Retention Management**:
|
||||
- Automatische Bereinigung alter Backups (Rotation). Nur die neuesten 30 Backups (`RETAIN=30`) bleiben vorhanden, um Speicherplatz zu sparen.
|
||||
- **Speichermanagement (Retention)**:
|
||||
- Automatische Backup-Rotation.
|
||||
- Limit: Letzte 30 Tage (Speicherplatz-Optimierung).
|
||||
- **Restore-Skript**:
|
||||
- Kontrollierter Wiederherstellungsprozess.
|
||||
- Integrierte Sicherheitsabfrage (`ja/nein`) vor dem Überschreiben.
|
||||
- Umbenennen bestehender Ordner als "Rückversicherung".
|
||||
- Neuanlage der Datenbank (`dropdb` / `createdb`) & Einspielen via `pg_restore`.
|
||||
- Sicherheitsabfrage vor Überschreiben.
|
||||
- Backup als "Rückversicherung" vor Import.
|
||||
- DB-Neuanlage & automatischer Import.
|
||||
|
||||
---
|
||||
|
||||
## Authentifizierung mit LinkedIn (OAuth 2.0)
|
||||
- **Ziel**: Reduzierung von Registrierungshürden und Steigerung der Plattformsicherheit (keine Passwörter im eigenen System speichern).
|
||||
- **Ablauf**:
|
||||
- Nutzer klickt auf "Via LinkedIn Anmelden".
|
||||
- Weiterleitung an LinkedIn -> Freigabe durch den Nutzer.
|
||||
- Oqtane External Login fängt Authorization Code ab, tauscht diesen gegen ein Access Token.
|
||||
- Automatisches Mapping auf lokales Benutzerkonto mithilfe der definierten *Claims* (Name, System-ID).
|
||||
- **Ziel**:
|
||||
- Abbau von Registrierungshürden.
|
||||
- Keine sensiblen Passwörter im eigenen System.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Der Premium-Bereich (1)
|
||||
- **Zweck**: Anreiz für aktives Engagement im Absolventenverein.
|
||||
- **Ingenieur-Antrags-Workflow**:
|
||||
- Nutzer können *Ingenieur-Anträge* (PDF) via Oqtane FileManager hochladen (`Entity: EngineerApplication`).
|
||||
- Nach Prüfung und Freigabe durch Admins (`Approved`) wird automatisch für 12 Monate der Premium-Status vergeben (`UserPremium`).
|
||||
- **Bibliothek**:
|
||||
- Premium-Mitglieder können eine Übersicht aller genehmigten Vorzeige-Anträge einsehen.
|
||||
**Zweck**: Motivation für aktives Mitglieder-Engagement.
|
||||
|
||||
{width=20em}
|
||||
|
||||
{width=20em}
|
||||
|
||||
---
|
||||
|
||||
## Der Premium-Bereich (2)
|
||||
- **Mitgliedersuche & Kontakt**:
|
||||
- Gezielte, datensparsame Suchfunktion nach anderen Absolventen.
|
||||
- Die Suche filtert sensible Daten serverseitig heraus, bevor es zum Client geschickt wird.
|
||||
- **Kontakt-Mechanismus**: In-App Nachrichtensystem *ohne* Preisgabe der persönlichen E-Mail-Adresse. Oqtane übernimmt als Broker die Zustellung.
|
||||
- **Architektur**:
|
||||
- Umsetzung über EF Core (Tabellen: `UserPremium`, `EngineerApplication`, `PremiumEvent` wg. Audit-Trails).
|
||||
- Rollenbasierte Zugriffskontrollen tief in der Service-Schicht (`IsAuthorized`).
|
||||
**Architektur des Premium-Bereich-Moduls:**
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph Client [WebAssembly]
|
||||
UI[Benutzeroberfläche] --> SvcC[Service Client]
|
||||
end
|
||||
|
||||
subgraph Server [ASP.NET Core]
|
||||
SvcC --> Ctrl[API Controller]
|
||||
Ctrl --> SvcS[Service Schicht]
|
||||
end
|
||||
|
||||
subgraph Data [Datenbank]
|
||||
SvcS --> EF[EF Core]
|
||||
EF --> DB[(PostgreSQL)]
|
||||
end
|
||||
```
|
||||
|
||||
**Datensparsame Mitgliedersuche & Kontaktfunktion:**
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Fazit & Ausblick
|
||||
- **Erreichtes**:
|
||||
- Sensible Mitglieder-Daten sind DSGVO-konform geschützt.
|
||||
- Die Betriebssicherheit wird durch fehlerresistente Bash-Backups bewahrt.
|
||||
- Der nahtlose Login mit LinkedIn reduziert Barrieren stark.
|
||||
- Der Premium-Bereich samt Ingenieur-Anträgen stiftet echten Mehrwert für die Alumni-Community.
|
||||
- **Ausblick**: Evaluierung weiterführender OAuth-Anbieter sowie Ausbau der Premium-Pfeiler zur Steigerung der Mitglieds-Dauerhaftigkeit.
|
||||
- DSGVO-konformer Datenschutz.
|
||||
- Hohe Ausfallsicherheit (automatisierte Bash-Backups).
|
||||
- Barrierefreier Zugang (LinkedIn-Login).
|
||||
- Echter Mehrwert durch Premium-Funktionen.
|
||||
- **Ausblick**:
|
||||
- Weitere OAuth-Anbieter (z.B. Google, Microsoft).
|
||||
- Ausbau zukünftiger Premium-Features.
|
||||
|
||||
BIN
Defensio/Images/images/background/title-slide/background.png
Normal file
BIN
Defensio/Images/images/background/title-slide/background.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 132 KiB |
BIN
Defensio/Images/images/konstantin/profile.jpg
Normal file
BIN
Defensio/Images/images/konstantin/profile.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 985 KiB |
BIN
Defensio/Images/oauth-flow-new.png
Normal file
BIN
Defensio/Images/oauth-flow-new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 235 KiB |
Submodule Defensio/libs/awesome-beamer updated: c719f2676f...8be8423ee5
22
Video_Text_Skript.md
Normal file
22
Video_Text_Skript.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Video Text Skript
|
||||
|
||||
Anfang: Willkommen zu unserem Video über den AlumniHub. Wir sind Konstantin Hintermayer, Florian Edlmayer und Adam Gaiswinkler und wir haben im Rahmen unserer Diplomarbeit an der HTL SZU Ungargasse eine moderne Webanwendung für den Absolventenverein entwickelt.
|
||||
Zu beginn unseres Projekts sind wir auf viele Probleme gestoßen. Im Sommer beschäftigten wir uns mit einer Übergangslösung um das kommende Treffen der Absolventen im Jahr 2025 zu ermöglichen. Ein weiteres Problem war unser Team Downsizing von 6 auf 3 Mitglieder. Dadurch mussten wir unsere ursprünglichen Pläne stark überdenken und uns auf das Wesentliche konzentrieren.
|
||||
Außerdem sind wir immer wieder auf Probleme mit unserer Serverinfrastruktur gestoßen.
|
||||
|
||||
Ein zentraler Teil unserer Arbeit ist die kontinuierliche Integration unserer Software. Wir haben uns für Git als Versionsverwaltungssystem entschieden und hosten eine Gitea Instanz. Bei veröffentlichen eines tags wird automatisch ein neues Debian Paket gebaut und in unsererem Debian Package Registry bereitgestellt.Durch diese automatisierung ist die veröffentlichung von neuen Softwareversionen stark vereinfacht worden.
|
||||
|
||||
Das Hauptziel des Projektes war es eine moderne Webanwendung für den Absolvenntenverein zu kreieren. Die es ermöglicht einfach Events und treffen zu organisieren mithilfe unseres EventRegistration Moduls. Weiter Funktionen sind die Hall of Fame, wo Absolventen ihre Erfolge präsentieren können, das Schwarze Brett für Neuigkeiten und Jobangebote und der Premiumbereich für exklusive Inhalte. Diese sind im Laufe der Entwicklung hinzugekommen.
|
||||
|
||||
Nun wollen wir Ihnen unsere Webanwendung genauer vorstellen.
|
||||
|
||||
EventRegistration Modul:
|
||||
|
||||
|
||||
Hall of Fame Modul:
|
||||
|
||||
|
||||
Schwarzes Brett Modul:
|
||||
|
||||
|
||||
Premiumbereich Modul:
|
||||
Reference in New Issue
Block a user