UNPKG

periodicjs.ext.asyncadmin

Version:

An authentication extension for periodicjs that uses passport to authenticate user sessions.

339 lines (308 loc) 9.19 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: controller/user.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: controller/user.js</h1> <section> <article> <pre class="prettyprint source"><code>'use strict'; var Utilities = require('periodicjs.core.utilities'), ControllerHelper = require('periodicjs.core.controller'), CoreMailer = require('periodicjs.core.mailer'), extend = require('utils-merge'), appSettings, mongoose, User, logger, loginExtSettings, appenvironment, welcomeemailtemplate, emailtransport, CoreUtilities, CoreController; /** * user login page * @param {object} req * @param {object} res * @return {object} reponds with an error page or requested view */ var login = function (req, res) { CoreController.getPluginViewDefaultTemplate({ viewname: 'user/login', themefileext: appSettings.templatefileextension, extname: 'periodicjs.ext.login' }, function (err, templatepath) { CoreController.handleDocumentQueryRender({ res: res, req: req, renderView: templatepath, responseData: { pagedata: { title: 'Login' }, user: req.user } }); } ); }; /** * user registration form * @param {object} req * @param {object} res * @return {object} reponds with an error page or requested view */ var newuser = function (req, res) { CoreController.getPluginViewDefaultTemplate({ viewname: 'user/new', themefileext: appSettings.templatefileextension, extname: 'periodicjs.ext.login' }, function (err, templatepath) { CoreController.handleDocumentQueryRender({ res: res, req: req, renderView: templatepath, responseData: { pagedata: { title: 'Register' }, user: req.user } }); } ); }; /** * create a new user account * @param {object} req * @param {object} res * @return {object} reponds with an error page or requested view */ var create = function (req, res) { var userdata = CoreUtilities.removeEmptyObjectValues(req.body), newuseroptions = { newuser: userdata, lognewuserin: true, req: req, send_new_user_email: true, welcomeemaildata: { getEmailTemplateFunction: CoreController.getPluginViewDefaultTemplate, emailviewname: 'email/user/welcome', themefileext: appSettings.templatefileextension, sendEmailFunction: CoreMailer.sendEmail, subject: appSettings.name + ' New User Registration', replyto: appSettings.adminnotificationemail, hostname: req.headers.host, appenvironment: appenvironment, appname: appSettings.name, } }, finalnewusersettings; finalnewusersettings = extend(newuseroptions, loginExtSettings.new_user_validation); User.createNewUserAccount( finalnewusersettings, function (newusererr /*, newuser*/ ) { if (newusererr) { CoreController.handleDocumentQueryErrorResponse({ err: newusererr, res: res, req: req }); } else { logger.silly('controller - periodic.ext.login/user.js - ' + req.session.return_url); if (req.session.return_url) { return res.redirect(req.session.return_url); } else { return res.redirect('/'); } } }); }; /** * complete registration form view * @param {object} req * @param {object} res * @return {object} reponds with an error page or requested view */ var finishregistration = function (req, res) { CoreController.getPluginViewDefaultTemplate({ viewname: 'user/finishregistration', themefileext: appSettings.templatefileextension, extname: 'periodicjs.ext.login' }, function (err, templatepath) { CoreController.handleDocumentQueryRender({ res: res, req: req, renderView: templatepath, responseData: { pagedata: { title: 'complete registration' }, user: req.user } }); } ); }; /** * if username required, updates user username after account is created * @param {object} req * @param {object} res * @return {object} reponds with an error page or requested view */ var updateuserregistration = function (req, res) { var userError; User.findOne({ email: req.user.email }, function (err, userToUpdate) { if (err) { userError = err; CoreController.handleDocumentQueryErrorResponse({ err: userError, res: res, req: req, errorflash: userError.message, redirecturl: '/user/finishregistration' }); } else if (!userToUpdate) { userError = new Error('could not find user, couldn\'t complate registration'); CoreController.handleDocumentQueryErrorResponse({ err: userError, res: res, req: req, errorflash: userError.message, redirecturl: '/user/finishregistration' }); } else { userToUpdate.username = req.body.username; userToUpdate.save(function (err, userSaved) { if (err) { userError = err; CoreController.handleDocumentQueryErrorResponse({ err: userError, res: res, req: req, errorflash: userError.message, redirecturl: '/user/finishregistration' }); } else { var forwardUrl = (req.session.return_url) ? req.session.return_url : '/'; req.flash('info', 'updated user account'); res.redirect(forwardUrl); if (welcomeemailtemplate && emailtransport) { User.sendWelcomeUserEmail({ subject: appSettings.name + ' New User Registration', user: userSaved, hostname: req.headers.host, appname: appSettings.name, emailtemplate: welcomeemailtemplate, // bcc:'yje2@cornell.edu', mailtransport: emailtransport }, function (err, status) { if (err) { console.log(err); } else { console.info('email status', status); } }); } } }); } }); }; /** * @description Shows the forgot password view * @param {object} req * @param {object} res * @return {object} reponds with an error page or requested view */ var forgot = function (req, res) { CoreController.getPluginViewDefaultTemplate({ viewname: 'user/forgot', themefileext: appSettings.templatefileextension, extname: 'periodicjs.ext.login' }, function (err, templatepath) { CoreController.handleDocumentQueryRender({ res: res, req: req, renderView: templatepath, responseData: { pagedata: { title: 'Forgot Password' }, user: req.user } }); }); }; /** * login controller * @module userloginController * @{@link https://github.com/typesettin/periodicjs.ext.login} * @author Yaw Joseph Etse * @copyright Copyright (c) 2014 Typesettin. All rights reserved. * @license MIT * @requires module:path * @requires module:periodicjs.core.utilities * @requires module:periodicjs.core.controller * @requires module:periodicjs.core.mailer * @param {object} resources variable injection from current periodic instance with references to the active logger and mongo session * @return {object} userlogin */ var controller = function (resources) { logger = resources.logger; mongoose = resources.mongoose; appSettings = resources.settings; User = mongoose.model('User'); CoreController = new ControllerHelper(resources); CoreUtilities = new Utilities(resources); loginExtSettings = resources.app.controller.extension.login.loginExtSettings; appenvironment = appSettings.application.environment; return { login: login, newuser: newuser, forgot: forgot, create: create, finishregistration: finishregistration, updateuserregistration: updateuserregistration }; }; module.exports = controller; </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Index</a></h2><h3>Modules</h3><ul><li><a href="module-authController.html">authController</a></li><li><a href="module-userloginController.html">userloginController</a></li><li><a href="login.html">login</a></li></ul><h3>Global</h3><ul><li><a href="global.html#facebook">facebook</a></li><li><a href="global.html#facebookcallback">facebookcallback</a></li><li><a href="global.html#instagram">instagram</a></li><li><a href="global.html#instagramcallback">instagramcallback</a></li><li><a href="global.html#saveUser">saveUser</a></li><li><a href="global.html#twitter">twitter</a></li><li><a href="global.html#twittercallback">twittercallback</a></li><li><a href="global.html#usePassport">usePassport</a></li></ul> </nav> <br clear="both"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Thu Jan 29 2015 21:18:44 GMT-0500 (EST) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>