From 17a303c3ca718e90c5f723d2c620f8ad496253e7 Mon Sep 17 00:00:00 2001
From: YourFriendlyNeighborhoodDealer <qminer@2girls1dj.com>
Date: Wed, 14 Aug 2019 10:15:08 +0200
Subject: [PATCH] Sio module

---
 qmining.js |   5 ---
 server.js  |   2 +
 sio.js     | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 109 insertions(+), 5 deletions(-)
 create mode 100644 sio.js

diff --git a/qmining.js b/qmining.js
index 142fbb8..136e66d 100644
--- a/qmining.js
+++ b/qmining.js
@@ -75,11 +75,6 @@ app.get('/', function (req, res) {
   res.end()
 })
 
-app.get('/sio', function (req, res) {
-  res.render('uload')
-  res.end()
-})
-
 app.get('/manual', function (req, res) {
   res.render('man')
   res.end()
diff --git a/server.js b/server.js
index ad75b29..69f0f36 100644
--- a/server.js
+++ b/server.js
@@ -24,6 +24,7 @@ const logger = require('./logger.js')
 
 const qmining = require('./qmining.js').app
 const main = require('./main.js').app
+const sio = require('./sio.js').app
 
 const port = 8080
 
@@ -52,6 +53,7 @@ const port = 8080
 
 express()
   .use(vhost('qmining.frylabs.net', qmining))
+  .use(vhost('sio.frylabs.net', sio))
   .use(vhost('frylabs.net', main))
   .use(vhost('qmining.tk', qmining))
   .listen(port)
diff --git a/sio.js b/sio.js
new file mode 100644
index 0000000..2bbb7de
--- /dev/null
+++ b/sio.js
@@ -0,0 +1,107 @@
+/* ----------------------------------------------------------------------------
+
+ Question Server
+ GitLab: <https://gitlab.com/YourFriendlyNeighborhoodDealer/question-node-server>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+ ------------------------------------------------------------------------- */
+
+const express = require('express')
+const bodyParser = require('body-parser')
+const busboy = require('connect-busboy')
+const fs = require('fs')
+const app = express()
+// const http = require('http')
+// const https = require('https')
+
+const logger = require('./logger.js')
+const utils = require('./utils.js')
+const stat = require('./stat.js')
+stat.Load()
+
+const uloadFiles = 'public/f'
+
+app.set('view engine', 'ejs')
+app.use(function (req, res, next) {
+  res.on('finish', function () {
+    logger.LogReq(req, true, res.statusCode)
+    if (res.statusCode !== 404) { stat.LogStat(req.url) }
+  })
+  next()
+})
+app.use(express.static('public'))
+app.use(busboy({
+  limits: {
+    fileSize: 10000 * 1024 * 1024
+  }
+}))
+app.use(bodyParser.json())
+app.use(bodyParser.urlencoded({
+  limit: '5mb',
+  extended: true
+}))
+app.use(bodyParser.json({
+  limit: '5mb'
+}))
+
+// --------------------------------------------------------------
+
+app.get('/', function (req, res) {
+  res.render('uload')
+  res.end()
+})
+
+function UploadFile (req, res, path, next) {
+  var fstream
+  req.pipe(req.busboy)
+  req.busboy.on('file', function (fieldname, file, filename) {
+    logger.Log('Uploading: ' + filename, logger.GetColor('blue'))
+
+    utils.CreatePath(path, true)
+    let d = new Date()
+    let fn = d.getHours() + '' + d.getMinutes() + '' + d.getSeconds() + '_' + filename
+
+    fstream = fs.createWriteStream(path + '/' + fn)
+    file.pipe(fstream)
+    fstream.on('close', function () {
+      logger.Log('Upload Finished of ' + path + '/' + fn, logger.GetColor('blue'))
+      next(fn)
+    })
+    fstream.on('error', function (err) {
+      console.log(err)
+      res.end('something bad happened :s')
+    })
+  })
+}
+
+app.route('/fosuploader').post(function (req, res, next) {
+  UploadFile(req, res, uloadFiles, (fn) => {
+    res.redirect('/f/' + fn)
+  })
+})
+app.get('*', function (req, res) {
+  res.render('404')
+  res.status(404)
+  // utils.AppendToFile(logger.GetDateString() + ": " + "404 GET", logFile);
+})
+
+app.post('*', function (req, res) {
+  res.status(404)
+  // utils.AppendToFile(logger.GetDateString() + ": " + "404 POST", logFile);
+})
+
+exports.app = app
+
+logger.Log('Sio module started', logger.GetColor('yellow'))