diff --git a/css/basic.css b/css/basic.css
index b396b8e..8f66b3d 100644
--- a/css/basic.css
+++ b/css/basic.css
@@ -1,2 +1,346 @@
-.provared {
- color: red; }
+/* Default CSS */
+body, #body_style {
+ margin: 0;
+ padding: 0;
+ background: #E9F2F9;
+ color: #5b656e; }
+
+a {
+ color: #09c; }
+
+a img {
+ border: none;
+ text-decoration: none; }
+
+table, table td {
+ border-collapse: collapse; }
+
+td, h1, h2, h3, p {
+ font-family: tahoma, geneva, sans-serif;
+ color: #313a42; }
+
+h1, h2, h3, h4 {
+ color: #313a42 !important;
+ font-weight: normal;
+ line-height: 1.2; }
+
+h1 {
+ font-size: 24px; }
+
+h2 {
+ font-size: 18px; }
+
+h3 {
+ font-size: 16px; }
+
+p {
+ margin: 0 0 0.4em 0; }
+
+/* Force Outlook to provide a "view in browser" menu link. */
+#outlook a {
+ padding: 0; }
+
+/* Preheader and webversion */
+.preheader {
+ background-color: #8bafcb; }
+
+.preheaderContent, .webversion, .webversion a {
+ color: #ffffff;
+ font-size: 10px; }
+
+.preheaderContent {
+ width: 440px; }
+
+.preheaderContent, .webversion {
+ padding: 5px 10px; }
+
+.webversion {
+ width: 200px;
+ text-align: center; }
+
+.webversion a {
+ text-decoration: underline;
+ color: #ffffff;
+ font-size: 10px; }
+
+/* Logo (branding) */
+.logoContainer {
+ padding: 20px 0 10px 0px;
+ width: 320px;
+ text-align: center; }
+
+.myimg {
+ padding: 20px;
+ max-width: 250px;
+ float: left;
+ text-align: center; }
+
+.logoContainer a {
+ color: #ffffff; }
+
+/* Whitespace (imageless spacer) */
+.whitespace {
+ line-height: 0; }
+
+.firma {
+ font-size: 0.75rem; }
+
+.disclaimer {
+ padding: 10px;
+ background-color: #ffffff;
+ font-size: 0.75rem;
+ color: gray;
+ line-height: 130%; }
+
+.bottom {
+ padding: 10px;
+ margin-top: 20px;
+ background-color: #ffffff;
+ border-top: 1px solid #e5e5e5;
+ text-align: center;
+ font-size: 0.75rem;
+ color: #606060;
+ line-height: 150%; }
+
+/* Button */
+.buttonContainer {
+ padding: 0px 0px 0px 0px; }
+
+.button, .button2 {
+ text-align: center;
+ border: 1px solid #f75666;
+ border-radius: 10px; }
+
+.button a, .button2 a {
+ color: #f75666;
+ text-decoration: none;
+ display: block;
+ font-size: 13px; }
+
+.button2 {
+ border: 1px solid #0000ff; }
+
+.button2 a {
+ font-size: 1.15rem;
+ color: #0000ff; }
+
+.center_img {
+ display: block !important;
+ margin-left: auto;
+ margin-right: auto; }
+
+/* Complete email content */
+.emailContainer {
+ padding: 40px 20px 10px 20px;
+ background: #ffffff;
+ border-radius: 4px; }
+
+.textIniContainer {
+ padding: 20px 20px 20px 20px;
+ background: #ffffff;
+ border-radius: 10px; }
+
+.discContainer {
+ padding: 40px 20px 10px 20px;
+ background: #ffffff;
+ border-radius: 4px; }
+
+/* An article */
+.sectionMainTitle {
+ color: #5b656e; }
+
+.sectionContentTitle, .sectionContent, .sectionContentSubTitle {
+ padding: 0px 5px 0px 0px; }
+
+.teacher {
+ font-style: italic;
+ margin-top: 16px;
+ text-align: center;
+ font-size: .75rem; }
+
+.contrib {
+ font-size: .75rem;
+ font-style: italic;
+ font-weight: bold; }
+
+.sectionContentTitle {
+ font-weight: bold;
+ text-shadow: .05rem .05rem .05rem #555;
+ font-size: 18px;
+ color: blue;
+ padding: 0px 0px 5px 0; }
+
+.sectionContentSubTitle {
+ font-size: 12px;
+ color: #0000ff;
+ text-transform: uppercase;
+ padding: 0px 0px 5px 0px; }
+
+.LinkDisc a {
+ text-decoration: none; }
+
+.pDisc:hover {
+ color: white !important;
+ background: #5c8ef4 !important; }
+
+.hoverLink a:hover {
+ color: white !important;
+ background: #5c8ef4 !important; }
+
+.hoverLink a {
+ padding: 5px;
+ border-radius: 10px; }
+
+.sectionContent {
+ font-size: 13px;
+ line-height: 18px; }
+
+.center {
+ text-align: center; }
+
+.testomail {
+ padding: 10px;
+ font-size: 0.75rem; }
+
+.clpromo {
+ background-color: orange;
+ text-align: center;
+ font-size: 1rem; }
+
+.sectionArticleImage {
+ padding: 0px 15px 0px 0px;
+ text-align: center; }
+
+.sectionArticleImage img {
+ padding: 0px 0px 0px 0px;
+ -ms-interpolation-mode: bicubic;
+ display: block;
+ border: 1px solid #5b656e; }
+
+/* Footer and social media */
+.footNotes {
+ padding: 0px 20px 0px 20px; }
+
+.footLink {
+ padding: 0px 5px 0px 5px; }
+
+.footNotes a {
+ color: #ffffff;
+ font-size: 13px; }
+
+.socialMedia {
+ background: #8bafcb; }
+
+/* Column */
+.column {
+ padding-bottom: 20px; }
+
+/* CSS for specific screen width(s) */
+@media only screen and (max-width: 480px) {
+ body, table, td, p, a, li, blockquote {
+ -webkit-text-size-adjust: none !important; }
+ body[yahoofix] table {
+ width: 100% !important; }
+ body[yahoofix] .webversion {
+ display: none;
+ font-size: 0;
+ max-height: 0;
+ line-height: 0;
+ mso-hide: all; }
+ body[yahoofix] .logoContainer {
+ text-align: center; }
+ body[yahoofix] .sectionContentTitle, body[yahoofix] .sectionContentSubTitle, body[yahoofix] .sectionContent {
+ text-align: center;
+ padding: 0 5px 10px 5px; }
+ body[yahoofix] .sectionArticleImage {
+ padding-right: 0px !important; }
+ body[yahoofix] .sectionArticleImage img {
+ margin: 0 auto; }
+ body[yahoofix] .sectionPadding {
+ padding: 0px 10px 0px 10px; }
+ body[yahoofix] .buttonContainer {
+ padding: 0px 0px 0px 00px; }
+ body[yahoofix] .column {
+ float: left;
+ width: 100%;
+ margin: 0px 0px 30px 0px;
+ padding-bottom: 0px !important; } }
+
+.boldhigh, .boldop, .text-big {
+ font-weight: bold;
+ text-shadow: .06125rem .06125rem .125rem #555; }
+
+.row.inline, .column.inline, .flex.inline {
+ display: inline-flex; }
+
+.cltexth3, .cltexth2, .cltexth4, .cltexth5 {
+ font-size: 1.25rem;
+ font-weight: 400;
+ line-height: 1.75rem;
+ letter-spacing: .01em;
+ text-align: center !important; }
+
+.cltexth4 {
+ font-size: 1rem !important;
+ line-height: 1rem !important; }
+
+.cltitle_disc {
+ text-align: center;
+ padding: 0.55rem;
+ font-size: 1.25rem !important;
+ color: #ff1838 !important;
+ font-weight: bold !important; }
+
+.cltexth5 {
+ line-height: 0.75rem !important; }
+
+.text-right {
+ text-align: right; }
+
+.glossy {
+ background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0) 50%, rgba(0, 0, 0, 0.12) 51%, rgba(0, 0, 0, 0.04)) !important; }
+
+.items-center, .flex-center {
+ align-items: center; }
+
+.no-wrap {
+ flex-wrap: nowrap; }
+
+.row, .flex {
+ display: flex;
+ flex-wrap: wrap; }
+
+.shadow-5 {
+ box-shadow: 0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 5px 8px rgba(0, 0, 0, 0.14), 0 1px 14px rgba(0, 0, 0, 0.12); }
+
+.bg-red {
+ background: #f44336 !important; }
+
+.bg-blue {
+ background: #5c8ef4 !important; }
+
+.bg-white {
+ background: #ffffff !important; }
+
+.text-white {
+ color: #fff !important; }
+
+.q-chip--dense {
+ border-radius: 12px;
+ padding: 0 0.4em;
+ height: 1.5em; }
+
+.q-chip, .q-chip2 {
+ vertical-align: middle;
+ border-radius: 16px;
+ outline: 0;
+ position: relative;
+ height: 1em;
+ margin: 4px;
+ background: #e0e0e0;
+ color: rgba(0, 0, 0, 0.87);
+ font-size: 0.75rem;
+ padding: 0.5em 0.9em; }
+
+.q-chip2 {
+ height: 2em; }
diff --git a/css/one/styles.css b/css/one/styles.css
index ed27995..2a4ea29 100644
--- a/css/one/styles.css
+++ b/css/one/styles.css
@@ -1,2 +1,5 @@
-html {
- background: #0f91b5; }
+body {
+ background: #000000; }
+
+.sfondotab {
+ background-color: orange; }
diff --git a/src/server/config/config.js b/src/server/config/config.js
index b2138df..f826862 100644
--- a/src/server/config/config.js
+++ b/src/server/config/config.js
@@ -5,8 +5,9 @@ var file = `.env.${node_env}`;
// GLOBALI (Uguali per TUTTI)
process.env.LINKVERIF_REG = '/vreg';
process.env.LINK_REQUEST_NEWPASSWORD = '/requestnewpwd';
+process.env.LINK_UPDATE_PASSWORD = '/updatepassword';
+process.env.LINK_UPDATE_PWD = '/updatepwd';
process.env.LINK_CHECK_UPDATES = '/checkupdates';
-process.env.LINK_UPDATE_PASSWORD = '/updatepwd';
process.env.KEY_APP_ID = 'KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF';
console.log("FILE : " + file);
diff --git a/src/server/models/extralist.js b/src/server/models/extralist.js
index 2f4c60e..c15d050 100644
--- a/src/server/models/extralist.js
+++ b/src/server/models/extralist.js
@@ -167,6 +167,28 @@ ExtraListSchema.statics.getUsersList = function (idapp) {
};
+ExtraListSchema.statics.getDownlineNotRegisteredByNameSurname = function (idapp, nameandsurname) {
+ const ExtraList = this;
+
+ return ExtraList.find({
+ 'aportador_solidario_name_surname': nameandsurname,
+ registered: false,
+ }, {
+ username: 1,
+ name: 1,
+ surname: 1,
+ verified_email: 1,
+ 'profile.teleg_id': 1,
+ 'profile.saw_zoom_presentation': 1,
+ made_gift: 1,
+ email: 1,
+ date_reg: 1,
+ img: 1
+ }, (err, arrrec) => {
+ return arrrec
+ });
+};
+
ExtraListSchema.statics.getFieldsForSearch = function () {
return ['username', 'name', 'surname', 'cell_complete', 'aportador_solidario_name_surname', 'aportador_solidario_originale_name_surname']
diff --git a/src/server/models/user.js b/src/server/models/user.js
index f17b444..c257e69 100644
--- a/src/server/models/user.js
+++ b/src/server/models/user.js
@@ -332,6 +332,8 @@ UserSchema.statics.getUserShortDataByUsername = function (idapp, username) {
name: 1,
surname: 1,
verified_email: 1,
+ 'profile.teleg_id': 1,
+ 'profile.saw_zoom_presentation': 1,
made_gift: 1,
email: 1,
date_reg: 1,
@@ -357,6 +359,8 @@ UserSchema.statics.getDownlineByUsername = function (idapp, username) {
name: 1,
surname: 1,
verified_email: 1,
+ 'profile.teleg_id': 1,
+ 'profile.saw_zoom_presentation': 1,
made_gift: 1,
email: 1,
date_reg: 1,
@@ -366,17 +370,44 @@ UserSchema.statics.getDownlineByUsername = function (idapp, username) {
});
};
+
UserSchema.statics.getnumInvitatiAttivi = function (idapp, username) {
const User = this;
return User.count({
idapp,
aportador_solidario: username,
- teleg_id: { $gt: 1 },
- saw_zoom_presentation: true,
+ 'profile.teleg_id': { $gt: 1 },
+ 'profile.saw_zoom_presentation': true,
});
};
+UserSchema.statics.getUsersNationalityQuery = function (idapp) {
+ const query = [
+ {
+ $match: { idapp }
+ },
+ {
+ $group: { _id: "$profile.nationality", count: { $sum: 1 } }
+ },
+ {
+ $sort: { count: -1 }
+ }
+ ];
+ return query
+};
+
+
+UserSchema.statics.getindOrderDuplicate = function (idapp) {
+ const User = this;
+
+ return User.aggregate(User.getUsersNationalityQuery(idapp))
+ .then(ris => {
+ // console.table(ris);
+ return JSON.stringify(ris);
+ });
+};
+
UserSchema.statics.getnumInvitati = function (idapp, username) {
const User = this;
@@ -462,6 +493,17 @@ UserSchema.statics.getEmailByUsername = async function (idapp, username) {
});
};
+UserSchema.statics.getAportadorSolidarioByUsername = async function (idapp, username) {
+ const User = this;
+
+ return await User.findOne({ idapp, username })
+ .then((rec) => {
+ return ((rec) ? rec.aportador_solidario : '');
+ }).catch((e) => {
+ console.error('getAportadorSolidarioByUsername', e);
+ });
+};
+
UserSchema.statics.UserByIdTelegram = async function (idapp, teleg_id) {
const User = this;
@@ -671,10 +713,18 @@ UserSchema.statics.getDashboard = async function (idapp, aportador_solidario, us
dashboard.aportador = await User.getUserShortDataByUsername(idapp, aportador_solidario);
// Data of my Downline
- dashboard.downline = await User.getDownlineByUsername(idapp, username);
+ const arrap = await User.getDownlineByUsername(idapp, aportador_solidario);
+ dashboard.numpeople_aportador = arrap.length;
- for (let index = 0; index < dashboard.downline.length; ++index) {
- dashboard.downline[index].downline = await User.getDownlineByUsername(idapp, dashboard.downline[index].username);
+ dashboard.downline = await User.getDownlineByUsername(idapp, username);
+ dashboard.downbyuser = {};
+
+ for (const down of dashboard.downline) {
+ dashboard.downbyuser[down.username] = await User.getDownlineByUsername(idapp, down.username);
+
+ for (const down2 of dashboard.downbyuser[down.username]) {
+ dashboard.downbyuser[down2.username] = await User.getDownlineByUsername(idapp, down2.username);
+ }
}
return dashboard;
} catch (e) {
@@ -701,6 +751,18 @@ UserSchema.statics.fixUsername = async function (idapp, aportador_solidario_ind_
};
+UserSchema.statics.findByCellAndNameSurname = function (idapp, cell, name, surname) {
+ const User = this;
+
+ return User.findOne({
+ 'idapp': idapp,
+ 'profile.cell': cell,
+ 'name': name,
+ 'surname': surname,
+ });
+};
+
+
UserSchema.statics.getUsersRegistered = async function (idapp) {
const User = this;
@@ -788,7 +850,7 @@ UserSchema.statics.calculateStat = async function (idapp, username) {
};
-UserSchema.statics.getUsersNationalityQuery = function (idapp) {
+UserSchema.statics.getDistinctNationalityQuery = function (idapp) {
const query = [
{
$match: { idapp }
@@ -807,7 +869,7 @@ UserSchema.statics.getUsersNationalityQuery = function (idapp) {
UserSchema.statics.findAllDistinctNationality = async function (idapp) {
const User = this;
- return User.aggregate(User.getUsersNationalityQuery(idapp))
+ return User.aggregate(User.getDistinctNationalityQuery(idapp))
.then(ris => {
// console.table(ris);
return JSON.stringify(ris);
@@ -852,6 +914,29 @@ if (tools.INITDB_FIRSTIME) {
// UserSchema.index({ surname: 1 });
}
+UserSchema.statics.DbOp = async function (idapp, mydata) {
+ const User = this;
+ try {
+ if (mydata.dbop === 'changeCellInt') {
+ arrusers = await User.find({ 'idapp': idapp });
+ let num = 0;
+ for (const rec of arrusers) {
+ let mycell = tools.removespaces(rec.profile.intcode_cell + rec.profile.cell);
+ await User.findOneAndUpdate({ _id: rec._id }, { $set: { 'profile.cell': mycell } })
+ num++;
+ }
+
+ return { num };
+
+ // return await User.updateMany({ idapp }, { $set: { 'profile.cell': { $concat: ["$profile.intcode_cell", "$profile.cell"] } } })
+ }
+ } catch (e) {
+ console.error(e);
+
+ }
+
+};
+
const User = mongoose.model('User', UserSchema);
diff --git a/src/server/router/dashboard_router.js b/src/server/router/dashboard_router.js
index 32452f9..f674039 100644
--- a/src/server/router/dashboard_router.js
+++ b/src/server/router/dashboard_router.js
@@ -18,10 +18,21 @@ const { ObjectID } = require('mongodb');
router.post('/', authenticate, async (req, res) => {
const idapp = req.body.idapp;
+ let username = req.body.username;
- const aportador_solidario = req.user.aportador_solidario;
+ if ((!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) && (username) !== req.user.username) {
+ // If without permissions, exit
+ return res.status(404).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
+ }
+ let aportador_solidario = req.user.aportador_solidario;
- const dashboard = await User.getDashboard(idapp, aportador_solidario, req.user.username);
+ if (username) {
+ aportador_solidario = await User.getAportadorSolidarioByUsername(idapp, username)
+ } else {
+ username = req.user.username;
+ }
+
+ const dashboard = await User.getDashboard(idapp, aportador_solidario, username);
if (dashboard)
res.send({ dashboard });
else
diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js
index 022f4bc..e0760bd 100644
--- a/src/server/router/index_router.js
+++ b/src/server/router/index_router.js
@@ -5,6 +5,8 @@ const router = express.Router(),
const jwt = require('jsonwebtoken');
+const telegrambot = require('../telegram/telegrambot');
+
const sendemail = require('../sendemail');
const { authenticate, authenticate_noerror } = require('../middleware/authenticate');
@@ -94,8 +96,9 @@ router.post(process.env.LINK_REQUEST_NEWPASSWORD, (req, res) => {
const email = body.email;
console.log("POST " + process.env.LINK_REQUEST_NEWPASSWORD + " idapp= " + idapp + " email = " + email);
- User.findByEmail(idapp, email).then((user) => {
+ User.findByEmail(idapp, email).then(async (user) => {
if (!user) {
+ await tools.snooze(5000);
return res.status(200).send({ code: server_constants.RIS_CODE_EMAIL_NOT_EXIST, msg: '' });
} else {
// Creo il tokenforgot
@@ -118,17 +121,20 @@ router.post(process.env.LINK_REQUEST_NEWPASSWORD, (req, res) => {
// Invio la Nuova Password richiesta dal reset!
// Ritorna il token per poter effettuare le chiamate...
-router.post(process.env.LINK_UPDATE_PASSWORD, (req, res) => {
- var body = _.pick(req.body, ['idapp', 'email', 'tokenforgot', 'password']);
- var idapp = body.idapp;
- var email = body.email;
- var tokenforgot = body.tokenforgot;
- var password = body.password;
- console.log("POST " + process.env.LINK_UPDATE_PASSWORD + " idapp= " + idapp + " email = " + email + " tokenforgot = " + tokenforgot);
+router.post(process.env.LINK_UPDATE_PWD, (req, res) => {
+ const body = _.pick(req.body, ['idapp', 'email', 'tokenforgot', 'password']);
+ const idapp = body.idapp;
+ const email = body.email;
+ const tokenforgot = body.tokenforgot;
+ const password = body.password;
+ const msg = "Richiesta Nuova Password: idapp= " + idapp + " email = " + email;
+ console.log(msg);
+
+ telegrambot.sendMsgTelegramToTheManagers(body.idapp, msg);
User.findByLinkTokenforgot(idapp, email, tokenforgot).then((user) => {
if (!user) {
- return res.status(404).send();
+ return res.send({code: server_constants.RIS_CODE_TOKEN_RESETPASSWORD_NOT_FOUND});
} else {
// aggiorna la nuova password
user.password = password;
@@ -140,7 +146,7 @@ router.post(process.env.LINK_UPDATE_PASSWORD, (req, res) => {
// Salva lo User
user.save().then(() => {
- res.header('x-auth', token).send({ user }); // Ritorna il token di ritorno
+ res.header('x-auth', token).send({code: server_constants.RIS_CODE_OK}); // Ritorna il token di ritorno
});
})
}
diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js
index 821c2a7..a0cc653 100644
--- a/src/server/router/users_router.js
+++ b/src/server/router/users_router.js
@@ -62,11 +62,11 @@ router.post('/', async (req, res) => {
user.verified_email = true;
}
- if (user.profile.intcode_cell) {
- if (user.profile.cell.substring(0, user.profile.intcode_cell.length) === user.profile.intcode_cell) {
- user.profile.cell = user.profile.cell.substring(user.profile.intcode_cell.length)
- }
- }
+ // if (user.profile.intcode_cell) {
+ // if (user.profile.cell.substring(0, user.profile.intcode_cell.length) === user.profile.intcode_cell) {
+ // user.profile.cell = user.profile.cell.substring(user.profile.intcode_cell.length)
+ // }
+ // }
let exit;
// Check if already esist email or username
@@ -93,9 +93,18 @@ router.post('/', async (req, res) => {
if (exit === 1)
return;
+ let recuser = null;
+
+ recuser = await User.findByCellAndNameSurname(user.idapp, user.profile.cell, user.name, user.surname);
+ if (recuser) {
+ // User already registered!
+ res.status(400).send({ code: server_constants.RIS_CODE_USER_ALREADY_EXIST, msg: '' });
+ return 1;
+ }
+
let recextra = null;
- recextra = await ExtraList.findByCellAndNameSurname(user.idapp, getMobileComplete(user), user.name, user.surname);
+ recextra = await ExtraList.findByCellAndNameSurname(user.idapp, user.profile.cell, user.name, user.surname);
let nomeaportador_corretto = "";
if (recextra) {
nomeaportador_corretto = recextra.aportador_solidario_name_surname;
@@ -103,6 +112,9 @@ router.post('/', async (req, res) => {
nomeaportador_corretto = recextra.aportador_solidario_originale_name_surname;
}
+
+
+
const lastuser = await User.getLastUser(user.idapp);
const lastextra = await ExtraList.getLastUser(user.idapp);
let lastindorder = 0;
@@ -139,10 +151,10 @@ router.post('/', async (req, res) => {
if (already_registered) {
// Check in the extraList if is present!
if (!recextra) {
- console.log('Utente non trovato; ', user);
- const msg = 'Utente non trovato: ' + user.name + ' ' + user.surname + ' ' + user.profile.nationality + ' ' + user.profile.intcode_cell + user.profile.cell + ' email: ' + user.email + ' username: ' + user.username;
+ const msg = 'Utente non trovato: ' + user.name + ' ' + user.surname + ' ' + user.profile.nationality + ' ' + user.profile.cell + ' email: ' + user.email + ' username: ' + user.username;
+ console.log('Utente non trovato; ', msg);
telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg);
- res.status(400).send({ code: server_constants.RIS_CODE_USER_EXTRALIST_NOTFOUND, msg: '' });
+ res.status(400).send({ code: server_constants.RIS_CODE_USER_EXTRALIST_NOTFOUND, msg: 'Controlla se il numero ' + user.profile.cell + ' è corretto.' });
return 1;
} else {
user.ind_order = recextra.ind_order;
@@ -267,11 +279,12 @@ router.post('/login', (req, res) => {
let resalreadysent = false;
User.findByCredentials(user.idapp, user.username, user.password)
- .then((user) => {
+ .then(async (user) => {
// tools.mylog("CREDENZIALI ! ");
if (!user) {
- tools.mylogshow("Errore LOGIN ! Username o password Errati: ", body.username, body.password);
+ await tools.snooze(3000);
const msg = "Tentativo di Login ERRATO [" + body.username + ' , ' + body.password + ']\n' + '[IP: ' + tools.getiPAddressUser(req) + ']';
+ tools.mylogshow(msg);
telegrambot.sendMsgTelegramToTheManagers(body.idapp, msg);
res.status(404).send({ code: server_constants.RIS_CODE_LOGIN_ERR });
}
@@ -363,5 +376,17 @@ router.post('/import_extralist', async (req, res) => {
res.send(ris);
});
+router.post('/dbop', async (req, res) => {
+
+ const mydata = req.body.mydata;
+ idapp = req.body.idapp;
+ locale = req.body.locale;
+
+ const ris = await User.DbOp(idapp, mydata);
+ console.log('ris', ris);
+
+ res.send(ris);
+});
+
module.exports = router;
diff --git a/src/server/sendemail.js b/src/server/sendemail.js
index 71e5c38..df2fb6c 100644
--- a/src/server/sendemail.js
+++ b/src/server/sendemail.js
@@ -147,8 +147,8 @@ module.exports = {
strlinkreg = tools.getHostByIdApp(idapp) + process.env.LINKVERIF_REG + `?idapp=${idapp}&idlink=${idreg}`;
return strlinkreg;
},
- getlinkRequestNewPassword: function (idapp, username, tokenforgot) {
- strlinkreg = tools.getHostByIdApp(idapp) + "/#" + process.env.LINK_REQUEST_NEWPASSWORD + `?idapp=${idapp}&username=${username}&=tokenforgot=${tokenforgot}`;
+ getlinkRequestNewPassword: function (idapp, email, tokenforgot) {
+ strlinkreg = tools.getHostByIdApp(idapp) + process.env.LINK_UPDATE_PASSWORD + `?idapp=${idapp}&email=${email}&tokenforgot=${tokenforgot}`;
return strlinkreg;
},
sendEmail_Registration: async function (lang, emailto, user, idapp, idreg) {
@@ -191,7 +191,7 @@ module.exports = {
name: user.name,
username: user.username,
surname: user.surname,
- strlinksetpassword: this.getlinkRequestNewPassword(idapp, user.username, tokenforgot),
+ strlinksetpassword: this.getlinkRequestNewPassword(idapp, emailto, tokenforgot),
emailto: emailto,
};
diff --git a/src/server/telegram/telegrambot.js b/src/server/telegram/telegrambot.js
index c0030a9..ef4b4d2 100644
--- a/src/server/telegram/telegrambot.js
+++ b/src/server/telegram/telegrambot.js
@@ -66,7 +66,7 @@ const Menu = {
LINK_CONDIVIDERE: emoji.get('link') + ' Link da condividere',
ZOOM: emoji.get('information_source') + ' Zoom (Conferenze)',
INFO: emoji.get('information_source') + ' Informazioni',
- ASSISTENZA: emoji.get('open_hands') + ' Assistenza',
+ ASSISTENZA: emoji.get('open_hands') + ' Chat e Assistenza',
ADMIN: emoji.get('information_desk_person') + ' Admin',
ALTRO: emoji.get('newspaper') + ' Altro',
diff --git a/src/server/tools/general.js b/src/server/tools/general.js
index 2034af2..66334bc 100644
--- a/src/server/tools/general.js
+++ b/src/server/tools/general.js
@@ -43,7 +43,7 @@ textlang = {
"Nuova Registrazione": "Nuova Registrazione",
"Effettuata una Nuova Registrazione": "Effettuata una Nuova Registrazione",
"partecipanti": "partecipanti",
- 'TESTO_ASSISTENZA': "Chat d'Aiuto e Supporto: 'AYNI Help & Support'\nEntra in questa chat:\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\n\nPotrete rientrare tutte le volte che ce ne sia necessità.",
+ 'TESTO_ASSISTENZA': "Per entrare nel Sito AYNI:\nhttps://ayni.gifteconomy.app\n\nHai dimenticato la Password per accedere al sito?\nhttps://ayni.gifteconomy.app/requestresetpwd\n\nChat AYNI BOT (questa):\nhttps://t.me/notevoleaynibot\n\nChat AYNI-BiblioBacheca: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI Help & Support'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\nPotrete rientrare tutte le volte che ce ne sia necessità." ,
'BENVENUTO': "Benvenuto",
'EMAIL_VERIF': "Email Verificata",
'EMAIL_NON_VERIF': "Email Non Verificata\nleggi la tua casella email e trova **\"Confermare la Registrazione a Ayni\"**
e clicca sul bottone **\"Verifica Registrazione\"**",
@@ -59,7 +59,7 @@ textlang = {
"Effettuata una Nuova Registrazione": "Se ha realizado un nuevo registro",
"partecipanti": "participantes",
- 'TESTO_ASSISTENZA': "Chat d'Aiuto e Supporto: 'AYNI Help & Support'\nEntra in questa chat:\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\n\nPotrete rientrare tutte le volte che ce ne sia necessità.",
+ 'TESTO_ASSISTENZA': "Per entrare nel Sito AYNI:\nhttps://ayni.gifteconomy.app\n\nHai dimenticato la Password per accedere al sito?\nhttps://ayni.gifteconomy.app/requestresetpwd\n\nChat AYNI BOT (questa):\nhttps://t.me/notevoleaynibot\n\nChat AYNI-BiblioBacheca: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI Help & Support'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\nPotrete rientrare tutte le volte che ce ne sia necessità." ,
'BENVENUTO': "Benvenuto",
'EMAIL_VERIF': "Email Verificata",
'EMAIL_NON_VERIF': "Email Non Verificata\nleggi la tua casella email e trova **\"Confermare la Registrazione a Ayni\"**
e clicca sul bottone **\"Verifica Registrazione\"**",
@@ -71,7 +71,7 @@ textlang = {
},
us: {
"partecipanti": "participants",
- 'TESTO_ASSISTENZA': "Chat d'Aiuto e Supporto: 'AYNI Help & Support'\nEntra in questa chat:\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\n\nPotrete rientrare tutte le volte che ce ne sia necessità.",
+ 'TESTO_ASSISTENZA': "Per entrare nel Sito AYNI:\nhttps://ayni.gifteconomy.app\n\nHai dimenticato la Password per accedere al sito?\nhttps://ayni.gifteconomy.app/requestresetpwd\n\nChat AYNI BOT (questa):\nhttps://t.me/notevoleaynibot\n\nChat AYNI-BiblioBacheca: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI Help & Support'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\nPotrete rientrare tutte le volte che ce ne sia necessità." ,
'BENVENUTO': "Benvenuto",
'EMAIL_VERIF': "Email Verificata",
'EMAIL_NON_VERIF': "Email Non Verificata\nleggi la tua casella email e trova **\"Confermare la Registrazione a Ayni\"**
e clicca sul bottone **\"Verifica Registrazione\"**",
@@ -545,6 +545,10 @@ module.exports = {
query.push(mysort)
}
+ let numrowend = params.endRow - params.startRow;
+ if (numrowend < 0)
+ numrowend = 1;
+
query.push(
{
$group: {
@@ -559,7 +563,7 @@ module.exports = {
{
$project: {
count: 1,
- rows: { $slice: ['$results', params.startRow, params.endRow - params.startRow] }
+ rows: { $slice: ['$results', params.startRow, numrowend] }
}
}
);
@@ -845,6 +849,10 @@ module.exports = {
} catch (e) {
return ''
}
- }
+ },
+ removespaces(mystr) {
+ return mystr.replace(/\s+/g, '')
+ },
+
};
diff --git a/src/server/tools/server_constants.js b/src/server/tools/server_constants.js
index 48f8c42..9546f43 100644
--- a/src/server/tools/server_constants.js
+++ b/src/server/tools/server_constants.js
@@ -10,6 +10,7 @@ module.exports = Object.freeze({
RIS_CODE_USER_EXTRALIST_NOTFOUND: -70,
RIS_CODE_USERNAME_ALREADY_EXIST: -60,
RIS_CODE_EMAIL_ALREADY_EXIST: -50,
+ RIS_CODE_USER_ALREADY_EXIST: -48,
RIS_CODE_EMAIL_NOT_EXIST: -45,
RIS_CODE_EMAIL_NOT_SENT: -40,
RIS_CODE_ERR_UNAUTHORIZED: -30,
@@ -20,6 +21,7 @@ module.exports = Object.freeze({
RIS_CODE_LOGIN_OK: 1,
RIS_CODE_HTTP_INVALID_TOKEN: 403,
+ RIS_CODE_TOKEN_RESETPASSWORD_NOT_FOUND: -23,
RIS_SUBSCRIBED_OK: 1,
RIS_SUBSCRIBED_ALREADYEXIST: 2,