Files
Avtex/docker/legacy-server/api/src/routes/auth.js
T

98 lines
2.4 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { generateToken } = require('../middleware/auth');
// Mock user storage (в продакшене использовать базу данных)
const users = new Map();
// Register
router.post('/register', async (req, res) => {
try {
const { email, password, username } = req.body;
if (!email || !password || !username) {
return res.status(400).json({ error: 'Email, password and username are required' });
}
if (users.has(email)) {
return res.status(409).json({ error: 'User already exists' });
}
const userId = Date.now().toString();
const user = {
id: userId,
email,
username,
password, // В продакшене хешировать!
createdAt: new Date().toISOString()
};
users.set(email, user);
const token = generateToken(user);
res.status(201).json({
message: 'User registered successfully',
token,
user: {
id: user.id,
email: user.email,
username: user.username
}
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Login
router.post('/login', async (req, res) => {
try {
const { email, password } = req.body;
if (!email || !password) {
return res.status(400).json({ error: 'Email and password are required' });
}
const user = users.get(email);
if (!user || user.password !== password) {
return res.status(401).json({ error: 'Invalid credentials' });
}
const token = generateToken(user);
res.json({
message: 'Login successful',
token,
user: {
id: user.id,
email: user.email,
username: user.username
}
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Validate token
router.get('/validate', async (req, res) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) {
return res.status(401).json({ valid: false, error: 'No token provided' });
}
try {
const jwt = require('jsonwebtoken');
const decoded = jwt.verify(token, process.env.JWT_SECRET || 'your-super-secret-jwt-key');
res.json({ valid: true, user: decoded });
} catch (error) {
res.status(403).json({ valid: false, error: 'Invalid token' });
}
});
module.exports = router;