-
Notifications
You must be signed in to change notification settings - Fork 867
/
app.js
127 lines (100 loc) · 3.24 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
'use strict';
const express = require('express');
const connectDomain = require('connect-domain');
const compression = require('compression');
const bodyParser = require('body-parser');
const path = require('path');
var siofu = require("socketio-file-upload");
var generator = require('./backend/generator.js');
const config = require('../config.json');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var id = 0;
app.use(compression());
app.use(siofu.router);
var errorHandler;
io.on('connection', function(socket){
socket.on('disconnect', function () {
});
id = id + 1;
socket.connId = id;
var uploader = new siofu();
uploader.dir = path.join(__dirname, '..', 'uploads/connection-' + id.toString());
socket.fileUpload = false;
uploader.listen(socket);
uploader.on('error', function(err) {
console.log(err);
});
uploader.on('saved', function(event) {
generator.finishZipUpload(event.file, socket.connId);
socket.fileUploaded = true;
});
uploader.on('progress', function(event) {
console.log(event.file.bytesLoaded / event.file.size);
socket.emit('upload.progress', {
percentage:(event.file.bytesLoaded / event.file.size) * 100
});
// if the abort propert is set to true, then cancel the ongoing upload
if(socket.fileAbort === true) {
uploader.abort(event.file.id, socket);
socket.fileAbort = false;
}
});
uploader.on('start', function(event) {
generator.startZipUpload(socket.connId);
socket.fileUploaded = false;
});
socket.on('Cancel', function(msg) {
console.log(msg);
// if the file has not been fully uploaded, then set the abort property to true
if(socket.fileUploaded === false) {
socket.fileAbort = true;
}
generator.stopBuild(socket);
});
socket.on('live', function(formData) {
var req = {body: formData};
generator.enableBuild(socket);
generator.createDistDir(req, socket, function(appFolder, url) {
socket.emit('live.ready', {
appDir: appFolder,
url: url
});
//generator.showLivePreview(req, socket);
});
});
socket.on('upload', function(fileData) {
generator.uploadJsonZip(fileData, socket);
});
});
app.use(connectDomain());
errorHandler = function(err, req, res, next) {
res.sendFile(__dirname + '/www/404.html');
console.log(err);
};
app.set('port', (process.env.PORT || config.PORT));
// Use the www folder as static frontend
app.use('/', express.static(__dirname + '/www'));
app.use('/live/preview', express.static(__dirname + '/../dist'));
app.get('/download/:email/:appname', function (req, res) {
generator.pipeZipToRes(req.params.email, req.params.appname, res);
}).use(errorHandler);
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.post('/generate', function (req, res) {
generator.createDistDir(req, res, function(appFolder) {
res.send("Website generation started. You'll get an email when it is ready");
});
});
app.use('*', function(req, res) {
res.sendFile(__dirname + '/www/404.html');
});
server.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
});
module.exports = {
getApp: function () {
return app;
}
};