Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 16 additions & 20 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,31 @@ var group = require('./controllers/group');
var discussion = require('./controllers/discussion');
var issue = require('./controllers/issue');
var scriptStorage = require('./controllers/scriptStorage');
var statusCodePage = require('./libs/templateHelpers').statusCodePage;

var modelParser = require('./libs/modelParser');

var statusCodePage = require('./libs/templateHelpers').statusCodePage;
var modifySessions = require('./libs/modifySessions');

var settings = require('./models/settings.json');

var connectStr = process.env.CONNECT_STRING || settings.connect;
var sessionSecret = process.env.SESSION_SECRET || settings.secret;
var db = mongoose.connection;
var dbOptions = { server : { socketOptions : { keepAlive: 1 } } };
var dbOptions = { server: { socketOptions: { keepAlive: 1 } } };

app.set('port', process.env.PORT || 8080);

// Connect to the database
mongoose.connect(connectStr, dbOptions);
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
db.once('open', function() {
app.listen(app.get('port'));
});

app.configure(function(){
app.configure(function() {
var sessionStore = new MongoStore({ mongoose_connection: db });

// See https://hacks.mozilla.org/2013/01/building-a-node-js-server-that-wont-melt-a-node-js-holiday-season-part-5/
app.use(function (req, res, next) {
app.use(function(req, res, next) {
// check if we're toobusy
if (toobusy()) {
statusCodePage(req, res, next, {
Expand All @@ -56,13 +56,12 @@ app.configure(function(){

// Force HTTPS
if (app.get('port') === 443) {
app.use(function (req, res, next) {
app.use(function(req, res, next) {
res.setHeader('Strict-Transport-Security',
'max-age=8640000; includeSubDomains');

if (req.headers['x-forwarded-proto'] !== 'https') {
return res.redirect(301, 'https://' + req.headers.host
+ encodeURI(req.url));
return res.redirect(301, 'https://' + req.headers.host + encodeURI(req.url));
}

next();
Expand Down Expand Up @@ -96,7 +95,7 @@ app.configure(function(){
});

// Build the route regex for model lists
function listRegex (root, type) {
function listRegex(root, type) {
var slash = '\/';
if (root === slash) { slash = ''; }
return new RegExp('^' + root +
Expand All @@ -115,7 +114,7 @@ function app_route(path) {
r.all = function(cb) {
app.all.call(app, path, cb);
};
methods.forEach(function(method){
methods.forEach(function(method) {
r[method] = function(cb) {
app[method].call(app, path, cb);
return r;
Expand Down Expand Up @@ -153,7 +152,6 @@ app_route('/user/add/lib/new').get(script.lib(user.editScript)).post(script.lib(
app_route('/user/add/scripts/upload').post(user.uploadScript);
app_route('/user/add/lib/upload').post(script.lib(user.uploadScript));


// Script routes
app_route('/scripts/:username/:namespace?/:scriptname').get(script.view);
app_route('/script/:username/:namespace?/:scriptname/edit').get(script.edit).post(script.edit);
Expand All @@ -165,7 +163,7 @@ app.get('/install/:username/:namespace?/:scriptname', scriptStorage.sendScript);
app.get('/meta/:username/:namespace?/:scriptname', scriptStorage.sendMeta);
app.get('/vote/scripts/:username/:namespace?/:scriptname/:vote', script.vote);
app.post('/github/hook', scriptStorage.webhook);
app.post('/github/service', function (req, res, next) { next(); });
app.post('/github/service', function(req, res, next) { next(); });

// Library routes
app.get(listRegex('\/toolbox', 'lib'), main.toolbox);
Expand All @@ -180,7 +178,7 @@ app.get('/vote/libs/:username/:scriptname/:vote', script.lib(script.vote));

// Issues routes
app_route('/:type(scripts|libs)/:username/:namespace?/:scriptname/issues/:open(closed)?').get(issue.list);
// app_route('/:type(scripts|libs)/:username/:namespace?/:scriptname/issues/:topic').get(issue.view);
//app_route('/:type(scripts|libs)/:username/:namespace?/:scriptname/issues/:topic').get(issue.view);
app_route('/:type(scripts|libs)/:username/:namespace?/:scriptname/issue/new').get(issue.open).post(issue.open);
app_route('/:type(scripts|libs)/:username/:namespace?/:scriptname/issues/:topic').get(issue.view);

Expand All @@ -201,9 +199,8 @@ app_route('/mod/removed').get(moderation.removedItemListPage);
app_route('/mod/removed/:id').get(moderation.removedItemPage);
app.get('/flag/users/:username/:unflag?', user.flag);
app.get('/flag/scripts/:username/:namespace?/:scriptname/:unflag?', script.flag);
app.get('/flag/libs/:username/:scriptname/:unflag?', script.lib(script.flag)); //
app.get(listRegex('\/flagged(?:\/([^\/]+?))?', 'user|script'),
moderation.flagged); //
app.get('/flag/libs/:username/:scriptname/:unflag?', script.lib(script.flag));
app.get(listRegex('\/flagged(?:\/([^\/]+?))?', 'user|script'), moderation.flagged);
app.get(listRegex('\/graveyard(?:\/([^\/]+?))?', ''), moderation.graveyard);
app.get(/^\/remove\/(.+?)\/(.+)$/, remove.rm);

Expand Down Expand Up @@ -237,10 +234,9 @@ app.get(listRegex('\/', 'script'), main.home);

// Fallback routes
app.use(express.static(__dirname + '/public'));
app.use(function (req, res, next) {
app.use(function(req, res, next) {
statusCodePage(req, res, next, {
statusCode: 404,
statusMessage: 'This is not the page you\'re are looking for.',
});
});

29 changes: 13 additions & 16 deletions controllers/_template.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,8 @@ var modelQuery = require('../libs/modelQuery');
// Generate a bootstrap3 pagination widget.
var getDefaultPagination = require('../libs/templateHelpers').getDefaultPagination;


//--- Views
exports.example = function (req, res, next) {
exports.example = function(req, res, next) {
var authedUser = req.session.user;

//
Expand All @@ -38,16 +37,15 @@ exports.example = function (req, res, next) {
options.pageMetaKeywords = pageMetaKeywords.join(', ');

//--- Tasks
// ...

//---
function preRender(){};
function render(){ res.render('pages/_templatePage', options); }
function asyncComplete(){ preRender(); render(); }
function preRender() { };
function render() { res.render('pages/_templatePage', options); }
function asyncComplete() { preRender(); render(); }
async.parallel(tasks, asyncComplete);
};

exports.example = function (req, res, next) {
exports.example = function(req, res, next) {
var authedUser = req.session.user;

//
Expand All @@ -70,17 +68,16 @@ exports.example = function (req, res, next) {
var scriptListQuery = Script.find();

// Scripts: Query: isLib=false
scriptListQuery.find({isLib: false});
scriptListQuery.find({ isLib: false });

// Scripts: Query: Search
if (req.query.q)
modelQuery.parseScriptSearchQuery(scriptListQuery, req.query.q);

// Scripts: Query: Sort
modelQuery.parseModelListSort(scriptListQuery, req.query.orderBy, req.query.orderDir, function(){
modelQuery.parseModelListSort(scriptListQuery, req.query.orderBy, req.query.orderDir, function() {
scriptListQuery.sort('-rating -installs -updated');
});


// Pagination
var pagination = getDefaultPagination(req);
Expand All @@ -90,10 +87,10 @@ exports.example = function (req, res, next) {

// Pagination
tasks.push(pagination.getCountTask(scriptListQuery));

// Scripts
tasks.push(function (callback) {
scriptListQuery.exec(function(err, scriptDataList){
tasks.push(function(callback) {
scriptListQuery.exec(function(err, scriptDataList) {
if (err) {
callback();
} else {
Expand All @@ -104,12 +101,12 @@ exports.example = function (req, res, next) {
});

//---
function preRender(){
function preRender() {
// Pagination
options.paginationRendered = pagination.renderDefault(req);
};
function render(){ res.render('pages/_templatePage', options); }
function asyncComplete(){ preRender(); render(); }
function render() { res.render('pages/_templatePage', options); }
function asyncComplete() { preRender(); render(); }
async.parallel(tasks, asyncComplete);
};

Loading