var validateAppForm = function() { return form( field("name").trim().required().isAlphanumeric(), field("description").trim().required(), field("url").trim().isUrl() ) };
module.exports = function (app) { function save(req, res) { var payload = req.form, user = req.user; user.name(payload.name); user.email(payload.email); user.type(payload.type); app.models.user.save(user, function () { res.redirect('.'); }); } var router = express.Router(); router .all('*', app.helpers.loggedIn('/auth/login')) .get('/', app.helpers.render('dashboard/main')) .get('/edit', app.helpers.render('dashboard/edit')) .post('/edit', form( field('name').trim().required(), field('email').trim().required(), field('type').trim().required() ), save) .all('*', app.helpers.redirect('.')); app.use('/dashboard', router); };
function blogform(req, res, next) { return form( filter('title').trim(), filter('body').trim(), validate('title').required(), validate('body').required() )(req, res, next); }
function commentform(req, res, next) { return form( filter('name').trim(), filter('comment').trim(), validate('name').required(), validate('name').minLength(3), validate('comment').required() )(req, res, next); }
'use strict'; var form = require("express-form"), filter = form.filter, validate = form.validate; exports.reg_form = form( // Form filter and validation middleware filter("email").trim(), validate("email").required("", "请输入您的邮箱").isEmail("邮箱地址不合法"), filter("password").trim(), validate("password").required("", "请输入您的密码"), filter("confirm").trim(), validate("confirm").required("", "请确认您的密码").equals("field::password", "两次输入的密码不一致"), filter("agree").trim(), validate("agree").required("", "请同意用户协议") ); exports.init = function(req, res){ if (req.isAuthenticated()) { res.redirect("/"); } else { res.render('signup/index', { role: "login" }); } }; exports.signup = function(req, res){ var loads = {role:"login"}; var workflow = require("../../utils").workflow(req, res);
/////////////////////////////////////////// // School domain creator form validatior // /////////////////////////////////////////// 'use strict'; var form = require('express-form'); var field = form.field; module.exports = form( field('domain') .trim() .required() .is(/^\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b$/i) );
app.get('/list', function(req, res) { Course.listRandomCourses(null, function(err, randomCourses) { console.log(randomCourses); }); }); app.get('/test', function(req, res) { req.session.authenticatedUser = false; res.redirect('/'); }); // User Requests app.get('/user/register', userRoutes.userRegistration); // Display registration form app.post('/user/create', form( validate("fname", "First Name").required("First Name is Required"), validate("lname", "Last Name").required("Last Name is Required"), validate("email", "Email Address").required("Email is Required").isEmail(), validate("phone", "Phone Number").required().custom(function(value) { if(value.length != 10) {throw new Error("Phone number must be 10 digits with no special characters!")} }), validate("pass", "Password").required().custom(function(value) { if(value.length < 6 || value.length > 25) throw new Error("Password must be between 7 and 25 characters long!") }) ), userRoutes.createUser); // Process registration form app.get('/user/login/:redirect?', userRoutes.userLogin); app.post('/user/login/process', userRoutes.userProcessLogin); app.get('/user/home', requireuserLogin, userRoutes.userHome); // Course Endpoints app.get('/courses', userRoutes.courseHome); app.get('/courses/all', userRoutes.allCourses); app.post('/course/search', userRoutes.courseSearch); app.get('/course/search', function(req, res) { res.render('courseSearch', { title: 'Technology Grows Course Search', dataSet: {searchResults: null} }); }); app.get('/course/:id', userRoutes.getCourseInfo); app.post('/course/register', userRoutes.registerStudent); app.get('/enrollment_success', function(req, res) {
module.exports = function(app, db) { // ## Forgot password form app.get('/forgot-password', function(req, res) { if(req.loggedIn) { return res.redirect('/login'); } else { res.render('forgot-password', { title: "Forgot Password", }); } }); // ## Process recovery app.post('/forgot-password', form( filter("email").trim() , validate("email").required().isEmail() ), function(req, res) { if(!req.form.isValid) { res.redirect('/forgot-password'); } else { // Check if account exists and dispatch /account-recovery/:hash link // This hash link will allow user to change their password var Users = db.model('Users'); Users.findOne(req.form, function(err, user) { if(err) { req.flash('error', 'An error occured, please try again'); res.redirect('/forgot-password'); } if(!user) { req.flash('error', 'No account exists with an email address of ' + '<strong>' + req.form.email + '</strong>'); res.redirect('/forgot-password'); } else { // Store random string in user's table as user.random_string var randomString = require('../lib/random-string.js'); user.random_string = randomString(16); user.save(function(err, user) { if(user) { // Send user an email to reset their password var nodemailer = require('nodemailer') , emailSignature = require('../lib/email-signature') , htmlMsg = '' + '<p>' + user.name.first + ',</p>' + '<p>You can reset your password by clicking the unique link below:</p>' + '<p><a href="http://yourdomain.com/reset-password/' + user.random_string + '" target="_blank" title="Reset your password">' + 'http://yourdomain.com/reset-password/' + user.random_string + '</a></p>' + emailSignature("html") , plainMsg = '' + user.name.first + ',\n\n' + 'You can reset your password by clicking the unique link below:\n\n' + 'http://yourdomain.com/reset-password/' + user.random_string + '\n\n' + emailSignature("text"); nodemailer.SMTP = { host: 'smtp.gmail.com' , port: 465 , ssl: true , use_authentication: true , user: '******' , pass: '******' }; nodemailer.send_mail( { sender: '"Llamas" <*****@*****.**>' , to: req.form.email , subject: user.name.first + ', reset your password using this link' , html: htmlMsg , body: plainMsg }, function(err, success) { if(success) { req.flash('success', '' + 'An email has been sent to ' + '<strong>' + req.form.email + '</strong> ' + 'with a link to reset the account\'s password'); } else { req.flash('error', 'An error occured, please try again'); } res.redirect('/forgot-password'); } ); } else { console.log(err); req.flash('error', 'An error occured, please try again'); } }); } }); } } ); };
'use strict' var form = require('express-form') var field = form.field module.exports = form( field('loginForm.email').required(), field('loginForm.password') .required() .is(/^[\x20-\x7F]{6,}$/), )
var form = require("express-form"); var field = form.field; var login_form = form( field("email").trim().required().isEmail(), field("password").trim().required().regex(/^(?=.*[A-z])(?=.*[!@#$&*])(?=.*[0-9]).{8,}$/, "Passwords must be at least 8 characters, include a letter, a number and a special character") ); module.exports = login_form;
'use strict'; var form = require('express-form') , field = form.field; module.exports = form( field('userForm.name').trim().required(), field('userForm.email').trim().isEmail().required() );
(function (module) { 'use strict'; var models = require('./atlas.models'), form = require('express-form'), filter = form.filter, validate = form.validate, User = models.User, passwordHash = require('password-hash'); var API = { index: function (req, res) { models.User.findOne({}, function (err, user) { if (err) { return res.send(500, { error: err }); } else if (!user) { res.render('atlas/setup', { subtitle: 'Setup & Configuration' }); } else { res.render('atlas/index'); } }); }, setupValidation: form( filter('name').trim(), validate('name').required(), filter('email').trim(), validate('email').isEmail().required(), filter('password').trim(), validate('password').required(), filter('password-conf').trim(), validate('password-conf').equals('field::password') ), setup: function (req, res) { if (req.form.isValid) { models.User.findOne({}, function (err, user) { if (err) { return res.send(500, { error: err }); } else if (!user) { // create user in db var tmp = new User({ Name: req.form.name, Email: req.form.email, PasswordHash: passwordHash.generate(req.form.password), Role: 'Administrator', }); tmp.save(function (err, user) { // login with that user & redirect to the login res.redirect('/login'); }); } else { res.render('atlas/index'); } }); } else { res.render('atlas/setup', { subtitle: 'Setup & Configuration', messages: req.form.messages }); } }, login: function (req, res) { res.render('atlas/login', { subtitle: 'User Login' }); }, logout: function (req, res) { req.session.destroy(function () { res.redirect('/'); }); }, overview: function (req, res) { res.render('atlas/overview', { subtitle: 'Overview' }); } }; module.exports = API; })(module);
var form = require('express-form'), field = form.field; module.exports = form( field('eventId') .required() .isInt(), field('availableAt') .required() .regex(/\d{4}\-\d{1,2}\-\d{1,2}\s\d{1,2}:\d{2}/) );
'use strict'; var form = require('express-form') , field = form.field; module.exports = form( field('registerForm.username').required().is(/^[\da-zA-Z\-_]+$/), field('registerForm.name').required(), field('registerForm.email').required(), field('registerForm.password').required().is(/^[\da-zA-Z@#$%-_&\+\*\?]{6,64}$/), field('registerForm.fbId').isInt(), field('registerForm.googleId').isInt() );
var parsed = JSON.parse(json); app.use(express.static('public')); app.set('view engine', 'html'); app.engine('html', hbs.__express); app.use(express.bodyParser()); app.get('/', function(req, res) { res.render('index',{entries:blogEngine.getBlogEntries()}); }); app.get('/inscription', form( field("search").trim() ), function(req, res) { res.render('inscription', {title:"About Me"}); if (!req.form.isValid) { // Handle errors console.log(req.form.errors); } else if(req.query['search'] != null && req.query['search'] != '') { console.log('Recherche: ' + req.query['search']); } }); app.post('/inscription', form(
const jwt = require('jwt-simple'); const form = require('express-form'); const User = require('../models/user'); const hlpr = require('../lib/helpers'); function tokenForUser(user) { const timestamp = new Date().getTime(); const newJWT = jwt.encode({ sub: user.id, iat: timestamp }, process.env.AUTH_SECRET); hlpr.consLog(['tokenForUser', newJWT]); return newJWT; } // Form validation middleware exports.userForm = form( form.field('userName').array().custom(value => value.replace(/[^a-z0-9-_]/gi, '')) /* eslint comma-dangle: ["error", "never"] */ ); exports.signinError = (err, req, res, next) => { hlpr.consLog(['signin', `AUTH ERROR: Signin - Bad Email or Password @ ${req.ip}`]); return res.status(422).send({ error: 'Signin failed: Bad Email or Password.' }); }; exports.signin = (req, res, next) => { hlpr.consLog(['signin', `res.send signin token ${req.user}`]); res.send({ token: tokenForUser(req.user) }); }; exports.signup = (req, res, next) => { const email = req.body.email; const password = req.body.password;
var form = require("express-form"), filter = form.filter, validate = form.validate; OrderFinalForm = form( filter("spUserEmail").trim(), validate("spUserEmail").required(null, 'please enter email') .isEmail('need some email'), filter("orderId").trim(), validate("orderId") .required(null, 'please enter orderId'), filter("userName").trim(), validate("userName") .required(null, 'please enter userName'), filter("cellPhone").trim(), filter("description").trim(), validate("description") .required(null, 'please enter description'), filter("deliveryAddress").trim() ) OrderAnswerForm = form( filter("spPaymentId").trim(), filter("spShopId").trim(), filter("spShopPaymentId").trim(),
var form = require('express-form'), field = form.field; module.exports = form( field('eventId') .required() .isInt(), field('name') .required() .trim() .maxLength(255), field('email') .required() .trim() .toLower() .isEmail(), field('message') .trim() );
app.get('/contact/:id', loggedIn, function(req, res){ Contacts.findById(req.params.id, function(err, doc) { if(err || !doc) { res.redirect('/404'); return; } Data.find({userid: req.session.user._id, contactid: req.params.id}, {sort: {date: -1}}).toArray(function(err, docs){ res.render('contact', {js: 'contact', title: 'Touchbase - ' + doc.name, docs: docs, contact: doc}) }); }); }); app.post('/login', form( field('email').required('Email', 'Please enter an email').toLower().trim().isEmail('Email address is not valid'), field('password').required('Password', 'Please enter a password') ), function(req, res) { if (!req.form.isValid) { res.render('login', {js: 'login', message: req.form.errors[0], title: 'Touchbase - Login' }); return; } Users.findOne({email: req.form.email}, function(err, doc){ if(!doc || hash.sha256(req.form.password, doc.salt) !== doc.password) { res.render('login', {js: 'login', message: 'Incorrect email and password combination', title: 'Touchbase - Login'}); } else { doc._id = doc._id.toString(); req.session.user = doc; res.redirect('/dashboard'); } });
}); } function account_exist(email, source, callback) { User.findOne({ email: email }, function(err, user) { if (err) throw new Error(); if (!user) return callback(new Error('Account not exist')); callback(null); }); } function is_password_correct(password, source, callback) { User.findOne({ email: source.email }, function(err, user) { if (err || !user) throw new Error(); if (!user.authenticate(password)) return callback(new Error('Wrong password')); callback(null); }); } exports.signup_form = form( field('email').trim().required().isEmail().custom(email_unique), field('username').trim().required(), field('password').trim().required().minLength(6), field('password_confirm').trim().required().equals('field::password', 'Password not matched') ); exports.signin_form = form( field('email').trim().required().isEmail().custom(account_exist), field('password').trim().required().custom(is_password_correct) );
module.exports = function(app){ app.get('/news', function(req, res){ var query = NewsPost.find({}); if(!req.user || req.user.role < 10){ query.where('active', true); }else{ query.populate('recentEvents'); } query.sort('-date').exec(function(err, newsPosts){ for(var i=0; i<newsPosts.length; i++){ newsPosts[i].text = newsPosts[i].text.replace(/\r\n/gmi, '<br/>').replace(/\r/gmi, '<br/>').replace(/\n/gmi, '<br/>'); } res.render('news', {title: 'All News', newsPosts: newsPosts, moment: moment}); }); }); app.get('/news/publish/:id', auth.authorize(2, 10), function(req, res){ if(!req.params.id){ req.flash('error', 'News Post ID required.'); res.redirect('/news'); return; } NewsPost.findById(req.params.id).exec(function(err, newsPost){ if(err || !newsPost){ req.flash('error', 'News Post not found.'); res.redirect('/news'); return; } newsPost.active = true; newsPost.save(function(err){ req.flash('info', 'News Post published.'); res.redirect('/news'); return; }); return; }); }); app.get('/news/unpublish/:id', auth.authorize(2, 10), function(req, res){ if(!req.params.id){ req.flash('error', 'News Post ID required.'); res.redirect('/news'); return; } NewsPost.findById(req.params.id).exec(function(err, newsPost){ if(err || !newsPost){ req.flash('error', 'News Post not found.'); res.redirect('/news'); return; } newsPost.active = false; newsPost.save(function(err){ req.flash('info', 'News Post unpublished.'); res.redirect('/news'); return; }); return; }); }); // (as, populate, title, object, template, varNames, redirect, beforeRender, beforeSave) var as = 'newsPost' , populate = [] , template = 'news/form' , varNames = ['date', 'title', 'text', 'image', 'link'] , redirect = '/news' , formValidate = form( field('text').trim().required(), field('date').trim().isDate(), field('title').trim().required(), // field('image').trim(), field('link').trim().required() ) , beforeRender = function(req, res, item, callback){ /* if(item.newsPost && req.params && req.params.number){ item.newsPost.text = 'This is in reply to confession #'+req.params.number+': '; } item.action = '/confessional'; */ return callback(item); /* return item; */ } , beforeSave = function(req, res, item, complete){ if(req.files && req.files.image && req.files.image.size){ s3.uploadFile(req.files.image, null, function(err, url){ if(err){ console.log('error uploading file: ', err); }else if(url){ item.image = url; } return complete(item); }); }else{ return complete(item); } } , layout = 'layout'; app.get('/news/add', utilities.doForm(as, populate, 'Add News Post', NewsPost, template, varNames, redirect, beforeRender, null, layout)); app.post('/news/add', formValidate, utilities.doForm(as, populate, 'Add News Post', NewsPost, template, varNames, redirect, beforeRender, beforeSave, layout)); app.get('/news/edit/:id', utilities.doForm(as, populate, 'Edit News Post', NewsPost, template, varNames, redirect, beforeRender, null, layout)); app.post('/news/edit/:id', formValidate, utilities.doForm(as, populate, 'Edit News Post', NewsPost, template, varNames, redirect, beforeRender, beforeSave, layout)); }
'use strict'; var form = require('express-form') , field = form.field; module.exports = form( field('slackSetting[slack:clientId]', 'clientId').is(/(\d+)\.(\d+)/).required(), field('slackSetting[slack:clientSecret]', 'clientSecret').required().is(/([0-9a-f]+)/) );
var transfer1Line = transfer1['line'] var transfer2Line = transfer2['line'] var trainHeadStation1 = transfer1['trainHeadStation'] var trainHeadStation2 = transfer2['trainHeadStation'] res.render('trains', {transferO: transferOrigin, transferP: transferPoint, transferD: transferDestination, transferStart: transfer1origTimeMin, transferMid: transfer2origTimeMin, transferEnd: transfer2destTimeMin, origin: origin, dest: destination, fare: fare, origTime: origTimeMin, origDate: origTimeDate, destTime: destTimeMin, destDate: destTimeDate}) } else { res.render('trains', {origin: origin, dest: destination, fare: fare, origTime: origTimeMin, origDate: origTimeDate, destTime: destTimeMin, destDate: destTimeDate}) } } bart.getTimes(req.form.origin, req.form.destination, req.form.time, done); } exports.validateBart = form( field('origin').required('Origin', 'Please enter your current station').toUpper().trim(), field('destination').required('Destination', 'Please enter a destination').toUpper().trim(), field('time').required('Time', 'Please enter a valid #:##am/pm time').trim() ); exports.validateLogin = form( field('email').required('Email', 'Please enter an email').toLower().trim().isEmail('Email address is not valid'), field('password').required('Password', 'Please enter a password') ); exports.validateRegistration = form( field('email').required('Email', 'Please enter an email').toLower().trim().isEmail('Email address is not valid'), field('password').required('Password', 'Please enter a password').minLength(6, 'Passwords must be 6 characters long'), field('name').trim() ) exports.login = function(req, res){
"use strict"; var path = require('path'), form = require('express-form'), field = form.field, mail = require(path.join(__dirname, '..', 'lib', 'mail')); // Form filter and validation middleware exports.formMiddleWare = form( field('name').trim().required().isAlphanumeric(), field('email').trim().required().isEmail(), field('subject').trim().required(), field('text').trim().required() ); exports.contact = function (req, res, next) { // Express request-handler now receives filtered and validated data var errs = [], mailSent = false, key = ''; if (!req.form.isValid) { // pass errors on to user. this are only form errors, not email errors! errs = req.form.errors; } else { //send mail mail.sendMail(req.form, res.locals.config); mailSent = true; //this actually says nothing. emails should be logged before sending. }
module.exports = function(app, db) { var Users = db.model('Users') , access = Users.access; app.get('/login', access(), function(req, res) { res.render('login', { title: "Login" }); }); app.post('/login', access(), form( filter("email").trim() , validate("email").required().isEmail() , filter("password").trim() , validate("password").required() ), function(req, res) { if(!req.form.isValid) { res.render('login', { title: "Login" , email: req.form.email }); } else { Users.authenticate(req.form.email, req.form.password, function(err, user) { if(err) { req.flash('error', err); res.redirect('/login'); } if(user) { req.session.auth = user; Users .findById(req.session.auth._id) .populate('_group') .run(function (err, user) { if(err) { console.log(err); req.flash('error', err); return res.redirect('/'); } if(user) { req.flash('success', 'You have successfully logged in'); if(req.session.redirectTo) { var redirectTo = req.session.redirectTo; delete req.session.redirectTo; res.redirect(redirectTo); } else { res.redirect('/'); /* if(typeof user._group === "undefined") { res.redirect('/'); } else { if(typeof user._group.id !== "undefined" && ((user._group.id === "super_admin") || (user._group.id === "admin"))) { res.redirect('/admin'); } else { res.redirect('/my-account'); } } */ } } else { req.flash('error', 'Your account no longer exists'); res.redirect('/logout'); } }); } }); } }); };
"use strict"; var form = require("express-form"), field = form.field, models = require("../models"), User = models.User, bcrypt = require("bcrypt-nodejs"), auth = require("./auth"); var validator = form( field("email", "Email").trim() .required() .isEmail("Email address is not valid"), field("username", "Username").trim() .required() .isAlphanumeric("Username must contain only alphanumeric characters"), field("password", "Password") .required() .minLength(8, "Password must be at least 8 characters"), field("confirmPassword", "Password confirmation") .required() .equals("field::password", "Passwords do not match") ); module.exports = function(app) { app.get("/signup", function(req, res){ res.render("signup", { title: "Sign Up" }); }); app.post("/signup", validator, function(req, res) {
module.exports = function(app, db) { // ## Check Access var access = require('../schemas/users')(db).access; // ## Pages var Pages = require('../schemas/pages')(db); // ## Routes var routes = { index: function(req, res, next) { // Paginate the results and check for page and limit params var page = (req.param('page')) ? req.param('page') : 0 , limit = (req.param('limit')) ? req.param('limit') : 10; // Load the pages ordered by date created Pages .find({}) .asc('title') //.skip(page * limit) //.limit(limit) .run(function(err, pages) { if(_.isEmpty(pages)) { // Flash message req.flash('notice', 'No pages exist'); res.render('pages', { title: 'Pages' }); } else { // Render the view with pages res.render('pages', { title: 'Pages' , pages: pages , currentPage: page , pageLimit: limit }); } }); } , new: function(req, res, next) { // Render the view with form to create a new page res.render('pages/new', { title: 'Create Page' }); } , create: function(req, res, next) { // Check that form is valid if (!req.form.isValid) { res.render('pages/new', { title: 'Create Page' , form: req.form }); } else { // Create the new page Pages.create(req.form, function(err, page) { if (err) { // err, null if (/duplicate key/.test(err)) { req.flash('error', 'Page already exists with the same title and/or handle'); } else { req.flash('error', err); } res.render('pages/new', { title: 'Create Page' , form: req.form }); } else if (page) { // null, page req.flash('success', 'Page was successfully created'); res.redirect('/pages'); } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/pages/new'); } }); } } , show: function(req, res, next) { // Load the specific page Pages.findOne({ handle: req.param('handle') }, function(err, page) { if (err) { // err, null // Redirect to index of pages req.flash('error', 'No page found with that handle'); res.redirect('/'); } else if (page) { // null, page // Render view to show the page res.render('pages/show', { title: page.title , meta: page.meta , page: page }); } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/'); } }); } , edit: function(req, res, next) { // Load the specific page Pages.findOne({ handle: req.param('handle') }, function(err, page) { if (err) { // err, null req.flash('error', 'No page found with that handle'); res.redirect('/'); } else if (page) { // null, page // Render view to edit the page res.render('pages/edit', { title: 'Edit Page' , form: page }); } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/pages'); } }); } , update: function(req, res, next) { // Check that form is valid if (!req.form.isValid) { res.render('pages/edit/' + req.param('handle'), { title: 'Edit Page' , form: req.form }); } else { // Load the specific page Pages.findOne({ handle: req.param('handle') }, function(err, page) { if (err) { // err, null req.flash('error', 'No page found with that handle'); res.redirect('/pages'); } else if (page) { // null, page // Save the page page.title = req.form.title; page.handle = req.form.page_handle; page.meta = req.form.meta; page.content = req.form.content; page.save(function(err) { if(err) { res.render('/pages/edit/' + req.param('handle'), { title: 'Edit Page' , form: req.form }); } else { req.flash('success', 'Successfully updated page'); res.redirect('/page/' + page.handle); } }); } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/pages'); } }); } } , delete: function(req, res, next) { // Load the specific page Pages.findOne({ handle: req.param('handle') }, function(err, page) { if (err) { // err, null req.flash('error', 'No page found with that handle'); res.redirect('/pages'); } else if (page) { // null, page // Remove the page page.remove(function(err) { if(err) { req.flash('error', 'Page was not removed'); } else { req.flash('success', 'Successfully removed page'); } res.redirect('/pages'); }); } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/pages'); } }); } }; // ## Index app.get('/pages', access(admins), routes.index); // ## New app.get('/pages/new', access(admins), routes.new); // ## Create app.post( '/pages' , access(admins) , form( filter("title") , validate("title").required() , filter("handle") , validate("handle").required() , filter("meta") , filter("content") ) , routes.create ); // ## Show app.get('/page/:handle', checkHandle, routes.show); // ## Edit app.get( '/pages/edit/:handle' , access(admins) , checkHandle , routes.edit); // ## Update app.post( '/pages/update/:handle' , access(admins) , checkHandle , form( filter("title") , validate("title").required() , filter("page_handle") , validate("page_handle").required() , filter("meta") , filter("content") ) , routes.update); // ## Delete app.post('/pages/delete/:handle', access(admins), checkHandle, routes.delete); // ## Paginated Index app.get('/pages/:page/:limit', access(admins), routes.index); };
module.exports = function(app, db) { // ## Schemas var Users = db.model('Users') , access = Users.access(admins); // ## Routes var routes = { index: function(req, res, next) { Users .find({}) .asc('email') .run(function(err, items) { if(_.isEmpty(items)) { req.flash('notice', 'No users exist'); res.render('admin/users', { title: 'Admin - Users' }); } else { res.render('admin/users', { title: 'Admin - Users' , items: items }); } }); } , new: function(req, res, next) { res.render('admin/users/new', { title: 'Create User - Admin' }); } , create: function(req, res, next) { // Check that form is valid if (!req.form.isValid) { res.render('admin/users/new', { title: 'Create User - Admin' , form: req.form }); } else { delete req.form.password_confirmation; // Create the new user Users.create(req.form, function(err, item) { if (err) { // err, null if (/duplicate key/.test(err)) { req.flash('error', 'User already exists with the same email'); } else { req.flash('error', err); } res.render('admin/users/new', { title: 'Create User - Admin' , form: req.form }); } else if (item) { // null, item req.flash('success', 'User was successfully created'); res.redirect('/admin/users'); } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/admin/users/new'); } }); } } , show: function(req, res, next) { // Load the specific user Users.findById(req.param('item_id'), function(err, item) { if (err) { // err, null // Redirect to index of users req.flash('error', 'No user found with that id'); res.redirect('/admin/users'); } else if (item) { // null, item // Render view to show the user res.render('admin/users/show', { title: item.email , item: item }); } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/admin/users'); } }); } , edit: function(req, res, next) { // Load the specific user Users.findById(req.param('item_id'), function(err, item) { if (err) { // err, null req.flash('error', 'No user found with that id'); res.redirect('/admin/users'); } else if (item) { // null, item // Render view to edit the user res.render('admin/users/edit', { title: 'Edit User' , form: item }); } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/admin/users'); } }); } , update: function(req, res, next) { // Check that form is valid if (!req.form.isValid) { res.render('admin/users/edit/' + req.param('item_id'), { title: 'Edit User' , form: req.form }); } else { // Check if user wants to change password if(req.form.password !== "" && req.form.password_confirmation !== "") { if(req.form.password !== req.form.password_confirmation) { req.flash('error', 'Password confirmation does not match entered password, try again'); res.redirect('/admin/users'); } else { delete req.form.password_confirmation; } } else { delete req.form.password; delete req.form.password_confirmation; } // Load the specific user Users.findById(req.param('item_id'), function(err, item) { if (err) { // err, null req.flash('error', 'No user found with that id'); res.redirect('/admin/users'); } else if (item) { // null, item // Iterate through object properties var changed = false; for(var attr in req.form) { if(item[attr] !== req.form[attr]) { if(attr !== "name") { changed = true; item[attr] = req.form[attr]; } else { if(item.name.first !== req.form.name.first) { changed = true; item.name.first = req.form.name.first; } if(item.name.last !== req.form.name.last) { changed = true; item.name.last = req.form.name.last; } } } } if(changed) { // Save the user's object item.save(function(err, item) { if(err) { if(/duplicate key/.test(err)) { req.flash('error', 'An account is already registered for ' + req.form.email); res.render('admin/users/edit/' + req.param('item_id'), { title: 'Edit User' , form: req.form }); } else { req.flash('error', err); res.redirect('/admin/users'); } } else if(item) { req.flash('success', 'Changes to the user\'s account information have been saved'); res.redirect('/admin/users'); } }); } else { req.flash('notice', 'No changes were made to the user\'s information'); res.redirect('/admin/users'); } } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/admin/users'); } }); } } , delete: function(req, res, next) { // Load the specific user Users.findById(req.param('item_id'), function(err, item) { if (err) { // err, null req.flash('error', 'No user found with that id'); res.redirect('/admin/users'); } else if (item) { // null, item // Remove the user item.remove(function(err) { if(err) { req.flash('error', 'User was not removed'); } else { req.flash('success', 'Successfully removed user'); } res.redirect('/admin/users'); }); } else { // null, null req.flash('error', 'An unknown error occured, try again'); res.redirect('/admin/users'); } }); } }; // ## Users // Index app.get('/admin/users', access, routes.index); // New app.get('/admin/users/new', access, routes.new); // Create app.post( '/admin/users' , access , form( filter("package").trim() , validate("package").required().is(/[0-1]/) , filter("email").trim() , validate("email").required().isEmail() , filter("password").trim() , validate("password").required() , filter("password_confirmation").trim() , validate("password_confirmation").required() .equals( "field::password", "Password confirmation does not match entered password, try again") , filter("name.first").trim() , validate("name.first").required() , filter("name.last").trim() , validate("name.last").required() , filter("company").trim() , validate("company").required() ) , routes.create ); // Show app.get('/admin/users/:item_id', access, checkItemId, routes.show); // Edit app.get('/admin/users/edit/:item_id', access, checkItemId, routes.edit); // Update app.post( '/admin/users/update/:item_id' , access , checkItemId , form( filter("email").trim() , validate("email").required().isEmail() , filter("password").trim() , filter("password_confirmation").trim() , filter("name.first").trim() , validate("name.first").required() , filter("name.last").trim() , validate("name.last").required() , filter("company").trim() , validate("company").required() ) , routes.update ); // Delete app.post('/admin/users/delete/:item_id', access, checkItemId, routes.delete); };
}); }); router.get('/events', auth.getUserRoles, function(req, res, next) { res.render('events/event-list', { module: 'events', events: Event.find().populate('venue'), roles: req._roles }); }); router.post('/events', form( field("name").trim().required().is(/^[\w]+$/), field("start-date").trim(), field("start-time").trim(), field("end-date").trim(), field("end-time").trim(), field("venue").trim(), field("description") ), function(req, res, next) { var start_date = new Date(req.form['start-date'] + ' ' + req.form['start-time']); var end_date = new Date(req.form['end-date'] + ' ' + req.form['end-time']); var params = { name: req.form.name, date: { start: start_date, end: end_date }, venue: req.form.venue, description: req.form.description }
function(data) { response.send(data); } ); }); app.delete("/songs/:id", function(request, response){ var id = request.params.id; console.log('Deleting song: '+ id) mongoModel.delete('songs', id, function(data){ console.log('deleted ' + id + ':'+ data) }); }) app.post("/songs", form( field("artist").trim().required(), field("song").trim().required() ), function(request, response){ if (!request.form.isValid) { // Handle errors response.send(request.form.errors); } else { // Or, use filtered form data from the form object: console.log("artist:", request.form.artist); console.log("song:", request.form.song); mongoModel.save('songs', { 'artist' : request.form.artist, 'song' : request.form.song },