2019-02-05 03:40:22 +01:00
|
|
|
const express = require('express');
|
|
|
|
|
const router = express.Router();
|
|
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
const UserController = require('../controllers/UserController');
|
2025-03-13 12:05:16 +01:00
|
|
|
const { authenticate, authenticate_noerror, authenticate_withUser } = require('../middleware/authenticate');
|
2025-11-21 20:47:30 +01:00
|
|
|
const { checkBlocked } = require('../middleware/securityMiddleware');
|
|
|
|
|
|
|
|
|
|
// Initialize controller
|
|
|
|
|
const userController = new UserController();
|
|
|
|
|
|
|
|
|
|
// ===== PUBLIC ROUTES =====
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Register new user
|
|
|
|
|
* POST /users
|
|
|
|
|
*/
|
|
|
|
|
router.post('/', (req, res) => userController.register(req, res));
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Check if username exists
|
|
|
|
|
* GET /users/:idapp/:username
|
|
|
|
|
*/
|
|
|
|
|
router.get('/:idapp/:username', (req, res) => userController.checkUsername(req, res));
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* User login
|
|
|
|
|
* POST /users/login
|
|
|
|
|
*/
|
|
|
|
|
router.post('/login', checkBlocked, (req, res) => userController.login(req, res));
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Refresh authentication token
|
|
|
|
|
* POST /users/newtok
|
|
|
|
|
*/
|
|
|
|
|
router.post('/newtok', (req, res) => userController.refreshToken(req, res));
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get user activities (public profile)
|
|
|
|
|
* POST /users/activities
|
|
|
|
|
*/
|
|
|
|
|
router.post('/activities', authenticate_noerror, (req, res) =>
|
|
|
|
|
userController.getProfile(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// ===== AUTHENTICATED ROUTES =====
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get user profile
|
|
|
|
|
* POST /users/profile
|
|
|
|
|
*/
|
|
|
|
|
router.post('/profile', authenticate, (req, res) =>
|
|
|
|
|
userController.getProfile(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get user panel info (admin/manager only)
|
|
|
|
|
* POST /users/panel
|
|
|
|
|
*/
|
|
|
|
|
router.post('/panel', authenticate, (req, res) => {
|
|
|
|
|
const { User } = require('../models/user');
|
|
|
|
|
const server_constants = require('../tools/server_constants');
|
|
|
|
|
|
|
|
|
|
if (!req.user || (!User.isAdmin(req.user.perm) &&
|
|
|
|
|
!User.isManager(req.user.perm) &&
|
|
|
|
|
!User.isFacilitatore(req.user.perm))) {
|
|
|
|
|
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({
|
|
|
|
|
code: server_constants.RIS_CODE_ERR_UNAUTHORIZED,
|
|
|
|
|
msg: ''
|
2025-08-29 23:34:08 +02:00
|
|
|
});
|
2025-02-05 12:13:27 +01:00
|
|
|
}
|
2025-11-21 20:47:30 +01:00
|
|
|
|
|
|
|
|
userController.getProfile(req, res);
|
2019-02-05 03:40:22 +01:00
|
|
|
});
|
|
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
/**
|
|
|
|
|
* Update user balance
|
|
|
|
|
* POST /users/updatesaldo
|
|
|
|
|
*/
|
|
|
|
|
router.post('/updatesaldo', authenticate, (req, res) =>
|
|
|
|
|
userController.updateSaldo(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get user's friends
|
|
|
|
|
* POST /users/friends
|
|
|
|
|
*/
|
|
|
|
|
router.post('/friends', authenticate, (req, res) =>
|
|
|
|
|
userController.getFriends(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Execute friend command
|
|
|
|
|
* POST /users/friends/cmd
|
|
|
|
|
*/
|
|
|
|
|
router.post('/friends/cmd', authenticate, (req, res) =>
|
|
|
|
|
userController.executeFriendCommand(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Send command to user
|
|
|
|
|
* POST /users/sendcmd
|
|
|
|
|
*/
|
|
|
|
|
router.post('/sendcmd', authenticate, (req, res) => {
|
|
|
|
|
const usernameLogged = req.user.username;
|
|
|
|
|
const { idapp, usernameOrig, usernameDest, cmd, value } = req.body;
|
|
|
|
|
|
|
|
|
|
userController.userService.sendCommand(
|
|
|
|
|
req, idapp, usernameOrig, usernameDest, cmd, value
|
|
|
|
|
).then(result => res.send(result))
|
|
|
|
|
.catch(error => res.status(400).send({ error: error.message }));
|
2019-02-05 03:40:22 +01:00
|
|
|
});
|
|
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
/**
|
|
|
|
|
* Get user's groups
|
|
|
|
|
* POST /users/groups
|
|
|
|
|
*/
|
|
|
|
|
router.post('/groups', authenticate, (req, res) =>
|
|
|
|
|
userController.getGroups(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Execute group command
|
|
|
|
|
* POST /users/groups/cmd
|
|
|
|
|
*/
|
|
|
|
|
router.post('/groups/cmd', authenticate, (req, res) => {
|
|
|
|
|
const usernameLogged = req.user.username;
|
|
|
|
|
const { idapp, usernameOrig, groupnameDest, cmd, value } = req.body;
|
|
|
|
|
|
|
|
|
|
userController.userService.executeGroupCommand(
|
|
|
|
|
idapp, usernameOrig, groupnameDest, cmd, value, usernameLogged
|
|
|
|
|
).then(result => res.send(result))
|
|
|
|
|
.catch(error => res.status(400).send({ error: error.message }));
|
|
|
|
|
});
|
2019-10-13 20:44:05 +02:00
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
/**
|
|
|
|
|
* Get user's circuits
|
|
|
|
|
* POST /users/circuits
|
|
|
|
|
*/
|
|
|
|
|
router.post('/circuits', authenticate_withUser, (req, res) =>
|
|
|
|
|
userController.getCircuits(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Execute circuit command
|
|
|
|
|
* POST /users/circuits/cmd
|
|
|
|
|
*/
|
|
|
|
|
router.post('/circuits/cmd', authenticate, async (req, res) => {
|
|
|
|
|
const usernameLogged = req.user.username;
|
|
|
|
|
const { idapp, usernameOrig, circuitname, cmd, value, extrarec } = req.body;
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const result = await userController.userService.executeCircuitCommand(
|
|
|
|
|
idapp, usernameOrig, circuitname, cmd, value, usernameLogged, extrarec
|
|
|
|
|
);
|
|
|
|
|
res.send(result);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
res.status(400).send({ error: error.message });
|
2019-10-13 20:44:05 +02:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
/**
|
|
|
|
|
* Logout user
|
|
|
|
|
* DELETE /users/me/token
|
|
|
|
|
*/
|
|
|
|
|
router.delete('/me/token', authenticate_withUser, (req, res) =>
|
|
|
|
|
userController.logout(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set user permissions
|
|
|
|
|
* POST /users/setperm
|
|
|
|
|
*/
|
|
|
|
|
router.post('/setperm', authenticate, (req, res) =>
|
|
|
|
|
userController.setPermissions(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get last movements/transactions
|
|
|
|
|
* POST /users/lastmovs
|
|
|
|
|
*/
|
2024-10-11 02:29:21 +02:00
|
|
|
router.post('/lastmovs', authenticate, async (req, res) => {
|
2025-11-21 20:47:30 +01:00
|
|
|
const { nummov, nummov_uscita, idapp } = req.body;
|
|
|
|
|
const server_constants = require('../tools/server_constants');
|
|
|
|
|
const tools = require('../tools/general');
|
|
|
|
|
|
2024-10-11 02:29:21 +02:00
|
|
|
try {
|
|
|
|
|
const { Movement } = require('../models/movement');
|
2025-11-21 20:47:30 +01:00
|
|
|
|
|
|
|
|
let last_transactions = [];
|
2024-10-11 02:29:21 +02:00
|
|
|
if (nummov) {
|
2025-11-03 14:24:33 +01:00
|
|
|
last_transactions = await Movement.getLastN_Transactions(idapp, nummov, nummov_uscita);
|
2024-10-11 02:29:21 +02:00
|
|
|
}
|
2025-11-21 20:47:30 +01:00
|
|
|
|
2024-10-11 02:29:21 +02:00
|
|
|
res.send({ code: server_constants.RIS_CODE_OK, last_transactions });
|
|
|
|
|
} catch (e) {
|
|
|
|
|
tools.mylogserr('Error lastmovs: ', e);
|
|
|
|
|
res.status(400).send();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
/**
|
|
|
|
|
* Set receive RIS flag
|
|
|
|
|
* POST /users/receiveris
|
|
|
|
|
*/
|
|
|
|
|
router.post('/receiveris', authenticate, async (req, res) => {
|
|
|
|
|
const username = req.user?.username || '';
|
|
|
|
|
const { groupname, idapp } = req.body;
|
|
|
|
|
const { User } = require('../models/user');
|
|
|
|
|
const { MyGroup } = require('../models/mygroup');
|
|
|
|
|
const server_constants = require('../tools/server_constants');
|
|
|
|
|
const tools = require('../tools/general');
|
|
|
|
|
|
2023-03-11 01:01:11 +01:00
|
|
|
try {
|
2025-11-21 20:47:30 +01:00
|
|
|
if (!username) {
|
|
|
|
|
return res.send({ code: server_constants.RIS_CODE_ERR });
|
2023-03-11 01:01:11 +01:00
|
|
|
}
|
2025-11-21 20:47:30 +01:00
|
|
|
|
|
|
|
|
if (groupname) {
|
|
|
|
|
await MyGroup.setReceiveRisGroup(idapp, groupname);
|
2022-07-10 01:25:19 +02:00
|
|
|
} else {
|
2025-11-21 20:47:30 +01:00
|
|
|
await User.setReceiveRis(idapp, username);
|
2022-07-10 01:25:19 +02:00
|
|
|
}
|
2025-11-21 20:47:30 +01:00
|
|
|
|
|
|
|
|
res.send({ code: server_constants.RIS_CODE_OK });
|
|
|
|
|
} catch (err) {
|
|
|
|
|
tools.mylog('ERRORE IN receiveris: ' + err.message);
|
2022-07-10 01:25:19 +02:00
|
|
|
res.status(400).send();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
/**
|
|
|
|
|
* List registration links
|
|
|
|
|
* POST /users/listlinkreg
|
|
|
|
|
*/
|
|
|
|
|
router.post('/listlinkreg', authenticate, async (req, res) => {
|
|
|
|
|
const username = req.user?.username || '';
|
|
|
|
|
const { idapp } = req.body;
|
|
|
|
|
const { User } = require('../models/user');
|
|
|
|
|
const server_constants = require('../tools/server_constants');
|
|
|
|
|
const tools = require('../tools/general');
|
|
|
|
|
|
2022-07-16 14:20:39 +02:00
|
|
|
try {
|
2025-11-21 20:47:30 +01:00
|
|
|
if (!username) {
|
|
|
|
|
return res.send({ code: server_constants.RIS_CODE_ERR });
|
2022-07-16 14:20:39 +02:00
|
|
|
}
|
2025-11-21 20:47:30 +01:00
|
|
|
|
|
|
|
|
await User.setLinkReg(idapp, username);
|
|
|
|
|
res.send({ code: server_constants.RIS_CODE_OK });
|
|
|
|
|
} catch (err) {
|
|
|
|
|
tools.mylog('ERRORE IN listlinkreg: ' + err.message);
|
2022-07-16 14:20:39 +02:00
|
|
|
res.status(400).send();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
// ===== ADMIN ROUTES =====
|
2024-04-09 21:56:50 +02:00
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
/**
|
|
|
|
|
* Update user (admin only)
|
|
|
|
|
* PATCH /users/:id
|
|
|
|
|
*/
|
|
|
|
|
router.patch('/:id', authenticate, (req, res) => {
|
|
|
|
|
const { User } = require('../models/user');
|
|
|
|
|
const _ = require('lodash');
|
|
|
|
|
const shared_consts = require('../tools/shared_nodejs');
|
|
|
|
|
const server_constants = require('../tools/server_constants');
|
|
|
|
|
const tools = require('../tools/general');
|
|
|
|
|
|
|
|
|
|
const id = req.params.id;
|
|
|
|
|
const body = _.pick(req.body.user, shared_consts.fieldsUserToChange());
|
|
|
|
|
|
|
|
|
|
tools.mylogshow('PATCH USER: ', id);
|
|
|
|
|
|
|
|
|
|
if (!User.isAdmin(req.user.perm)) {
|
|
|
|
|
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({
|
|
|
|
|
code: server_constants.RIS_CODE_ERR_UNAUTHORIZED,
|
|
|
|
|
msg: ''
|
2025-03-10 17:20:57 +01:00
|
|
|
});
|
2024-05-04 14:49:02 +02:00
|
|
|
}
|
2025-11-21 20:47:30 +01:00
|
|
|
|
|
|
|
|
User.findByIdAndUpdate(id, { $set: body })
|
|
|
|
|
.then((user) => {
|
|
|
|
|
tools.mylogshow(' USER TO MODIFY: ', user);
|
|
|
|
|
if (!user) {
|
|
|
|
|
return res.status(404).send();
|
2025-08-29 23:34:08 +02:00
|
|
|
}
|
2025-11-21 20:47:30 +01:00
|
|
|
res.send({ code: server_constants.RIS_CODE_OK, msg: '' });
|
2025-08-29 23:34:08 +02:00
|
|
|
})
|
|
|
|
|
.catch((e) => {
|
2025-11-21 20:47:30 +01:00
|
|
|
tools.mylogserr('Error patch USER: ', e);
|
2025-08-29 23:34:08 +02:00
|
|
|
res.status(400).send();
|
|
|
|
|
});
|
2022-08-26 03:33:13 +02:00
|
|
|
});
|
|
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
/**
|
|
|
|
|
* Execute database operation (admin only)
|
|
|
|
|
* POST /users/dbop
|
|
|
|
|
*/
|
|
|
|
|
router.post('/dbop', authenticate, (req, res) =>
|
|
|
|
|
userController.executeDbOperation(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Execute user database operation
|
|
|
|
|
* POST /users/dbopuser
|
|
|
|
|
*/
|
|
|
|
|
router.post('/dbopuser', authenticate, async (req, res) => {
|
|
|
|
|
const { mydata, idapp } = req.body;
|
|
|
|
|
const server_constants = require('../tools/server_constants');
|
|
|
|
|
|
2023-10-01 01:24:47 +02:00
|
|
|
try {
|
2025-11-21 20:47:30 +01:00
|
|
|
const result = await userController.userService.executeUserDbOperation(
|
|
|
|
|
idapp,
|
|
|
|
|
mydata,
|
|
|
|
|
req.user.username
|
2025-08-29 23:34:08 +02:00
|
|
|
);
|
2025-11-21 20:47:30 +01:00
|
|
|
|
|
|
|
|
res.send({ code: server_constants.RIS_CODE_OK, ris: result });
|
2023-03-21 18:11:56 +01:00
|
|
|
} catch (e) {
|
2025-11-21 20:47:30 +01:00
|
|
|
res.status(400).send({ code: server_constants.RIS_CODE_ERR, msg: e.message });
|
2023-03-21 18:11:56 +01:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
/**
|
|
|
|
|
* Get map information
|
|
|
|
|
* POST /users/infomap
|
|
|
|
|
*/
|
|
|
|
|
router.post('/infomap', authenticate, (req, res) =>
|
|
|
|
|
userController.getMapInfo(req, res)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Management telegram operations
|
|
|
|
|
* POST /users/mgt
|
|
|
|
|
*/
|
|
|
|
|
router.post('/mgt', authenticate_withUser, async (req, res) => {
|
|
|
|
|
const { mydata, idapp } = req.body;
|
|
|
|
|
const telegrambot = require('../telegram/telegrambot');
|
|
|
|
|
|
2023-03-21 18:11:56 +01:00
|
|
|
try {
|
2025-11-21 20:47:30 +01:00
|
|
|
const { nummsgsent, numrec, textsent, text } =
|
|
|
|
|
await telegrambot.sendMsgFromSiteToBotTelegram(idapp, req.user, mydata);
|
|
|
|
|
|
|
|
|
|
res.send({ numrec, nummsgsent, textsent, text });
|
2022-02-21 13:12:27 +01:00
|
|
|
} catch (e) {
|
2025-11-21 20:47:30 +01:00
|
|
|
res.status(400).send({ error: e.message });
|
2022-02-21 13:12:27 +01:00
|
|
|
}
|
2020-05-19 00:18:13 +02:00
|
|
|
});
|
2020-01-30 01:19:25 +01:00
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
// ===== TEST ROUTES (Development only) =====
|
2024-03-19 00:21:54 +01:00
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
if (process.env.NODE_ENV === 'development' || process.env.LOCALE === '1') {
|
|
|
|
|
router.post('/test1', async (req, res) => {
|
|
|
|
|
const { User } = require('../models/user');
|
|
|
|
|
const sendemail = require('../sendemail');
|
|
|
|
|
|
|
|
|
|
const user = await User.findOne({
|
|
|
|
|
idapp: 1,
|
|
|
|
|
username: 'paoloar77'
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (user) {
|
|
|
|
|
await sendemail.sendEmail_Registration(
|
|
|
|
|
user.lang,
|
|
|
|
|
user.email,
|
|
|
|
|
user,
|
|
|
|
|
user.idapp,
|
|
|
|
|
user.linkreg
|
|
|
|
|
);
|
2024-03-19 00:21:54 +01:00
|
|
|
}
|
2025-11-21 20:47:30 +01:00
|
|
|
|
|
|
|
|
res.send({ success: true });
|
|
|
|
|
});
|
|
|
|
|
}
|
2024-03-19 00:21:54 +01:00
|
|
|
|
2025-11-21 20:47:30 +01:00
|
|
|
module.exports = router;
|