diff --git a/.output/nitro.json b/.output/nitro.json new file mode 100644 index 0000000..a6b7a81 --- /dev/null +++ b/.output/nitro.json @@ -0,0 +1,15 @@ +{ + "date": "2025-10-21T12:32:03.239Z", + "preset": "node-server", + "framework": { + "name": "nuxt", + "version": "4.1.3" + }, + "versions": { + "nitro": "2.12.7" + }, + "commands": { + "preview": "node server/index.mjs" + }, + "config": {} +} \ No newline at end of file diff --git a/.output/public/_nuxt/builds/latest.json b/.output/public/_nuxt/builds/latest.json index a6eddb2..73c2910 100644 --- a/.output/public/_nuxt/builds/latest.json +++ b/.output/public/_nuxt/builds/latest.json @@ -1 +1 @@ -{"id":"d55b57df-1177-4966-90bc-a07b1837debb","timestamp":1761049822869} \ No newline at end of file +{"id":"f1db3745-a031-477c-933f-6868f5829384","timestamp":1761049916604} \ No newline at end of file diff --git a/.output/public/_nuxt/builds/meta/d55b57df-1177-4966-90bc-a07b1837debb.json b/.output/public/_nuxt/builds/meta/d55b57df-1177-4966-90bc-a07b1837debb.json deleted file mode 100644 index 19388c7..0000000 --- a/.output/public/_nuxt/builds/meta/d55b57df-1177-4966-90bc-a07b1837debb.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"d55b57df-1177-4966-90bc-a07b1837debb","timestamp":1761049822869,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]} \ No newline at end of file diff --git a/.output/public/_nuxt/builds/meta/f1db3745-a031-477c-933f-6868f5829384.json b/.output/public/_nuxt/builds/meta/f1db3745-a031-477c-933f-6868f5829384.json new file mode 100644 index 0000000..4d383de --- /dev/null +++ b/.output/public/_nuxt/builds/meta/f1db3745-a031-477c-933f-6868f5829384.json @@ -0,0 +1 @@ +{"id":"f1db3745-a031-477c-933f-6868f5829384","timestamp":1761049916604,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]} \ No newline at end of file diff --git a/.output/server/chunks/_/auth.mjs b/.output/server/chunks/_/auth.mjs new file mode 100644 index 0000000..ae13652 --- /dev/null +++ b/.output/server/chunks/_/auth.mjs @@ -0,0 +1,108 @@ +import bcrypt from 'bcryptjs'; +import jwt from 'jsonwebtoken'; +import { promises } from 'fs'; +import path from 'path'; + +const JWT_SECRET = process.env.JWT_SECRET || "harheimertc-secret-key-change-in-production"; +const getDataPath = (filename) => { + const cwd = process.cwd(); + if (cwd.endsWith(".output")) { + return path.join(cwd, "../server/data", filename); + } + return path.join(cwd, "server/data", filename); +}; +const USERS_FILE = getDataPath("users.json"); +const SESSIONS_FILE = getDataPath("sessions.json"); +async function readUsers() { + try { + const data = await promises.readFile(USERS_FILE, "utf-8"); + return JSON.parse(data); + } catch (error) { + console.error("Fehler beim Lesen der Benutzerdaten:", error); + return []; + } +} +async function writeUsers(users) { + try { + await promises.writeFile(USERS_FILE, JSON.stringify(users, null, 2), "utf-8"); + return true; + } catch (error) { + console.error("Fehler beim Schreiben der Benutzerdaten:", error); + return false; + } +} +async function readSessions() { + try { + const data = await promises.readFile(SESSIONS_FILE, "utf-8"); + return JSON.parse(data); + } catch (error) { + console.error("Fehler beim Lesen der Sessions:", error); + return []; + } +} +async function writeSessions(sessions) { + try { + await promises.writeFile(SESSIONS_FILE, JSON.stringify(sessions, null, 2), "utf-8"); + return true; + } catch (error) { + console.error("Fehler beim Schreiben der Sessions:", error); + return false; + } +} +async function hashPassword(password) { + const salt = await bcrypt.genSalt(10); + return await bcrypt.hash(password, salt); +} +async function verifyPassword(password, hash) { + return await bcrypt.compare(password, hash); +} +function generateToken(user) { + return jwt.sign( + { + id: user.id, + email: user.email, + role: user.role + }, + JWT_SECRET, + { expiresIn: "7d" } + ); +} +function verifyToken(token) { + try { + return jwt.verify(token, JWT_SECRET); + } catch (error) { + return null; + } +} +async function getUserById(id) { + const users = await readUsers(); + return users.find((u) => u.id === id); +} +async function getUserFromToken(token) { + const decoded = verifyToken(token); + if (!decoded) return null; + const users = await readUsers(); + return users.find((u) => u.id === decoded.id); +} +async function createSession(userId, token) { + const sessions = await readSessions(); + const session = { + id: Date.now().toString(), + userId, + token, + createdAt: (/* @__PURE__ */ new Date()).toISOString(), + expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1e3).toISOString() + // 7 days + }; + sessions.push(session); + await writeSessions(sessions); + return session; +} +async function deleteSession(token) { + const sessions = await readSessions(); + const filtered = sessions.filter((s) => s.token !== token); + await writeSessions(filtered); +} + +export { getUserFromToken as a, verifyToken as b, createSession as c, deleteSession as d, getUserById as e, generateToken as g, hashPassword as h, readUsers as r, verifyPassword as v, writeUsers as w }; +//# sourceMappingURL=auth.mjs.map diff --git a/.output/server/chunks/_/auth.mjs.map b/.output/server/chunks/_/auth.mjs.map new file mode 100644 index 0000000..dd444a2 --- /dev/null +++ b/.output/server/chunks/_/auth.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"auth.mjs","sources":["../../../../server/utils/auth.js"],"sourcesContent":null,"names":["fs"],"mappings":"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"} \ No newline at end of file diff --git a/.output/server/chunks/_/error-500.mjs b/.output/server/chunks/_/error-500.mjs new file mode 100644 index 0000000..a9de2fd --- /dev/null +++ b/.output/server/chunks/_/error-500.mjs @@ -0,0 +1,10 @@ +import { escapeHtml } from '@vue/shared'; + +const _messages = { "appName": "Nuxt", "statusCode": 500, "statusMessage": "Internal server error", "description": "This page is temporarily unavailable.", "refresh": "Refresh this page" }; +const template = (messages) => { + messages = { ..._messages, ...messages }; + return '