69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
// server.js (Node.js + Express backend)
|
|
const express = require('express');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const bodyParser = require('body-parser');
|
|
const cookieParser = require('cookie-parser');
|
|
const jwt = require('jsonwebtoken');
|
|
const app = express();
|
|
|
|
const SECRET_KEY = 'your_super_secret_key';
|
|
const PASSWORD = 'shardwalker2025'; // set your password here
|
|
const PORT = 3000;
|
|
|
|
app.use(express.static('public'));
|
|
app.use(bodyParser.json());
|
|
app.use(cookieParser());
|
|
|
|
// Serve login check
|
|
app.get('/check-auth', (req, res) => {
|
|
const token = req.cookies.token;
|
|
if (!token) return res.status(401).json({ authenticated: false });
|
|
|
|
try {
|
|
jwt.verify(token, SECRET_KEY);
|
|
res.json({ authenticated: true });
|
|
} catch (err) {
|
|
res.status(403).json({ authenticated: false });
|
|
}
|
|
});
|
|
|
|
// Login route
|
|
app.post('/login', (req, res) => {
|
|
const { password } = req.body;
|
|
if (password === PASSWORD) {
|
|
const token = jwt.sign({ user: 'admin' }, SECRET_KEY, { expiresIn: '1d' });
|
|
res.cookie('token', token, { httpOnly: true });
|
|
res.json({ success: true });
|
|
} else {
|
|
res.status(403).json({ success: false });
|
|
}
|
|
});
|
|
|
|
// Get current roadmap
|
|
app.get('/api/roadmap', (req, res) => {
|
|
const data = fs.readFileSync(path.join(__dirname, 'roadmap.json'));
|
|
res.json(JSON.parse(data));
|
|
});
|
|
|
|
// Update roadmap status
|
|
app.post('/api/roadmap', (req, res) => {
|
|
const token = req.cookies.token;
|
|
if (!token || !jwt.verify(token, SECRET_KEY)) {
|
|
return res.status(403).json({ success: false });
|
|
}
|
|
const { id, status } = req.body;
|
|
const filePath = path.join(__dirname, 'roadmap.json');
|
|
const roadmap = JSON.parse(fs.readFileSync(filePath));
|
|
const phase = roadmap.find(p => p.id === id);
|
|
if (phase) {
|
|
phase.status = status;
|
|
fs.writeFileSync(filePath, JSON.stringify(roadmap, null, 2));
|
|
res.json({ success: true });
|
|
} else {
|
|
res.status(404).json({ success: false });
|
|
}
|
|
});
|
|
|
|
app.listen(PORT, () => console.log(`Server running at http://localhost:${PORT}`));
|