- aggiunto Elena come admin di tutti i circuiti ...
shared_consts.USER_ADMIN_CIRCUITS
This commit is contained in:
@@ -285,7 +285,7 @@ CircuitSchema.statics.isCircuitAdmin = async function (idrec, username) {
|
|||||||
|
|
||||||
const mycirc = await Circuit.findOne({ _id: idrec }).lean();
|
const mycirc = await Circuit.findOne({ _id: idrec }).lean();
|
||||||
if (mycirc) {
|
if (mycirc) {
|
||||||
return mycirc.admins.some(admin => (admin.username === username) || (admin.username === shared_consts.USER_ADMIN_CIRCUITS));
|
return mycirc.admins.some(admin => (admin.username === username) || (shared_consts.USER_ADMIN_CIRCUITS.includes(admin.username)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -1018,7 +1018,7 @@ CircuitSchema.statics.getListAdminsByCircuitPath = async function (idapp, circui
|
|||||||
|
|
||||||
let myarr = arr && arr.admins ? arr.admins : [];
|
let myarr = arr && arr.admins ? arr.admins : [];
|
||||||
|
|
||||||
return [...myarr, shared_consts.USER_ADMIN_CIRCUITS]
|
return [...myarr, ...shared_consts.USER_ADMIN_CIRCUITS]
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1154,7 +1154,7 @@ CircuitSchema.statics.createCircuitIfNotExist = async function (req, idapp, prov
|
|||||||
totTransato: 0,
|
totTransato: 0,
|
||||||
totCircolante: 0,
|
totCircolante: 0,
|
||||||
date_created: new Date(),
|
date_created: new Date(),
|
||||||
admins: [{ username: useradmin }],
|
admins: useradmin.map(username => ({ username })),
|
||||||
askManagerToEnter: false,
|
askManagerToEnter: false,
|
||||||
sendEmailAfterAskingToEnter: false,
|
sendEmailAfterAskingToEnter: false,
|
||||||
circuitoIndipendente: false,
|
circuitoIndipendente: false,
|
||||||
@@ -1223,7 +1223,7 @@ CircuitSchema.statics.isAdminCircuit = async function (idapp, circuitname, usern
|
|||||||
|
|
||||||
if (arr) {
|
if (arr) {
|
||||||
for (const admin of arr.admins) {
|
for (const admin of arr.admins) {
|
||||||
if ((admin.username === username) || (shared_consts.USER_ADMIN_CIRCUITS === username))
|
if (shared_consts.USER_ADMIN_CIRCUITS.includes(username) || (admin.username === username))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -777,19 +777,60 @@ UserSchema.statics.isFacilitatore = function (perm) {
|
|||||||
* The status code reflects the validity of the token: valid, expired, or invalid.
|
* The status code reflects the validity of the token: valid, expired, or invalid.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Funzione helper separata per trovare l'utente
|
||||||
|
async function findUserByTokenAndAccess(User, decoded, token, typeaccess, withuser, withlean, project) {
|
||||||
|
try {
|
||||||
|
const query = {
|
||||||
|
_id: decoded._id,
|
||||||
|
tokens: {
|
||||||
|
$elemMatch: {
|
||||||
|
token,
|
||||||
|
access: typeaccess,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
if (withuser && !withlean) {
|
||||||
|
return await User.findOne(query, project);
|
||||||
|
}
|
||||||
|
|
||||||
|
return await User.findOne(query, project).lean();
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('Errore con decoded._id, provo con decoded.smart:', err.message);
|
||||||
|
|
||||||
|
// Fallback: usa decoded.smart
|
||||||
|
const query = {
|
||||||
|
_id: decoded.smart,
|
||||||
|
tokens: {
|
||||||
|
$elemMatch: {
|
||||||
|
token,
|
||||||
|
access: typeaccess,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
if (withuser && !withlean) {
|
||||||
|
return await User.findOne(query, project);
|
||||||
|
}
|
||||||
|
|
||||||
|
return await User.findOne(query, project).lean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Funzione principale refactored
|
||||||
UserSchema.statics.findByToken = async function (token, typeaccess, con_auth, withuser, withlean = false) {
|
UserSchema.statics.findByToken = async function (token, typeaccess, con_auth, withuser, withlean = false) {
|
||||||
const User = this;
|
const User = this;
|
||||||
let code = server_constants.RIS_CODE_HTTP_INVALID_TOKEN;
|
let code = server_constants.RIS_CODE_HTTP_INVALID_TOKEN;
|
||||||
let user = null;
|
let user = null;
|
||||||
let decoded;
|
let decoded;
|
||||||
const start = process.hrtime.bigint();
|
|
||||||
const start_jwt = process.hrtime.bigint();
|
|
||||||
|
|
||||||
|
// Validazione token
|
||||||
if (!token) {
|
if (!token) {
|
||||||
console.warn('TOKEN VUOTO ! ');
|
console.warn('TOKEN VUOTO!');
|
||||||
return { user, code };
|
return { user, code };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Verifica JWT
|
||||||
try {
|
try {
|
||||||
decoded = jwt.verify(token, process.env.SIGNCODE);
|
decoded = jwt.verify(token, process.env.SIGNCODE);
|
||||||
code = server_constants.RIS_CODE_OK;
|
code = server_constants.RIS_CODE_OK;
|
||||||
@@ -803,83 +844,32 @@ UserSchema.statics.findByToken = async function (token, typeaccess, con_auth, wi
|
|||||||
return { user: null, code };
|
return { user: null, code };
|
||||||
}
|
}
|
||||||
|
|
||||||
const end_jwt = process.hrtime.bigint();
|
// Definizione projection
|
||||||
// console.log(` jwt.verify impiega ${Math.round(Number(end_jwt - start_jwt) / 1e6) / 1000} secondi.`);
|
const project = withuser ? undefined : {
|
||||||
|
perm: 1,
|
||||||
|
_id: 1,
|
||||||
|
idapp: 1,
|
||||||
|
username: 1,
|
||||||
|
deleted: 1,
|
||||||
|
aportador_solidario: 1,
|
||||||
|
aportador_solidario_nome_completo: 1,
|
||||||
|
'profile.socioresidente': 1,
|
||||||
|
};
|
||||||
|
|
||||||
let project = undefined;
|
// Ricerca utente con funzione separata
|
||||||
|
user = await findUserByTokenAndAccess(User, decoded, token, typeaccess, withuser, withlean, project);
|
||||||
if (withuser) {
|
|
||||||
const start_find = process.hrtime.bigint();
|
|
||||||
if (withlean) {
|
|
||||||
user = await User.findOne(
|
|
||||||
{
|
|
||||||
_id: decoded._id,
|
|
||||||
tokens: {
|
|
||||||
$elemMatch: {
|
|
||||||
token,
|
|
||||||
access: typeaccess,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
project
|
|
||||||
).lean();
|
|
||||||
} else {
|
|
||||||
user = await User.findOne(
|
|
||||||
{
|
|
||||||
_id: decoded._id,
|
|
||||||
tokens: {
|
|
||||||
$elemMatch: {
|
|
||||||
token,
|
|
||||||
access: typeaccess,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
project
|
|
||||||
);
|
|
||||||
}
|
|
||||||
const end_find = process.hrtime.bigint();
|
|
||||||
// console.log(` User.findOne impiega ${Math.round(Number(end_find - start_find) / 1e6) / 1000} secondi.`);
|
|
||||||
} else {
|
|
||||||
project = {
|
|
||||||
perm: 1,
|
|
||||||
_id: 1,
|
|
||||||
idapp: 1,
|
|
||||||
username: 1,
|
|
||||||
deleted: 1,
|
|
||||||
aportador_solidario: 1,
|
|
||||||
aportador_solidario_nome_completo: 1,
|
|
||||||
'profile.socioresidente': 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
const start_find = process.hrtime.bigint();
|
|
||||||
user = await User.findOne(
|
|
||||||
{
|
|
||||||
_id: decoded._id,
|
|
||||||
tokens: {
|
|
||||||
$elemMatch: {
|
|
||||||
token,
|
|
||||||
access: typeaccess,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
project
|
|
||||||
).lean();
|
|
||||||
const end_find = process.hrtime.bigint();
|
|
||||||
// console.log(` User.findOne LEAN impiega ${Math.round(Number(end_find - start_find) / 1e6) / 1000} secondi.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Verifica scadenza token per idapp specifici
|
||||||
if (user) {
|
if (user) {
|
||||||
const checkExpiry = tools.getEnableTokenExpiredByIdApp(user.idapp);
|
const checkExpiry = tools.getEnableTokenExpiredByIdApp(user.idapp);
|
||||||
const currentTime = Date.now() / 1000;
|
const currentTime = Date.now() / 1000;
|
||||||
|
|
||||||
if (checkExpiry && decoded.exp < currentTime) {
|
if (checkExpiry && decoded.exp < currentTime) {
|
||||||
console.log('Il token è scaduto, generazione del nuovo token...');
|
console.log('Il token è scaduto, generazione del nuovo token...');
|
||||||
code = server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED;
|
code = server_constants.RIS_CODE_HTTP_FORBIDDEN_TOKEN_EXPIRED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// const end = process.hrtime.bigint();
|
|
||||||
// console.log(` findByToken impiega ${Math.round(Number(end - start) / 1e6) / 1000} secondi.`);
|
|
||||||
|
|
||||||
return { user, code };
|
return { user, code };
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -900,7 +890,7 @@ UserSchema.statics.findByTokenAnyAccess = function (token) {
|
|||||||
}).lean();
|
}).lean();
|
||||||
};
|
};
|
||||||
|
|
||||||
UserSchema.statics.findByRefreshTokenAnyAccess = function (refreshToken) {
|
UserSchema.statics.findByRefreshTokenAnyAccess = async function (refreshToken) {
|
||||||
const User = this;
|
const User = this;
|
||||||
let decoded;
|
let decoded;
|
||||||
|
|
||||||
@@ -911,12 +901,25 @@ UserSchema.statics.findByRefreshTokenAnyAccess = function (refreshToken) {
|
|||||||
return Promise.resolve(null);
|
return Promise.resolve(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
return User.findOne({
|
let ris = null;
|
||||||
_id: decoded._id,
|
|
||||||
'tokens.refreshToken': refreshToken,
|
if (decoded) {
|
||||||
});
|
try {
|
||||||
|
ris = await User.findOne({
|
||||||
|
_id: decoded._id,
|
||||||
|
'tokens.refreshToken': refreshToken,
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
ris = await User.findOne({
|
||||||
|
_id: decoded.smart,
|
||||||
|
'tokens.refreshToken': refreshToken,
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
UserSchema.statics.findByCredentials = async function (idapp, username, password, pwdcrypted) {
|
UserSchema.statics.findByCredentials = async function (idapp, username, password, pwdcrypted) {
|
||||||
const User = this;
|
const User = this;
|
||||||
let pwd = '';
|
let pwd = '';
|
||||||
|
|||||||
@@ -20,19 +20,18 @@ const _ = require('lodash');
|
|||||||
const { ObjectId } = require('mongodb');
|
const { ObjectId } = require('mongodb');
|
||||||
|
|
||||||
async function getCircuitRecAdminsInfo(idapp, data) {
|
async function getCircuitRecAdminsInfo(idapp, data) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (data && data.admins) {
|
if (data && data.admins) {
|
||||||
for (const admin of data.admins) {
|
for (const admin of data.admins) {
|
||||||
const myuser = await User.findOne({ idapp, username: admin.username }, { 'profile.img': 1 }).lean();
|
const myuser = await User.findOne({ idapp, username: admin.username }, { 'profile.img': 1 }).lean();
|
||||||
if (myuser && myuser.profile)
|
if (myuser && myuser.profile) admin.profile = { img: myuser.profile.img };
|
||||||
admin.profile = { img: myuser.profile.img };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.admins.length === 0) {
|
if (data.admins.length === 0) {
|
||||||
data.admins.push({username: shared_consts.USER_ADMIN_CIRCUITS})
|
for (const admin of shared_consts.USER_ADMIN_CIRCUITS) {
|
||||||
|
data.admins.push({ username: admin });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
@@ -48,7 +47,6 @@ router.post('/load', authenticate, async (req, res) => {
|
|||||||
const usernameOrig = req.user.username;
|
const usernameOrig = req.user.username;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
const { SendNotif } = require('../models/sendnotif');
|
const { SendNotif } = require('../models/sendnotif');
|
||||||
const { Movement } = require('../models/movement');
|
const { Movement } = require('../models/movement');
|
||||||
|
|
||||||
@@ -80,7 +78,7 @@ router.post('/load', authenticate, async (req, res) => {
|
|||||||
if (data === null) {
|
if (data === null) {
|
||||||
data = null;
|
data = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const users_in_circuit = await Circuit.getUsersSingleCircuit(idapp, req.user.username, data.name, data._id);
|
const users_in_circuit = await Circuit.getUsersSingleCircuit(idapp, req.user.username, data.name, data._id);
|
||||||
|
|
||||||
data = await getCircuitRecAdminsInfo(idapp, data);
|
data = await getCircuitRecAdminsInfo(idapp, data);
|
||||||
@@ -94,11 +92,23 @@ router.post('/load', authenticate, async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let arrrecnotifcoins = null;
|
let arrrecnotifcoins = null;
|
||||||
const arrrecnotif = await SendNotif.findAllNotifByUsernameIdAndIdApp(req.user.username, lastdr, idapp, shared_consts.LIMIT_NOTIF_FOR_USER, shared_consts.QualiNotifs.OTHERS);
|
const arrrecnotif = await SendNotif.findAllNotifByUsernameIdAndIdApp(
|
||||||
|
req.user.username,
|
||||||
|
lastdr,
|
||||||
|
idapp,
|
||||||
|
shared_consts.LIMIT_NOTIF_FOR_USER,
|
||||||
|
shared_consts.QualiNotifs.OTHERS
|
||||||
|
);
|
||||||
if (User.isAdminById(req.user.id)) {
|
if (User.isAdminById(req.user.id)) {
|
||||||
arrrecnotifcoins = await SendNotif.findAllNotifCoinsAllIdAndIdApp(idapp);
|
arrrecnotifcoins = await SendNotif.findAllNotifCoinsAllIdAndIdApp(idapp);
|
||||||
} else {
|
} else {
|
||||||
arrrecnotifcoins = await SendNotif.findAllNotifByUsernameIdAndIdApp(req.user.username, lastdr, idapp, shared_consts.LIMIT_NOTIFCOINS_FOR_USER, shared_consts.QualiNotifs.CIRCUITS);
|
arrrecnotifcoins = await SendNotif.findAllNotifByUsernameIdAndIdApp(
|
||||||
|
req.user.username,
|
||||||
|
lastdr,
|
||||||
|
idapp,
|
||||||
|
shared_consts.LIMIT_NOTIFCOINS_FOR_USER,
|
||||||
|
shared_consts.QualiNotifs.CIRCUITS
|
||||||
|
);
|
||||||
}
|
}
|
||||||
/// E' QUIIII !!!!
|
/// E' QUIIII !!!!
|
||||||
const useraccounts = await Account.getUserAccounts(idapp, req.user.username);
|
const useraccounts = await Account.getUserAccounts(idapp, req.user.username);
|
||||||
@@ -106,14 +116,12 @@ router.post('/load', authenticate, async (req, res) => {
|
|||||||
await User.setLastCircuitOpened(idapp, req.user.username, path);
|
await User.setLastCircuitOpened(idapp, req.user.username, path);
|
||||||
|
|
||||||
res.send({ circuit: data, users_in_circuit, arrrecnotif, arrrecnotifcoins, useraccounts });
|
res.send({ circuit: data, users_in_circuit, arrrecnotif, arrrecnotifcoins, useraccounts });
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Error in Circuits', e);
|
console.error('Error in Circuits', e);
|
||||||
return res.status(400).send(e);
|
return res.status(400).send(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
const ris = null;
|
const ris = null;
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
@@ -1138,7 +1138,7 @@ module.exports = {
|
|||||||
groupname,
|
groupname,
|
||||||
myrecgroup._id,
|
myrecgroup._id,
|
||||||
'',
|
'',
|
||||||
'',
|
''
|
||||||
);
|
);
|
||||||
onlysave = false;
|
onlysave = false;
|
||||||
} else if (cmd === shared_consts.GROUPSCMD.BLOCK_USER) {
|
} else if (cmd === shared_consts.GROUPSCMD.BLOCK_USER) {
|
||||||
@@ -1463,10 +1463,21 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// VERSIONE CORRETTA - USER_ADMIN_CIRCUITS è un array
|
||||||
getAdminsByCircuit(circuit) {
|
getAdminsByCircuit(circuit) {
|
||||||
// return circuit.admins
|
const adminsMap = new Map();
|
||||||
|
|
||||||
return [...circuit.admins, { username: shared_consts.USER_ADMIN_CIRCUITS }];
|
// Aggiungi gli admin esistenti
|
||||||
|
circuit.admins.forEach((admin) => {
|
||||||
|
adminsMap.set(admin.username, admin);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Aggiungi gli admin dei circuiti dall'array (sovrascrive se esistono già)
|
||||||
|
shared_consts.USER_ADMIN_CIRCUITS.forEach((username) => {
|
||||||
|
adminsMap.set(username, { username });
|
||||||
|
});
|
||||||
|
|
||||||
|
return Array.from(adminsMap.values());
|
||||||
},
|
},
|
||||||
|
|
||||||
sendNotificationByCircuit: async function (
|
sendNotificationByCircuit: async function (
|
||||||
@@ -6093,10 +6104,10 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (aggiornatoimg?.filepath?.includes('noimg.jpg')) {
|
if (aggiornatoimg?.filepath?.includes('noimg.jpg')) {
|
||||||
// nascondi il prodotto se non trovo l'immagine !
|
// nascondi il prodotto se non trovo l'immagine !
|
||||||
// await Product.updateOne({ _id: product._id }, { $set: { deleted: true } });
|
// await Product.updateOne({ _id: product._id }, { $set: { deleted: true } });
|
||||||
|
|
||||||
aggiornatoimg = { ris: false, deleted: true };
|
aggiornatoimg = { ris: false, deleted: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aggiornatoimg?.filepath) {
|
if (aggiornatoimg?.filepath) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
USER_ADMIN_CIRCUITS: 'surya1977',
|
USER_ADMIN_CIRCUITS: ['surya1977', 'elenaEspx'],
|
||||||
ADMIN_USER_SERVER: 'surya1977',
|
ADMIN_USER_SERVER: 'surya1977',
|
||||||
Accepted: {
|
Accepted: {
|
||||||
CHECK_READ_GUIDELINES: 1,
|
CHECK_READ_GUIDELINES: 1,
|
||||||
|
|||||||
Reference in New Issue
Block a user