| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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')
- }
- })
|