- Profile

- Bot Telegram
- fixed Chip multiselect
This commit is contained in:
Paolo Arena
2020-01-03 01:52:49 +01:00
parent 892eccb4fc
commit f359f8f723
13 changed files with 725 additions and 67 deletions

View File

@@ -2,8 +2,18 @@ p #{name} #{surname} si è appena Registrato su #{nomeapp}
p Con i seguenti dati di accesso:
span Username: 
strong #{username}<br>
span Nome:&nbsp;
strong #{user.name}<br>
span Cognome:&nbsp;
strong #{user.surname}<br>
span Email:&nbsp;
strong #{emailto}<br>
span Cellulare:&nbsp;
strong #{user.profile.intcode_cell} #{user.profile.cell}<br>
span Nazionalità:&nbsp;
strong #{user.profile.nationality}<br>
span Username di chi lo ha Invitato:&nbsp;
strong #{user.aportador_solidario}<br>
p <br>Saluti
style(type="text/css").

View File

@@ -82,7 +82,7 @@ html
td(class="emailContainer", valign="top")
each event in arrevents
- var urlevent = baseurl + '/event/' + event.typol + '/' + event._id
- var urlevent = baseurl + '/event/' + event.typol + '?eventid=' + event._id
- var imgev = event.img_small
- var mydate = prettyDate(event.dateTimeStart)
unless (imgev)
@@ -91,9 +91,9 @@ html
- var teacher2 = ''
- var contrib = ''
- var myclteach = 'q-chip'
- if (event.op1[0])
- if (event.op1[0] && event.op1[0].username !== 'nessuno')
- teacher1 = event.op1[0].name + ' ' + event.op1[0].surname
- if (event.op2[0])
- if ((event.op2[0] && event.op2[0].username !== 'nessuno'))
- teacher2 = event.op2[0].name + ' ' + event.op2[0].surname
- myclteach = 'q-chip2'

View File

@@ -36,6 +36,7 @@
"mysql": "^2.17.1",
"node-cron": "^2.0.3",
"node-pre-gyp": "^0.11.0",
"node-telegram-bot-api": "^0.40.0",
"nodemailer": "^4.6.8",
"preview-email": "0.0.8",
"pug": "^2.0.4",

View File

@@ -17,6 +17,7 @@ process.env.DATABASE = process.env.DATABASE || 'FreePlanet';
process.env.MONGODB_URI = process.env.DOMAIN + process.env.DATABASE;
if (process.env.NODE_ENV === 'production') {
// ---------------- AMBIENTE DI PRODUZIONE !!!!!!!!!! --------------------
MYAPPS = [
{
idapp: '1',
@@ -27,6 +28,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'https://freeplanet.app',
portapp: '0',
dir: '/var/www/www.freeplanet.app',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '2',
@@ -34,9 +39,13 @@ if (process.env.NODE_ENV === 'production') {
adminemail: 'pao.loarena77@gmail.com',
manageremail: 'info@associazioneshen.it',
replyTo: 'info@associazioneshen.it',
host: 'http://associazioneshen.it',
host: 'https://www.associazioneshen.it',
portapp: '0',
dir: '/var/www/associazioneshen.it',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '3',
@@ -47,6 +56,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://brigittemgdumont.com',
portapp: '0',
dir: '',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '4',
@@ -57,6 +70,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'https://mandala.freeplanet.app',
portapp: '0',
dir: '/var/www/mandala.freeplanet.app',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '6',
@@ -67,19 +84,28 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://mandalaperlanima.eu',
portapp: '0',
dir: '',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '7',
name: 'Notevole',
adminemail: 'pao.loarena77@gmail.com',
adminemail: 'notevole.ayni@gmail.com',
manageremail: '',
replyTo: '',
host: 'https://notevole.freeplanet.app',
portapp: '0',
dir: '/var/www/notevole.freeplanet.app',
email_from: 'notevole.ayni@gmail.com',
email_pwd: '2e6ed34db0ef8fdc98e8a6872ec09a64350235c1ad7b756aa94047dec441d363xNvZnACxWSqSGu3lXcVyTuQiPR2ixYYf/HoY3agbNYU=',
telegram_key:'1037577457:AAGQbdIuYoB838v61ewJ0Hearx9UPpTBhMI',
telegram_bot_name: 'notevoleaynibot',
},
];
} else if (process.env.NODE_ENV === 'test') {
// ---------------- AMBIENTE DI TEST --------------------
MYAPPS = [
{
idapp: '1',
@@ -90,6 +116,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'https://test.freeplanet.app',
portapp: '0',
dir: '/var/www/www.freeplanet.app',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '2',
@@ -100,6 +130,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://test.associazioneshen.it',
portapp: '0',
dir: '/var/www/associazioneshen.it',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '3',
@@ -109,6 +143,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://test.brigittemgdumont.com',
portapp: '0',
dir: '',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '4',
@@ -118,6 +156,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'https://mandala.freeplanet.app',
portapp: '0',
dir: '/var/www/mandalatest.freeplanet.app',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '6',
@@ -127,6 +169,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://test.mandalaperlanima.eu',
portapp: '0',
dir: '',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '7',
@@ -136,9 +182,14 @@ if (process.env.NODE_ENV === 'production') {
host: 'https://testnotevole.freeplanet.app',
portapp: '0',
dir: '/var/www/testnotevole.freeplanet.app',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '2df135e2b6c02b2c68ec6bf6b103751fcb4dfc48c57d0acb302482358ee8141fmaDuooPabDvlThiBI2XMyA==',
telegram_key:'1037577457:AAGQbdIuYoB838v61ewJ0Hearx9UPpTBhMI',
telegram_bot_name: 'notevoleaynibot',
},
];
} else {
// ---------------- AMBIENTE IN L O C A L E --------------------
MYAPPS = [
{
idapp: '1',
@@ -149,6 +200,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://localhost',
portapp: '8080',
dir: '/home/paolo/myproject/freeplanet/dist/spa',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '2',
@@ -159,6 +214,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://localhost',
portapp: '8081',
dir: '/home/paolo/myproject/associazioneShen/dist/spa',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '3',
@@ -168,6 +227,8 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://localhost',
portapp: '8082',
dir: '',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
},
{
idapp: '4',
@@ -177,6 +238,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://localhost',
portapp: '8084',
dir: '',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '6',
@@ -186,6 +251,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://localhost',
portapp: '8083',
dir: '',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
telegram_key:'',
telegram_bot_name: '',
},
{
idapp: '7',
@@ -195,6 +264,10 @@ if (process.env.NODE_ENV === 'production') {
host: 'http://localhost',
portapp: '8085',
dir: '',
email_from: 'info.pianetalibero@gmail.com',
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
telegram_bot_name: 'paotestlocalebot',
telegram_key:'353996190:AAEcEbfrm_zTK6mBKf8ye9j-PXt958SDxew',
},
];

View File

@@ -0,0 +1,48 @@
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const tools = require('../tools/general');
mongoose.Promise = global.Promise;
mongoose.level = "F";
// Resolving error Unknown modifier: $pushAll
mongoose.plugin(schema => {
schema.options.usePushEach = true
});
const PaymentTypeSchema = new Schema({
idapp: {
type: String,
},
key: {
type: String,
},
label: {
type: String,
},
});
PaymentTypeSchema.statics.getFieldsForSearch = function () {
return ['label']
};
PaymentTypeSchema.statics.executeQueryTable = function (idapp, params) {
params.fieldsearch = this.getFieldsForSearch();
return tools.executeQueryTable(this, idapp, params);
};
PaymentTypeSchema.statics.findAllIdApp = function (idapp) {
const PaymentType = this;
const myfind = { idapp };
return PaymentType.find(myfind, (err, arrrec) => {
return arrrec
});
};
const PaymentType = mongoose.model('Paymenttype', PaymentTypeSchema);
module.exports = { PaymentType };

View File

@@ -136,9 +136,16 @@ var UserSchema = new mongoose.Schema({
email_paypal: {
type: String
},
paymenttypes: [],
username_telegram: {
type: String
},
teleg_id: {
type: Number
},
teleg_checkcode: {
type: Number
},
dateofbirth: {
type: Date,
},
@@ -404,6 +411,50 @@ UserSchema.statics.getEmailByUsername = async function (idapp, username) {
});
};
UserSchema.statics.UserByIdTelegram = async function (idapp, teleg_id) {
const User = this;
return await User.findOne({ idapp, 'profile.teleg_id': teleg_id })
.then((rec) => {
return (!!rec) ? rec._doc : null;
}).catch((e) => {
console.error('UserExistByIdTelegram', e);
});
};
UserSchema.statics.SetTelegramCheckCode = async function (idapp, username, teleg_checkcode) {
const User = this;
const fields_to_update = {
'profile.teleg_checkcode': teleg_checkcode
};
return await User.findOneAndUpdate({
idapp,
username
}, { $set: fields_to_update }, { new: false }).then((record) => {
return !!record;
});
};
UserSchema.statics.SetTelegramIdSuccess = async function (idapp, username, teleg_id) {
const User = this;
const fields_to_update = {
'profile.teleg_id': teleg_id,
'profile.teleg_checkcode': 0
};
return await User.findOneAndUpdate({
idapp,
username
}, { $set: fields_to_update }, { new: false }).then((record) => {
return record;
});
};
UserSchema.statics.getUsersList = function (idapp) {
const User = this;
@@ -463,6 +514,32 @@ UserSchema.statics.executeQueryTable = function (idapp, params) {
return tools.executeQueryTable(this, idapp, params);
};
UserSchema.statics.getDashboard = async function (idapp, aportador_solidario, username) {
try {
// DATA: username, name, surname, email, intcode_cell, cell
const dashboard = {
aportador: {},
downline: []
};
// Data of my Aportador
dashboard.aportador = await User.getUserShortDataByUsername(idapp, aportador_solidario);
// Data of my Downline
dashboard.downline = await User.getDownlineByUsername(idapp, username);
for (let index = 0; index < dashboard.downline.length; ++index) {
dashboard.downline[index].downline = await User.getDownlineByUsername(idapp, dashboard.downline[index].username);
}
return dashboard;
} catch (e) {
console.error(e);
return false;
}
};
if (tools.INITDB_FIRSTIME) {
console.log(' createIndex User Index...');
// UserSchema.index({ username: 'text', name: 'text', surname: 'text', email: 'text' });

View File

@@ -16,36 +16,16 @@ const _ = require('lodash');
const { ObjectID } = require('mongodb');
router.post('/', authenticate, async (req, res) => {
const idapp = req.body.idapp;
try {
const aportador_solidario = req.user.aportador_solidario;
// DATA: username, name, surname, email, intcode_cell, cell
const dashboard = {
aportador: {},
downline: []
};
// Data of my Aportador
dashboard.aportador = await User.getUserShortDataByUsername(idapp, aportador_solidario);
// Data of my Downline
dashboard.downline = await User.getDownlineByUsername(idapp, req.user.username);
for (let index = 0; index < dashboard.downline.length; ++index) {
dashboard.downline[index].downline = await User.getDownlineByUsername(idapp, dashboard.downline[index].username);
}
// Extract all the todos of the userId only
// tools.mylog('dashboard', dashboard);
const dashboard = User.getDashboard(idapp, aportador_solidario, req.user.username);
if (dashboard)
res.send({ dashboard });
} catch (e) {
console.error(e);
else
res.status(400).send(e);
}
});

View File

@@ -27,6 +27,7 @@ const { Operator } = require('../models/operator');
const { Where } = require('../models/where');
const { MyEvent } = require('../models/myevent');
const { Contribtype } = require('../models/contribtype');
const { PaymentType } = require('../models/paymenttype');
const { Discipline } = require('../models/discipline');
const { Newstosent } = require('../models/newstosent');
const { MyPage } = require('../models/mypage');
@@ -161,6 +162,8 @@ function getTableByTableName(tablename) {
mytable = MyEvent;
else if (tablename === 'contribtype')
mytable = Contribtype;
else if (tablename === 'paymenttypes')
mytable = PaymentType;
else if (tablename === 'disciplines')
mytable = Discipline;
else if (tablename === 'newstosent')
@@ -244,7 +247,7 @@ router.patch('/chval', authenticate, (req, res) => {
const mytable = getTableByTableName(mydata.table);
const fieldsvalue = mydata.fieldsvalue;
// tools.mylogshow('PATCH CHVAL: ', id, fieldsvalue);
tools.mylogshow('PATCH CHVAL: ', id, fieldsvalue);
// If I change my record...
if ((!User.isAdmin(req.user) && !User.isManager(req.user)) && !(req.user._id.toString() === id)) {
@@ -373,6 +376,7 @@ router.get('/loadsite/:userId/:idapp/:sall', authenticate_noerror, (req, res) =>
const operators = Operator.findAllIdApp(idapp);
const wheres = Where.findAllIdApp(idapp);
const contribtype = Contribtype.findAllIdApp(idapp);
const paymenttype = PaymentType.findAllIdApp(idapp);
const disciplines = Discipline.findAllIdApp(idapp);
const settings = Settings.findAllIdApp(idapp, false);
@@ -386,7 +390,7 @@ router.get('/loadsite/:userId/:idapp/:sall', authenticate_noerror, (req, res) =>
newstosent = Newstosent.findAllIdApp(idapp);
}
return Promise.all([bookedevent, eventlist, operators, wheres, contribtype, settings, permissions, disciplines, newstosent, mailinglist, mypage, gallery])
return Promise.all([bookedevent, eventlist, operators, wheres, contribtype, settings, permissions, disciplines, newstosent, mailinglist, mypage, gallery, paymenttype])
.then((arrdata) => {
// console.table(arrdata);
const myuser = req.user;
@@ -407,6 +411,7 @@ router.get('/loadsite/:userId/:idapp/:sall', authenticate_noerror, (req, res) =>
mailinglist: arrdata[9],
mypage: arrdata[10],
gallery: arrdata[11],
paymenttypes: arrdata[12],
myuser,
});
})

View File

@@ -147,9 +147,9 @@ router.post('/login', (req, res) => {
var user = new User(body);
// const subs = _.pick(req.body, ['subs']);
tools.mylog("LOGIN: username: " + user.username + " pwd = " + user.password);
// tools.mylog("LOGIN: username: " + user.username + " pwd = " + user.password);
tools.mylog("user REC:", user);
// tools.mylog("user REC:", user);
if (body.keyappid !== process.env.KEY_APP_ID)
return res.status(400).send();
@@ -180,7 +180,7 @@ router.post('/login', (req, res) => {
// }
// tools.mylog("user.verified_email:" + user.verified_email);
tools.mylog("usertosend.userId", usertosend.userId);
// tools.mylog("usertosend.userId", usertosend.userId);
return { usertosend, token }
@@ -198,7 +198,7 @@ router.post('/login', (req, res) => {
return { usertosend: myris.usertosend, token: myris.token, subsExistonDb: false }
})
}).then(myris => {
console.log('res', myris.token, myris.usertosend);
// console.log('res', myris.token, myris.usertosend);
// SEND TOKEN AND CODE RESULT
res.header('x-auth', myris.token).send({

View File

@@ -58,21 +58,26 @@ module.exports = {
}
// if (!transport) {
// transport = this.getTransport();
// transport = this.getTransport(mylocalsconf);
// }
// console.log('1 . transport', transport);
if (transport) {
paramemail.transport = transport;
} else {
// console.log('1b . transport gmail');
paramemail.transport = {
service: 'gmail',
auth: {
user: process.env.EMAIL_FROM,
pass: process.env.EMAIL_PW
user: tools.getEmailByIdApp(mylocalsconf.idapp),
pass: tools.getPwdByIdApp(mylocalsconf.idapp)
}
}
}
// console.log('2 . paramemail.transport', paramemail.transport);
// console.log('paramemail', paramemail);
const email = new Email(paramemail);
@@ -86,11 +91,11 @@ module.exports = {
locals: mylocalsconf,
})
.then((ris) => {
console.log('ris EMAIL', ris);
// console.log('ris EMAIL', ris);
return !!ris
})
.catch((err) => {
console.error('Error: ', err);
console.error('sendEmail_base Error: ', err);
return false
});
},
@@ -99,7 +104,7 @@ module.exports = {
// setup e-mail data with unicode symbols
var mailOptions = {
from: process.env.EMAIL_FROM, // sender address
from: tools.getEmailByIdApp(mylocalsconf.idapp), // sender address
to: to,
generateTextFromHTML: true,
subject: subject,
@@ -110,13 +115,13 @@ module.exports = {
mailOptions['reply-to'] = replyTo;
if (process.env.SEND_EMAIL === 1) {
console.log("SEND EMAIL smtpTransport");
console.log("SEND EMAIL...");
// send mail with defined transport object
smtpTransport.sendMail(mailOptions, function (error, response) {
if (error) {
console.log(error);
} else {
console.log("Message sent: " + response);
console.log("Email Inviata RISPOSTA: " + response);
}
});
} else {
@@ -148,6 +153,7 @@ module.exports = {
console.log('idapp', idapp, tools.getNomeAppByIdApp(idapp));
mylocalsconf = {
idapp,
dataemail: await this.getdataemail(idapp),
locale: lang,
nomeapp: tools.getNomeAppByIdApp(idapp),
@@ -157,20 +163,22 @@ module.exports = {
surname: user.surname,
forgetpwd: "",
emailto: emailto,
user,
};
this.sendEmail_base('registration/' + lang, emailto, mylocalsconf, tools.getreplyToEmailByIdApp(idapp));
// Send to the Admin an Email
this.sendEmail_base('admin/registration/' + lang, tools.getAdminEmailByIdApp(idapp), mylocalsconf, '');
this.sendEmail_base('admin/registration/' + tools.LANGADMIN, tools.getAdminEmailByIdApp(idapp), mylocalsconf, '');
if (tools.isManagAndAdminDifferent(idapp)) {
this.sendEmail_base('admin/registration/' + lang, tools.getManagerEmailByIdApp(idapp), mylocalsconf, '');
this.sendEmail_base('admin/registration/' + tools.LANGADMIN, tools.getManagerEmailByIdApp(idapp), mylocalsconf, '');
}
},
sendEmail_RequestNewPassword: async function (lang, emailto, idapp, tokenforgot) {
mylocalsconf = {
idapp,
dataemail: await this.getdataemail(idapp),
locale: lang,
nomeapp: tools.getNomeAppByIdApp(idapp),
@@ -188,6 +196,7 @@ module.exports = {
tools.mylog('tools.getNomeAppByIdApp(idapp)', tools.getNomeAppByIdApp(idapp), idapp);
mylocalsconf = {
idapp,
dataemail: await this.getdataemail(idapp),
locale: lang,
nomeapp: tools.getNomeAppByIdApp(idapp),
@@ -216,10 +225,10 @@ module.exports = {
this.sendEmail_base('booking/' + texthtml + '/' + lang, emailto, mylocalsconf, tools.getreplyToEmailByIdApp(idapp));
// Send Email also to the Admin
this.sendEmail_base('admin/' + texthtml + '/' + lang, tools.getAdminEmailByIdApp(idapp), mylocalsconf, '');
this.sendEmail_base('admin/' + texthtml + '/' + tools.LANGADMIN, tools.getAdminEmailByIdApp(idapp), mylocalsconf, '');
if (tools.isManagAndAdminDifferent(idapp)) {
this.sendEmail_base('admin/' + texthtml + '/' + lang, tools.getManagerEmailByIdApp(idapp), mylocalsconf, '');
this.sendEmail_base('admin/' + texthtml + '/' + tools.LANGADMIN, tools.getManagerEmailByIdApp(idapp), mylocalsconf, '');
}
}));
@@ -231,6 +240,7 @@ module.exports = {
tools.mylog('sendEmail_CancelBooking');
mylocalsconf = {
idapp,
dataemail: await this.getdataemail(idapp),
locale: lang,
nomeapp: tools.getNomeAppByIdApp(idapp),
@@ -248,10 +258,10 @@ module.exports = {
this.sendEmail_base('booking/cancelbooking/' + lang, emailto, mylocalsconf, tools.getreplyToEmailByIdApp(idapp));
// Send Email also to the Admin
this.sendEmail_base('admin/cancelbooking/' + lang, tools.getAdminEmailByIdApp(idapp), mylocalsconf, '');
this.sendEmail_base('admin/cancelbooking/' + tools.LANGADMIN, tools.getAdminEmailByIdApp(idapp), mylocalsconf, '');
if (tools.isManagAndAdminDifferent(idapp)) {
this.sendEmail_base('admin/cancelbooking/' + lang, tools.getManagerEmailByIdApp(idapp), mylocalsconf, '');
this.sendEmail_base('admin/cancelbooking/' + tools.LANGADMIN, tools.getManagerEmailByIdApp(idapp), mylocalsconf, '');
}
},
@@ -261,6 +271,7 @@ module.exports = {
tools.mylog('tools.getNomeAppByIdApp(idapp)', tools.getNomeAppByIdApp(idapp), idapp);
mylocalsconf = {
idapp,
dataemail: await this.getdataemail(idapp),
locale: lang,
nomeapp: tools.getNomeAppByIdApp(idapp),
@@ -289,13 +300,13 @@ module.exports = {
console.log('idapp', idapp, tools.getNomeAppByIdApp(idapp));
mylocalsconf = {
idapp,
dataemail: await this.getdataemail(idapp),
locale: lang,
nomeapp: tools.getNomeAppByIdApp(idapp),
name: user.name,
surname: user.surname,
emailto: user.email,
idapp
};
const hash = tools.getHash(mylocalsconf.emailto);
@@ -327,10 +338,10 @@ module.exports = {
if (sendnews) {
// Send to the Admin an Email
this.sendEmail_base('admin/added_to_newsletter/' + lang, tools.getAdminEmailByIdApp(idapp), mylocalsconf, '');
this.sendEmail_base('admin/added_to_newsletter/' + tools.LANGADMIN, tools.getAdminEmailByIdApp(idapp), mylocalsconf, '');
if (tools.isManagAndAdminDifferent(idapp)) {
this.sendEmail_base('admin/added_to_newsletter/' + lang, tools.getManagerEmailByIdApp(idapp), mylocalsconf, '');
this.sendEmail_base('admin/added_to_newsletter/' + tools.LANGADMIN, tools.getManagerEmailByIdApp(idapp), mylocalsconf, '');
}
}
@@ -432,7 +443,7 @@ module.exports = {
return mydata
},
getTransport: () => {
getTransport: (mylocalsconf) => {
// Create Transport
let smtpTransport = null;
@@ -445,7 +456,7 @@ module.exports = {
pass: mylocalsconf.dataemail.pwd_from
}
});
} else if (mylocalsconf.dataemail.email_service === 'gmail') {
} else if (mylocalsconf.dataemail.email_service === 'gmail' && mylocalsconf.dataemail.email_service !== undefined) {
smtpTransport = {
service: 'gmail', //'Gmail',
auth: {
@@ -457,8 +468,8 @@ module.exports = {
smtpTransport = {
service: 'gmail',
auth: {
user: process.env.EMAIL_FROM,
pass: process.env.EMAIL_PW
user: tools.getEmailByIdApp(mylocalsconf.idapp),
pass: tools.getPwdByIdApp(mylocalsconf.idapp)
}
};
}
@@ -476,8 +487,8 @@ module.exports = {
const myarrevents = await MyEvent.getLastEvents(idapp);
mylocalsconf = {
locale: lang,
idapp,
locale: lang,
nomeapp: tools.getNomeAppByIdApp(idapp),
arrevents: myarrevents,
baseurl: tools.getHostByIdApp(idapp),
@@ -492,7 +503,7 @@ module.exports = {
mynewsrec.templemail_str = mylocalsconf.dataemail.templ.subject;
mynewsrec.numemail_sent = await MailingList.getnumSent(idapp, id_newstosent);
const smtpTransport = this.getTransport();
const smtpTransport = this.getTransport(mylocalsconf);
// LOOP USERS EMAIL
for (const user of userstosend) {
@@ -500,7 +511,7 @@ module.exports = {
const isok = await MailingList.isOk(idapp, user._id, id_newstosent);
if (isok) {
let secpause = await Settings.getValDbSettings(idapp, 'MSEC_PAUSE_SEND', process.env.DELAY_SENDEMAIL);
if (secpause > process.env.DELAY_SENDEMAIL)
if (secpause < process.env.DELAY_SENDEMAIL)
secpause = process.env.DELAY_SENDEMAIL;
activate = await Newstosent.isActivated(id_newstosent);
@@ -607,13 +618,13 @@ module.exports = {
const myarrevents = await MyEvent.getLastEvents(idapp);
const myemail = await Settings.getValDbSettings(idapp, 'EMAIL_TEST');
mylocalsconf = {
idapp,
locale: lang,
nomeapp: tools.getNomeAppByIdApp(idapp),
arrevents: myarrevents,
name: 'TestNome',
surname: 'TestCognome',
emailto: myemail,
idapp,
baseurl: tools.getHostByIdApp(idapp),
hashemail: tools.getHash(myemail),
};
@@ -625,7 +636,7 @@ module.exports = {
this.replacefields(mylocalsconf);
const smtpTransport = this.getTransport();
const smtpTransport = this.getTransport(mylocalsconf);
console.log('-> Invio Email TEST a', mylocalsconf.emailto, 'previewonly', previewonly);
return this.sendEmail_base('newsletter/' + lang, mylocalsconf.emailto, mylocalsconf, '', smtpTransport, previewonly);

View File

@@ -18,7 +18,6 @@ const sendemail = require('./sendemail');
const cron = require('node-cron');
i18n = require("i18n");
if ((process.env.NODE_ENV === 'production') || (process.env.NODE_ENV === 'test')) {
@@ -128,6 +127,7 @@ app.use('/admin', admin_router);
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function (err, req, res, next) {
console.log('Error: ', err.message);
// console.trace();
@@ -139,6 +139,9 @@ if (app.get('env') === 'development') {
});
}
require('./telegram/telegrambot');
// *** DB CONNECTIONS ***
// mysql_func.mySqlConn_Shen.connect((err) => {
// if (!err)
@@ -170,6 +173,12 @@ if (process.env.PROD !== 1) {
// testmsgwebpush();
// sendemail.testemail('2', 'it');
// let crypt = tools.cryptdata('');
// let decrypt = tools.decryptdata(crypt);
// console.log('crypted:', crypt);
// console.log('decrypted:', decrypt);
mycron();
}

View File

@@ -0,0 +1,372 @@
const tools = require('../tools/general');
const appTelegram = ['7'];
const printf = require('util').format;
const { User } = require('../models/user');
const Benvenuto = 'Benvenuto';
const Menu = {
LAVAGNA: 'La tua Lavagna',
LINK_CONDIVIDERE: 'Tuo Link da condividere',
INFO: 'Informazioni',
ASSISTENZA: 'Assistenza',
};
const MenuStandard = [[Menu.LAVAGNA, Menu.LINK_CONDIVIDERE], [Menu.INFO], [Menu.ASSISTENZA]];
const Status = {
NONE: 0,
VERIFIED: 1,
WAITFOR_USERNAME_BO: 102,
WAITFOR_VERIFY_CODE: 103,
};
const txt = {
MSG_ASK_USERNAME_BO: 'Inserire lo username con cui ti sei registrato sul sito:',
MSG_ERRORE_USERNAME: 'Attenzione! Devi inserire solo lo username (20 caratteri massimo)',
MSG_ERRORE_USERNAME_NOT_FOUND: 'Attenzione! Username non trovato in archivio. Verifica che sia corretto.',
MSG_ERRORE_USERNAME_ANNULLA: 'Inserimento Annullato.',
MSG_ERRORE_VERIFY_CODE_MAXLEN: 'Attenzione! Devi inserire solo il codice a 6 cifre',
MSG_VERIFY_CODE: 'Vai sul sito e aggiorna la pagina (REFRESH) e scrivi qui il Codice di Autenticazione che vedrai visualizzato',
MSG_ERR_VERIFY_CODE: 'Codice di Verifica Errato! Reinserire il codice di 6 cifre.',
MSG_VERIFY_OK: 'Benvenuto %s. Ora sei correttamente verificato!',
MSG_ERR_UNKNOWN_VERIFY_CODE: 'Errore durante il salvataggio sul Server. Riprovare piú tardi'
};
const TelegramBot = require('node-telegram-bot-api');
function getstr(lang, text) {
return text;
}
class Telegram {
constructor(idapp, bot) {
this.idapp = idapp;
this.bot = bot;
this.token = bot.token;
this.arrUsers = [];
}
async start(msg) {
// this.msgBenvenuto(msg.chat.id);
// Check if Present to the DB
if (!await this.alreadyExist(msg)) {
this.insertIntoDB(msg);
} else {
let rec = this.getRecInMem(msg);
if (!rec)
rec = this.addUser(msg);
rec.status = Status.VERIFIED
}
}
isMenu(msg) {
if (msg.text === Menu.LAVAGNA) {
this.menuLavagna(msg)
}else if (msg.text === Menu.LINK_CONDIVIDERE) {
this.menuLinkCondividere(msg)
}else if (msg.text === Menu.ASSISTENZA) {
this.menuAssistenza(msg)
}else if (msg.text === Menu.INFO) {
this.menuInformazioni(msg)
}
}
async menuLavagna(msg) {
const rec = this.getRecInMem(msg);
// console.log('rec', rec);
let mystr = '';
if (rec.user) {
const dashboard = await User.getDashboard(this.idapp, rec.user.aportador_solidario, rec.user.username);
const numpersone = (dashboard.downline) ? dashboard.downline.length : 0;
if (dashboard.aportador) {
mystr = `Chi ti ha invitato: ${dashboard.aportador.username} (${dashboard.aportador.name} ${dashboard.aportador.surname})\n`;
} else {
mystr = 'Chi ti ha invitato: Sei il Primo! ';
}
mystr += `____________________________________________\n`;
if (numpersone > 0) {
mystr += `Persone che hai invitato (${numpersone}):\n`;
let index = 1;
dashboard.downline.forEach((user) => {
mystr += `${index}°: ${user.username} (${user.name} ${user.surname})`;
index++;
});
} else {
mystr += `Attualmente non hai invitato nessuna persona.\n`;
}
}
if (!!mystr)
this.sendMsg(msg.chat.id, mystr);
}
async menuLinkCondividere(msg) {
const rec = this.getRecInMem(msg);
if (rec.user) {
const mystr = tools.getHostByIdApp(this.idapp) + '/signup/' + rec.user.username;
this.sendMsg(msg.chat.id, mystr);
}
}
async menuInformazioni(msg) {
const mystr = 'Informazioni Aggiuntive: ...';
this.sendMsg(msg.chat.id, mystr);
}
async menuAssistenza(msg) {
const mystr = 'Per contattarci usa questa chat di gruppo: ....';
this.sendMsg(msg.chat.id, mystr);
}
existInMemory(msg) {
const rec = this.getRecInMem(msg);
return !!rec
}
getstatusInMemory(msg) {
const rec = this.getRecInMem(msg);
if (!!rec)
return rec.status;
else
return Status.NONE;
}
getRecInMem(msg) {
return this.arrUsers.find((rec) => rec.id === msg.from.id);
}
async setUsernameBo(msg) {
try {
const rec = this.getRecInMem(msg);
console.log('msg.text', msg.text);
const text = msg.text;
if (text.length < 20) {
if (rec) {
rec.username_bo = text;
// Check if username exist
const user = await User.findByUsername(this.idapp, rec.username_bo.toLowerCase());
if (!user) {
this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_NOT_FOUND)
} else {
await User.SetTelegramCheckCode(this.idapp, rec.username_bo, rec.code);
rec.status = Status.WAITFOR_VERIFY_CODE;
this.sendMsg(msg.from.id, txt.MSG_VERIFY_CODE)
}
}
} else if (text.length === 0) {
if (rec)
rec.status = Status.NONE;
this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_ANNULLA)
} else {
this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME)
}
} catch (e) {
console.error('Error setUsernameBo:', e)
}
}
async setVerifyCode(msg) {
try {
const rec = this.getRecInMem(msg);
const code = msg.text.toString().trim();
if (msg.text.length < 7) {
if (rec) {
if (code === msg.text) {
rec.status = Status.VERIFIED;
await User.SetTelegramIdSuccess(this.idapp, rec.username_bo, msg.from.id).then((recuser) => {
if (recuser) {
let name = recuser.name;
this.sendMsg(msg.from.id, printf(txt.MSG_VERIFY_OK, name))
} else {
this.sendMsg(msg.from.id, txt.MSG_ERR_UNKNOWN_VERIFY_CODE);
}
});
} else {
rec.retry++;
this.sendMsg(msg.from.id, txt.MSG_ERR_VERIFY_CODE)
}
}
} else if (msg.text.length === 0) {
if (rec)
rec.status = Status.NONE;
this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_ANNULLA)
} else {
this.sendMsg(msg.from.id, txt.MSG_ERRORE_VERIFY_CODE_MAXLEN)
}
} catch (e) {
console.error('Error setVerifyCode', e);
}
}
async receiveMsg(msg) {
let status = this.getstatusInMemory(msg);
if (status === Status.NONE) {
await this.start(msg);
}
status = this.getstatusInMemory(msg);
if (status === Status.WAITFOR_USERNAME_BO) {
this.setUsernameBo(msg)
} else if (status === Status.WAITFOR_VERIFY_CODE) {
this.setVerifyCode(msg)
} else if (status === Status.NONE) {
this.start(msg);
} else if (status === Status.VERIFIED) {
// Check Menu
this.isMenu(msg);
}
}
async askVerifiedCode(msg) {
const rec = this.arrUsers.find((rec) => rec.id === msg.from.id);
if (!rec) {
await this.addUser(msg);
this.sendMsg(msg.chat.id, getstr(msg.from.language_code, txt.MSG_ASK_USERNAME_BO));
}
}
async alreadyExist(msg) {
const id = msg.from.id;
const user = await User.UserByIdTelegram(this.idapp, id);
let rec = this.arrUsers.find((rec) => rec.id === msg.from.id);
if (user && !rec) {
rec = this.addUser(msg);
}
if (rec)
rec.user = user;
return !!rec
}
addUser(msg) {
const lang = msg.from.language_code;
const code = 100000 + Math.round(Math.random() * 899999);
const rec = {
id: msg.from.id,
code,
lang,
status: Status.WAITFOR_USERNAME_BO,
retry: 0,
username_bo: ''
};
this.arrUsers.push(rec);
return rec;
}
insertIntoDB(msg) {
this.askVerifiedCode(msg);
}
sendMsg(id, text) {
this.bot.sendMessage(id, text, {
"reply_markup": {
"keyboard": MenuStandard
}
});
}
msgBenvenuto(id) {
this.bot.sendMessage(id, Benvenuto, {
"reply_markup": {
"keyboard": MenuStandard
}
});
}
}
const arrTelegram = [];
function getclTelegBytoken(token) {
const rec = arrTelegram.find((rec) => rec.cl.token === token)
if (!!rec)
return rec.cl;
else
return null;
}
for (const idapp of appTelegram) {
const token = tools.getTelegramKeyByIdApp(idapp);
// console.log('idapp', idapp, 'token', token);
if (!!token) {
const bot = new TelegramBot(token, { polling: true });
arrTelegram.push({ idapp, cl: new Telegram(idapp, bot) });
bot.onText(/\/start/, (msg) => {
const myclTelegram = getclTelegBytoken(bot.token);
myclTelegram.start(msg);
});
// Matches "/echo [whatever]"
bot.onText(/\/echo (.+)/, (msg, match) => {
// 'msg' is the received Message from Telegram
// 'match' is the result of executing the regexp above on the text content
// of the message
const chatId = msg.chat.id;
const resp = match[1]; // the captured "whatever"
// send back the matched "whatever" to the chat
bot.sendMessage(chatId, resp);
});
// Listen for any kind of message. There are different kinds of
// messages.
bot.on('message', (msg) => {
const myclTelegram = getclTelegBytoken(bot.token);
// console.log('msg', msg);
const chatId = msg.chat.id;
myclTelegram.receiveMsg(msg);
// var bye = "bye";
// if (msg.text.toString().toLowerCase().includes(bye)) {
// bot.sendMessage(msg.chat.id, "Hope to see you around again , Bye");
// }
// send a message to the chat acknowledging receipt of their message
// bot.sendMessage(chatId, 'Received your message');
});
// Handle callback queries
bot.on('callback_query', function onCallbackQuery(callbackQuery) {
console.log('callback_query', callbackQuery);
bot.answerCallbackQuery(callbackQuery.id, { url });
});
}
}

View File

@@ -20,10 +20,15 @@ const server_constants = require('./server_constants');
// SETTINGS WebPush Configuration
const webpush = require('web-push');
const subject = process.env.URLBASE_APP1; //'mailto:' + process.env.EMAIL_FROM
const subject = process.env.URLBASE_APP1;
const publicVapidKey = process.env.PUBLIC_VAPI_KEY;
const privateVapidKey = process.env.PRIVATE_VAPI_KEY;
// Code goes here
const keySize = 256;
const ivSize = 128;
const iterations = 100;
if (process.env.GCM_API_KEY !== "")
webpush.setGCMAPIKey(process.env.GCM_API_KEY);
@@ -34,6 +39,8 @@ webpush.setVapidDetails(subject, publicVapidKey, privateVapidKey);
module.exports = {
INITDB_FIRSTIME: true,
LANGADMIN: 'it',
TYPE_PROJECT: 1,
TYPE_TODO: 2,
@@ -398,6 +405,26 @@ module.exports = {
return '';
},
getEmailByIdApp: function (idapp) {
const myapp = MYAPPS.find((item) => item.idapp === idapp);
return (myapp) ? myapp.email_from : ''
},
getPwdByIdApp: function (idapp) {
const myapp = MYAPPS.find((item) => item.idapp === idapp);
return (myapp) ? this.decryptdata(myapp.email_pwd) : ''
},
getTelegramBotNameByIdApp: function (idapp) {
const myapp = MYAPPS.find((item) => item.idapp === idapp);
return (myapp) ? myapp.telegram_bot_name : ''
},
getTelegramKeyByIdApp: function (idapp) {
const myapp = MYAPPS.find((item) => item.idapp === idapp);
return (myapp) ? myapp.telegram_key : ''
},
getQueryTable(idapp, params) {
// console.log('idapp', idapp);
// console.table(params);
@@ -514,15 +541,60 @@ module.exports = {
return CryptoJS.SHA512(mystr, { outputLength: 256 }).toString();
},
encrypt(msg, pass) {
var salt = CryptoJS.lib.WordArray.random(128 / 8);
var key = CryptoJS.PBKDF2(pass, salt, {
keySize: keySize / 32,
iterations: iterations
});
var iv = CryptoJS.lib.WordArray.random(128 / 8);
var encrypted = CryptoJS.AES.encrypt(msg, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
});
// salt, iv will be hex 32 in length
// append them to the ciphertext for use in decryption
var transitmessage = salt.toString() + iv.toString() + encrypted.toString();
return transitmessage;
},
decrypt(transitmessage, pass) {
var salt = CryptoJS.enc.Hex.parse(transitmessage.substr(0, 32));
var iv = CryptoJS.enc.Hex.parse(transitmessage.substr(32, 32))
var encrypted = transitmessage.substring(64);
var key = CryptoJS.PBKDF2(pass, salt, {
keySize: keySize / 32,
iterations: iterations
});
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC
});
return decrypted;
},
cryptdata(mydata) {
// Encrypt
return CryptoJS.AES.encrypt(JSON.stringify(data), process.env.SECRK);
//return CryptoJS.AES.encrypt(JSON.stringify(mydata), process.env.SECRK);
return this.encrypt(mydata, process.env.SECRK);
},
decryptdata(mydatacrypted) {
// Decrypt
const bytes = CryptoJS.AES.decrypt(mydatacrypted.toString(), process.env.SECRK);
return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
// const bytes = CryptoJS.AES.decrypt(mydatacrypted.toString(), process.env.SECRK);
// return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
return this.decrypt(mydatacrypted, process.env.SECRK).toString(CryptoJS.enc.Utf8);
},
BoolToInt(mybool) {
@@ -575,7 +647,7 @@ module.exports = {
mkdirpath(dirPath) {
// if (!fs.accessSync(dirPath, fs.constants.R_OK | fs.constants.W_OK)) {
if (!fs.existsSync(dirPath)){
if (!fs.existsSync(dirPath)) {
try {
fs.mkdirSync(dirPath, { recursive: true });
}