Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var express = require('express');
- var path = require('path');
- var favicon = require('serve-favicon');
- var logger = require('morgan');
- var cookieParser = require('cookie-parser');
- var bodyParser = require('body-parser');
- var exphbs = require('express-handlebars');
- var expressValidator = require('express-validator');
- var flash = require('connect-flash');
- var session = require('express-session');
- var passport = require('passport');
- var LocalStrategy = require('passport-local').Strategy;
- var mongo = require('mongodb');
- var mongoose = require('mongoose');
- mongoose.connect('mongodb://localhost/elearn');
- var db = mongoose.connection;
- async = require('async');
- var routes = require('./routes/index');
- var users = require('./routes/users');
- var classes = require('./routes/classes');
- var students = require('./routes/students');
- var instructors = require('./routes/instructors');
- var app = express();
- // view engine setup
- app.set('views', path.join(__dirname, 'views'));
- app.engine('handlebars', exphbs({
- defaultLayout: 'layout'
- }));
- app.set('view engine', 'handlebars');
- // uncomment after placing your favicon in /public
- //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
- app.use(logger('dev'));
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded({ extended: false }));
- app.use(cookieParser());
- app.use(express.static(path.join(__dirname, 'public')));
- app.use(session({
- secret: 'secret',
- saveUninitialized: true,
- resave: true
- }));
- // Passport
- app.use(passport.initialize());
- app.use(passport.session());
- // Validator
- app.use(expressValidator({
- errorFormatter: function(param, msg, value) {
- var namespace = param.split('.'),
- root = namespace.shift(),
- formParam = root;
- while(namespace.length) {
- formParam += '[' + namespace.shift() + ']';
- }
- return {
- param : formParam,
- msg : msg,
- value : value
- };
- }
- }));
- app.use(flash());
- app.use(function(req, res, next){
- res.locals.messages = require('express-messages')(req, res);
- if(req.url == '/'){
- res.locals.isHome = true;
- }
- next();
- });
- app.get('*', function(req, res, next){
- res.locals.user = req.user || null;
- if(req.user){
- res.locals.usertype = req.user.type;
- }
- next();
- });
- app.use('/', routes);
- app.use('/users', users);
- app.use('/classes', classes);
- app.use('/students', students);
- app.use('/instructors', instructors);
- // catch 404 and forward to error handler
- app.use(function(req, res, next) {
- var err = new Error('Not Found');
- err.status = 404;
- next(err);
- });
- // error handlers
- // development error handler
- // will print stacktrace
- if (app.get('env') === 'development') {
- app.use(function(err, req, res, next) {
- console.error(err.stack);
- res.status(err.status || 500);
- res.render('error', {
- message: err.message,
- error: err
- });
- });
- }
- // production error handler
- // no stacktraces leaked to user
- app.use(function(err, req, res, next) {
- res.status(err.status || 500);
- res.render('error', {
- message: err.message,
- error: {}
- });
- });
- module.exports = app;
- var express = require('express'); var router = express.Router(); var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy;
- var User = require('../models/user'); var Student = require('../models/student'); var Instructor = require('../models/instructor');
- /* GET users listing. */ router.get('/signup', function(req, res, next) { res.render('users/signup'); });
- router.post('/signup', function(req, res, next) {
- // Get Form values
- var first_name = req.body.first_name;
- var last_name = req.body.last_name;
- var street_address = req.body.street_address;
- var city = req.body.city;
- var state = req.body.state;
- var zip = req.body.zip;
- var email = req.body.email;
- var username = req.body.username;
- var password = req.body.password;
- var password2 = req.body.password2;
- var type = req.body.type;
- // console.log('first_name ' + first_name);
- // console.log('last_name ' + last_name);
- // console.log('zip ' + zip);
- // console.log('email ' + email);
- //
- // console.log('username ' + username);
- // console.log('password1 ' + password);
- // console.log('password2 ' + password2);
- // Form Field Validation
- req.checkBody('first_name', 'First name field is required').notEmpty();
- req.checkBody('last_name', 'Last name field is required').notEmpty();
- req.checkBody('email', 'Email field is required').notEmpty();
- req.checkBody('email', 'Email must be a valid email address').isEmail();
- req.checkBody('username', 'Usrname field is required').notEmpty();
- req.checkBody('password', 'Password field is required').notEmpty();
- req.checkBody('password2', 'Passwords do not match').equals(req.body.password);
- var errors = req.validationErrors();
- if (errors){
- res.render('users/signup', {
- errors: errors,
- first_name: first_name,
- last_name: last_name,
- street_address: street_address,
- city: city,
- state: state,
- zip: zip,
- email: email,
- username: username,
- password: password,
- password2: password2
- });
- } else {
- var newUser = User({
- email: email,
- username: username,
- password: password,
- type: type
- });
- var newStudent = new Student({
- first_name: first_name,
- last_name: last_name,
- address: [{
- street_address: street_address,
- city: city,
- state: state,
- zip: zip
- }],
- email: email,
- username: username
- });
- var newInstructor = new Instructor({
- first_name: first_name,
- last_name: last_name,
- address: [{
- street_address: street_address,
- city: city,
- state: state,
- zip: zip
- }],
- email: email,
- username: username
- });
- if(type == 'student'){
- User.saveStudent(newUser, newStudent, function(err, user){
- console.log('Student created');
- });
- } else {
- User.saveInstructor(newUser, newInstructor, function(err, user){
- console.log('Instructor created');
- });
- }
- req.flash('success', 'User added');
- res.redirect('/');
- } });
- passport.serializeUser(function(user, done){
- done(null, user._id); });
- passport.deserializeUser(function(id, done){
- User.getUserById(id, function(err, user){
- done(err, user);
- }); });
- module.exports = router;
- <h2>Create An Account</h2>
- <form id="regForm" method="post" action="/users/signup">
- <div>
- <label>Account Type</label>
- <select name="type">
- <option value="student">Student</option>
- <option value="instructor">instructor</option>
- </select>
- </div>
- <div>
- <label>First Name:</label>
- <input type="text" name="first_name" value="{{first_name}}">
- </div>
- <div>
- <label>Last Name:</label>
- <input type="text" name="last_name" value="{{last_name}}">
- </div>
- <div>
- <label>Street Address:</label>
- <input type="text" name="street_address" value="{{street_address}}">
- </div>
- <div>
- <label>City:</label>
- <input type="text" name="city" value="{{city}}">
- </div>
- <div>
- <label>State:</label>
- <input type="text" name="state" value="{{state}}">
- </div>
- <div>
- <label>Zip:</label>
- <input type="text" name="zip" value="{{zip}}">
- </div>
- <div>
- <label>Email Address:</label>
- <input type="text" name="email" value="{{email}}">
- </div>
- <div>
- <label>Username:</label>
- <input type="text" name="username" value="{{username}}">
- </div>
- <div>
- <label>Password:</label>
- <input type="password" name="password" value="{{password}}">
- </div>
- <div>
- <label>Password Confirm:</label>
- <input type="password" name="password2" value="{{password2}}">
- </div>
- <div>
- <input type="submit" value="Signup">
- </div>
- </form>
- var mongoose = require('mongoose');
- var bcrypt = require('bcryptjs');
- // User Schema
- var userSchema = mongoose.Schema({
- username: {
- type: String
- },
- email: {
- type: String
- },
- password:{
- type: String,
- bcrypt: true
- },
- type:{
- type: String
- }
- });
- var User = module.exports = mongoose.model('User', userSchema);
- // Fetch All Classes
- module.exports.getUserById = function(id, callback){
- User.findById(id, callback);
- };
- // Fetch Single Class
- module.exports.getUserByUsername = function(username, callback){
- var query = {username: username};
- User.findOne(query, callback);
- };
- // Save Student
- module.exports.saveStudent = function(newUser, newStudent, callback){
- bcrypt.hash(newUser.password, 10, function(err, hash){
- if(err) throw err;
- newUser.password = hash;
- console.log('Student is being saved');
- async.parallel([newUser.save, newStudent.save], callback);
- });
- };
- // Save Instructor
- module.exports.saveInstructor = function(newUser, newInstructor, callback){
- bcrypt.hash(newUser.password, 10, function(err, hash){
- if(err) throw err;
- newUser.password = hash;
- console.log('Instructor is being saved');
- async.parallel([newUser.save, newInstructor.save], callback);
- });
- };
- // comparePassword
- module.exports.comparePassword = function(candidatePassword, hash, callback){
- bcrypt.compare(candidatePassword, hash, function(err, isMatch){
- if(err){
- throw err;
- }
- callback(null, isMatch);
- });
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement