- catalogo avanti, parte 1
This commit is contained in:
@@ -651,7 +651,36 @@ router.post('/newtok', async (req, res) => {
|
||||
|
||||
});
|
||||
|
||||
router.post('/login', (req, res) => {
|
||||
// Dizionario per tenere traccia dei tentativi di accesso falliti per ogni utente
|
||||
const failedLoginAttempts = {};
|
||||
|
||||
// Costante per il numero massimo di tentativi di accesso falliti prima del blocco
|
||||
const MAX_FAILED_ATTEMPTS = 3;
|
||||
|
||||
// Costante per la durata del blocco in millisecondi (ad esempio 30 minuti)
|
||||
const BLOCK_DURATION = 30 * 60 * 1000; // 30 minuti
|
||||
|
||||
// Funzione per bloccare un utente per un periodo di tempo dopo un numero specificato di tentativi falliti
|
||||
function blockUser(username) {
|
||||
failedLoginAttempts[username] = Date.now() + BLOCK_DURATION;
|
||||
}
|
||||
|
||||
// Middleware per controllare se l'utente è bloccato
|
||||
function checkBlocked(req, res, next) {
|
||||
const { username } = req.body;
|
||||
const now = Date.now();
|
||||
|
||||
if (failedLoginAttempts[username] && failedLoginAttempts[username] > now) {
|
||||
text = 'Utente bloccato. Riprova più tardi. (username=' + username + ')';
|
||||
console.log(text);
|
||||
return res.status(403).json({ message: 'Utente bloccato. Riprova più tardi.' });
|
||||
}
|
||||
|
||||
next();
|
||||
}
|
||||
|
||||
|
||||
router.post('/login', checkBlocked, (req, res) => {
|
||||
var body = _.pick(req.body,
|
||||
['username', 'password', 'idapp', 'keyappid', 'lang']);
|
||||
var user = new User(body);
|
||||
@@ -668,18 +697,47 @@ router.post('/login', (req, res) => {
|
||||
|
||||
const myuser = user;
|
||||
|
||||
User.findByCredentials(user.idapp, user.username, user.password).
|
||||
return User.findByCredentials(user.idapp, user.username, user.password).
|
||||
then(async (user) => {
|
||||
// tools.mylog("CREDENZIALI ! ");
|
||||
if (!user) {
|
||||
|
||||
const rislogin = await User.tooManyLoginWrong(body.idapp, body.username, true);
|
||||
if (rislogin.troppilogin) {
|
||||
let text = 'Troppe richieste di Login ERRATE: ' + body.username + ' [IP: ' + tools.getiPAddressUser(req) + '] Tentativi: ' + rislogin.retry_pwd;
|
||||
telegrambot.sendMsgTelegramToTheManagers(body.idapp, text);
|
||||
console.log('/login', text);
|
||||
res.status(400).send({ code: server_constants.RIS_CODE_ERR, msg: text });
|
||||
return false;
|
||||
}
|
||||
|
||||
await tools.snooze(3000);
|
||||
const msg = 'Tentativo di Login ERRATO [' + body.username + ' , ' + ']\n' + '[IP: ' + tools.getiPAddressUser(req) +
|
||||
']';
|
||||
|
||||
if (!failedLoginAttempts[body.username]) {
|
||||
failedLoginAttempts[body.username] = 1;
|
||||
} else {
|
||||
failedLoginAttempts[body.username]++;
|
||||
}
|
||||
|
||||
|
||||
const msg = 'Tentativo (' + failedLoginAttempts[body.username] + ') di Login ERRATO [' + body.username + ' , ' + ']\n' + '[IP: ' + tools.getiPAddressUser(req) + ']';
|
||||
tools.mylogshow(msg);
|
||||
await telegrambot.sendMsgTelegramToTheAdmin(myuser.idapp, msg, true);
|
||||
tools.writeErrorLog(msg);
|
||||
// telegrambot.sendMsgTelegramToTheManagers(body.idapp, msg);
|
||||
res.status(404).send({ code: server_constants.RIS_CODE_LOGIN_ERR });
|
||||
|
||||
if (failedLoginAttempts[body.username] >= MAX_FAILED_ATTEMPTS) {
|
||||
blockUser(body.username);
|
||||
text = 'Troppi tentativi di accesso falliti. Utente bloccato (' + body.username + ')' + ' [IP: ' + tools.getiPAddressUser(req) + ']';
|
||||
tools.mylogshow(text);
|
||||
telegrambot.sendMsgTelegramToTheManagers(req.body.idapp, text);
|
||||
res.status(403).json({ message: text });
|
||||
resalreadysent = true;
|
||||
}
|
||||
|
||||
res.status(401).send({ code: server_constants.RIS_CODE_LOGIN_ERR });
|
||||
resalreadysent = true;
|
||||
|
||||
}
|
||||
return user;
|
||||
}).
|
||||
|
||||
Reference in New Issue
Block a user