UNPKG

sheercms

Version:

Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.

275 lines (228 loc) 7.9 kB
var logger = require('../logger'); var api = require('../api'); var auth = require('../auth'); var view = require('../view'); var config = require('../config'); var jwt = require('jwt-simple'); var crypto = require('../crypto'); /* callback: (err) */ module.exports.init = function(server, callback) { //routes server.get('/cms/login', routeLogin); server.post('/cms/login', routeLoginPost); server.get('/cms/logout', routeLogout); server.get('/cms/users/list', auth.authenticate, routeUserList); server.post('/cms/users/updateProfile', auth.authenticate, routeUserUpdateProfile); server.post('/cms/users/create', auth.authenticateAdmin, routeUserCreate); server.post('/cms/users/update', auth.authenticateAdmin, routeUserUpdate); server.post('/cms/users/delete', auth.authenticateAdmin, routeUserDelete); server.get('/cms/roles/list', auth.authenticate, routeRoleList); server.post('/cms/roles/create', auth.authenticateAdmin, routeRoleCreate); server.post('/cms/roles/update', auth.authenticateAdmin, routeRoleUpdate); server.post('/cms/roles/delete', auth.authenticateAdmin, routeRoleDelete); if (callback) callback(null); }; module.exports.models = require('./users-models'); // Login Page // GET ~/cms/login function routeLogin(req, res, next) { try { var model = { browserTitle: "Sheer Cliff Login", title: "Sheer Cliff Login", message: "", isPostback: false, scripts: [], styles: [] }; renderLoginPage(res, model); } catch(e) { logger.error("Error in login: " + e); res.send("Error loading the login page."); } } // POST ~/cms/login function routeLoginPost(req, res, next) { logger.debug("Entering routeLoginPost."); var model = { browserTitle: "Sheer Cliff Login", title: "Sheer Cliff Login", message: "", isPostback: true, scripts: [], styles: [] }; try { api.users.login(req, res, req.body.username, req.body.password, function(err, success) { if (err) { if (!err.message) model.message = err; else model.message = "Error authenticating user."; renderLoginPage(res, model); } else if (success === true) { res.redirect('/cms#/content'); } else { model.message = "Wrong username or password."; renderLoginPage(res, model); } }); } catch(e) { logger.error("Error in loginPost: ", e); model.message = "Unexpected error."; renderLoginPage(res, model); } } function routeLogout(req, res, next) { //delete the jwt cookie res.clearCookie(config.settings.cms_token_cookie); res.redirect("/cms/login"); } function renderLoginPage(res, model) { view.renderFile('login', model, function(err, result) { if (err) res.send("Error rendering 'login' view."); else res.send(result); }); } /*==== USERS ====*/ function routeUserList(req, res, next) { try { var role = req.query.role; api.users.getUsers(role, function(err, users) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, users: users }); }); } catch(e) { logger.error(e); res.json({ success: false, message: "Error getting users." }); } } function routeUserCreate(req, res, next) { try { var json = req.body.data; var userIn = JSON.parse(json); api.users.createUser(userIn, req.user, function(err, user) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, user: user, message: "User created successfully!" }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error creating user.'}); } } function routeUserUpdate(req, res, next) { try { var changePwd = (req.body.changepwd == true || req.body.changepwd == 'true'); var json = req.body.data; var userIn = JSON.parse(json); api.users.updateUser(userIn, req.user, changePwd, function(err, user) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, user: user, message: "User updated successfully!" }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error updating user.'}); } } function routeUserUpdateProfile(req, res, next) { try { var changePwd = (req.body.changepwd == true || req.body.changepwd == 'true'); var json = req.body.data; var userIn = JSON.parse(json); api.users.updateProfile(userIn, req.user, changePwd, function(err, user) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, user: user, message: "Profile updated successfully!" }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error updating user.'}); } } function routeUserDelete(req, res, next) { try { var username = req.body.username; api.users.deleteUser(username, function(err, user) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, message: "User deleted successfully!" }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error deleting user.'}); } } /*==== ROLES ====*/ function routeRoleList(req, res, next) { try { api.users.getRoles(function(err, roles) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, roles: roles }); }); } catch(e) { logger.error(e); res.json({ success: false, message: "Error getting roles." }); } } function routeRoleCreate(req, res, next) { try { var name = req.body.name; var group = req.body.group; if (!group) group = ""; api.users.createRole(name, group, "", false, function(err, role) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, role: role, message: "Role created successfully!" }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error creating role.'}); } } function routeRoleUpdate(req, res, next) { try { var json = req.body.data; var role = JSON.parse(json); api.users.updateRole(role, function(err, savedRole) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, role: savedRole, message: "Role updated successfully!" }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error updating role.'}); } } function routeRoleDelete(req, res, next) { try { var name = req.body.name; api.users.deleteRole(name, function(err) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, message: "Role deleted successfully!" }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error deleting role.'}); } }