Skip to content

Commit

Permalink
Fixes #84 : Routing is broken due to changes in #78 and #79
Browse files Browse the repository at this point in the history
  • Loading branch information
remie committed Sep 22, 2015
1 parent d897907 commit 37312b9
Show file tree
Hide file tree
Showing 5 changed files with 198 additions and 169 deletions.
28 changes: 14 additions & 14 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,20 +34,20 @@ app.use(middleware);
// ------------------------------------------------------------------------------------------ App Routing

var router = routes('./dist');
app.post('/upload', router.upload);
app.post('/upload/bundle', router.uploadBundle);
app.post(/^\/send/, router.send);
app.get('/download/:token', router.downloadFile);
app.post(/^\/download/, router.downloadFile);
app.get('/bundle/:token', router.downloadBundle);
app.get('/settings', router.settingsRedirect);
app.post('/settings/finalise', router.settingsFinalise);
app.get('/settings/template/:name', router.settingsGetTemplateByName);
app.post('/settings/template/', router.settingsSaveTemplate);
app.get('/settings/:name', router.settingsGetByName);
app.post('/settings/:name', router.settingsSaveByName);
app.get(/^(\/v\d*)?\/(js|css|assets|fonts|img|sounds)\/(.*)/, router.staticFiles);
app.get(/^\/(.*)/, router.default);
app.post('/upload', router.upload());
app.post('/upload/bundle', router.uploadBundle());
app.post(/^\/send/, router.send());
app.get('/download/:token', router.downloadFile());
app.post(/^\/download/, router.downloadFile());
app.get('/bundle/:token', router.downloadBundle());
app.get('/settings', router.settingsRedirect());
app.post('/settings/finalise', router.settingsFinalise());
app.get('/settings/template/:name', router.settingsGetTemplateByName());
app.post('/settings/template/', router.settingsSaveTemplate());
app.get('/settings/:name', router.settingsGetByName());
app.post('/settings/:name', router.settingsSaveByName());
app.get(/^(\/v\d*)?\/(js|css|assets|fonts|img|sounds)\/(.*)/, router.staticFiles());
app.get(/^\/(.*)/, router.default());

// ------------------------------------------------------------------------------------------ App Execution

Expand Down
7 changes: 3 additions & 4 deletions gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,16 @@ function cleanTask() {
function browserifyAppTask() {
var bundler = browserify({ entries: paths.src + '/js/index.js' });
bundler.external(require('./src/js/vendor.js'));
return browserifyTask('app.js');
return browserifyTask(bundler, 'app.js');
}

function browserifyVendorTask() {
var bundler = browserify();
bundler.require(require('./src/js/vendor.js'));
return browserifyTask('vendor.js');
return browserifyTask(bundler, 'vendor.js');
}

function browserifyTask(src) {
var bundler = browserify();
function browserifyTask(bundler, src) {
return bundler.bundle()
.on('error', log)
.pipe(source(src))
Expand Down
1 change: 1 addition & 0 deletions lib/middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ module.exports = function(req, res, next) {
res.setHeader('Server', 'youtransfer.io');

youtransfer.settings.get(function(err, settings) {
context = _.assign(context, req.params);
context = err ? context : _.assign(settings, context);
context.isXmlHtppRequest = req.isXmlHtppRequest;

Expand Down
277 changes: 153 additions & 124 deletions lib/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,172 +29,201 @@ function Router(options) {
}
}

Router.prototype.upload = function(req, res, next) {
youtransfer.settings.get(function(err, settings) {
var file = req.files.payload || req.files['dz-payload'];
var bundle = req.params.bundle;
youtransfer.upload(file, bundle, function(err, context) {
var response = _.assign({
Router.prototype.upload = function() {
return function(req, res, next) {
youtransfer.settings.get(function(err, settings) {
var file = req.files.payload || req.files['dz-payload'];
var bundle = req.params.bundle;
youtransfer.upload(file, bundle, function(err, context) {
var response = _.assign({
success: _.isNull(err),
isPostback: true,
link: settings.baseUrl + '/download/' + context.id + '/',
error: (err ? err.message : '')
}, context);

if(req.isXmlHtppRequest) {
res.json(response);
} else {
res.render("index.html", response);
}
next();
});
});
};
};

Router.prototype.uploadBundle = function() {
return function(req, res, next) {
var bundle = JSON.parse(req.params.bundle);
youtransfer.bundle(bundle, function(err) {
var response = {
success: _.isNull(err),
isPostback: true,
link: settings.baseUrl + '/download/' + context.id + '/',
error: (err ? err.message : '')
}, context);
};

if(req.isXmlHtppRequest) {
res.json(response);
} else {
res.render("index.html", response);
}

next();
});
});
};
};

Router.prototype.uploadBundle = function(req, res, next) {
var bundle = JSON.parse(req.params.bundle);
youtransfer.bundle(bundle, function(err) {
var response = {
success: _.isNull(err),
isPostback: true,
error: (err ? err.message : '')
};

if(req.isXmlHtppRequest) {
res.json(response);
} else {
res.render("index.html", response);
}

next();
});
};

Router.prototype.send = function(req, res) {
youtransfer.send(req, res, function() {
res.redirect("/");
});
Router.prototype.send = function() {
return function(req, res) {
youtransfer.send(req, res, function() {
res.redirect("/");
});
};
};

Router.prototype.downloadFile = function(req, res) {
var token = req.params.token;
youtransfer.download(token, res, function() {
res.redirect("/");
});
Router.prototype.downloadFile = function() {
return function(req, res) {
var token = req.params.token;
youtransfer.download(token, res, function() {
res.redirect("/");
});
};
};

Router.prototype.downloadBundle = function(req, res) {
var token = req.params.token;
youtransfer.archive(token, res, function() {
res.redirect('/');
});
Router.prototype.downloadBundle = function() {
return function(req, res) {
var token = req.params.token;
youtransfer.archive(token, res, function() {
res.redirect('/');
});
};
};

Router.prototype.settingsRedirect = function(req, res) {
res.redirect('/settings/general');
Router.prototype.settingsRedirect = function() {
return function(req, res) {
res.redirect('/settings/general');
};
};

Router.prototype.settingsFinalise = function(req, res) {
youtransfer.settings.push({
finalised: true
}, function() {
res.redirect('/');
});
Router.prototype.settingsFinalise = function() {
return function(req, res) {
youtransfer.settings.push({
finalised: true
}, function() {
res.redirect('/');
});
};
};

//TODO: this method only provides JSON output, which will not work with noscript browsers
Router.prototype.settingsGetTemplateByName = function(req, res, next) {
youtransfer.settings.get(function(err, settings) {
if(settings.finalised) {
res.json({success: false, err: 'The settings have been finalised and cannot be modified'});
next();
} else {
var template = req.params.name;
if(template) {
fs.readFile('./src/templates/' + template, 'utf-8', function(err, data) {
if(err) {
res.json({ success: false, err: err.message });
} else {
res.setHeader('Content-Type', 'text/html');
res.setHeader('Cache-Control', 'private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate');
res.send(data);
res.end();
}
next();
});
} else {
res.json({success: false, err: 'template not found'});
Router.prototype.settingsGetTemplateByName = function() {
return function(req, res, next) {
youtransfer.settings.get(function(err, settings) {
if(settings.finalised) {
res.json({success: false, err: 'The settings have been finalised and cannot be modified'});
next();
} else {
var template = req.params.name;
if(template) {
fs.readFile('./src/templates/' + template, 'utf-8', function(err, data) {
if(err) {
res.json({ success: false, err: err.message });
} else {
res.setHeader('Content-Type', 'text/html');
res.setHeader('Cache-Control', 'private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate');
res.send(data);
res.end();
}
next();
});
} else {
res.json({success: false, err: 'template not found'});
next();
}
}
}
});
});
};
};

//TODO: this method only provides JSON output, which will not work with noscript browsers
Router.prototype.settingsSaveTemplate = function(req, res, next) {
youtransfer.settings.get(function(err, settings) {
if(settings.finalised) {
res.json({success: false, err: 'The settings have been finalised and cannot be modified'});
next();
} else {
var template = req.params.template;
if(template) {
fs.writeFile('./src/templates/' + template, req.params.body, 'utf-8', function(err) {
Router.prototype.settingsSaveTemplate = function() {
return function(req, res, next) {
youtransfer.settings.get(function(err, settings) {
if(settings.finalised) {
res.json({success: false, err: 'The settings have been finalised and cannot be modified'});
next();
} else {
var template = req.params.template;
if(template) {
fs.writeFile('./src/templates/' + template, req.params.body, 'utf-8', function(err) {
res.json({
success: _.isNull(err),
isPostback: true,
template: template
});
});
next();
} else {
res.json({
success: _.isNull(err),
success: false,
isPostback: true,
template: template
template: template,
err: 'Invalid template provided'
});
});
next();
} else {
res.json({
success: false,
isPostback: true,
template: template,
err: 'Invalid template provided'
});
next();
next();
}
}
}
});
});
};
};

Router.prototype.settingsGetByName = function(req, res, next) {
var page = req.params.name || 'general';
youtransfer.settings.get(function(err, settings) {
if(page === 'dropzone' && req.isXmlHtppRequest) {
var output = settings.dropzone || {};
res.json(output);
next();
} else {
if(settings.finalised) {
res.render('404.html');
Router.prototype.settingsGetByName = function() {
return function(req, res, next) {
var page = req.params.name || 'general';
youtransfer.settings.get(function(err, settings) {
if(page === 'dropzone' && req.isXmlHtppRequest) {
var output = settings.dropzone || {};
res.json(output);
next();
} else {
res.render('settings.' + page + '.html', {
activeTab: page
});
next();
if(settings.finalised) {
res.render('404.html');
next();
} else {
res.render('settings.' + page + '.html', {
activeTab: page
});
next();
}
}
}
});
});
};
};

Router.prototype.settingsSaveByName = function(req, res, next) {
Router.prototype.settingsSaveByName = function() {
var self = this;
var settings = req.params.settings;
youtransfer.settings.push(settings, function() {
self.settingsGetByName(req, res, next);
});
return function(req, res, next) {
var settings = req.params.settings;
youtransfer.settings.push(settings, function(err) {
req.params['success'] = _.isNull(err);
req.params['isPostback'] = true;
self.settingsGetByName()(req, res, next);
});
};
};

Router.prototype.staticFiles = function(req, res) {
this.fileServer.serveFile('/' + req.params[1] + '/' + req.params[2], 200, { server: 'youtransfer.io', 'Cache-Control': 'max-age=' + nconf.get('CACHE_MAX_AGE') }, req, res);
Router.prototype.staticFiles = function() {
var self = this;
return function(req, res) {
self.fileServer.serveFile('/' + req.params[1] + '/' + req.params[2], 200, { server: 'youtransfer.io', 'Cache-Control': 'max-age=' + nconf.get('CACHE_MAX_AGE') }, req, res);
}
};

Router.prototype.default = function(req, res) {
var page = req.params[0] || 'index';
res.setHeader('Cache-Control', 'private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate');
res.render(page + ".html");
};
Router.prototype.default = function() {
return function(req, res) {
var page = req.params[0] || 'index';
res.setHeader('Cache-Control', 'private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate');
res.render(page + ".html");
};
}
Loading

0 comments on commit 37312b9

Please sign in to comment.