Add member profile page with editable fields and password change
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"date": "2025-10-21T12:23:55.318Z",
|
"date": "2025-10-21T12:26:46.055Z",
|
||||||
"preset": "node-server",
|
"preset": "node-server",
|
||||||
"framework": {
|
"framework": {
|
||||||
"name": "nuxt",
|
"name": "nuxt",
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"id":"aa97736b-e4f0-4d44-b281-d201aaa49f7b","timestamp":1761049428748}
|
{"id":"d1f53c4b-c177-48ae-b455-ae57c570eb4a","timestamp":1761049599584}
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"id":"aa97736b-e4f0-4d44-b281-d201aaa49f7b","timestamp":1761049428748,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{"id":"d1f53c4b-c177-48ae-b455-ae57c570eb4a","timestamp":1761049599584,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
|
||||||
@@ -2,9 +2,9 @@ const interopDefault = r => r.default || r || [];
|
|||||||
const styles = {
|
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-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),
|
"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-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),
|
"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)
|
"components/Hero.vue?vue&type=style&index=0&scoped=33d25311&lang.css": () => import('./Hero-styles.DnxJI8Rq.mjs').then(interopDefault)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4293,7 +4293,7 @@ function _expandFromEnv(value) {
|
|||||||
const _inlineRuntimeConfig = {
|
const _inlineRuntimeConfig = {
|
||||||
"app": {
|
"app": {
|
||||||
"baseURL": "/",
|
"baseURL": "/",
|
||||||
"buildId": "aa97736b-e4f0-4d44-b281-d201aaa49f7b",
|
"buildId": "d1f53c4b-c177-48ae-b455-ae57c570eb4a",
|
||||||
"buildAssetsDir": "/_nuxt/",
|
"buildAssetsDir": "/_nuxt/",
|
||||||
"cdnURL": ""
|
"cdnURL": ""
|
||||||
},
|
},
|
||||||
@@ -4738,502 +4738,502 @@ const plugins = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const assets = {
|
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": {
|
"/data/mannschaften.csv": {
|
||||||
"type": "text/csv; charset=utf-8",
|
"type": "text/csv; charset=utf-8",
|
||||||
"etag": "\"858-l94GKn8Q0I5RQnhrM0ZPJsYUmcw\"",
|
"etag": "\"858-l94GKn8Q0I5RQnhrM0ZPJsYUmcw\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 2136,
|
"size": 2136,
|
||||||
"path": "../public/data/mannschaften.csv"
|
"path": "../public/data/mannschaften.csv"
|
||||||
},
|
},
|
||||||
"/data/spielsysteme.csv": {
|
"/data/spielsysteme.csv": {
|
||||||
"type": "text/csv; charset=utf-8",
|
"type": "text/csv; charset=utf-8",
|
||||||
"etag": "\"9bc-4npLrNHYClsD0TKV5vSifxitfV0\"",
|
"etag": "\"9bc-4npLrNHYClsD0TKV5vSifxitfV0\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 2492,
|
"size": 2492,
|
||||||
"path": "../public/data/spielsysteme.csv"
|
"path": "../public/data/spielsysteme.csv"
|
||||||
},
|
},
|
||||||
"/data/termine.csv": {
|
"/data/termine.csv": {
|
||||||
"type": "text/csv; charset=utf-8",
|
"type": "text/csv; charset=utf-8",
|
||||||
"etag": "\"2e8-sZtaHF6QRmOQHinTWOLAYRgo6xk\"",
|
"etag": "\"2e8-sZtaHF6QRmOQHinTWOLAYRgo6xk\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 744,
|
"size": 744,
|
||||||
"path": "../public/data/termine.csv"
|
"path": "../public/data/termine.csv"
|
||||||
},
|
},
|
||||||
"/data/vereinsmeisterschaften.csv": {
|
"/data/vereinsmeisterschaften.csv": {
|
||||||
"type": "text/csv; charset=utf-8",
|
"type": "text/csv; charset=utf-8",
|
||||||
"etag": "\"989-X8AB+Zegy2xUbjDtbQcXhuuyBDQ\"",
|
"etag": "\"989-X8AB+Zegy2xUbjDtbQcXhuuyBDQ\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 2441,
|
"size": 2441,
|
||||||
"path": "../public/data/vereinsmeisterschaften.csv"
|
"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": {
|
"/images/club_about_us.png": {
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"etag": "\"202e56-s4fLsHEgoAgKJeBRuI1qxPmqHV0\"",
|
"etag": "\"202e56-s4fLsHEgoAgKJeBRuI1qxPmqHV0\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 2109014,
|
"size": 2109014,
|
||||||
"path": "../public/images/club_about_us.png"
|
"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": {
|
"/spielplaene/1. Mannschaft 2025⁄2026.pdf": {
|
||||||
"type": "application/pdf",
|
"type": "application/pdf",
|
||||||
"etag": "\"64c6-+477M+gD/spwpWR9NO/tMJ/inCc\"",
|
"etag": "\"64c6-+477M+gD/spwpWR9NO/tMJ/inCc\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 25798,
|
"size": 25798,
|
||||||
"path": "../public/spielplaene/1. Mannschaft 2025⁄2026.pdf"
|
"path": "../public/spielplaene/1. Mannschaft 2025⁄2026.pdf"
|
||||||
},
|
},
|
||||||
"/spielplaene/2. Mannschaft 2025⁄2026.pdf": {
|
"/spielplaene/2. Mannschaft 2025⁄2026.pdf": {
|
||||||
"type": "application/pdf",
|
"type": "application/pdf",
|
||||||
"etag": "\"5bfa-DRJMHLV15iss67lEISoGqSYmZjE\"",
|
"etag": "\"5bfa-DRJMHLV15iss67lEISoGqSYmZjE\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 23546,
|
"size": 23546,
|
||||||
"path": "../public/spielplaene/2. Mannschaft 2025⁄2026.pdf"
|
"path": "../public/spielplaene/2. Mannschaft 2025⁄2026.pdf"
|
||||||
},
|
},
|
||||||
"/spielplaene/3. Mannschaft 2025⁄2026.pdf": {
|
"/spielplaene/3. Mannschaft 2025⁄2026.pdf": {
|
||||||
"type": "application/pdf",
|
"type": "application/pdf",
|
||||||
"etag": "\"7447-w933CPQdXhkWJ2AZOVdY0UgJnPo\"",
|
"etag": "\"7447-w933CPQdXhkWJ2AZOVdY0UgJnPo\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 29767,
|
"size": 29767,
|
||||||
"path": "../public/spielplaene/3. Mannschaft 2025⁄2026.pdf"
|
"path": "../public/spielplaene/3. Mannschaft 2025⁄2026.pdf"
|
||||||
},
|
},
|
||||||
"/spielplaene/4. Mannschaft 2025⁄2026.pdf": {
|
"/spielplaene/4. Mannschaft 2025⁄2026.pdf": {
|
||||||
"type": "application/pdf",
|
"type": "application/pdf",
|
||||||
"etag": "\"6a9b-4TPGn1yQlFUMRj7oB43SN//Np9o\"",
|
"etag": "\"6a9b-4TPGn1yQlFUMRj7oB43SN//Np9o\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 27291,
|
"size": 27291,
|
||||||
"path": "../public/spielplaene/4. Mannschaft 2025⁄2026.pdf"
|
"path": "../public/spielplaene/4. Mannschaft 2025⁄2026.pdf"
|
||||||
},
|
},
|
||||||
"/spielplaene/5. Mannschaft 2025⁄2026.pdf": {
|
"/spielplaene/5. Mannschaft 2025⁄2026.pdf": {
|
||||||
"type": "application/pdf",
|
"type": "application/pdf",
|
||||||
"etag": "\"6523-5VUfCMaoiNhcwHhptHHTVJ3lSwQ\"",
|
"etag": "\"6523-5VUfCMaoiNhcwHhptHHTVJ3lSwQ\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 25891,
|
"size": 25891,
|
||||||
"path": "../public/spielplaene/5. Mannschaft 2025⁄2026.pdf"
|
"path": "../public/spielplaene/5. Mannschaft 2025⁄2026.pdf"
|
||||||
},
|
},
|
||||||
"/spielplaene/Jugend 11 2025⁄2026.pdf": {
|
"/spielplaene/Jugend 11 2025⁄2026.pdf": {
|
||||||
"type": "application/pdf",
|
"type": "application/pdf",
|
||||||
"etag": "\"52e9-3Rrk9UKUxPh80pBJ0w9oLVbe5dA\"",
|
"etag": "\"52e9-3Rrk9UKUxPh80pBJ0w9oLVbe5dA\"",
|
||||||
"mtime": "2025-10-21T12:23:52.942Z",
|
"mtime": "2025-10-21T12:26:43.724Z",
|
||||||
"size": 21225,
|
"size": 21225,
|
||||||
"path": "../public/spielplaene/Jugend 11 2025⁄2026.pdf"
|
"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": {
|
"/_nuxt/builds/latest.json": {
|
||||||
"type": "application/json",
|
"type": "application/json",
|
||||||
"etag": "\"47-/q4klalOGcZLNuNAOTMX4vWUUjQ\"",
|
"etag": "\"47-kOGypJX3WSPUFn1Stm19JHqc4sA\"",
|
||||||
"mtime": "2025-10-21T12:23:52.930Z",
|
"mtime": "2025-10-21T12:26:43.712Z",
|
||||||
"size": 71,
|
"size": 71,
|
||||||
"path": "../public/_nuxt/builds/latest.json"
|
"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",
|
"type": "application/json",
|
||||||
"etag": "\"8b-ukLKPsfh4e2SHzUtMBpRalzl754\"",
|
"etag": "\"8b-Asuz7BYxtnpahrIPs0NeXiXIsoI\"",
|
||||||
"mtime": "2025-10-21T12:23:52.927Z",
|
"mtime": "2025-10-21T12:26:43.709Z",
|
||||||
"size": 139,
|
"size": 139,
|
||||||
"path": "../public/_nuxt/builds/meta/aa97736b-e4f0-4d44-b281-d201aaa49f7b.json"
|
"path": "../public/_nuxt/builds/meta/d1f53c4b-c177-48ae-b455-ae57c570eb4a.json"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,8 @@ const login_post = defineEventHandler(async (event) => {
|
|||||||
await writeUsers(updatedUsers);
|
await writeUsers(updatedUsers);
|
||||||
setCookie(event, "auth_token", token, {
|
setCookie(event, "auth_token", token, {
|
||||||
httpOnly: true,
|
httpOnly: true,
|
||||||
secure: true,
|
secure: false,
|
||||||
|
// Auch in Production false, da wir HTTPS über Apache terminieren
|
||||||
sameSite: "lax",
|
sameSite: "lax",
|
||||||
maxAge: 60 * 60 * 24 * 7
|
maxAge: 60 * 60 * 24 * 7
|
||||||
// 7 days
|
// 7 days
|
||||||
|
|||||||
@@ -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;;;;"}
|
{"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;;;;"}
|
||||||
22
middleware/auth.global.js
Normal file
22
middleware/auth.global.js
Normal file
@@ -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')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
@@ -6,106 +6,98 @@
|
|||||||
</h1>
|
</h1>
|
||||||
<div class="w-24 h-1 bg-primary-600 mb-8" />
|
<div class="w-24 h-1 bg-primary-600 mb-8" />
|
||||||
|
|
||||||
<div class="bg-white rounded-xl shadow-lg p-8 mb-8">
|
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6 mb-8">
|
||||||
<h2 class="text-2xl font-display font-bold text-gray-900 mb-4">
|
<!-- Mein Profil -->
|
||||||
Willkommen, {{ user?.name }}!
|
|
||||||
</h2>
|
|
||||||
<p class="text-gray-600 mb-4">
|
|
||||||
Sie sind als <span class="font-semibold text-primary-600">{{ roleLabel }}</span> angemeldet.
|
|
||||||
</p>
|
|
||||||
<p class="text-sm text-gray-500">
|
|
||||||
Letzter Login: {{ lastLoginFormatted }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Quick Links -->
|
|
||||||
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
||||||
<NuxtLink
|
|
||||||
to="/mitgliederbereich/mitglieder"
|
|
||||||
class="bg-white p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-100"
|
|
||||||
>
|
|
||||||
<div class="flex items-center mb-4">
|
|
||||||
<div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4">
|
|
||||||
<Users :size="24" class="text-primary-600" />
|
|
||||||
</div>
|
|
||||||
<h3 class="text-lg font-semibold text-gray-900">Mitgliederliste</h3>
|
|
||||||
</div>
|
|
||||||
<p class="text-gray-600 text-sm">
|
|
||||||
Kontaktdaten aller Vereinsmitglieder
|
|
||||||
</p>
|
|
||||||
</NuxtLink>
|
|
||||||
|
|
||||||
<NuxtLink
|
|
||||||
to="/mitgliederbereich/news"
|
|
||||||
class="bg-white p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-100"
|
|
||||||
>
|
|
||||||
<div class="flex items-center mb-4">
|
|
||||||
<div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4">
|
|
||||||
<Newspaper :size="24" class="text-primary-600" />
|
|
||||||
</div>
|
|
||||||
<h3 class="text-lg font-semibold text-gray-900">Interne News</h3>
|
|
||||||
</div>
|
|
||||||
<p class="text-gray-600 text-sm">
|
|
||||||
Neuigkeiten nur für Mitglieder
|
|
||||||
</p>
|
|
||||||
</NuxtLink>
|
|
||||||
|
|
||||||
<NuxtLink
|
<NuxtLink
|
||||||
to="/mitgliederbereich/profil"
|
to="/mitgliederbereich/profil"
|
||||||
class="bg-white p-6 rounded-xl shadow-lg hover:shadow-xl transition-shadow border border-gray-100"
|
class="bg-white p-6 rounded-xl shadow-lg border border-gray-100 hover:shadow-xl transition-all group"
|
||||||
>
|
>
|
||||||
<div class="flex items-center mb-4">
|
<div class="flex items-center mb-4">
|
||||||
<div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center mr-4">
|
<div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center group-hover:bg-primary-600 transition-colors">
|
||||||
<UserCog :size="24" class="text-primary-600" />
|
<User :size="24" class="text-primary-600 group-hover:text-white" />
|
||||||
</div>
|
</div>
|
||||||
<h3 class="text-lg font-semibold text-gray-900">Mein Profil</h3>
|
<h2 class="ml-4 text-xl font-semibold text-gray-900">Mein Profil</h2>
|
||||||
</div>
|
</div>
|
||||||
<p class="text-gray-600 text-sm">
|
<p class="text-gray-600">
|
||||||
Profil bearbeiten und Passwort ändern
|
Persönliche Daten und Passwort verwalten
|
||||||
</p>
|
</p>
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
|
|
||||||
|
<!-- Mitgliederliste -->
|
||||||
|
<NuxtLink
|
||||||
|
to="/mitgliederbereich/mitglieder"
|
||||||
|
class="bg-white p-6 rounded-xl shadow-lg border border-gray-100 hover:shadow-xl transition-all group"
|
||||||
|
>
|
||||||
|
<div class="flex items-center mb-4">
|
||||||
|
<div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center group-hover:bg-primary-600 transition-colors">
|
||||||
|
<Users :size="24" class="text-primary-600 group-hover:text-white" />
|
||||||
|
</div>
|
||||||
|
<h2 class="ml-4 text-xl font-semibold text-gray-900">Mitglieder</h2>
|
||||||
|
</div>
|
||||||
|
<p class="text-gray-600">
|
||||||
|
Kontaktdaten der Vereinsmitglieder
|
||||||
|
</p>
|
||||||
|
</NuxtLink>
|
||||||
|
|
||||||
|
<!-- Interne News -->
|
||||||
|
<NuxtLink
|
||||||
|
to="/mitgliederbereich/news"
|
||||||
|
class="bg-white p-6 rounded-xl shadow-lg border border-gray-100 hover:shadow-xl transition-all group"
|
||||||
|
>
|
||||||
|
<div class="flex items-center mb-4">
|
||||||
|
<div class="w-12 h-12 bg-primary-100 rounded-lg flex items-center justify-center group-hover:bg-primary-600 transition-colors">
|
||||||
|
<Newspaper :size="24" class="text-primary-600 group-hover:text-white" />
|
||||||
|
</div>
|
||||||
|
<h2 class="ml-4 text-xl font-semibold text-gray-900">Interne News</h2>
|
||||||
|
</div>
|
||||||
|
<p class="text-gray-600">
|
||||||
|
Neuigkeiten und Ankündigungen
|
||||||
|
</p>
|
||||||
|
</NuxtLink>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Welcome Message -->
|
||||||
|
<div class="bg-white p-8 rounded-xl shadow-lg border border-gray-100">
|
||||||
|
<h2 class="text-2xl font-display font-bold text-gray-900 mb-4">
|
||||||
|
Willkommen, {{ authStore.user?.name || 'Mitglied' }}!
|
||||||
|
</h2>
|
||||||
|
<p class="text-gray-600 mb-6">
|
||||||
|
Hier finden Sie alle wichtigen Informationen und Funktionen für Mitglieder des Harheimer TC.
|
||||||
|
</p>
|
||||||
|
<div class="grid sm:grid-cols-2 gap-4">
|
||||||
|
<div class="flex items-start">
|
||||||
|
<Check :size="20" class="text-primary-600 mr-2 mt-0.5" />
|
||||||
|
<span class="text-gray-700">Zugriff auf Mitgliederliste mit Kontaktdaten</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-start">
|
||||||
|
<Check :size="20" class="text-primary-600 mr-2 mt-0.5" />
|
||||||
|
<span class="text-gray-700">Interne Vereinsnews und Ankündigungen</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-start">
|
||||||
|
<Check :size="20" class="text-primary-600 mr-2 mt-0.5" />
|
||||||
|
<span class="text-gray-700">Profilverwaltung und Passwort ändern</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-start">
|
||||||
|
<Check :size="20" class="text-primary-600 mr-2 mt-0.5" />
|
||||||
|
<span class="text-gray-700">Weitere Funktionen folgen in Kürze</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, onMounted } from 'vue'
|
import { User, Users, Newspaper, Check } from 'lucide-vue-next'
|
||||||
import { Users, Newspaper, UserCog } from 'lucide-vue-next'
|
|
||||||
|
|
||||||
const user = ref(null)
|
const authStore = useAuthStore()
|
||||||
|
|
||||||
const roleLabel = computed(() => {
|
|
||||||
const labels = {
|
|
||||||
admin: 'Administrator',
|
|
||||||
vorstand: 'Vorstand',
|
|
||||||
mitglied: 'Mitglied'
|
|
||||||
}
|
|
||||||
return labels[user.value?.role] || 'Mitglied'
|
|
||||||
})
|
|
||||||
|
|
||||||
const lastLoginFormatted = computed(() => {
|
|
||||||
if (!user.value?.lastLogin) return 'Erste Anmeldung'
|
|
||||||
return new Date(user.value.lastLogin).toLocaleString('de-DE')
|
|
||||||
})
|
|
||||||
|
|
||||||
onMounted(async () => {
|
|
||||||
try {
|
|
||||||
const response = await $fetch('/api/auth/status')
|
|
||||||
if (response.isLoggedIn) {
|
|
||||||
user.value = response.user
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Fehler beim Laden der Benutzerdaten:', error)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
middleware: 'auth'
|
middleware: 'auth',
|
||||||
|
layout: 'default'
|
||||||
})
|
})
|
||||||
|
|
||||||
useHead({
|
useHead({
|
||||||
title: 'Mitgliederbereich - Harheimer TC',
|
title: 'Mitgliederbereich - Harheimer TC',
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
260
pages/mitgliederbereich/profil.vue
Normal file
260
pages/mitgliederbereich/profil.vue
Normal file
@@ -0,0 +1,260 @@
|
|||||||
|
<template>
|
||||||
|
<div class="min-h-full py-16 bg-gray-50">
|
||||||
|
<div class="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
|
<h1 class="text-4xl sm:text-5xl font-display font-bold text-gray-900 mb-6">
|
||||||
|
Mein Profil
|
||||||
|
</h1>
|
||||||
|
<div class="w-24 h-1 bg-primary-600 mb-8" />
|
||||||
|
|
||||||
|
<div class="bg-white rounded-xl shadow-lg p-8 border border-gray-100">
|
||||||
|
<!-- Loading State -->
|
||||||
|
<div v-if="isLoading" class="flex items-center justify-center py-12">
|
||||||
|
<Loader2 :size="40" class="animate-spin text-primary-600" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Profile Form -->
|
||||||
|
<form v-else @submit.prevent="handleSave" class="space-y-6">
|
||||||
|
<!-- Name -->
|
||||||
|
<div>
|
||||||
|
<label for="name" class="block text-sm font-medium text-gray-700 mb-2">
|
||||||
|
Name
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
id="name"
|
||||||
|
v-model="formData.name"
|
||||||
|
type="text"
|
||||||
|
required
|
||||||
|
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500"
|
||||||
|
:disabled="isSaving"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- E-Mail -->
|
||||||
|
<div>
|
||||||
|
<label for="email" class="block text-sm font-medium text-gray-700 mb-2">
|
||||||
|
E-Mail-Adresse
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
id="email"
|
||||||
|
v-model="formData.email"
|
||||||
|
type="email"
|
||||||
|
required
|
||||||
|
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500"
|
||||||
|
:disabled="isSaving"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Telefon -->
|
||||||
|
<div>
|
||||||
|
<label for="phone" class="block text-sm font-medium text-gray-700 mb-2">
|
||||||
|
Telefonnummer
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
id="phone"
|
||||||
|
v-model="formData.phone"
|
||||||
|
type="tel"
|
||||||
|
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500"
|
||||||
|
:disabled="isSaving"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Passwort ändern -->
|
||||||
|
<div class="border-t border-gray-200 pt-6 mt-6">
|
||||||
|
<h3 class="text-lg font-semibold text-gray-900 mb-4">Passwort ändern</h3>
|
||||||
|
|
||||||
|
<div class="space-y-4">
|
||||||
|
<div>
|
||||||
|
<label for="currentPassword" class="block text-sm font-medium text-gray-700 mb-2">
|
||||||
|
Aktuelles Passwort
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
id="currentPassword"
|
||||||
|
v-model="passwordData.current"
|
||||||
|
type="password"
|
||||||
|
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500"
|
||||||
|
:disabled="isSaving"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="newPassword" class="block text-sm font-medium text-gray-700 mb-2">
|
||||||
|
Neues Passwort
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
id="newPassword"
|
||||||
|
v-model="passwordData.new"
|
||||||
|
type="password"
|
||||||
|
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500"
|
||||||
|
:disabled="isSaving"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="confirmPassword" class="block text-sm font-medium text-gray-700 mb-2">
|
||||||
|
Passwort bestätigen
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
id="confirmPassword"
|
||||||
|
v-model="passwordData.confirm"
|
||||||
|
type="password"
|
||||||
|
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500"
|
||||||
|
:disabled="isSaving"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Error/Success Messages -->
|
||||||
|
<div v-if="errorMessage" class="flex items-center p-3 rounded-md bg-red-50 text-red-700 text-sm">
|
||||||
|
<AlertCircle :size="20" class="mr-2" />
|
||||||
|
{{ errorMessage }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="successMessage" class="flex items-center p-3 rounded-md bg-green-50 text-green-700 text-sm">
|
||||||
|
<Check :size="20" class="mr-2" />
|
||||||
|
{{ successMessage }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Submit Button -->
|
||||||
|
<div class="flex justify-end space-x-4">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
@click="loadProfile"
|
||||||
|
class="px-6 py-2 border border-gray-300 text-gray-700 rounded-lg hover:bg-gray-50 transition-colors"
|
||||||
|
:disabled="isSaving"
|
||||||
|
>
|
||||||
|
Zurücksetzen
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
class="px-6 py-2 bg-primary-600 hover:bg-primary-700 text-white font-semibold rounded-lg transition-colors flex items-center"
|
||||||
|
:disabled="isSaving"
|
||||||
|
>
|
||||||
|
<Loader2 v-if="isSaving" :size="20" class="animate-spin mr-2" />
|
||||||
|
<span>{{ isSaving ? 'Speichert...' : 'Speichern' }}</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted } from 'vue'
|
||||||
|
import { AlertCircle, Check, Loader2 } from 'lucide-vue-next'
|
||||||
|
|
||||||
|
const authStore = useAuthStore()
|
||||||
|
|
||||||
|
const isLoading = ref(true)
|
||||||
|
const isSaving = ref(false)
|
||||||
|
const errorMessage = ref('')
|
||||||
|
const successMessage = ref('')
|
||||||
|
|
||||||
|
const formData = ref({
|
||||||
|
name: '',
|
||||||
|
email: '',
|
||||||
|
phone: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const passwordData = ref({
|
||||||
|
current: '',
|
||||||
|
new: '',
|
||||||
|
confirm: ''
|
||||||
|
})
|
||||||
|
|
||||||
|
const loadProfile = async () => {
|
||||||
|
isLoading.value = true
|
||||||
|
errorMessage.value = ''
|
||||||
|
successMessage.value = ''
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await $fetch('/api/profile')
|
||||||
|
formData.value = {
|
||||||
|
name: response.user.name,
|
||||||
|
email: response.user.email,
|
||||||
|
phone: response.user.phone || ''
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
errorMessage.value = 'Fehler beim Laden des Profils.'
|
||||||
|
} finally {
|
||||||
|
isLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSave = async () => {
|
||||||
|
isSaving.value = true
|
||||||
|
errorMessage.value = ''
|
||||||
|
successMessage.value = ''
|
||||||
|
|
||||||
|
// Validate password change if provided
|
||||||
|
if (passwordData.value.current || passwordData.value.new || passwordData.value.confirm) {
|
||||||
|
if (!passwordData.value.current) {
|
||||||
|
errorMessage.value = 'Bitte geben Sie Ihr aktuelles Passwort ein.'
|
||||||
|
isSaving.value = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!passwordData.value.new) {
|
||||||
|
errorMessage.value = 'Bitte geben Sie ein neues Passwort ein.'
|
||||||
|
isSaving.value = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (passwordData.value.new !== passwordData.value.confirm) {
|
||||||
|
errorMessage.value = 'Die neuen Passwörter stimmen nicht überein.'
|
||||||
|
isSaving.value = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (passwordData.value.new.length < 6) {
|
||||||
|
errorMessage.value = 'Das neue Passwort muss mindestens 6 Zeichen lang sein.'
|
||||||
|
isSaving.value = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await $fetch('/api/profile', {
|
||||||
|
method: 'PUT',
|
||||||
|
body: {
|
||||||
|
name: formData.value.name,
|
||||||
|
email: formData.value.email,
|
||||||
|
phone: formData.value.phone,
|
||||||
|
currentPassword: passwordData.value.current || undefined,
|
||||||
|
newPassword: passwordData.value.new || undefined
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
successMessage.value = 'Profil erfolgreich aktualisiert!'
|
||||||
|
|
||||||
|
// Clear password fields
|
||||||
|
passwordData.value = {
|
||||||
|
current: '',
|
||||||
|
new: '',
|
||||||
|
confirm: ''
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update auth store if email changed
|
||||||
|
await authStore.checkAuth()
|
||||||
|
|
||||||
|
// Scroll to top to show success message
|
||||||
|
window.scrollTo({ top: 0, behavior: 'smooth' })
|
||||||
|
} catch (error) {
|
||||||
|
errorMessage.value = error.data?.message || 'Fehler beim Speichern des Profils.'
|
||||||
|
} finally {
|
||||||
|
isSaving.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
loadProfile()
|
||||||
|
})
|
||||||
|
|
||||||
|
definePageMeta({
|
||||||
|
middleware: 'auth',
|
||||||
|
layout: 'default'
|
||||||
|
})
|
||||||
|
|
||||||
|
useHead({
|
||||||
|
title: 'Mein Profil - Harheimer TC',
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
48
server/api/profile.get.js
Normal file
48
server/api/profile.get.js
Normal file
@@ -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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
99
server/api/profile.put.js
Normal file
99
server/api/profile.put.js
Normal file
@@ -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
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
@@ -75,5 +75,19 @@
|
|||||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEiLCJlbWFpbCI6ImFkbWluQGhhcmhlaW1lcnRjLmRlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzYxMDQ5NDQ5LCJleHAiOjE3NjE2NTQyNDl9.hCs7tx4v2wWLwD7CkWho6YI7oTYWrZwrgmAgfA1EupM",
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEiLCJlbWFpbCI6ImFkbWluQGhhcmhlaW1lcnRjLmRlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzYxMDQ5NDQ5LCJleHAiOjE3NjE2NTQyNDl9.hCs7tx4v2wWLwD7CkWho6YI7oTYWrZwrgmAgfA1EupM",
|
||||||
"createdAt": "2025-10-21T12:24:09.140Z",
|
"createdAt": "2025-10-21T12:24:09.140Z",
|
||||||
"expiresAt": "2025-10-28T12: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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -8,6 +8,6 @@
|
|||||||
"phone": "",
|
"phone": "",
|
||||||
"active": true,
|
"active": true,
|
||||||
"created": "2025-10-21T00:00:00.000Z",
|
"created": "2025-10-21T00:00:00.000Z",
|
||||||
"lastLogin": "2025-10-21T12:24:09.140Z"
|
"lastLogin": "2025-10-21T12:26:56.717Z"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user