diff --git a/src/controllers/groups.js b/src/controllers/groups.js index c5d430b28d..de8af88e07 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -27,26 +27,32 @@ groupsController.list = function(req, res, next) { groupsController.details = function(req, res, next) { var uid = req.user ? parseInt(req.user.uid, 10) : 0; - async.parallel({ - group: function(next) { - groups.getByGroupslug(req.params.slug, { - expand: true, - uid: uid - }, next); - }, - posts: function(next) { - groups.getLatestMemberPosts(req.params.slug, 10, uid, next); - } - }, function(err, results) { - if (err) { - return next(err); - } + groups.existsBySlug(req.params.slug, function(err, exists) { + if (exists) { + async.parallel({ + group: function(next) { + groups.getByGroupslug(req.params.slug, { + expand: true, + uid: uid + }, next); + }, + posts: function(next) { + groups.getLatestMemberPosts(req.params.slug, 10, uid, next); + } + }, function(err, results) { + if (err) { + return next(err); + } - if (!results.group) { - return helpers.notFound(req, res); - } + if (!results.group) { + return helpers.notFound(req, res); + } - res.render('groups/details', results); + res.render('groups/details', results); + }); + } else { + return res.locals.isAPI ? res.status(302).json('/groups') : res.redirect('/groups'); + } }); }; diff --git a/src/groups.js b/src/groups.js index 38c8704813..54b1332a4b 100644 --- a/src/groups.js +++ b/src/groups.js @@ -422,6 +422,10 @@ var async = require('async'), } }; + Groups.existsBySlug = function(slug, callback) { + db.isObjectField('groupslug:groupname', slug, callback); + }; + Groups.create = function(data, callback) { if (data.name.length === 0) { return callback(new Error('[[error:group-name-too-short]]'));