Add smart member list with manual+login merge and duplicate detection
This commit is contained in:
108
.output/server/chunks/_/auth.mjs
Normal file
108
.output/server/chunks/_/auth.mjs
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user