const app = require('./app') const fileUpload = require('express-fileupload') const ftp = require('basic-ftp') const config = require('../config') const { Readable } = require('stream') const connections = [] app.ws.on('connection', ws => { connections.push(ws) ws.on('close', () => { connections.splice(connections.indexOf(ws), 1) }) ws.on('message', message => { console.log(message) /* TODO: Add logic */ }) ws.send('Hello Client') }) app.listen().catch((err) => { console.log(err.toString()) process.exit(1) }) app.post('/upload', fileUpload(), async (req, res) => { try { const files = Array.isArray(req.files.files) ? req.files.files : [req.files.files] for (let file of files) { if (file.name.includes('..') || file.name.includes('\\') || file.name.includes('//')) { throw new Error('Illegal characters: ' + file.name) } const allowed = ['.html', '.css', '.png', '.gif', '.jpg', '.svg', '.js'] const isAllowed = allowed.find(ext => file.name.endsWith(ext)) if (!isAllowed) throw new Error('Illegal extension: ' + file.name) } const client = new ftp.Client() client.ftp.verbose = true await client.access(config.ftp) await client.ensureDir('site/wwwroot/formuladrift') console.log(await client.list()) for (let file of files) { const stream = new Readable() stream.push(file.data) stream.push(null) await client.upload(stream, file.name) } client.close() res.status(200).send('Files uploaded') } catch (err) { console.error(err) res.status(500).send('Internal server error') } })