sheercms
Version:
Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.
275 lines (228 loc) • 7.9 kB
JavaScript
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.'});
}
}