server.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const app = require('./app')
  2. const fileUpload = require('express-fileupload')
  3. const ftp = require('basic-ftp')
  4. const config = require('../config')
  5. const { Readable } = require('stream')
  6. const connections = []
  7. app.ws.on('connection', ws => {
  8. connections.push(ws)
  9. ws.on('close', () => {
  10. connections.splice(connections.indexOf(ws), 1)
  11. })
  12. ws.on('message', message => {
  13. console.log(message)
  14. /* TODO: Add logic */
  15. })
  16. ws.send('Hello Client')
  17. })
  18. app.listen().catch((err) => {
  19. console.log(err.toString())
  20. process.exit(1)
  21. })
  22. app.post('/upload', fileUpload(), async (req, res) => {
  23. try {
  24. const files = Array.isArray(req.files.files)
  25. ? req.files.files
  26. : [req.files.files]
  27. for (let file of files) {
  28. if (file.name.includes('..') || file.name.includes('\\') || file.name.includes('//')) {
  29. throw new Error('Illegal characters: ' + file.name)
  30. }
  31. const allowed = ['.html', '.css', '.png', '.gif', '.jpg', '.svg', '.js']
  32. const isAllowed = allowed.find(ext => file.name.endsWith(ext))
  33. if (!isAllowed) throw new Error('Illegal extension: ' + file.name)
  34. }
  35. const client = new ftp.Client()
  36. client.ftp.verbose = true
  37. await client.access(config.ftp)
  38. await client.ensureDir('site/wwwroot/formuladrift')
  39. console.log(await client.list())
  40. for (let file of files) {
  41. const stream = new Readable()
  42. stream.push(file.data)
  43. stream.push(null)
  44. await client.upload(stream, file.name)
  45. }
  46. client.close()
  47. res.status(200).send('Files uploaded')
  48. } catch (err) {
  49. console.error(err)
  50. res.status(500).send('Internal server error')
  51. }
  52. })