- Le immagini uploadate non vengono visualizzate subito... cache... aggiungere la versione dell'immagine: vers_img

- Aggiunto il Server TESTRISO e TEST_PCB.
This commit is contained in:
Surya Paolo
2024-09-17 17:38:47 +02:00
parent dcc2a0ec08
commit 9985793fcc
39 changed files with 1259 additions and 162 deletions

View File

@@ -16,6 +16,7 @@ mongoose.plugin(schema => {
const myCard = new Schema(
{
imagefile: String,
vers_img: Number,
alt: String,
description: String,
style: String,
@@ -169,6 +170,9 @@ const MyElemSchema = new Schema({
image: {
type: String,
},
vers_img: {
type: Number,
},
listcards: [myCard],
catalogo: catalogo,
list: [
@@ -176,6 +180,9 @@ const MyElemSchema = new Schema({
imagefile: {
type: String
},
vers_img: {
type: Number,
},
order: {
type: Number
},

View File

@@ -1499,6 +1499,7 @@ UserSchema.statics.createNewRequestPwd = function (idapp, email, code) {
res.status(400).send();
});
} else {
console.log('findByEmail idapp: ', idapp, 'email', email);
return User.findByEmail(idapp, email).then(async (user) => {
if (!user) {
return { ris: false };

View File

@@ -56,11 +56,15 @@ class Mailinabox {
// Trova e stampa il record DKIM
const dkimRecord = records.find(record => record.includes('mail._domainkey'));
if (dkimRecord) {
const pMatch = dkimRecord.match(/p=([A-Za-z0-9+/]+)/);
if (pMatch && pMatch[1]) {
// console.log('Valore di p nel record DKIM:');
// console.log(pMatch[1]);
return pMatch[1];
const pattern = /p=([A-Za-z0-9+/=]+)(?:"\s*"([A-Za-z0-9+/=]+))?/;
// Esegui la ricerca
const match = dkimRecord.match(pattern);
if (match) {
// Concatena le due parti trovate di 'p', la seconda parte è facoltativa
return match[1] + (match[2] || '');
} else {
console.log('Record DKIM non trovato.');
}

View File

@@ -57,7 +57,14 @@ class CloudFlare {
async findAndUpdateOnSite(domain, zone, apiToken) {
try {
const Site = require('../models/site');
const recsite = await Site.findOne({ host: domain });
domain = domain.replace(/^https?:\/\//, '');
let normalizedDomain = domain.startsWith("http://") || domain.startsWith("https://") ? domain : "https://" + domain;
// Trova il sito usando il dominio normalizzato
const recsite = await Site.findOne({ host: normalizedDomain });
if (recsite) {
// Aggiorna i parametri token e zoneId
@@ -87,7 +94,7 @@ class CloudFlare {
let miab = new MailinaboxClass(null);
miab.init();
const dkim = await miab.getDKIMRecord(recsite.host);
const dkim = await miab.getDKIMRecord(recsite.host.replace(/^https?:\/\//, ''));
if (dkim) {
await Site.findOneAndUpdate({ _id: recsite._id }, {
@@ -216,7 +223,12 @@ class CloudFlare {
// get the parameters (Token and zoneId on Database)
const Site = require('../models/site');
await Site.findOne({ host: domainrec.name }).lean()
let domain = domainrec.name.replace(/^https?:\/\//, '');
let normalizedDomain = domain.startsWith("http://") || domain.startsWith("https://") ? domain : "https://" + domain;
// Trova il sito usando il dominio normalizzato
await Site.findOne({ host: normalizedDomain }).lean()
.then(async (site) => {
if (site) {
@@ -224,7 +236,7 @@ class CloudFlare {
const myarrrecdns = await this.fetchDNSRecords(site.cf_token, site.cf_zoneId);
// MX:
let recTypeMX = await myarrrecdns.find((rec) => rec.type === 'MX' && (rec.name === (domainrec.name)));
let recTypeMX = await myarrrecdns.find((rec) => rec.type === 'MX' && (rec.name === (domain)));
if (recTypeMX) {
if (recTypeMX.content !== site.servermail) {
@@ -235,7 +247,7 @@ class CloudFlare {
// create a new record
const newRecord = {
type: 'MX',
name: domainrec.name,
name: domain,
content: site.servermail,
ttl: 1,
proxied: false,
@@ -247,7 +259,7 @@ class CloudFlare {
// TXT record spf1 : TXT nomedominio v=spf1 a mx:box.lamiaposta.org ip4:65.21.63.147 ~all
let recTypeTXTspf1 = await myarrrecdns.find((rec) => rec.type === 'TXT' && (rec.name === (domainrec.name) && (rec.content.indexOf('v=spf1') > -1)));
let recTypeTXTspf1 = await myarrrecdns.find((rec) => rec.type === 'TXT' && (rec.name === (domain) && (rec.content.indexOf('v=spf1') > -1)));
if (site.servermailip) {
let contentTXTspf1 = `v=spf1 a mx:${site.servermail} ip4:${site.servermailip} ~all`;
@@ -261,7 +273,7 @@ class CloudFlare {
// create a new record
const newRecord = {
type: 'TXT',
name: domainrec.name,
name: domain,
content: contentTXTspf1,
ttl: 3600,
};
@@ -272,7 +284,7 @@ class CloudFlare {
// mail._domainkey.nomedominio v=DKIM1; h=sha256; k=rsa; s=email; p=<dkim>
let nameDkimtoFind = `mail._domainkey.${domainrec.name}`;
let nameDkimtoFind = `mail._domainkey.${domain}`;
let recTypeTXTDKIM = await myarrrecdns.find((rec) => rec.type === 'TXT' && (rec.name === nameDkimtoFind));
@@ -299,12 +311,12 @@ class CloudFlare {
// DMARC:
let nameDmarctoFind = `_dmarc.${domainrec.name}`;
let nameDmarctoFind = `_dmarc.${domain}`;
let recTypeTXTdmarc = await myarrrecdns.find((rec) => rec.type === 'TXT' && (rec.name === (nameDmarctoFind) && (rec.content.indexOf('v=DMARC1') > -1)));
if (site.servermailip) {
let contentTXTdmarc = `v=DMARC1; p=quarantine; ruf=mailto:dmarc@${domainrec.name};`;
let contentTXTdmarc = `v=DMARC1; p=quarantine; ruf=mailto:dmarc@${domain};`;
if (recTypeTXTdmarc) {
if (recTypeTXTdmarc.content !== contentTXTdmarc) {
@@ -326,7 +338,7 @@ class CloudFlare {
// AutoConfig:
let myType = 'CNAME';
let strfind = `autoconfig.${domainrec.name}`;
let strfind = `autoconfig.${domain}`;
let contentExpected = site.servermail;
let rectofind = await myarrrecdns.find((rec) => rec.type === 'CNAME' && (rec.name === strfind));
@@ -349,7 +361,7 @@ class CloudFlare {
// AutoDiscover:
myType = 'CNAME';
strfind = `autodiscover.${domainrec.name}`;
strfind = `autodiscover.${domain}`;
contentExpected = site.servermail;
rectofind = await myarrrecdns.find((rec) => rec.type === 'CNAME' && (rec.name === strfind));
@@ -384,7 +396,12 @@ class CloudFlare {
// get the parameters (Token and zoneId on Database)
const Site = require('../models/site');
await Site.findOne({ host: domain }).lean()
domain = domain.replace(/^https?:\/\//, '');
let normalizedDomain = domain.startsWith("http://") || domain.startsWith("https://") ? domain : "https://" + domain;
// Trova il sito usando il dominio normalizzato
await Site.findOne({ host: normalizedDomain }).lean()
.then(async (site) => {
if (site) {
@@ -398,7 +415,7 @@ class CloudFlare {
let paramexpected = '';
try {
paramexpected = site[paramobj.paramsite];
paramexpected = site[paramobj.paramsite].replace(/^https?:\/\//, '');;
} catch (e) {
}

View File

@@ -1229,7 +1229,7 @@ router.post('/cloudflare', authenticate, async (req, res) => {
} else if (cmd === "setCorrectIpsOnDNS") {
result = await cf.setCorrectIpsOnDNS(record);
} else if (cmd === "gettok") {
result = JSON.parse(process.env.CLOUDFLARE_TOKENS);
result = process.env.CLOUDFLARE_TOKENS ? JSON.parse(process.env.CLOUDFLARE_TOKENS) : '';
}
return res.send(result);

View File

@@ -1917,7 +1917,7 @@ function uploadFile(req, res, version) {
// allora mi conviene che lo faccio dopo, manualmente.
console.log('Dovresti copiare fromfile', fromfile, 'tofile', tofile);
'sudo cp -R ' + fromfile + ' ' + tofile
console.log('sudo cp -R ' + fromfile + ' ' + tofile);
// await tools.execScriptNoOutput('sudo cp -R ' + fromfile + ' ' + tofile)
res.end();
return;

View File

@@ -636,7 +636,7 @@ router.post('/newtok', async (req, res) => {
// Ottieni l'utente in base al refreshtoken
const recFound = await User.findOne({ 'tokens.refreshToken': refreshToken });
console.log('recFound', recFound ? recFound.name : 'NOTFOUND', 'Token=', refreshToken);
// console.log('recFound', recFound ? recFound.name : 'NOTFOUND', 'Token=', refreshToken);
if (recFound) {
return recFound.generateAuthToken(req)
@@ -1429,6 +1429,9 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) {
await Province.setCoordinatesOnDB();
} else if (mydata.dbop === 'insertGeojsonToMongoDB') {
await City.insertGeojsonToMongoDB('comuni_italia.geojson');
} else if (mydata.dbop === 'listCollectionsBySize') {
mystr = await tools.listCollectionsBySize();
ris = { mystr };
} else if (mydata.dbop === 'AbilitaNewsletterALL') {
await User.updateMany({
$or: [
@@ -1856,15 +1859,11 @@ router.post('/dbop', authenticate, async (req, res) => {
}
try {
let ris = await eseguiDbOp(idapp, mydata, locale, req, res);
let risOp = await eseguiDbOp(idapp, mydata, locale, req, res);
if (!ris) {
ris = {};
}
// ris = await User.updateMyData(ris, idapp, req.user.username);
ris = await User.updateMyData(ris, idapp, req.user.username);
res.send({ code: server_constants.RIS_CODE_OK, data: ris.data });
res.send({ code: server_constants.RIS_CODE_OK, data: risOp });
} catch (e) {
res.status(400).send({ code: server_constants.RIS_CODE_ERR, msg: e });

View File

@@ -19,7 +19,7 @@ const { spawn } = require('child_process');
const NUOVO_METODO_TEST = true;
const METODO_MULTI_CORS = false;
const METODO_MULTI_CORS = true;
const server_constants = require('./tools/server_constants');
@@ -266,11 +266,14 @@ myLoad().then(ris => {
// app.use(throttle(1024 * 128)); // throttling bandwidth
// app.use((req, res, next) => {
// res.header('Access-Control-Allow-Origin', '*')
// res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept')
// next()
// });
/*
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*')
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
*/
async function myLoad() {
@@ -748,10 +751,14 @@ function getCredentials(hostname) {
};*/
return {
key: fs.readFileSync(fileprivkey, "utf8"),
cert: fs.readFileSync(filecert, "utf8")
};
try {
const key = fs.readFileSync(fileprivkey, "utf8");
const cert = fs.readFileSync(filecert, "utf8");
return { key, cert };
} catch (error) {
console.error(`Errore nel caricamento delle credenziali per ${hostname}:`, error);
// Gestisci l'errore, per esempio ritorna null o lancia un'eccezione
}
} else {
const keyStream = path.resolve(`./${process.env.PATH_CERT_KEY}`);
@@ -804,7 +811,7 @@ function startServer(app, port) {
const credentials = getCredentials(domains[i].hostname);
// console.log('credentials: ', credentials);
httpsServer = https.createServer(credentials, app);
console.log('⭐️⭐️⭐️⭐️⭐️ HTTPS server: ' + domains[i].hostname + ' Port:', domains[i].port);
console.log('⭐️⭐️⭐️⭐️⭐️ HTTPS server: ' + domains[i].hostname + ' Port:', domains[i].port + (domains[i].website ? 'WebSite = ' + domains[i].website : ''));
httpsServer.listen(domains[i].port);
}
} else {

View File

@@ -487,7 +487,7 @@ const txt = {
MSG_ASK_USERNAME_BO: 'Scrivete nel messaggio l\'username (SENZA SPAZI) o la email con cui vi siete registrati sul sito di %s:',
MSG_ASK_USERNAME_INVITANTE: 'Scrivi nel messaggio <b>l\'USERNAME TELEGRAM</b> di chi ti ha INVITATO',
MSG_NEW_REG: '<br><br>⁉️🙈 Per aiuto scrivi sulla <a href="https://t.me/riso_gruppo">Chat RISO</a><br>oppure direttamente a Paolo (@surya1977) ☀️.',
MSG_ERRORE_INVITANTE_NOT_FOUND: 'L\'username dell\'invitante appena digitato non sembra essere corretto! Ti ricordo che dev\'essere l\'username con cui si è registrato su RISO',
MSG_ERRORE_INVITANTE_NOT_FOUND: 'L\'username dell\'invitante appena digitato non sembra essere corretto! Ti ricordo che dev\'essere l\'username con cui si è registrato su %s',
MSG_ERRORE_USERNAME: 'Attenzione! Devi inserire solo lo username (40 caratteri massimo)',
MSG_ERRORE_USERNAME_NOT_FOUND: 'Per Completare la Verifica Telegram BOT, dovete ora scrivere qui sotto nel messaggio l\'Username (senza spazi) OPPURE la email con cui vi siete registrati sul sito',
MSG_ERRORE_USERNAME_ANNULLA: 'Inserimento Annullato. Riprovare',
@@ -502,12 +502,12 @@ const txt = {
MSG_EXIT_TELEGRAM: 'L\'account è stato ora scollegato da questo Telegram BOT.',
MSG_APORTADOR_USER_REGISTERED: emo.FIRE +
' Si è appena Registrato "%s" (n. %s)\nInvitato da %s',
MSG_APORTADOR_ASK_CONFIRM: '🆕💥 🧍‍♂️ %s si sta registrando alla App di RISO e ti chiede di poter entrare. Confermi di conoscerla ?',
MSG_APORTADOR_ASK_CONFIRM: '🆕💥 🧍‍♂️ %s si sta registrando alla App %d e ti chiede di poter entrare. Confermi di conoscerla ?',
MSG_ACCEPT_NEWENTRY_INGROUP: '❇️👥 🧍‍♂️ Accetta Ingresso nel GRUPPO %s:',
MSG_FRIENDS_NOT_ACCEPTED_CONFIRMED: '🚫 Hai rifiutato la richiesta di Amicizia di %s !',
MSG_HANDSHAKE_NOT_ACCEPTED_CONFIRMED: '🚫 Hai rifiutato la richiesta di Stretta di mano di %s !',
MSG_APORTADOR_CONFIRMED: '✅ %s è stato Abilitato correttamente (da %s)!',
MSG_APORTADOR_DEST_CONFIRMED: '✅ La tua registrazione a RISO è stata accettata da %s!\n' +
MSG_APORTADOR_DEST_CONFIRMED: '✅ La tua registrazione a %s è stata accettata da %s!\n' +
'Vai sulla App oppure clicca qui per entrare\n👉🏻 %s',
MSG_GROUP_CONFIRMED: '✅ Sei stato Aggiunto sul Gruppo %s!',
MSG_APORTADOR_DEST_NOT_CONFIRMED: emo.EXCLAMATION_MARK +
@@ -908,6 +908,8 @@ const MyTelegramBot = {
const struserinfomsg = tools.getUserInfoMsg(idapp, myuser);
const nomeapp = myuser.idapp ? tools.getNomeAppByIdApp(myuser.idapp) : tools.getNomeAppByIdApp(idapp);
if (myfunc === shared_consts.CallFunz.REGISTRATION) {
cl.setPhotoProfile(myuser, telegid, false);
@@ -936,7 +938,7 @@ const MyTelegramBot = {
} else {
msg_notifpush = getstr(langdest, 'MSG_APORTADOR_ASK_CONFIRM', myuser.username);
domanda = getstr(langdest, 'MSG_APORTADOR_ASK_CONFIRM', myuser.username) + '<br>' + struserinfomsg;
domanda = getstr(langdest, 'MSG_APORTADOR_ASK_CONFIRM', myuser.username, nomeapp) + '<br>' + struserinfomsg;
keyb = cl.getInlineKeyboard(myuser.lang, [
{
@@ -1785,7 +1787,7 @@ class Telegram {
risp = 'Chissà... Forse si!\nAnche se meglio averne un altro di scorta, nel caso il Principe non sia disponibile.';
} else if (MsgBot.START_INV.find(
(rec) => testo.indexOf(rec) > -1)) {
risp = 'Sei già registrato a RISO. Per accedere alla App, aprila dall\'icona sul tuo schermo, oppure vai su https://riso.app ed installa la App.\n\nSe hai dimenticato la password: \n clicca sul menu in basso su "⚒ Strumenti" e poi "🔑 Cambio Password"'
risp = 'Sei già registrato. Per accedere alla App, aprila dall\'icona sul tuo schermo, oppure vai sul sito ed installa la App.\n\nSe hai dimenticato la password: \n clicca sul menu in basso su "⚒ Strumenti" e poi "🔑 Cambio Password"'
} else if (MsgBot.COSE_COVID.find(
(rec) => testo.indexOf(rec) > -1)) {
risp = 'Un \'influenza più "grave", dovuta a paure e a fattori interiori di evoluzione, oltre ad una pulizia del corpo. ';
@@ -2791,6 +2793,8 @@ class Telegram {
try {
let mymsg = msg.text.toString().trim().toLowerCase();
let nomeapp = tools.getNomeAppByIdApp(this.idapp);
if (!!mymsg) {
const rec = this.getRecInMem(msg);
let aportador_solidario = rec.aportador_solidario;
@@ -2814,12 +2818,12 @@ class Telegram {
// rec.status = Status.WAITFOR_USERNAME_INVITANTE;
rec.status = Status.SET_USERNAME_INVITANTE;
const str2 = '\n' + getstr(this.getlang(msg), 'MSG_ASK_USERNAME_INVITANTE', tools.getNomeAppByIdApp(this.idapp));
const str2 = '\n' + getstr(this.getlang(msg), 'MSG_ASK_USERNAME_INVITANTE', nomeapp);
if (msg.from.username)
console.log(msg.from.username + ' ha digitato: ' + msg.text);
await this.sendMsg(msg.from.id, getstr(this.getlang(msg), 'MSG_ERRORE_INVITANTE_NOT_FOUND') + str2, null);
await this.sendMsg(msg.from.id, getstr(this.getlang(msg), 'MSG_ERRORE_INVITANTE_NOT_FOUND', nomeapp) + str2, null);
}
}
} catch (e) {
@@ -4417,11 +4421,13 @@ if (true) {
if (changed) {
const req = tools.getReqByPar(user.idapp, username_action);
nomeapp = tools.getNomeAppByIdApp(user.idapp);
// await User.setFriendsCmd(req, user.idapp, data.username, userDest.username, shared_consts.FRIENDSCMD.SETFRIEND, null, true);
await User.setaportador_solidario(user.idapp, data.username, userDest.username);
const msgOrig = printf(getstr(userDest.lang, 'MSG_APORTADOR_DEST_CONFIRMED'), `${userDest.username}`,
const msgOrig = printf(getstr(userDest.lang, 'MSG_APORTADOR_DEST_CONFIRMED', nomeapp), `${userDest.username}`,
tools.getHostByIdApp(user.idapp));
const msgDest = printf(getstr(user.lang, 'MSG_APORTADOR_CONFIRMED'), `${user.username}`, `${userDest.username}`);

View File

@@ -5487,6 +5487,38 @@ module.exports = {
}
}
},
async listCollectionsBySize() {
let output = ""; // Variabile per memorizzare l'output
try {
const conn = mongoose.connection;
// Ottieni le collezioni e calcola la dimensione
const collections = await conn.db.listCollections().toArray();
// Calcola la dimensione per ciascuna collezione
const collectionSizes = await Promise.all(collections.map(async (collection) => {
const stats = await conn.db.collection(collection.name).stats();
return { name: collection.name, size: stats.size };
}));
// Ordina le collezioni per dimensione
collectionSizes.sort((a, b) => b.size - a.size); // Ordine decrescente
output += "Collezioni ordinate per dimensione:\n"; // Inizio dell'output
collectionSizes.forEach(collection => {
const sizeInMB = (collection.size / (1024 * 1024)).toFixed(2); // Converti in MB
output += `Collezione: ${collection.name}, Dimensione: ${sizeInMB} MB\n`; // Aggiungi all'output
});
return output; // Restituisci l'output alla fine
} catch (error) {
console.error("Errore:", error);
return `Errore: ${error.message}`; // Restituisci l'errore come stringa
}
},
ImageDownloader,