Files
freeplanet_serverside/src/server/middleware/authenticate.js

110 lines
2.7 KiB
JavaScript
Raw Normal View History

const server_constants = require('../tools/server_constants');
2020-04-24 10:29:25 +02:00
var { User } = require('../models/user');
2018-12-24 20:31:02 +01:00
const tools = require('../tools/general');
2020-12-25 03:54:16 +01:00
const auth_default = (req, res, next) => {
if (req.body.keyappid === process.env.KEY_APP_ID)
next();
};
const authenticate = (req, res, next) => {
const token = req.header('x-auth');
2024-04-11 11:43:19 +02:00
//const refreshToken = req.header('x-refrtok');
2018-12-24 20:31:02 +01:00
// console.log('authenticate... ');
let noaut = false;
if (req.body.hasOwnProperty('noaut')) {
noaut = req.body.noaut;
}
if (noaut) {
next();
return;
}
const access = 'auth';
2018-12-24 20:31:02 +01:00
return User.findByToken(token, access, true).then((ris) => {
2020-04-24 10:29:25 +02:00
if (ris && ris.user && !!ris.user.deleted) {
if (ris.user.deleted)
ris.user = null;
2018-12-24 20:31:02 +01:00
}
if (ris.code === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
return Promise.reject(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED);
2020-04-24 10:29:25 +02:00
}
if (!ris.user) {
2020-04-24 10:29:25 +02:00
return Promise.reject(server_constants.RIS_CODE_HTTP_INVALID_TOKEN);
}
if (!!ris.user) {
2020-04-24 10:29:25 +02:00
// Save last time online
ris.user.lasttimeonline = new Date();
2024-05-04 14:49:02 +02:00
ris.user.retry_pwd = 0
ris.user.useragent = req.get('User-Agent');
2020-04-24 10:29:25 +02:00
return ris.user.save().then(() => {
req.user = ris.user;
2020-04-24 10:29:25 +02:00
req.token = token;
// req.refreshToken = refreshToken;
2020-04-24 10:29:25 +02:00
req.access = access;
2024-04-11 11:43:19 +02:00
next(); // Esegui il codice successivo
2020-04-24 10:29:25 +02:00
});
}
// tools.mylog('userid', user._id);
2018-12-24 20:31:02 +01:00
}).catch((e) => {
if (e === server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED) {
return res.status(server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED).send();
}
tools.mylog("ERR authenticate invalid Token =", e);
res.status(server_constants.RIS_CODE_HTTP_INVALID_TOKEN).send();
2018-12-24 20:31:02 +01:00
});
};
const authenticate_noerror = (req, res, next) => {
try {
const token = req.header('x-auth');
2024-04-11 11:43:19 +02:00
const refreshToken = req.header('x-refrtok');
const access = 'auth';
return User.findByToken(token, access, false).then((ris) => {
if (ris.code !== server_constants.RIS_CODE_OK) {
req.user = null;
req.token = null;
req.access = null;
2024-04-11 11:43:19 +02:00
req.code = ris.code;
} else {
req.user = ris.user;
req.token = token;
req.refreshToken = refreshToken;
req.access = access;
2024-04-11 11:43:19 +02:00
req.code = ris.code;
}
2024-04-11 11:43:19 +02:00
// Vai avanti ad eseguire il codice, in ogni modo !
next();
}).catch((e) => {
req.user = null;
req.token = null;
req.access = null;
2024-04-11 11:43:19 +02:00
req.code = 0;
// Continua comunque !
next();
});
} catch (e) {
console.error('Err', e);
}
};
2020-12-25 03:54:16 +01:00
module.exports = { authenticate, authenticate_noerror, auth_default };