lts-stats-api/app/routes/admin.js

97 lines
2.4 KiB
JavaScript
Raw Normal View History

2023-01-15 18:42:26 +01:00
const express = require('express');
2023-01-22 00:02:30 +01:00
const passport = require('passport')
const LocalStrategy = require('passport-local');
2023-09-09 18:24:57 +02:00
const { initSessionsData, createUser, authenticate, changePassword } = require('../controllers/adminController');
2023-01-15 18:42:26 +01:00
const router = express.Router();
2023-09-09 18:24:57 +02:00
const NOT_AUTHENTICATED = 'not-authenticated';
const WRONG_PASSWORD = 'wrong-password';
const checkAuthenticated = (req) => {
if (!req.isAuthenticated()) {
throw new Error(NOT_AUTHENTICATED);
}
};
2023-01-22 00:02:30 +01:00
passport.use(new LocalStrategy(async function verify(username, password, cb) {
try {
const user = await authenticate(username, password);
delete user._id;
if (user) {
return cb(null, user);
}
return cb(null, false, { message: 'Incorrect username or password.' });
} catch (err) {
return cb(null, false, { message: 'Incorrect username or password.' });
}
}));
passport.serializeUser(function(user, cb) {
process.nextTick(function() {
const { id, username, roles, firstname, lastname, vid } = user;
cb(null, { id, username, roles, firstname, lastname, vid });
});
});
passport.deserializeUser(function(user, cb) {
process.nextTick(function() {
return cb(null, user);
});
});
2023-01-15 18:42:26 +01:00
router.get('/init-sessions', async(req, res) => {
try {
await initSessionsData(req.query);
res.status(200);
} catch (err) {
console.log('error', err.response);
}
});
2023-01-22 00:02:30 +01:00
router.post('/user/create', async(req, res) => {
await createUser(req);
res.status(201);
});
router.post('/user/authenticate',
passport.authenticate('local'),
function(req, res) {
res.json(req.user);
});
2023-09-09 18:24:57 +02:00
router.post('/user/password-change',
async function(req, res, next) {
try {
checkAuthenticated(req);
await changePassword(req);
console.log('pasword changed');
res.status(200).send();
} catch (err) {
if (err.message === NOT_AUTHENTICATED || err.message === WRONG_PASSWORD) {
res.status(401).json({
error: err.message
});
next();
} else {
res.status(500).send();
}
}
});
2023-01-22 00:02:30 +01:00
router.get('/user/alive',
function(req, res) {
console.log('req.user :>> ', req.isAuthenticated());
res.status(200).json(req.user);
});
router.get('/user/logout', function(req, res, next) {
req.logout(function(err) {
if (err) { return next(err); }
req.session.destroy();
res.status(200).send();
});
});
2023-01-15 18:42:26 +01:00
module.exports = router;