Files
freeplanet_serverside/src/server/models/site.js
Surya Paolo f25e1f3992 - Mail in a Box: comandi per aggiungere/modificare/rimuovere le caselle di posta
- aggiunto idMyGroup: ospiti siti di gruppi (AbitareGliIblei)
2024-09-12 14:49:00 +02:00

435 lines
9.9 KiB
JavaScript
Executable File

const mongoose = require('mongoose').set('debug', false)
const Schema = mongoose.Schema;
mongoose.Promise = global.Promise;
mongoose.level = "F";
mongoose.set('debug', false);
const { ObjectID } = require('mongodb');
const _ = require('lodash');
// Resolving error Unknown modifier: $pushAll
mongoose.plugin(schema => {
schema.options.usePushEach = true
});
const SiteSchema = new Schema({
active: {
type: Boolean,
},
idapp: {
type: String,
},
name: {
type: String,
},
adminemail: {
type: String,
},
manageremail: {
type: String,
},
replyTo: {
type: String,
},
host: {
type: String,
},
host_ip: {
type: String,
},
host_test: {
type: String,
},
host_test_ip: {
type: String,
},
host_api: {
type: String,
},
host_api_ip: {
type: String,
},
host_testapi: {
type: String,
},
host_testapi_ip: {
type: String,
},
cf_token: {
type: String,
},
cf_zoneId: {
type: String,
},
servermail: {
type: String,
},
servermailip: {
type: String,
},
dkim: {
type: String,
},
enable_servermail: {
type: Boolean,
},
portapp: {
type: String,
},
dir: {
type: String,
},
dir_test: {
type: String,
},
email_from: {
type: String,
},
email_pwd: {
type: String,
},
telegram_key: {
type: String,
},
telegram_bot_name: {
type: String,
},
telegram_key_test: {
type: String,
},
load_process_telegram: {
type: Boolean,
},
load_process_telegram_test: {
type: String,
},
teleg_cfg: {
type: String,
},
teleg_cfg_test: {
type: String,
},
telegram_bot_name_test: {
type: String,
},
telegram_support_chat: {
type: String,
},
pathreg_add: {
type: String,
},
who: {
type: String
},
status: {
type: String
},
note: {
type: String
},
domain_provider: {
type: String,
},
domain_expiring: {
type: Date
},
next_payment: {
type: Date
},
description: {
type: String,
},
keywords: {
type: String,
},
confpages: {
font: { type: String, default: '' },
col_toolbar: { type: String, default: '' },
col_bgfooter: { type: String, default: '' },
show_darkopt: { type: Boolean, default: false },
showButtHome: { type: Boolean, default: false },
showProfile: { type: Boolean, default: false },
showUserMenu: { type: Boolean, default: true },
showiscrittiMenu: { type: Boolean, default: false },
showRegButton: { type: Boolean, default: false },
enableReg: { type: Boolean, default: false },
showNL: { type: Boolean, default: false },
sendNewsletter: { type: Boolean, default: false },
showMsgs: { type: Boolean, default: false },
showNotif: { type: Boolean, default: false },
showCoins: { type: Boolean, default: false },
showRIS: { type: Boolean, default: false },
showMenuCoins: { type: Boolean, default: false },
showNameSurname: { type: Boolean, default: false },
showCompetenze: { type: Boolean, default: false },
showConnected: { type: Boolean, default: false },
bookingEvents: { type: Boolean, default: false },
enableEcommerce: { type: Boolean, default: false },
enableAI: { type: Boolean, default: false },
enableGroups: { type: Boolean, default: false },
enableCircuits: { type: Boolean, default: false },
enableGoods: { type: Boolean, default: false },
enableServices: { type: Boolean, default: false },
enableActivities: { type: Boolean, default: false },
enableHosps: { type: Boolean, default: false },
enableEvents: { type: Boolean, default: false },
enableProj: { type: Boolean, default: false },
enableTodos: { type: Boolean, default: false },
enableRegByBot: { type: Boolean, default: false },
enableRegMultiChoice: { type: Boolean, default: false },
enableTokenExpired: { type: Boolean, default: false },
enableDebugOn: { type: Boolean, default: false },
enabledRegNeedTelegram: { type: Boolean, default: false },
showViewEventi: { type: Boolean, default: false },
showViewGroups: { type: Boolean, default: false },
showViewCircuits: { type: Boolean, default: false },
showViewUsers: { type: Boolean, default: false },
showViewBooking: { type: Boolean, default: false },
showViewProfile: { type: Boolean, default: false },
showViewCart: { type: Boolean, default: false },
showViewOrders: { type: Boolean, default: false },
enablePwa: { type: Boolean, default: false },
lang: {
type: Number,
default: 0,
},
videoPromo: { type: String, default: '' },
PDFPromo: { type: String, default: '' },
},
confsite: {
options: { // ConfSite
type: Number,
default: 0,
},
},
policy: {
show: { type: Boolean, default: false },
owneremail: { type: String },
siteName: { type: String },
ownerDataName: { type: String },
managerData: { type: String },
includeData: { type: String },
url: { type: String },
lastdataupdate: { type: String },
country: { type: String },
},
contacts: {
facebook: { type: String, default: '' },
instagram: { type: String, default: '' },
whatsapp: { type: String, default: '' },
whatsapp_home: { type: Boolean, default: false },
telegram: { type: String, default: '' },
youtube: { type: String, default: '' },
email: { type: String, default: '' },
address: { type: String, default: '' },
map: { type: String, default: '' },
info2: { type: String, default: '' },
cell: { type: String, default: '' },
},
ecomm: {
enablePreOrders: { type: Boolean, default: false },
NoteExtraOnCart: { type: String, default: '' },
},
idMyGroup: {
type: String,
},
});
var Site = module.exports = mongoose.model('Site', SiteSchema);
module.exports.getFieldsForSearch = function () {
return []
};
module.exports.executeQueryTable = async function (idapp, params, userreq) {
params.fieldsearch = this.getFieldsForSearch();
// return tools.executeQueryTable(this, null, params);
const { User } = require('../models/user');
// Solo l'Admin puó leggerlo
const extrapar = params.extrapar;
if (extrapar) {
if (User.isManager(userreq.perm)) {
return await Site.findOne({ idapp: extrapar }).lean();
} else {
return await Site.findOne({ idapp: extrapar }, {
name: 1, manageremail: 1,
confsite: 1,
description: 1,
keywords: 1,
}).lean();
}
}
if (User.isAdmin(userreq.perm)) {
const myarr = await Site.find({});
if (myarr.length === 0) {
/* {
"_id" : ObjectId("620a71e194438ecd1acfdbca"),
"idapp" : "14",
"chiave" : "vers",
"userId" : "ALL",
"valore" : "0.3.21"
}*/
}
// return await Site.find({}).lean();
return ({ count: myarr.length, rows: myarr })
}
};
module.exports.findAll = async function () {
const myfind = { active: true };
return await Site.find(myfind).lean();
};
module.exports.findAllIdApp = async function (idapp) {
let myfind = { idapp, active: true };
let rec = await Site.findOne(myfind).lean();
if (rec) {
rec.email_pwd = '';
rec.telegram_key = '';
rec.telegram_key_test = '';
rec.cf_token = '';
rec.cf_zoneId = '';
// rec.confsite = {};
return rec;
} else {
myfind = { name: 'local' };
let rec = await Site.findOne(myfind).lean();
if (!rec) {
const mysite = new Site();
mysite.name = 'local';
await mysite.save();
mysite.idapp = idapp;
return mysite;
} else {
return rec;
}
}
return {};
};
module.exports.generateNewSite_IdApp = async function (idapp, params, createpage) {
const { MyPage } = require('../models/mypage');
let ris = null;
try {
if (idapp) {
ris = await Site.find({ idapp: idapp.toString(), host: params.host });
} else {
for (let idapp = 20; idapp <= 100; idapp++) {
ris = await Site.find({ idapp: idapp.toString(), host: params.host });
break;
}
}
if (ris && ris.length === 0) {
const paramSite = _.pick(params, ['name', 'host', 'email']);
let mysite = new Site(paramSite);
mysite.active = true;
mysite.idapp = idapp.toString();
mysite.adminemail = params.email;
const ris = await mysite.save();
if (createpage) {
// 1. Crea Pagina principale HOME - Loggato
let myp = new MyPage({
order: 10,
idapp: mysite.idapp,
path: 'home',
active: true,
title: 'Home',
});
let rispag = await myp.save();
// 2. Crea Pagina principale HOME - Non Loggato
myp = new MyPage({
order: 10,
idapp: mysite.idapp,
path: 'home_logout',
active: true,
title: 'Home NoLoggato',
});
rispag = await myp.save();
}
if (ris)
return mysite.idapp;
else
return '';
}
} catch (e) {
console.error(e);
}
return '';
};
module.exports.createFirstUserAdmin = async function () {
const { User } = require('../models/user');
const telegrambot = require('../telegram/telegrambot');
try {
let arrSite = await Site.find({ idapp: { $exists: true } }).lean();
for (const mysite of arrSite) {
if (mysite.idapp > 0) {
const numusers = await User.countDocuments({ idapp: mysite.idapp });
if (numusers === 0) {
// Non esistono utenti, quindi creo quello di Admin
const utenteadmin = { idapp: '13', username: telegrambot.ADMIN_USER_SERVER };
const newuser = new User(utenteadmin);
newuser._id = new ObjectID();
newuser.idapp = mysite.idapp;
newuser.profile.mygroups = [];
newuser.profile.mycircuits = [];
await newuser.save();
}
}
}
} catch (e) {
console.error('Error ', e);
}
};
module.exports.createIndexes((err) => {
if (err) throw err;
});