Files
mcs-lose/backend/server.js
theis.gaedigk 8c2049fa24 feat: add authentication and admin features
- Added `jose` library for JWT token generation and verification.
- Implemented login functionality with token storage using cookies.
- Created `HeaderAdmin` component for admin panel with login/logout capabilities.
- Developed `LoginForm` component for user authentication.
- Added `Table` component to display data with caching from localStorage.
- Introduced `SubHeaderAdmin` for additional admin actions.
- Enhanced `database.js` with functions for admin login and fetching table data.
- Updated `server.js` to handle new routes for login and table data retrieval.
- Modified `package.json` and `package-lock.json` to include new dependencies.
2025-08-12 22:56:58 +02:00

58 lines
1.5 KiB
JavaScript

import express from "express";
import cors from "cors";
import env from "dotenv";
import { query, loginAdmin, getTableData } from "./services/database.js";
import { generateToken, authenticate } from "./services/tokenService.js";
env.config();
const app = express();
const port = 8002;
app.use(cors());
app.use(express.urlencoded({ extended: true }));
app.set("view engine", "ejs");
app.use(express.json());
app.get("/", (req, res) => {
res.render("index.ejs", { title: port });
});
app.post("/lose", async (req, res) => {
const result = await query(req.body);
if (result.success) {
res.status(200).send("Update successful");
} else {
res.status(400).send("Update failed");
}
});
app.get("/table-data", authenticate, async (req, res) => {
const result = await getTableData();
if (result.success) {
res.status(200).json(result.data);
} else {
res.status(500);
}
});
app.post("/login", async (req, res) => {
const { username, password } = req.body;
const result = await loginAdmin(username, password);
if (result.success) {
const token = await generateToken({ username });
res.status(200).json({ success: true, token });
} else {
res.status(401).json({ success: false });
}
});
app.listen(port, () => {
console.log(`Server is running on port: ${port}`);
});
// error handling code
app.use((err, req, res, next) => {
// Log the error stack and send a generic error response
console.error(err.stack);
res.status(500).send("Something broke!");
});