feat: initialize microservice architecture with auth, api, realtime, copernicus, ml, and console modules
This commit is contained in:
97
auth/src/routes/auth.js
Normal file
97
auth/src/routes/auth.js
Normal file
@@ -0,0 +1,97 @@
|
||||
const router = require('express').Router();
|
||||
const auth = require('../core/auth.core');
|
||||
const jwt = require('../tools/jwt');
|
||||
|
||||
const version = process.env.VERSION;
|
||||
const vBuild = process.env.VERSION_BUILD;
|
||||
const vState = process.env.VERSION_STATE;
|
||||
|
||||
const CONSOLE_URL = process.env.CONSOLE_URL || 'http://localhost:3004';
|
||||
const COOKIE_DOMAIN = process.env.COOKIE_DOMAIN || undefined;
|
||||
|
||||
router.get('/health', (req, res) => {
|
||||
res.json({
|
||||
status: 'ok',
|
||||
service: 'auth',
|
||||
version: version,
|
||||
build_number: vBuild,
|
||||
version_state: vState
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/register', async (req, res) => {
|
||||
const { username, password } = req.body;
|
||||
|
||||
if (!username || !password) {
|
||||
return res.status(400).json({ error: 'Username e password richiesti' });
|
||||
}
|
||||
|
||||
try {
|
||||
await auth.register(username, password);
|
||||
res.status(201).end();
|
||||
} catch (err) {
|
||||
console.error('[AUTH] Register failed:', err.message);
|
||||
const status = err.message === 'User already exists' ? 409 : 500;
|
||||
res.status(status).json({ error: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/login', (req, res) => {
|
||||
const redirect = req.query.redirect || '';
|
||||
res.render('loginpage', { error: null, redirect });
|
||||
});
|
||||
|
||||
router.post('/login', async (req, res) => {
|
||||
const { username, password, redirect } = req.body;
|
||||
|
||||
try {
|
||||
const user = await auth.login(username, password);
|
||||
const session = await auth.newSession(user.id, req.headers['user-agent'], req.ip);
|
||||
const token = jwt.generateToken(user, session.id);
|
||||
|
||||
const cookieOptions = {
|
||||
httpOnly: true,
|
||||
secure: process.env.NODE_ENV === 'production',
|
||||
sameSite: 'lax',
|
||||
maxAge: 7 * 24 * 60 * 60 * 1000 // 7 giorni
|
||||
};
|
||||
|
||||
if (COOKIE_DOMAIN) {
|
||||
cookieOptions.domain = COOKIE_DOMAIN;
|
||||
}
|
||||
|
||||
res.cookie('auth_token', token, cookieOptions);
|
||||
|
||||
// Redirect alla pagina da cui l'utente e' arrivato, o alla console
|
||||
const destination = redirect || CONSOLE_URL;
|
||||
res.redirect(destination);
|
||||
} catch (err) {
|
||||
console.error('[AUTH] Login failed:', err.message, err.stack);
|
||||
res.render('loginpage', { error: 'Credenziali non valide', redirect: redirect || '' });
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/logout', async (req, res) => {
|
||||
const token = req.cookies && req.cookies.auth_token;
|
||||
|
||||
if (token) {
|
||||
try {
|
||||
const verified = jwt.verifyToken(token);
|
||||
if (verified.valid) {
|
||||
await auth.logout(verified.payload.session_id);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('[AUTH] Logout error:', err.message);
|
||||
}
|
||||
}
|
||||
|
||||
const clearOptions = { httpOnly: true, sameSite: 'lax' };
|
||||
if (COOKIE_DOMAIN) {
|
||||
clearOptions.domain = COOKIE_DOMAIN;
|
||||
}
|
||||
|
||||
res.clearCookie('auth_token', clearOptions);
|
||||
res.redirect('/login');
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user