Advertisement
Guest User

Untitled

a guest
Oct 12th, 2016
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.70 KB | None | 0 0
  1. var express = require('express');
  2. var path = require('path');
  3. var favicon = require('serve-favicon');
  4. var logger = require('morgan');
  5. var cookieParser = require('cookie-parser');
  6. var bodyParser = require('body-parser');
  7. var exphbs = require('express-handlebars');
  8. var expressValidator = require('express-validator');
  9. var flash = require('connect-flash');
  10. var session = require('express-session');
  11. var passport = require('passport');
  12. var LocalStrategy = require('passport-local').Strategy;
  13. var mongo = require('mongodb');
  14. var mongoose = require('mongoose');
  15. mongoose.connect('mongodb://localhost/elearn');
  16. var db = mongoose.connection;
  17. async = require('async');
  18.  
  19.  
  20.  
  21. var routes = require('./routes/index');
  22. var users = require('./routes/users');
  23. var classes = require('./routes/classes');
  24. var students = require('./routes/students');
  25. var instructors = require('./routes/instructors');
  26.  
  27. var app = express();
  28.  
  29. // view engine setup
  30. app.set('views', path.join(__dirname, 'views'));
  31. app.engine('handlebars', exphbs({
  32. defaultLayout: 'layout'
  33. }));
  34. app.set('view engine', 'handlebars');
  35.  
  36.  
  37. // uncomment after placing your favicon in /public
  38. //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  39. app.use(logger('dev'));
  40. app.use(bodyParser.json());
  41. app.use(bodyParser.urlencoded({ extended: false }));
  42. app.use(cookieParser());
  43. app.use(express.static(path.join(__dirname, 'public')));
  44.  
  45. app.use(session({
  46. secret: 'secret',
  47. saveUninitialized: true,
  48. resave: true
  49. }));
  50.  
  51. // Passport
  52. app.use(passport.initialize());
  53. app.use(passport.session());
  54.  
  55.  
  56. // Validator
  57. app.use(expressValidator({
  58. errorFormatter: function(param, msg, value) {
  59. var namespace = param.split('.'),
  60. root = namespace.shift(),
  61. formParam = root;
  62.  
  63. while(namespace.length) {
  64. formParam += '[' + namespace.shift() + ']';
  65. }
  66. return {
  67. param : formParam,
  68. msg : msg,
  69. value : value
  70. };
  71. }
  72. }));
  73.  
  74. app.use(flash());
  75.  
  76. app.use(function(req, res, next){
  77. res.locals.messages = require('express-messages')(req, res);
  78.  
  79. if(req.url == '/'){
  80. res.locals.isHome = true;
  81. }
  82. next();
  83. });
  84.  
  85. app.get('*', function(req, res, next){
  86. res.locals.user = req.user || null;
  87. if(req.user){
  88. res.locals.usertype = req.user.type;
  89. }
  90. next();
  91. });
  92.  
  93. app.use('/', routes);
  94. app.use('/users', users);
  95. app.use('/classes', classes);
  96. app.use('/students', students);
  97. app.use('/instructors', instructors);
  98.  
  99. // catch 404 and forward to error handler
  100. app.use(function(req, res, next) {
  101. var err = new Error('Not Found');
  102. err.status = 404;
  103. next(err);
  104. });
  105.  
  106. // error handlers
  107.  
  108. // development error handler
  109. // will print stacktrace
  110. if (app.get('env') === 'development') {
  111. app.use(function(err, req, res, next) {
  112. console.error(err.stack);
  113. res.status(err.status || 500);
  114. res.render('error', {
  115. message: err.message,
  116. error: err
  117. });
  118. });
  119. }
  120.  
  121. // production error handler
  122. // no stacktraces leaked to user
  123. app.use(function(err, req, res, next) {
  124. res.status(err.status || 500);
  125. res.render('error', {
  126. message: err.message,
  127. error: {}
  128. });
  129. });
  130.  
  131.  
  132. module.exports = app;
  133.  
  134. var express = require('express'); var router = express.Router(); var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy;
  135.  
  136. var User = require('../models/user'); var Student = require('../models/student'); var Instructor = require('../models/instructor');
  137.  
  138. /* GET users listing. */ router.get('/signup', function(req, res, next) { res.render('users/signup'); });
  139.  
  140. router.post('/signup', function(req, res, next) {
  141.  
  142. // Get Form values
  143. var first_name = req.body.first_name;
  144. var last_name = req.body.last_name;
  145. var street_address = req.body.street_address;
  146. var city = req.body.city;
  147. var state = req.body.state;
  148. var zip = req.body.zip;
  149. var email = req.body.email;
  150. var username = req.body.username;
  151. var password = req.body.password;
  152. var password2 = req.body.password2;
  153. var type = req.body.type;
  154.  
  155. // console.log('first_name ' + first_name);
  156. // console.log('last_name ' + last_name);
  157. // console.log('zip ' + zip);
  158. // console.log('email ' + email);
  159. //
  160. // console.log('username ' + username);
  161. // console.log('password1 ' + password);
  162. // console.log('password2 ' + password2);
  163.  
  164. // Form Field Validation
  165. req.checkBody('first_name', 'First name field is required').notEmpty();
  166. req.checkBody('last_name', 'Last name field is required').notEmpty();
  167. req.checkBody('email', 'Email field is required').notEmpty();
  168. req.checkBody('email', 'Email must be a valid email address').isEmail();
  169. req.checkBody('username', 'Usrname field is required').notEmpty();
  170. req.checkBody('password', 'Password field is required').notEmpty();
  171. req.checkBody('password2', 'Passwords do not match').equals(req.body.password);
  172.  
  173. var errors = req.validationErrors();
  174.  
  175. if (errors){
  176. res.render('users/signup', {
  177. errors: errors,
  178. first_name: first_name,
  179. last_name: last_name,
  180. street_address: street_address,
  181. city: city,
  182. state: state,
  183. zip: zip,
  184. email: email,
  185. username: username,
  186. password: password,
  187. password2: password2
  188. });
  189. } else {
  190.  
  191. var newUser = User({
  192. email: email,
  193. username: username,
  194. password: password,
  195. type: type
  196. });
  197.  
  198. var newStudent = new Student({
  199. first_name: first_name,
  200. last_name: last_name,
  201. address: [{
  202. street_address: street_address,
  203. city: city,
  204. state: state,
  205. zip: zip
  206. }],
  207. email: email,
  208. username: username
  209. });
  210.  
  211. var newInstructor = new Instructor({
  212. first_name: first_name,
  213. last_name: last_name,
  214. address: [{
  215. street_address: street_address,
  216. city: city,
  217. state: state,
  218. zip: zip
  219. }],
  220. email: email,
  221. username: username
  222. });
  223.  
  224. if(type == 'student'){
  225. User.saveStudent(newUser, newStudent, function(err, user){
  226. console.log('Student created');
  227. });
  228. } else {
  229. User.saveInstructor(newUser, newInstructor, function(err, user){
  230. console.log('Instructor created');
  231. });
  232. }
  233.  
  234. req.flash('success', 'User added');
  235. res.redirect('/');
  236. } });
  237.  
  238. passport.serializeUser(function(user, done){
  239. done(null, user._id); });
  240.  
  241. passport.deserializeUser(function(id, done){
  242. User.getUserById(id, function(err, user){
  243. done(err, user);
  244. }); });
  245.  
  246. module.exports = router;
  247.  
  248. <h2>Create An Account</h2>
  249. <form id="regForm" method="post" action="/users/signup">
  250.  
  251. <div>
  252. <label>Account Type</label>
  253. <select name="type">
  254. <option value="student">Student</option>
  255. <option value="instructor">instructor</option>
  256. </select>
  257. </div>
  258.  
  259. <div>
  260. <label>First Name:</label>
  261. <input type="text" name="first_name" value="{{first_name}}">
  262. </div>
  263.  
  264. <div>
  265. <label>Last Name:</label>
  266. <input type="text" name="last_name" value="{{last_name}}">
  267. </div>
  268.  
  269. <div>
  270. <label>Street Address:</label>
  271. <input type="text" name="street_address" value="{{street_address}}">
  272. </div>
  273.  
  274. <div>
  275. <label>City:</label>
  276. <input type="text" name="city" value="{{city}}">
  277. </div>
  278.  
  279. <div>
  280. <label>State:</label>
  281. <input type="text" name="state" value="{{state}}">
  282. </div>
  283.  
  284. <div>
  285. <label>Zip:</label>
  286. <input type="text" name="zip" value="{{zip}}">
  287. </div>
  288.  
  289. <div>
  290. <label>Email Address:</label>
  291. <input type="text" name="email" value="{{email}}">
  292. </div>
  293.  
  294. <div>
  295. <label>Username:</label>
  296. <input type="text" name="username" value="{{username}}">
  297. </div>
  298.  
  299. <div>
  300. <label>Password:</label>
  301. <input type="password" name="password" value="{{password}}">
  302. </div>
  303.  
  304. <div>
  305. <label>Password Confirm:</label>
  306. <input type="password" name="password2" value="{{password2}}">
  307. </div>
  308.  
  309. <div>
  310. <input type="submit" value="Signup">
  311. </div>
  312.  
  313. </form>
  314.  
  315. var mongoose = require('mongoose');
  316. var bcrypt = require('bcryptjs');
  317.  
  318. // User Schema
  319.  
  320. var userSchema = mongoose.Schema({
  321. username: {
  322. type: String
  323. },
  324. email: {
  325. type: String
  326. },
  327. password:{
  328. type: String,
  329. bcrypt: true
  330. },
  331. type:{
  332. type: String
  333. }
  334. });
  335.  
  336. var User = module.exports = mongoose.model('User', userSchema);
  337.  
  338.  
  339. // Fetch All Classes
  340. module.exports.getUserById = function(id, callback){
  341. User.findById(id, callback);
  342. };
  343.  
  344. // Fetch Single Class
  345. module.exports.getUserByUsername = function(username, callback){
  346. var query = {username: username};
  347. User.findOne(query, callback);
  348. };
  349.  
  350. // Save Student
  351. module.exports.saveStudent = function(newUser, newStudent, callback){
  352. bcrypt.hash(newUser.password, 10, function(err, hash){
  353. if(err) throw err;
  354.  
  355. newUser.password = hash;
  356. console.log('Student is being saved');
  357. async.parallel([newUser.save, newStudent.save], callback);
  358. });
  359. };
  360.  
  361. // Save Instructor
  362. module.exports.saveInstructor = function(newUser, newInstructor, callback){
  363. bcrypt.hash(newUser.password, 10, function(err, hash){
  364. if(err) throw err;
  365.  
  366. newUser.password = hash;
  367. console.log('Instructor is being saved');
  368. async.parallel([newUser.save, newInstructor.save], callback);
  369. });
  370. };
  371.  
  372. // comparePassword
  373. module.exports.comparePassword = function(candidatePassword, hash, callback){
  374. bcrypt.compare(candidatePassword, hash, function(err, isMatch){
  375. if(err){
  376. throw err;
  377. }
  378.  
  379. callback(null, isMatch);
  380. });
  381. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement