- Dynamic Pages (MyPage)
- Uploading files to the Server FTP.
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
"author": "Paolo Arena",
|
"author": "Paolo Arena",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"basic-ftp": "^4.5.1",
|
||||||
"bcryptjs": "^2.4.3",
|
"bcryptjs": "^2.4.3",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"cors": "^2.8.4",
|
"cors": "^2.8.4",
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
"ejs": "^2.7.1",
|
"ejs": "^2.7.1",
|
||||||
"email-templates": "^5.1.0",
|
"email-templates": "^5.1.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
|
"formidable": "^1.2.1",
|
||||||
"i18n": "^0.8.3",
|
"i18n": "^0.8.3",
|
||||||
"jade": "^1.11.0",
|
"jade": "^1.11.0",
|
||||||
"jsonwebtoken": "^7.1.9",
|
"jsonwebtoken": "^7.1.9",
|
||||||
|
|||||||
52
src/server/ftp/FTPClient.js
Normal file
52
src/server/ftp/FTPClient.js
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const ftp = require('basic-ftp');
|
||||||
|
|
||||||
|
// const fs = require('fs');
|
||||||
|
|
||||||
|
class FTPClient {
|
||||||
|
constructor(host = 'localhost', port = 21, username = 'anonymous', password = 'guest', secure = false, secureOptions = '') {
|
||||||
|
this.client = new ftp.Client();
|
||||||
|
// this.client.ftp.verbose = true;
|
||||||
|
this.settings = {
|
||||||
|
host: host,
|
||||||
|
port: port,
|
||||||
|
user: username,
|
||||||
|
password: password,
|
||||||
|
secure: secure,
|
||||||
|
secureOptions: secureOptions
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async upload(sourcePath, remotePath, permissions) {
|
||||||
|
let self = this;
|
||||||
|
try {
|
||||||
|
let access = await self.client.access(self.settings);
|
||||||
|
let upload = await self.client.uploadFrom(sourcePath, remotePath);
|
||||||
|
// let permissions = await self.changePermissions(permissions.toString(), remotePath);
|
||||||
|
self.client.close();
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
console.log('upload ERR: ', err);
|
||||||
|
self.client.close();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async createDir(miadir) {
|
||||||
|
let access = await this.client.access(this.settings);
|
||||||
|
await this.client.ensureDir(miadir);
|
||||||
|
}
|
||||||
|
|
||||||
|
close() {
|
||||||
|
this.client.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
changePermissions(perms, filepath) {
|
||||||
|
let cmd = 'SITE CHMOD ' + perms + ' ' + filepath;
|
||||||
|
return this.client.send(cmd, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = FTPClient;
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"Email Verificata!": "Email Verificata!",
|
"Email Verificata!": "Email Verificata!",
|
||||||
"partecipanti": "partecipanti"
|
"partecipanti": "partecipanti",
|
||||||
|
"L'Email è già stata Verificata.": "L'Email è già stata Verificata."
|
||||||
}
|
}
|
||||||
87
src/server/models/mypage.js
Normal file
87
src/server/models/mypage.js
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
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 MyPageSchema = new Schema({
|
||||||
|
idapp: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
author_username: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
path: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
keywords: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
heightimg: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
imgback: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
active: {
|
||||||
|
type: Boolean,
|
||||||
|
},
|
||||||
|
inmenu: {
|
||||||
|
type: Boolean,
|
||||||
|
},
|
||||||
|
submenu: {
|
||||||
|
type: Boolean,
|
||||||
|
},
|
||||||
|
l_par: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
l_child: {
|
||||||
|
type: Number,
|
||||||
|
},
|
||||||
|
infooter: {
|
||||||
|
type: Boolean,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
MyPageSchema.statics.getFieldsForSearch = function () {
|
||||||
|
return ['title', 'keywords', 'description', 'content']
|
||||||
|
};
|
||||||
|
|
||||||
|
MyPageSchema.statics.executeQueryTable = function (idapp, params) {
|
||||||
|
params.fieldsearch = this.getFieldsForSearch();
|
||||||
|
return tools.executeQueryTable(this, idapp, params);
|
||||||
|
};
|
||||||
|
|
||||||
|
MyPageSchema.statics.findAllIdApp = async function (idapp) {
|
||||||
|
const MyPage = this;
|
||||||
|
|
||||||
|
const myfind = { idapp };
|
||||||
|
|
||||||
|
return await MyPage.find(myfind, (err, arrrec) => {
|
||||||
|
return arrrec
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const MyPage = mongoose.model('MyPage', MyPageSchema);
|
||||||
|
|
||||||
|
module.exports = { MyPage };
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router(),
|
||||||
|
fs = require('fs'),
|
||||||
|
path = require('path');
|
||||||
|
|
||||||
|
|
||||||
const { authenticate, authenticate_noerror } = require('../middleware/authenticate');
|
const { authenticate, authenticate_noerror } = require('../middleware/authenticate');
|
||||||
|
|
||||||
@@ -8,6 +11,14 @@ const { ObjectID } = require('mongodb');
|
|||||||
const mongoose = require('mongoose');
|
const mongoose = require('mongoose');
|
||||||
const cfgserver = mongoose.model('cfgserver');
|
const cfgserver = mongoose.model('cfgserver');
|
||||||
|
|
||||||
|
const ftp = require('../ftp/FTPClient'),
|
||||||
|
formidable = require('formidable'),
|
||||||
|
folder = path.join(__dirname, 'files');
|
||||||
|
|
||||||
|
if (!fs.existsSync(folder)) {
|
||||||
|
fs.mkdirSync(folder)
|
||||||
|
}
|
||||||
|
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
|
|
||||||
const { User } = require('../models/user');
|
const { User } = require('../models/user');
|
||||||
@@ -18,6 +29,7 @@ const { MyEvent } = require('../models/myevent');
|
|||||||
const { Contribtype } = require('../models/contribtype');
|
const { Contribtype } = require('../models/contribtype');
|
||||||
const { Discipline } = require('../models/discipline');
|
const { Discipline } = require('../models/discipline');
|
||||||
const { Newstosent } = require('../models/newstosent');
|
const { Newstosent } = require('../models/newstosent');
|
||||||
|
const { MyPage } = require('../models/mypage');
|
||||||
const { TemplEmail } = require('../models/templemail');
|
const { TemplEmail } = require('../models/templemail');
|
||||||
const { OpzEmail } = require('../models/opzemail');
|
const { OpzEmail } = require('../models/opzemail');
|
||||||
const { MailingList } = require('../models/mailinglist');
|
const { MailingList } = require('../models/mailinglist');
|
||||||
@@ -152,6 +164,8 @@ function getTableByTableName(tablename) {
|
|||||||
mytable = Discipline;
|
mytable = Discipline;
|
||||||
else if (tablename === 'newstosent')
|
else if (tablename === 'newstosent')
|
||||||
mytable = Newstosent;
|
mytable = Newstosent;
|
||||||
|
else if (tablename === 'mypage')
|
||||||
|
mytable = MyPage;
|
||||||
else if (tablename === 'templemail')
|
else if (tablename === 'templemail')
|
||||||
mytable = TemplEmail;
|
mytable = TemplEmail;
|
||||||
else if (tablename === 'opzemail')
|
else if (tablename === 'opzemail')
|
||||||
@@ -362,11 +376,12 @@ router.get('/loadsite/:userId/:idapp/:sall', authenticate_noerror, (req, res) =>
|
|||||||
|
|
||||||
let newstosent = Promise.resolve([]);
|
let newstosent = Promise.resolve([]);
|
||||||
let mailinglist = Promise.resolve([]);
|
let mailinglist = Promise.resolve([]);
|
||||||
|
let mypage = MyPage.findAllIdApp(idapp);
|
||||||
if (sall) {
|
if (sall) {
|
||||||
newstosent = Newstosent.findAllIdApp(idapp);
|
newstosent = Newstosent.findAllIdApp(idapp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.all([bookedevent, eventlist, operators, wheres, contribtype, settings, permissions, disciplines, newstosent, mailinglist])
|
return Promise.all([bookedevent, eventlist, operators, wheres, contribtype, settings, permissions, disciplines, newstosent, mailinglist, mypage])
|
||||||
.then((arrdata) => {
|
.then((arrdata) => {
|
||||||
// console.table(arrdata);
|
// console.table(arrdata);
|
||||||
res.send({
|
res.send({
|
||||||
@@ -380,6 +395,7 @@ router.get('/loadsite/:userId/:idapp/:sall', authenticate_noerror, (req, res) =>
|
|||||||
disciplines: arrdata[7],
|
disciplines: arrdata[7],
|
||||||
newstosent: arrdata[8],
|
newstosent: arrdata[8],
|
||||||
mailinglist: arrdata[9],
|
mailinglist: arrdata[9],
|
||||||
|
mypage: arrdata[10],
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
@@ -437,5 +453,64 @@ router.get(process.env.LINK_CHECK_UPDATES, authenticate, (req, res) => {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.post('/upload/:dir', authenticate, (req, res) => {
|
||||||
|
const dir = req.params.dir;
|
||||||
|
const idapp = req.user.idapp;
|
||||||
|
|
||||||
|
const form = new formidable.IncomingForm();
|
||||||
|
|
||||||
|
form.parse(req);
|
||||||
|
|
||||||
|
const client = new ftp(process.env.FTPSERVER_HOST, process.env.FTPSERVER_PORT, process.env.FTPSERVER_USER + idapp + '@associazioneshen.it', process.env.FTPSERVER_PWD + idapp, false, 134217728);
|
||||||
|
|
||||||
|
// SSL_OP_NO_TLSv1_2 = 134217728
|
||||||
|
|
||||||
|
// console.log('client', client);
|
||||||
|
|
||||||
|
form.uploadDir = folder;
|
||||||
|
try {
|
||||||
|
|
||||||
|
form.on('fileBegin', async function (name, file){
|
||||||
|
file.path = folder + '/' + file.name;
|
||||||
|
});
|
||||||
|
|
||||||
|
form.on('file', async function (name, file){
|
||||||
|
try {
|
||||||
|
// Create directory remote
|
||||||
|
|
||||||
|
if (!!dir)
|
||||||
|
await client.createDir(dir);
|
||||||
|
|
||||||
|
const miofile = (dir) ? dir + `/` + file.name : file.name;
|
||||||
|
console.log('Upload...');
|
||||||
|
const ret = await client.upload(file.path, miofile, 755);
|
||||||
|
console.log('Uploaded ' + file.name, 'status:', ret);
|
||||||
|
if (!ret)
|
||||||
|
res.status(400).send();
|
||||||
|
else
|
||||||
|
res.end();
|
||||||
|
}catch (e) {
|
||||||
|
console.log('error', e);
|
||||||
|
res.status(400).send();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
form.on('aborted', () => {
|
||||||
|
console.error('Request aborted by the user');
|
||||||
|
res.status(400).send();
|
||||||
|
});
|
||||||
|
|
||||||
|
form.on('error', (err) => {
|
||||||
|
console.error('Error Uploading', err);
|
||||||
|
res.status(400).send();
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.log('Error', e)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ require('./config/config');
|
|||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const cors = require('cors');
|
const cors = require('cors');
|
||||||
|
|
||||||
var fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
|
//const throttle = require('express-throttle-bandwidth');
|
||||||
|
|
||||||
const port = process.env.PORT;
|
const port = process.env.PORT;
|
||||||
|
|
||||||
@@ -16,6 +18,7 @@ const sendemail = require('./sendemail');
|
|||||||
|
|
||||||
const cron = require('node-cron');
|
const cron = require('node-cron');
|
||||||
|
|
||||||
|
|
||||||
i18n = require("i18n");
|
i18n = require("i18n");
|
||||||
|
|
||||||
if ((process.env.NODE_ENV === 'production') || (process.env.NODE_ENV === 'test')) {
|
if ((process.env.NODE_ENV === 'production') || (process.env.NODE_ENV === 'test')) {
|
||||||
@@ -36,6 +39,7 @@ require('./models/booking');
|
|||||||
require('./models/sendmsg');
|
require('./models/sendmsg');
|
||||||
require('./models/mailinglist');
|
require('./models/mailinglist');
|
||||||
require('./models/newstosent');
|
require('./models/newstosent');
|
||||||
|
require('./models/mypage');
|
||||||
const mysql_func = require('./mysql/mysql_func');
|
const mysql_func = require('./mysql/mysql_func');
|
||||||
|
|
||||||
|
|
||||||
@@ -152,6 +156,14 @@ if ((process.env.NODE_ENV === 'production') || (process.env.NODE_ENV === 'test')
|
|||||||
httpServer.listen(port);
|
httpServer.listen(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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()
|
||||||
|
// });
|
||||||
|
|
||||||
if (process.env.PROD !== 1) {
|
if (process.env.PROD !== 1) {
|
||||||
// testmsgwebpush();
|
// testmsgwebpush();
|
||||||
// sendemail.testemail('2', 'it');
|
// sendemail.testemail('2', 'it');
|
||||||
|
|||||||
Reference in New Issue
Block a user