From 435e28fd551ee85140935869a1a92f9acfa41230 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Fri, 19 Dec 2025 09:51:28 +0100 Subject: [PATCH] Update dependencies to include TinyMCE and Quill, enhance Navigation component with a new Newsletter submenu, and implement role-based access control for CMS features. Refactor user role handling to support multiple roles and improve user management functionality across various API endpoints. --- DATENSCHUTZ_UEBERSICHT.md | 28 + components/Navigation.vue | 70 +- components/RichTextEditor.vue | 147 +++ middleware/auth.js | 17 +- package-lock.json | 90 ++ package.json | 3 + pages/cms/benutzer.vue | 170 +++- pages/cms/index.vue | 2 +- pages/cms/newsletter.vue | 884 ++++++++++++++++++ pages/login.vue | 3 +- pages/mitgliederbereich/mitglieder.vue | 44 +- pages/mitgliederbereich/news.vue | 2 +- pages/newsletter/confirm.vue | 75 ++ pages/newsletter/confirmed.vue | 40 + pages/newsletter/subscribe.vue | 179 ++++ pages/newsletter/unsubscribe.vue | 128 +++ pages/newsletter/unsubscribed.vue | 40 + pages/verein/galerie.vue | 5 +- public/images/logos/Harheimer TC.svg | 241 +++++ server/api/auth/login.post.js | 12 +- server/api/auth/status.get.js | 8 +- server/api/cms/satzung-upload.post.js | 4 +- server/api/cms/save-csv.post.js | 4 +- server/api/cms/upload-spielplan-pdf.post.js | 4 +- server/api/cms/users/approve.post.js | 18 +- server/api/cms/users/deactivate.post.js | 4 +- server/api/cms/users/list.get.js | 29 +- server/api/cms/users/reject.post.js | 4 +- server/api/cms/users/update-role.post.js | 19 +- server/api/config.put.js | 4 +- server/api/galerie/[id].delete.js | 2 +- server/api/galerie/upload.post.js | 4 +- server/api/members.delete.js | 4 +- server/api/members.get.js | 14 +- server/api/members.post.js | 9 +- server/api/members/bulk.post.js | 4 +- server/api/membership/download/[id].get.js | 3 +- server/api/news.delete.js | 4 +- server/api/news.post.js | 4 +- server/api/newsletter/[id].delete.js | 89 ++ server/api/newsletter/[id].put.js | 98 ++ server/api/newsletter/[id]/send.post.js | 268 ++++++ .../api/newsletter/check-subscription.get.js | 38 + server/api/newsletter/confirm.get.js | 62 ++ server/api/newsletter/create.post.js | 115 +++ .../groups/[id]/posts/create.post.js | 401 ++++++++ .../newsletter/groups/[id]/posts/list.get.js | 113 +++ .../groups/[id]/subscribers/add.post.js | 254 +++++ .../groups/[id]/subscribers/list.get.js | 115 +++ .../groups/[id]/subscribers/remove.post.js | 84 ++ server/api/newsletter/groups/create.post.js | 117 +++ server/api/newsletter/groups/list.get.js | 64 ++ .../api/newsletter/groups/public-list.get.js | 73 ++ server/api/newsletter/list.get.js | 67 ++ server/api/newsletter/subscribe.post.js | 228 +++++ .../newsletter/unsubscribe-by-email.post.js | 121 +++ server/api/newsletter/unsubscribe.get.js | 56 ++ server/api/personen/upload.post.js | 4 +- server/api/profile.get.js | 8 +- server/api/profile.put.js | 8 +- server/api/termine-manage.delete.js | 4 +- server/api/termine-manage.get.js | 4 +- server/api/termine-manage.post.js | 4 +- server/data/members.json | 2 +- server/data/sessions.json | 129 +-- server/data/users.json | 2 +- server/utils/auth.js | 150 ++- server/utils/newsletter.js | 287 ++++++ stores/auth.js | 19 +- 69 files changed, 5034 insertions(+), 276 deletions(-) create mode 100644 DATENSCHUTZ_UEBERSICHT.md create mode 100644 components/RichTextEditor.vue create mode 100644 pages/cms/newsletter.vue create mode 100644 pages/newsletter/confirm.vue create mode 100644 pages/newsletter/confirmed.vue create mode 100644 pages/newsletter/subscribe.vue create mode 100644 pages/newsletter/unsubscribe.vue create mode 100644 pages/newsletter/unsubscribed.vue create mode 100644 public/images/logos/Harheimer TC.svg create mode 100644 server/api/newsletter/[id].delete.js create mode 100644 server/api/newsletter/[id].put.js create mode 100644 server/api/newsletter/[id]/send.post.js create mode 100644 server/api/newsletter/check-subscription.get.js create mode 100644 server/api/newsletter/confirm.get.js create mode 100644 server/api/newsletter/create.post.js create mode 100644 server/api/newsletter/groups/[id]/posts/create.post.js create mode 100644 server/api/newsletter/groups/[id]/posts/list.get.js create mode 100644 server/api/newsletter/groups/[id]/subscribers/add.post.js create mode 100644 server/api/newsletter/groups/[id]/subscribers/list.get.js create mode 100644 server/api/newsletter/groups/[id]/subscribers/remove.post.js create mode 100644 server/api/newsletter/groups/create.post.js create mode 100644 server/api/newsletter/groups/list.get.js create mode 100644 server/api/newsletter/groups/public-list.get.js create mode 100644 server/api/newsletter/list.get.js create mode 100644 server/api/newsletter/subscribe.post.js create mode 100644 server/api/newsletter/unsubscribe-by-email.post.js create mode 100644 server/api/newsletter/unsubscribe.get.js create mode 100644 server/utils/newsletter.js diff --git a/DATENSCHUTZ_UEBERSICHT.md b/DATENSCHUTZ_UEBERSICHT.md new file mode 100644 index 0000000..03d9490 --- /dev/null +++ b/DATENSCHUTZ_UEBERSICHT.md @@ -0,0 +1,28 @@ +# Übersicht: Verschlüsselung personenbezogener Daten + +## ✅ Verschlüsselt: + +1. **users.json** - Benutzerdaten (E-Mail, Name, Passwort-Hash) +2. **members.json** - Mitgliederdaten (Name, E-Mail, Telefon, Adresse, Geburtsdatum) +3. **newsletter-posts.json** - Newsletter-Posts mit Empfängerlisten (E-Mail-Adressen) +4. **newsletter-subscribers.json** - Newsletter-Abonnenten (E-Mail, Name) ✅ JETZT VERSCHLÜSSELT +5. **sessions.json** - Session-Tokens mit E-Mail-Adressen ✅ JETZT VERSCHLÜSSELT +6. **membership-applications/*.json** - Mitgliedschaftsanträge (verschlüsselt als `encryptedData`) + +## ⚠️ Enthält personenbezogene Daten, aber weniger kritisch: + +1. **config.json** - E-Mail-Adressen von Vorstand und Website-Verantwortlichem (öffentliche Kontaktdaten) + - Diese sind öffentliche Kontaktdaten, die auf der Website angezeigt werden + - Könnte optional verschlüsselt werden, ist aber nicht kritisch + +## ✅ Keine personenbezogenen Daten: + +- **news.json** - Nur Autor-Name, keine E-Mail +- **newsletter-groups.json** - Nur Metadaten (Gruppenname, Typ, etc.) +- **galerie-metadata.json** - Keine personenbezogenen Daten + +## 📝 Hinweise: + +- Alle kritischen Dateien mit personenbezogenen Daten sind verschlüsselt +- Verschlüsselungsschlüssel: `ENCRYPTION_KEY` aus `.env` Datei + diff --git a/components/Navigation.vue b/components/Navigation.vue index e3f2c94..77884d4 100644 --- a/components/Navigation.vue +++ b/components/Navigation.vue @@ -53,11 +53,17 @@ Termine - - Galerie - + + Galerie + + +