oils-plugin-auth
Version:
Oils js authentication plugin using passport js.
95 lines (65 loc) • 2.45 kB
JavaScript
;
const passport = require('passport');
const pluginConf = web.plugins['oils-plugin-auth'].conf;
const User = web.includeModel(pluginConf.userModel);
module.exports = {
get: function(req, res) {
if (!web.auth.shouldGenAdmin) {
throw new Error("Admin registration not allowed.");
}
if (!pluginConf.registrationEnabled) {
throw new Error("Registration is not enabled.");
}
res.renderFile(pluginConf.registerAdminView, {defaultAdminUsername: pluginConf.defaultAdminUsername});
},
post: function(req,res) {
if (!web.auth.shouldGenAdmin) {
throw new Error("Admin registration not allowed.");
}
if (!pluginConf.registrationEnabled) {
throw new Error("Registration is not enabled.");
}
let user = new User();
let params = Object.assign({}, req.body);
if (params.secret !== web.conf.secretPassphrase) {
throw new Error("Invalid request for creating an admin.");
}
params._id = undefined;
params.username = pluginConf.defaultAdminUsername;
params.role = 'ADMIN';
user.set(params);
let errorMsgs = [];
if (req.body.password != req.body.confirmPassword) {
errorMsgs.push('Passwords do not match.');
}
if (errorMsgs.length > 0) {
for (let i in errorMsgs) {
req.flash('error', errorMsgs[i]);
}
res.renderFile(pluginConf.registerAdminView, {user: user, defaultAdminUsername: pluginConf.defaultAdminUsername});
return;
}
if (!user.username) {
user.username = user.email;
}
if (!user.nickname) {
user.nickname = user.fullname.split(' ')[0];
}
user.save(function(err) {
if (err) {
console.log('Error saving: ' + err);
for (let i in err.errors) {
req.flash('error', err.errors[i].message);
}
res.renderFile(pluginConf.registerAdminView, {user: user, defaultAdminUsername: pluginConf.defaultAdminUsername});
} else {
web.auth.shouldGenAdmin = false;
req.login(user, function(err) {
if (err) { throw err; }
req.flash('info', 'Successfully registered and authenticated.');
return res.redirect(pluginConf.redirectAfterLogin);
});
}
})
}
}