From 32ba9e27606b849e627b53be75cf3c7fe8acf860 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Tue, 21 Oct 2025 14:29:52 +0200 Subject: [PATCH] Add member profile page with editable fields and password change --- .output/nitro.json | 2 +- .output/public/_nuxt/builds/latest.json | 2 +- .../aa97736b-e4f0-4d44-b281-d201aaa49f7b.json | 1 - .../d1f53c4b-c177-48ae-b455-ae57c570eb4a.json | 1 + .output/server/chunks/build/styles.mjs | 2 +- .output/server/chunks/nitro/nitro.mjs | 848 +++++++++--------- .../chunks/routes/api/auth/login.post.mjs | 3 +- .../chunks/routes/api/auth/login.post.mjs.map | 2 +- middleware/auth.global.js | 22 + pages/mitgliederbereich/index.vue | 152 ++-- pages/mitgliederbereich/profil.vue | 260 ++++++ server/api/profile.get.js | 48 + server/api/profile.put.js | 99 ++ server/data/sessions.json | 14 + server/data/users.json | 2 +- 15 files changed, 947 insertions(+), 511 deletions(-) delete mode 100644 .output/public/_nuxt/builds/meta/aa97736b-e4f0-4d44-b281-d201aaa49f7b.json create mode 100644 .output/public/_nuxt/builds/meta/d1f53c4b-c177-48ae-b455-ae57c570eb4a.json create mode 100644 middleware/auth.global.js create mode 100644 pages/mitgliederbereich/profil.vue create mode 100644 server/api/profile.get.js create mode 100644 server/api/profile.put.js diff --git a/.output/nitro.json b/.output/nitro.json index 8e2859e..882c07c 100644 --- a/.output/nitro.json +++ b/.output/nitro.json @@ -1,5 +1,5 @@ { - "date": "2025-10-21T12:23:55.318Z", + "date": "2025-10-21T12:26:46.055Z", "preset": "node-server", "framework": { "name": "nuxt", diff --git a/.output/public/_nuxt/builds/latest.json b/.output/public/_nuxt/builds/latest.json index 97ff8a7..b223234 100644 --- a/.output/public/_nuxt/builds/latest.json +++ b/.output/public/_nuxt/builds/latest.json @@ -1 +1 @@ -{"id":"aa97736b-e4f0-4d44-b281-d201aaa49f7b","timestamp":1761049428748} \ No newline at end of file +{"id":"d1f53c4b-c177-48ae-b455-ae57c570eb4a","timestamp":1761049599584} \ No newline at end of file diff --git a/.output/public/_nuxt/builds/meta/aa97736b-e4f0-4d44-b281-d201aaa49f7b.json b/.output/public/_nuxt/builds/meta/aa97736b-e4f0-4d44-b281-d201aaa49f7b.json deleted file mode 100644 index 417e1e3..0000000 --- a/.output/public/_nuxt/builds/meta/aa97736b-e4f0-4d44-b281-d201aaa49f7b.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"aa97736b-e4f0-4d44-b281-d201aaa49f7b","timestamp":1761049428748,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]} \ No newline at end of file diff --git a/.output/public/_nuxt/builds/meta/d1f53c4b-c177-48ae-b455-ae57c570eb4a.json b/.output/public/_nuxt/builds/meta/d1f53c4b-c177-48ae-b455-ae57c570eb4a.json new file mode 100644 index 0000000..adf3608 --- /dev/null +++ b/.output/public/_nuxt/builds/meta/d1f53c4b-c177-48ae-b455-ae57c570eb4a.json @@ -0,0 +1 @@ +{"id":"d1f53c4b-c177-48ae-b455-ae57c570eb4a","timestamp":1761049599584,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]} \ No newline at end of file diff --git a/.output/server/chunks/build/styles.mjs b/.output/server/chunks/build/styles.mjs index ef25d82..59d6d10 100644 --- a/.output/server/chunks/build/styles.mjs +++ b/.output/server/chunks/build/styles.mjs @@ -2,9 +2,9 @@ const interopDefault = r => r.default || r || []; const styles = { "node_modules/nuxt/dist/app/components/error-404.vue": () => import('./error-404-styles.BsF5Lbhq.mjs').then(interopDefault), "node_modules/nuxt/dist/app/components/error-500.vue": () => import('./error-500-styles.Dccc6iq5.mjs').then(interopDefault), + "components/Hero.vue": () => import('./Hero-styles.DnxJI8Rq.mjs').then(interopDefault), "node_modules/nuxt/dist/app/components/error-404.vue?vue&type=style&index=0&scoped=b728498f&lang.css": () => import('./error-404-styles.BsF5Lbhq.mjs').then(interopDefault), "node_modules/nuxt/dist/app/components/error-500.vue?vue&type=style&index=0&scoped=70d84538&lang.css": () => import('./error-500-styles.Dccc6iq5.mjs').then(interopDefault), - "components/Hero.vue": () => import('./Hero-styles.DnxJI8Rq.mjs').then(interopDefault), "components/Hero.vue?vue&type=style&index=0&scoped=33d25311&lang.css": () => import('./Hero-styles.DnxJI8Rq.mjs').then(interopDefault) }; diff --git a/.output/server/chunks/nitro/nitro.mjs b/.output/server/chunks/nitro/nitro.mjs index acaff3c..97d6ba6 100644 --- a/.output/server/chunks/nitro/nitro.mjs +++ b/.output/server/chunks/nitro/nitro.mjs @@ -4293,7 +4293,7 @@ function _expandFromEnv(value) { const _inlineRuntimeConfig = { "app": { "baseURL": "/", - "buildId": "aa97736b-e4f0-4d44-b281-d201aaa49f7b", + "buildId": "d1f53c4b-c177-48ae-b455-ae57c570eb4a", "buildAssetsDir": "/_nuxt/", "cdnURL": "" }, @@ -4738,502 +4738,502 @@ const plugins = [ ]; const assets = { - "/documents/Tischtennisregeln light.pdf": { - "type": "application/pdf", - "etag": "\"5177b-y/88q2+Y3RRechJMqWhse21KRdQ\"", - "mtime": "2025-10-21T12:23:52.942Z", - "size": 333691, - "path": "../public/documents/Tischtennisregeln light.pdf" - }, - "/documents/satzung.pdf": { - "type": "application/pdf", - "etag": "\"5c7cf-L0A3nT8D24T9sD57FFbij3QRpzw\"", - "mtime": "2025-10-21T12:23:52.942Z", - "size": 378831, - "path": "../public/documents/satzung.pdf" - }, "/data/mannschaften.csv": { "type": "text/csv; charset=utf-8", "etag": "\"858-l94GKn8Q0I5RQnhrM0ZPJsYUmcw\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 2136, "path": "../public/data/mannschaften.csv" }, "/data/spielsysteme.csv": { "type": "text/csv; charset=utf-8", "etag": "\"9bc-4npLrNHYClsD0TKV5vSifxitfV0\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 2492, "path": "../public/data/spielsysteme.csv" }, "/data/termine.csv": { "type": "text/csv; charset=utf-8", "etag": "\"2e8-sZtaHF6QRmOQHinTWOLAYRgo6xk\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 744, "path": "../public/data/termine.csv" }, "/data/vereinsmeisterschaften.csv": { "type": "text/csv; charset=utf-8", "etag": "\"989-X8AB+Zegy2xUbjDtbQcXhuuyBDQ\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 2441, "path": "../public/data/vereinsmeisterschaften.csv" }, + "/documents/Tischtennisregeln light.pdf": { + "type": "application/pdf", + "etag": "\"5177b-y/88q2+Y3RRechJMqWhse21KRdQ\"", + "mtime": "2025-10-21T12:26:43.724Z", + "size": 333691, + "path": "../public/documents/Tischtennisregeln light.pdf" + }, + "/documents/satzung.pdf": { + "type": "application/pdf", + "etag": "\"5c7cf-L0A3nT8D24T9sD57FFbij3QRpzw\"", + "mtime": "2025-10-21T12:26:43.724Z", + "size": 378831, + "path": "../public/documents/satzung.pdf" + }, "/images/club_about_us.png": { "type": "image/png", "etag": "\"202e56-s4fLsHEgoAgKJeBRuI1qxPmqHV0\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 2109014, "path": "../public/images/club_about_us.png" }, - "/_nuxt/0xufrPn-.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"b10-/isfm3dyRIVsEjgvcmL/XPZzoKo\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 2832, - "path": "../public/_nuxt/0xufrPn-.js" - }, - "/_nuxt/48ve60fm.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"557-e04q6bcr4Wja5BTiX/uCY9jcaOk\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 1367, - "path": "../public/_nuxt/48ve60fm.js" - }, - "/_nuxt/B4mSF5Ac.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"185-hHs3mU4qOcQAkGQaPrUYGaG0yao\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 389, - "path": "../public/_nuxt/B4mSF5Ac.js" - }, - "/_nuxt/B8JkES4d.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1860-WvKC8RdCe6cXCpB1GzY85pS096Q\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 6240, - "path": "../public/_nuxt/B8JkES4d.js" - }, - "/_nuxt/BFzShIzA.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"327f5-N5y0vPzUBdQsUSamEiDEEMW24m4\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 206837, - "path": "../public/_nuxt/BFzShIzA.js" - }, - "/_nuxt/BJFIhPLo.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"16e9-yq0/LFZyeArARUVXQVCw9WWyEhs\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 5865, - "path": "../public/_nuxt/BJFIhPLo.js" - }, - "/_nuxt/BLJfiAQ_.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1827-YlPmbtoIQqGYplyNk7VayRftNJ4\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 6183, - "path": "../public/_nuxt/BLJfiAQ_.js" - }, - "/_nuxt/BQ1JAN-t.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"4d4-D2c9LzMtu3t/oTdiDqO210OhOq0\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 1236, - "path": "../public/_nuxt/BQ1JAN-t.js" - }, - "/_nuxt/BVRiFo7f.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"dbf-bs5Lp4co8JtdiCR4NBZg2xEEpZE\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 3519, - "path": "../public/_nuxt/BVRiFo7f.js" - }, - "/_nuxt/BWWcyQAZ.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"685-pCeqOgBg8QXGBjOkvDQ5Miivcwk\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 1669, - "path": "../public/_nuxt/BWWcyQAZ.js" - }, - "/_nuxt/Be7mAYpw.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"13f6-nhcH7PpHXr9KCHrhZOBaqzyCANs\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 5110, - "path": "../public/_nuxt/Be7mAYpw.js" - }, - "/_nuxt/BkTrhdjg.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"81f-bXeZaccLlH7cSuSEhEG6Pk4vEzY\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 2079, - "path": "../public/_nuxt/BkTrhdjg.js" - }, - "/_nuxt/BneZCqgq.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1a9f-Hr2fThSa8cJCoHMhFwvPAqgbLZg\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 6815, - "path": "../public/_nuxt/BneZCqgq.js" - }, - "/_nuxt/BpG5pLwY.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"16e6-iqlwalhSHX6bpWAAiam6nLgiuVE\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 5862, - "path": "../public/_nuxt/BpG5pLwY.js" - }, - "/_nuxt/BteKZQ9T.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1ea-kmrGdt5SPmt15EiBI7kR9gXMQM0\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 490, - "path": "../public/_nuxt/BteKZQ9T.js" - }, - "/_nuxt/C0jrEzGC.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"5f0-uJRUZKhjlZl/nyiPAoO6Z/4LAHg\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 1520, - "path": "../public/_nuxt/C0jrEzGC.js" - }, - "/_nuxt/C5SyyWEb.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"2a5-06iX+CL3i0ysaqW9nu7Eg2YzDhQ\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 677, - "path": "../public/_nuxt/C5SyyWEb.js" - }, - "/_nuxt/C8kQt0fa.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"197-7X99z1xphxry8OnMwU7Ofs/uE0Q\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 407, - "path": "../public/_nuxt/C8kQt0fa.js" - }, - "/_nuxt/CFErkncy.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"20d5-n8y27a5DG3vq+zV80w2HAXHUyAw\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 8405, - "path": "../public/_nuxt/CFErkncy.js" - }, - "/_nuxt/CHQH_CwJ.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1168-mBOIwVjM5LsxIx13Cs7oT3+LJ+k\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 4456, - "path": "../public/_nuxt/CHQH_CwJ.js" - }, - "/_nuxt/CKjxMu8n.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"faa-TEO7v2i4TXlLpDUt7LGSNlcm+Ew\"", - "mtime": "2025-10-21T12:23:52.938Z", - "size": 4010, - "path": "../public/_nuxt/CKjxMu8n.js" - }, - "/_nuxt/CNvcEwxd.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"11e7-FT5oxPyA+c2iUA/l/5Ieuxws3Pc\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 4583, - "path": "../public/_nuxt/CNvcEwxd.js" - }, - "/_nuxt/CUVZhO0q.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"dfc-1G2To51pfChtkPrr4l+DG3FkOHk\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 3580, - "path": "../public/_nuxt/CUVZhO0q.js" - }, - "/_nuxt/CUq_0rkE.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"12d-JV4KW1fgT85/V3Ap13X4q2h9U3g\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 301, - "path": "../public/_nuxt/CUq_0rkE.js" - }, - "/_nuxt/CWEkTB1z.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"198-ej4DRqc3/5nSwWU3c6wbOD3Ib9w\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 408, - "path": "../public/_nuxt/CWEkTB1z.js" - }, - "/_nuxt/Cb5SbJ0y.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1d90-K3fsAPMrslrofiGV21WL0Fu94+E\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 7568, - "path": "../public/_nuxt/Cb5SbJ0y.js" - }, - "/_nuxt/CkzaQq3X.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"17d-+xKrHjeww4bpFFkkjUNLD/ebn5A\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 381, - "path": "../public/_nuxt/CkzaQq3X.js" - }, - "/_nuxt/CrCcIvVp.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"274-9U7hEMtgHqdnQopnKeJsBKqKyKw\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 628, - "path": "../public/_nuxt/CrCcIvVp.js" - }, - "/_nuxt/Cx4UcKGu.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"19d-5AMD0EnFEjOkM3qKDpC/NZZzwDI\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 413, - "path": "../public/_nuxt/Cx4UcKGu.js" - }, - "/_nuxt/CysD8Sjt.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"eeb-aA2jMr8NGonus18ybd8zdRCGzbc\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 3819, - "path": "../public/_nuxt/CysD8Sjt.js" - }, - "/_nuxt/Czdc6-TI.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"165-EMJ/yP2qajGIw0CL3y+L/hvMM/8\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 357, - "path": "../public/_nuxt/Czdc6-TI.js" - }, - "/_nuxt/D54FZQPM.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1556-GtYLKNALVpyOhSr1LrAIs5gIV7I\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 5462, - "path": "../public/_nuxt/D54FZQPM.js" - }, - "/_nuxt/DAACT36i.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1f9-dVOk5jAwb0VlMLJevIcT+s2NTgM\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 505, - "path": "../public/_nuxt/DAACT36i.js" - }, - "/_nuxt/DK8ar2Vw.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"bf0-gt2eLpxqF9V/T1JrusLBdWlTOB4\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 3056, - "path": "../public/_nuxt/DK8ar2Vw.js" - }, - "/_nuxt/DQ89_Lrx.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1bdb-FX6FWYmVTmAWWkO9E2O91ImJoTI\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 7131, - "path": "../public/_nuxt/DQ89_Lrx.js" - }, - "/_nuxt/DaSgy0Cl.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"11f-soKnh1qfNJj5nvt+IcgQXYvg/z4\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 287, - "path": "../public/_nuxt/DaSgy0Cl.js" - }, - "/_nuxt/DaUHoOti.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"177f-xSuV2n3wrsWDBysy5o9XsakrXDw\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 6015, - "path": "../public/_nuxt/DaUHoOti.js" - }, - "/_nuxt/DkeYb0_S.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"1ce-xiaAbRvqQ+zffTXF3Gc7rq14R0U\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 462, - "path": "../public/_nuxt/DkeYb0_S.js" - }, - "/_nuxt/DlAUqK2U.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"5b-eFCz/UrraTh721pgAl0VxBNR1es\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 91, - "path": "../public/_nuxt/DlAUqK2U.js" - }, - "/_nuxt/DuCL6zMI.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"16a2-gJGadr4jKYMWO0Im01z6CSn+n1E\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 5794, - "path": "../public/_nuxt/DuCL6zMI.js" - }, - "/_nuxt/H0vOWBHN.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"2029-KNpFGDGtz8iRFY43F+s7ByzEpkM\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 8233, - "path": "../public/_nuxt/H0vOWBHN.js" - }, - "/_nuxt/Harheimer TC.CKfYAfp1.svg": { - "type": "image/svg+xml", - "etag": "\"1d2535-Tx2lTuuFn2hBqGZOnDan3/OdRU0\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 1910069, - "path": "../public/_nuxt/Harheimer TC.CKfYAfp1.svg" - }, - "/_nuxt/Qy3ajxTk.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"13f-LgrH17St2xFg+RPGvT3uJRaRfFw\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 319, - "path": "../public/_nuxt/Qy3ajxTk.js" - }, - "/_nuxt/RGsuuLA3.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"10bb-640PtonCPMgqRn3wO6U3UtHYmDM\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 4283, - "path": "../public/_nuxt/RGsuuLA3.js" - }, - "/_nuxt/XZ6RV9KH.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"175-xr1poEaGS4yjOp907AsRAr6XHLI\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 373, - "path": "../public/_nuxt/XZ6RV9KH.js" - }, - "/_nuxt/YJHbYJtA.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"19f-nQw578pUen9o8yYaMA8Bwag6xho\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 415, - "path": "../public/_nuxt/YJHbYJtA.js" - }, - "/_nuxt/ZrOCUSmD.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"ee2-knvq//8tl4tcmRjFy6nWAy0dRBk\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 3810, - "path": "../public/_nuxt/ZrOCUSmD.js" - }, - "/_nuxt/entry.By1KwLOI.css": { - "type": "text/css; charset=utf-8", - "etag": "\"af02-54Pv3CXwvQv4go5qnH1RZrt75nk\"", - "mtime": "2025-10-21T12:23:52.940Z", - "size": 44802, - "path": "../public/_nuxt/entry.By1KwLOI.css" - }, - "/_nuxt/error-404.CbXQcqJW.css": { - "type": "text/css; charset=utf-8", - "etag": "\"97e-Ty5bTTSEudJkO/DsGUoIf37xYxc\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 2430, - "path": "../public/_nuxt/error-404.CbXQcqJW.css" - }, - "/_nuxt/error-500.L485xXhD.css": { - "type": "text/css; charset=utf-8", - "etag": "\"773-jNt1QdCa+iqaSZb1mv/IQWC5p6w\"", - "mtime": "2025-10-21T12:23:52.940Z", - "size": 1907, - "path": "../public/_nuxt/error-500.L485xXhD.css" - }, - "/_nuxt/index.BYYJS8tV.css": { - "type": "text/css; charset=utf-8", - "etag": "\"167-3j4dZVXlcTPVZDB5pP2uXGX7/QQ\"", - "mtime": "2025-10-21T12:23:52.939Z", - "size": 359, - "path": "../public/_nuxt/index.BYYJS8tV.css" - }, - "/_nuxt/jVj3QaoK.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"196-xWXv220Sy3kJeouwzrQ/gnXllWQ\"", - "mtime": "2025-10-21T12:23:52.940Z", - "size": 406, - "path": "../public/_nuxt/jVj3QaoK.js" - }, - "/_nuxt/r0Xnk_Go.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"3518-Bs6mh0PJXLcTcNvHyWWeRoN53p8\"", - "mtime": "2025-10-21T12:23:52.940Z", - "size": 13592, - "path": "../public/_nuxt/r0Xnk_Go.js" - }, - "/_nuxt/rZgF5GAr.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"2163-F4ycM3bgzLo6kVIU09LeGUWE8SI\"", - "mtime": "2025-10-21T12:23:52.940Z", - "size": 8547, - "path": "../public/_nuxt/rZgF5GAr.js" - }, - "/_nuxt/tnJjxGC6.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"abb-4G3/6bCNUQzUVLLE5tcXv6Rh+gc\"", - "mtime": "2025-10-21T12:23:52.940Z", - "size": 2747, - "path": "../public/_nuxt/tnJjxGC6.js" - }, - "/_nuxt/y9BE7jdd.js": { - "type": "text/javascript; charset=utf-8", - "etag": "\"d8b-/UzKIx4Kl1VnbQibGZzrIbVIyG4\"", - "mtime": "2025-10-21T12:23:52.940Z", - "size": 3467, - "path": "../public/_nuxt/y9BE7jdd.js" - }, "/spielplaene/1. Mannschaft 2025⁄2026.pdf": { "type": "application/pdf", "etag": "\"64c6-+477M+gD/spwpWR9NO/tMJ/inCc\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 25798, "path": "../public/spielplaene/1. Mannschaft 2025⁄2026.pdf" }, "/spielplaene/2. Mannschaft 2025⁄2026.pdf": { "type": "application/pdf", "etag": "\"5bfa-DRJMHLV15iss67lEISoGqSYmZjE\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 23546, "path": "../public/spielplaene/2. Mannschaft 2025⁄2026.pdf" }, "/spielplaene/3. Mannschaft 2025⁄2026.pdf": { "type": "application/pdf", "etag": "\"7447-w933CPQdXhkWJ2AZOVdY0UgJnPo\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 29767, "path": "../public/spielplaene/3. Mannschaft 2025⁄2026.pdf" }, "/spielplaene/4. Mannschaft 2025⁄2026.pdf": { "type": "application/pdf", "etag": "\"6a9b-4TPGn1yQlFUMRj7oB43SN//Np9o\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 27291, "path": "../public/spielplaene/4. Mannschaft 2025⁄2026.pdf" }, "/spielplaene/5. Mannschaft 2025⁄2026.pdf": { "type": "application/pdf", "etag": "\"6523-5VUfCMaoiNhcwHhptHHTVJ3lSwQ\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 25891, "path": "../public/spielplaene/5. Mannschaft 2025⁄2026.pdf" }, "/spielplaene/Jugend 11 2025⁄2026.pdf": { "type": "application/pdf", "etag": "\"52e9-3Rrk9UKUxPh80pBJ0w9oLVbe5dA\"", - "mtime": "2025-10-21T12:23:52.942Z", + "mtime": "2025-10-21T12:26:43.724Z", "size": 21225, "path": "../public/spielplaene/Jugend 11 2025⁄2026.pdf" }, + "/_nuxt/0xufrPn-.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"b10-/isfm3dyRIVsEjgvcmL/XPZzoKo\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 2832, + "path": "../public/_nuxt/0xufrPn-.js" + }, + "/_nuxt/48ve60fm.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"557-e04q6bcr4Wja5BTiX/uCY9jcaOk\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 1367, + "path": "../public/_nuxt/48ve60fm.js" + }, + "/_nuxt/B4mSF5Ac.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"185-hHs3mU4qOcQAkGQaPrUYGaG0yao\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 389, + "path": "../public/_nuxt/B4mSF5Ac.js" + }, + "/_nuxt/B8JkES4d.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1860-WvKC8RdCe6cXCpB1GzY85pS096Q\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 6240, + "path": "../public/_nuxt/B8JkES4d.js" + }, + "/_nuxt/BFzShIzA.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"327f5-N5y0vPzUBdQsUSamEiDEEMW24m4\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 206837, + "path": "../public/_nuxt/BFzShIzA.js" + }, + "/_nuxt/BJFIhPLo.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"16e9-yq0/LFZyeArARUVXQVCw9WWyEhs\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 5865, + "path": "../public/_nuxt/BJFIhPLo.js" + }, + "/_nuxt/BLJfiAQ_.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1827-YlPmbtoIQqGYplyNk7VayRftNJ4\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 6183, + "path": "../public/_nuxt/BLJfiAQ_.js" + }, + "/_nuxt/BQ1JAN-t.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"4d4-D2c9LzMtu3t/oTdiDqO210OhOq0\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 1236, + "path": "../public/_nuxt/BQ1JAN-t.js" + }, + "/_nuxt/BVRiFo7f.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"dbf-bs5Lp4co8JtdiCR4NBZg2xEEpZE\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 3519, + "path": "../public/_nuxt/BVRiFo7f.js" + }, + "/_nuxt/BWWcyQAZ.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"685-pCeqOgBg8QXGBjOkvDQ5Miivcwk\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 1669, + "path": "../public/_nuxt/BWWcyQAZ.js" + }, + "/_nuxt/Be7mAYpw.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"13f6-nhcH7PpHXr9KCHrhZOBaqzyCANs\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 5110, + "path": "../public/_nuxt/Be7mAYpw.js" + }, + "/_nuxt/BkTrhdjg.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"81f-bXeZaccLlH7cSuSEhEG6Pk4vEzY\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 2079, + "path": "../public/_nuxt/BkTrhdjg.js" + }, + "/_nuxt/BneZCqgq.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1a9f-Hr2fThSa8cJCoHMhFwvPAqgbLZg\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 6815, + "path": "../public/_nuxt/BneZCqgq.js" + }, + "/_nuxt/BpG5pLwY.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"16e6-iqlwalhSHX6bpWAAiam6nLgiuVE\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 5862, + "path": "../public/_nuxt/BpG5pLwY.js" + }, + "/_nuxt/BteKZQ9T.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1ea-kmrGdt5SPmt15EiBI7kR9gXMQM0\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 490, + "path": "../public/_nuxt/BteKZQ9T.js" + }, + "/_nuxt/C0jrEzGC.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"5f0-uJRUZKhjlZl/nyiPAoO6Z/4LAHg\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 1520, + "path": "../public/_nuxt/C0jrEzGC.js" + }, + "/_nuxt/C5SyyWEb.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"2a5-06iX+CL3i0ysaqW9nu7Eg2YzDhQ\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 677, + "path": "../public/_nuxt/C5SyyWEb.js" + }, + "/_nuxt/C8kQt0fa.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"197-7X99z1xphxry8OnMwU7Ofs/uE0Q\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 407, + "path": "../public/_nuxt/C8kQt0fa.js" + }, + "/_nuxt/CFErkncy.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"20d5-n8y27a5DG3vq+zV80w2HAXHUyAw\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 8405, + "path": "../public/_nuxt/CFErkncy.js" + }, + "/_nuxt/CHQH_CwJ.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1168-mBOIwVjM5LsxIx13Cs7oT3+LJ+k\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 4456, + "path": "../public/_nuxt/CHQH_CwJ.js" + }, + "/_nuxt/CKjxMu8n.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"faa-TEO7v2i4TXlLpDUt7LGSNlcm+Ew\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 4010, + "path": "../public/_nuxt/CKjxMu8n.js" + }, + "/_nuxt/CNvcEwxd.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"11e7-FT5oxPyA+c2iUA/l/5Ieuxws3Pc\"", + "mtime": "2025-10-21T12:26:43.720Z", + "size": 4583, + "path": "../public/_nuxt/CNvcEwxd.js" + }, + "/_nuxt/CUVZhO0q.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"dfc-1G2To51pfChtkPrr4l+DG3FkOHk\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 3580, + "path": "../public/_nuxt/CUVZhO0q.js" + }, + "/_nuxt/CUq_0rkE.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"12d-JV4KW1fgT85/V3Ap13X4q2h9U3g\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 301, + "path": "../public/_nuxt/CUq_0rkE.js" + }, + "/_nuxt/CWEkTB1z.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"198-ej4DRqc3/5nSwWU3c6wbOD3Ib9w\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 408, + "path": "../public/_nuxt/CWEkTB1z.js" + }, + "/_nuxt/Cb5SbJ0y.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1d90-K3fsAPMrslrofiGV21WL0Fu94+E\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 7568, + "path": "../public/_nuxt/Cb5SbJ0y.js" + }, + "/_nuxt/CkzaQq3X.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"17d-+xKrHjeww4bpFFkkjUNLD/ebn5A\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 381, + "path": "../public/_nuxt/CkzaQq3X.js" + }, + "/_nuxt/CrCcIvVp.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"274-9U7hEMtgHqdnQopnKeJsBKqKyKw\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 628, + "path": "../public/_nuxt/CrCcIvVp.js" + }, + "/_nuxt/Cx4UcKGu.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"19d-5AMD0EnFEjOkM3qKDpC/NZZzwDI\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 413, + "path": "../public/_nuxt/Cx4UcKGu.js" + }, + "/_nuxt/CysD8Sjt.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"eeb-aA2jMr8NGonus18ybd8zdRCGzbc\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 3819, + "path": "../public/_nuxt/CysD8Sjt.js" + }, + "/_nuxt/Czdc6-TI.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"165-EMJ/yP2qajGIw0CL3y+L/hvMM/8\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 357, + "path": "../public/_nuxt/Czdc6-TI.js" + }, + "/_nuxt/D54FZQPM.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1556-GtYLKNALVpyOhSr1LrAIs5gIV7I\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 5462, + "path": "../public/_nuxt/D54FZQPM.js" + }, + "/_nuxt/DAACT36i.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1f9-dVOk5jAwb0VlMLJevIcT+s2NTgM\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 505, + "path": "../public/_nuxt/DAACT36i.js" + }, + "/_nuxt/DK8ar2Vw.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"bf0-gt2eLpxqF9V/T1JrusLBdWlTOB4\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 3056, + "path": "../public/_nuxt/DK8ar2Vw.js" + }, + "/_nuxt/DQ89_Lrx.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1bdb-FX6FWYmVTmAWWkO9E2O91ImJoTI\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 7131, + "path": "../public/_nuxt/DQ89_Lrx.js" + }, + "/_nuxt/DaSgy0Cl.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"11f-soKnh1qfNJj5nvt+IcgQXYvg/z4\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 287, + "path": "../public/_nuxt/DaSgy0Cl.js" + }, + "/_nuxt/DaUHoOti.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"177f-xSuV2n3wrsWDBysy5o9XsakrXDw\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 6015, + "path": "../public/_nuxt/DaUHoOti.js" + }, + "/_nuxt/DkeYb0_S.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"1ce-xiaAbRvqQ+zffTXF3Gc7rq14R0U\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 462, + "path": "../public/_nuxt/DkeYb0_S.js" + }, + "/_nuxt/DlAUqK2U.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"5b-eFCz/UrraTh721pgAl0VxBNR1es\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 91, + "path": "../public/_nuxt/DlAUqK2U.js" + }, + "/_nuxt/DuCL6zMI.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"16a2-gJGadr4jKYMWO0Im01z6CSn+n1E\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 5794, + "path": "../public/_nuxt/DuCL6zMI.js" + }, + "/_nuxt/H0vOWBHN.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"2029-KNpFGDGtz8iRFY43F+s7ByzEpkM\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 8233, + "path": "../public/_nuxt/H0vOWBHN.js" + }, + "/_nuxt/Harheimer TC.CKfYAfp1.svg": { + "type": "image/svg+xml", + "etag": "\"1d2535-Tx2lTuuFn2hBqGZOnDan3/OdRU0\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 1910069, + "path": "../public/_nuxt/Harheimer TC.CKfYAfp1.svg" + }, + "/_nuxt/Qy3ajxTk.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"13f-LgrH17St2xFg+RPGvT3uJRaRfFw\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 319, + "path": "../public/_nuxt/Qy3ajxTk.js" + }, + "/_nuxt/RGsuuLA3.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"10bb-640PtonCPMgqRn3wO6U3UtHYmDM\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 4283, + "path": "../public/_nuxt/RGsuuLA3.js" + }, + "/_nuxt/XZ6RV9KH.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"175-xr1poEaGS4yjOp907AsRAr6XHLI\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 373, + "path": "../public/_nuxt/XZ6RV9KH.js" + }, + "/_nuxt/YJHbYJtA.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"19f-nQw578pUen9o8yYaMA8Bwag6xho\"", + "mtime": "2025-10-21T12:26:43.721Z", + "size": 415, + "path": "../public/_nuxt/YJHbYJtA.js" + }, + "/_nuxt/ZrOCUSmD.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"ee2-knvq//8tl4tcmRjFy6nWAy0dRBk\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 3810, + "path": "../public/_nuxt/ZrOCUSmD.js" + }, + "/_nuxt/entry.By1KwLOI.css": { + "type": "text/css; charset=utf-8", + "etag": "\"af02-54Pv3CXwvQv4go5qnH1RZrt75nk\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 44802, + "path": "../public/_nuxt/entry.By1KwLOI.css" + }, + "/_nuxt/error-404.CbXQcqJW.css": { + "type": "text/css; charset=utf-8", + "etag": "\"97e-Ty5bTTSEudJkO/DsGUoIf37xYxc\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 2430, + "path": "../public/_nuxt/error-404.CbXQcqJW.css" + }, + "/_nuxt/error-500.L485xXhD.css": { + "type": "text/css; charset=utf-8", + "etag": "\"773-jNt1QdCa+iqaSZb1mv/IQWC5p6w\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 1907, + "path": "../public/_nuxt/error-500.L485xXhD.css" + }, + "/_nuxt/index.BYYJS8tV.css": { + "type": "text/css; charset=utf-8", + "etag": "\"167-3j4dZVXlcTPVZDB5pP2uXGX7/QQ\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 359, + "path": "../public/_nuxt/index.BYYJS8tV.css" + }, + "/_nuxt/jVj3QaoK.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"196-xWXv220Sy3kJeouwzrQ/gnXllWQ\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 406, + "path": "../public/_nuxt/jVj3QaoK.js" + }, + "/_nuxt/r0Xnk_Go.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"3518-Bs6mh0PJXLcTcNvHyWWeRoN53p8\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 13592, + "path": "../public/_nuxt/r0Xnk_Go.js" + }, + "/_nuxt/rZgF5GAr.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"2163-F4ycM3bgzLo6kVIU09LeGUWE8SI\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 8547, + "path": "../public/_nuxt/rZgF5GAr.js" + }, + "/_nuxt/tnJjxGC6.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"abb-4G3/6bCNUQzUVLLE5tcXv6Rh+gc\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 2747, + "path": "../public/_nuxt/tnJjxGC6.js" + }, + "/_nuxt/y9BE7jdd.js": { + "type": "text/javascript; charset=utf-8", + "etag": "\"d8b-/UzKIx4Kl1VnbQibGZzrIbVIyG4\"", + "mtime": "2025-10-21T12:26:43.722Z", + "size": 3467, + "path": "../public/_nuxt/y9BE7jdd.js" + }, "/_nuxt/builds/latest.json": { "type": "application/json", - "etag": "\"47-/q4klalOGcZLNuNAOTMX4vWUUjQ\"", - "mtime": "2025-10-21T12:23:52.930Z", + "etag": "\"47-kOGypJX3WSPUFn1Stm19JHqc4sA\"", + "mtime": "2025-10-21T12:26:43.712Z", "size": 71, "path": "../public/_nuxt/builds/latest.json" }, - "/_nuxt/builds/meta/aa97736b-e4f0-4d44-b281-d201aaa49f7b.json": { + "/_nuxt/builds/meta/d1f53c4b-c177-48ae-b455-ae57c570eb4a.json": { "type": "application/json", - "etag": "\"8b-ukLKPsfh4e2SHzUtMBpRalzl754\"", - "mtime": "2025-10-21T12:23:52.927Z", + "etag": "\"8b-Asuz7BYxtnpahrIPs0NeXiXIsoI\"", + "mtime": "2025-10-21T12:26:43.709Z", "size": 139, - "path": "../public/_nuxt/builds/meta/aa97736b-e4f0-4d44-b281-d201aaa49f7b.json" + "path": "../public/_nuxt/builds/meta/d1f53c4b-c177-48ae-b455-ae57c570eb4a.json" } }; diff --git a/.output/server/chunks/routes/api/auth/login.post.mjs b/.output/server/chunks/routes/api/auth/login.post.mjs index f03b0a5..d4b12c1 100644 --- a/.output/server/chunks/routes/api/auth/login.post.mjs +++ b/.output/server/chunks/routes/api/auth/login.post.mjs @@ -51,7 +51,8 @@ const login_post = defineEventHandler(async (event) => { await writeUsers(updatedUsers); setCookie(event, "auth_token", token, { httpOnly: true, - secure: true, + secure: false, + // Auch in Production false, da wir HTTPS über Apache terminieren sameSite: "lax", maxAge: 60 * 60 * 24 * 7 // 7 days diff --git a/.output/server/chunks/routes/api/auth/login.post.mjs.map b/.output/server/chunks/routes/api/auth/login.post.mjs.map index 09cc6ba..dbd8a9e 100644 --- a/.output/server/chunks/routes/api/auth/login.post.mjs.map +++ b/.output/server/chunks/routes/api/auth/login.post.mjs.map @@ -1 +1 @@ -{"version":3,"file":"login.post.mjs","sources":["../../../../../../server/api/auth/login.post.js"],"sourcesContent":null,"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,mBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAAA,KAAA,CAAA;AACA,IAAA,MAAA,EAAA,KAAA,EAAA,QAAA,EAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,KAAA,IAAA,CAAA,QAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,KAAA,GAAA,MAAA,SAAA,EAAA;AACA,IAAA,MAAA,IAAA,GAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAAA,WAAA,EAAA,KAAA,KAAA,CAAA,WAAA,EAAA,CAAA;AAEA,IAAA,IAAA,CAAA,IAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,IAAA,IAAA,CAAA,WAAA,KAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,OAAA,GAAA,MAAA,cAAA,CAAA,QAAA,EAAA,KAAA,QAAA,CAAA;AACA,IAAA,IAAA,CAAA,OAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,KAAA,GAAA,cAAA,IAAA,CAAA;AAGA,IAAA,MAAA,aAAA,CAAA,IAAA,CAAA,EAAA,EAAA,KAAA,CAAA;AAGA,IAAA,IAAA,CAAA,SAAA,GAAA,iBAAA,IAAA,IAAA,EAAA,EAAA,WAAA,EAAA;AACA,IAAA,MAAA,YAAA,GAAA,MAAA,GAAA,CAAA,CAAA,CAAA,KAAA,EAAA,EAAA,KAAA,IAAA,CAAA,EAAA,GAAA,IAAA,GAAA,CAAA,CAAA;AACA,IAAA,MAAA,WAAA,YAAA,CAAA;AAGA,IAAA,SAAA,CAAA,KAAA,EAAA,cAAA,KAAA,EAAA;AAAA,MACA,QAAA,EAAA,IAAA;AAAA,MACA,MAAA,EAAA,IAAA;AAAA,MACA,QAAA,EAAA,KAAA;AAAA,MACA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA;AAAA;AAAA,KACA,CAAA;AAGA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,IAAA;AAAA,MACA,IAAA,EAAA;AAAA,QACA,IAAA,IAAA,CAAA,EAAA;AAAA,QACA,OAAA,IAAA,CAAA,KAAA;AAAA,QACA,MAAA,IAAA,CAAA,IAAA;AAAA,QACA,MAAA,IAAA,CAAA;AAAA;AACA,KACA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,OAAA,CAAA,KAAA,CAAA,iBAAA,KAAA,CAAA;AACA,IAAA,MAAA,KAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"} \ No newline at end of file +{"version":3,"file":"login.post.mjs","sources":["../../../../../../server/api/auth/login.post.js"],"sourcesContent":null,"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,mBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAAA,KAAA,CAAA;AACA,IAAA,MAAA,EAAA,KAAA,EAAA,QAAA,EAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,KAAA,IAAA,CAAA,QAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,KAAA,GAAA,MAAA,SAAA,EAAA;AACA,IAAA,MAAA,IAAA,GAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAAA,WAAA,EAAA,KAAA,KAAA,CAAA,WAAA,EAAA,CAAA;AAEA,IAAA,IAAA,CAAA,IAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,IAAA,IAAA,CAAA,WAAA,KAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,OAAA,GAAA,MAAA,cAAA,CAAA,QAAA,EAAA,KAAA,QAAA,CAAA;AACA,IAAA,IAAA,CAAA,OAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,KAAA,GAAA,cAAA,IAAA,CAAA;AAGA,IAAA,MAAA,aAAA,CAAA,IAAA,CAAA,EAAA,EAAA,KAAA,CAAA;AAGA,IAAA,IAAA,CAAA,SAAA,GAAA,iBAAA,IAAA,IAAA,EAAA,EAAA,WAAA,EAAA;AACA,IAAA,MAAA,YAAA,GAAA,MAAA,GAAA,CAAA,CAAA,CAAA,KAAA,EAAA,EAAA,KAAA,IAAA,CAAA,EAAA,GAAA,IAAA,GAAA,CAAA,CAAA;AACA,IAAA,MAAA,WAAA,YAAA,CAAA;AAGA,IAAA,SAAA,CAAA,KAAA,EAAA,cAAA,KAAA,EAAA;AAAA,MACA,QAAA,EAAA,IAAA;AAAA,MACA,MAAA,EAAA,KAAA;AAAA;AAAA,MACA,QAAA,EAAA,KAAA;AAAA,MACA,MAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA;AAAA;AAAA,KACA,CAAA;AAGA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,IAAA;AAAA,MACA,IAAA,EAAA;AAAA,QACA,IAAA,IAAA,CAAA,EAAA;AAAA,QACA,OAAA,IAAA,CAAA,KAAA;AAAA,QACA,MAAA,IAAA,CAAA,IAAA;AAAA,QACA,MAAA,IAAA,CAAA;AAAA;AACA,KACA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,OAAA,CAAA,KAAA,CAAA,iBAAA,KAAA,CAAA;AACA,IAAA,MAAA,KAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"} \ No newline at end of file diff --git a/middleware/auth.global.js b/middleware/auth.global.js new file mode 100644 index 0000000..606e5f1 --- /dev/null +++ b/middleware/auth.global.js @@ -0,0 +1,22 @@ +export default defineNuxtRouteMiddleware(async (to, from) => { + // Only run on client-side + if (process.server) return + + const authStore = useAuthStore() + + // Check if route requires authentication + const requiresAuth = to.meta.middleware === 'auth' + + if (requiresAuth) { + // Check auth status if not already checked + if (!authStore.isLoggedIn) { + await authStore.checkAuth() + } + + // Redirect to login if not authenticated + if (!authStore.isLoggedIn) { + return navigateTo('/login') + } + } +}) + diff --git a/pages/mitgliederbereich/index.vue b/pages/mitgliederbereich/index.vue index 2a2f3ca..cddc331 100644 --- a/pages/mitgliederbereich/index.vue +++ b/pages/mitgliederbereich/index.vue @@ -6,106 +6,98 @@
-
-

- Willkommen, {{ user?.name }}! -

-

- Sie sind als {{ roleLabel }} angemeldet. -

-

- Letzter Login: {{ lastLoginFormatted }} -

-
- - -
- -
-
- -
-

Mitgliederliste

-
-

- Kontaktdaten aller Vereinsmitglieder -

-
- - -
-
- -
-

Interne News

-
-

- Neuigkeiten nur für Mitglieder -

-
- +
+
-
- +
+
-

Mein Profil

+

Mein Profil

-

- Profil bearbeiten und Passwort ändern +

+ Persönliche Daten und Passwort verwalten

+ + + +
+
+ +
+

Mitglieder

+
+

+ Kontaktdaten der Vereinsmitglieder +

+
+ + + +
+
+ +
+

Interne News

+
+

+ Neuigkeiten und Ankündigungen +

+
+
+ + +
+

+ Willkommen, {{ authStore.user?.name || 'Mitglied' }}! +

+

+ Hier finden Sie alle wichtigen Informationen und Funktionen für Mitglieder des Harheimer TC. +

+
+
+ + Zugriff auf Mitgliederliste mit Kontaktdaten +
+
+ + Interne Vereinsnews und Ankündigungen +
+
+ + Profilverwaltung und Passwort ändern +
+
+ + Weitere Funktionen folgen in Kürze +
+
- diff --git a/pages/mitgliederbereich/profil.vue b/pages/mitgliederbereich/profil.vue new file mode 100644 index 0000000..84e94b8 --- /dev/null +++ b/pages/mitgliederbereich/profil.vue @@ -0,0 +1,260 @@ + + + + diff --git a/server/api/profile.get.js b/server/api/profile.get.js new file mode 100644 index 0000000..7f91912 --- /dev/null +++ b/server/api/profile.get.js @@ -0,0 +1,48 @@ +import { verifyToken, getUserById } from '../utils/auth.js' + +export default defineEventHandler(async (event) => { + try { + const token = getCookie(event, 'auth_token') + + if (!token) { + throw createError({ + statusCode: 401, + message: 'Nicht authentifiziert.' + }) + } + + const decoded = verifyToken(token) + + if (!decoded) { + throw createError({ + statusCode: 401, + message: 'Ungültiges Token.' + }) + } + + const user = await getUserById(decoded.id) + + if (!user || user.active === false) { + throw createError({ + statusCode: 403, + message: 'Benutzer nicht gefunden oder inaktiv.' + }) + } + + // Return user data (without password) + return { + success: true, + user: { + id: user.id, + email: user.email, + name: user.name, + phone: user.phone || '', + role: user.role + } + } + } catch (error) { + console.error('Profil-Abruf-Fehler:', error) + throw error + } +}) + diff --git a/server/api/profile.put.js b/server/api/profile.put.js new file mode 100644 index 0000000..a2ba0fb --- /dev/null +++ b/server/api/profile.put.js @@ -0,0 +1,99 @@ +import { verifyToken, getUserById, readUsers, writeUsers, verifyPassword, hashPassword } from '../utils/auth.js' + +export default defineEventHandler(async (event) => { + try { + const token = getCookie(event, 'auth_token') + + if (!token) { + throw createError({ + statusCode: 401, + message: 'Nicht authentifiziert.' + }) + } + + const decoded = verifyToken(token) + + if (!decoded) { + throw createError({ + statusCode: 401, + message: 'Ungültiges Token.' + }) + } + + const body = await readBody(event) + const { name, email, phone, currentPassword, newPassword } = body + + if (!name || !email) { + throw createError({ + statusCode: 400, + message: 'Name und E-Mail sind erforderlich.' + }) + } + + const users = await readUsers() + const userIndex = users.findIndex(u => u.id === decoded.id) + + if (userIndex === -1) { + throw createError({ + statusCode: 404, + message: 'Benutzer nicht gefunden.' + }) + } + + const user = users[userIndex] + + // Check if email is already taken by another user + if (email !== user.email) { + const emailExists = users.some(u => u.email === email && u.id !== user.id) + if (emailExists) { + throw createError({ + statusCode: 409, + message: 'Diese E-Mail-Adresse wird bereits verwendet.' + }) + } + } + + // Update basic info + user.name = name + user.email = email + user.phone = phone || '' + + // Handle password change + if (currentPassword && newPassword) { + const isValid = await verifyPassword(currentPassword, user.password) + if (!isValid) { + throw createError({ + statusCode: 401, + message: 'Aktuelles Passwort ist falsch.' + }) + } + + if (newPassword.length < 6) { + throw createError({ + statusCode: 400, + message: 'Das neue Passwort muss mindestens 6 Zeichen lang sein.' + }) + } + + user.password = await hashPassword(newPassword) + } + + await writeUsers(users) + + return { + success: true, + message: 'Profil erfolgreich aktualisiert.', + user: { + id: user.id, + email: user.email, + name: user.name, + phone: user.phone, + role: user.role + } + } + } catch (error) { + console.error('Profil-Update-Fehler:', error) + throw error + } +}) + diff --git a/server/data/sessions.json b/server/data/sessions.json index 818042e..ca9d724 100644 --- a/server/data/sessions.json +++ b/server/data/sessions.json @@ -75,5 +75,19 @@ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEiLCJlbWFpbCI6ImFkbWluQGhhcmhlaW1lcnRjLmRlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzYxMDQ5NDQ5LCJleHAiOjE3NjE2NTQyNDl9.hCs7tx4v2wWLwD7CkWho6YI7oTYWrZwrgmAgfA1EupM", "createdAt": "2025-10-21T12:24:09.140Z", "expiresAt": "2025-10-28T12:24:09.140Z" + }, + { + "id": "1761049572243", + "userId": "1", + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEiLCJlbWFpbCI6ImFkbWluQGhhcmhlaW1lcnRjLmRlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzYxMDQ5NTcyLCJleHAiOjE3NjE2NTQzNzJ9.hbqbY8kc1Y98wToNVZVdPIXKd4h-9hwmmYQNRa3-onE", + "createdAt": "2025-10-21T12:26:12.243Z", + "expiresAt": "2025-10-28T12:26:12.243Z" + }, + { + "id": "1761049616716", + "userId": "1", + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEiLCJlbWFpbCI6ImFkbWluQGhhcmhlaW1lcnRjLmRlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzYxMDQ5NjE2LCJleHAiOjE3NjE2NTQ0MTZ9.1L96eI-m_oA6fbrrgm5P0fji3SGEjsV1UZxmCBKMLm0", + "createdAt": "2025-10-21T12:26:56.716Z", + "expiresAt": "2025-10-28T12:26:56.716Z" } ] \ No newline at end of file diff --git a/server/data/users.json b/server/data/users.json index aca2ad3..886af6e 100644 --- a/server/data/users.json +++ b/server/data/users.json @@ -8,6 +8,6 @@ "phone": "", "active": true, "created": "2025-10-21T00:00:00.000Z", - "lastLogin": "2025-10-21T12:24:09.140Z" + "lastLogin": "2025-10-21T12:26:56.717Z" } ] \ No newline at end of file