Advertisement
Guest User

Untitled

a guest
Sep 2nd, 2016
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.15 KB | None | 0 0
  1. enter code here var express = require('express');
  2. var favicon = require('serve-favicon');
  3. var path = require('path');
  4. var logger = require('morgan');
  5. var cookieParser = require('cookie-parser');
  6. bodyParser = require('body-parser');
  7. var session = require('express-session')
  8. var mongoose = require('mongoose');
  9. var nodemailer = require('nodemailer');
  10. var passport = require('passport');
  11. var LocalStrategy = require('passport-local').Strategy;
  12. var bcrypt = require('bcrypt-nodejs');
  13. var async = require('async');
  14. var crypto = require('crypto');
  15. var flash = require('express-flash');
  16. var router = express.Router();
  17. var fs = require('fs');
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26. passport.use(new LocalStrategy(function(username, password, done) {
  27. User.findOne({ username: username }, function(err, user) {
  28. if (err) return done(err);
  29. if (!user) return done(null, false, { message: 'Incorrect username.' });
  30. user.comparePassword(password, function(err, isMatch) {
  31. if (isMatch) {
  32. return done(null, user);
  33. } else {
  34. return done(null, false, { message: 'Incorrect password.' });
  35. }
  36. });
  37. });
  38. }));
  39.  
  40. passport.serializeUser(function(user, done) {
  41. done(null, user.id);
  42. });
  43.  
  44. passport.deserializeUser(function(id, done) {
  45. User.findById(id, function(err, user) {
  46. done(err, user);
  47. });
  48. });
  49.  
  50.  
  51.  
  52. var userSchema = new mongoose.Schema({
  53. username: { type: String, required: true, unique: true },
  54. email: { type: String, required: true, unique: true },
  55. password: { type: String, required: true },
  56. resetPasswordToken: String,
  57. resetPasswordExpires: Date
  58. });
  59.  
  60. var createSchema = new mongoose.Schema({
  61. cname: {type: String, unique: true, sparse: true},
  62. aname : {type: String, unique: true, sparse: true},
  63. ausername : String,
  64. pname : {type: String, unique: true, sparse: true},
  65. pusername : String
  66.  
  67. });
  68.  
  69.  
  70.  
  71. /*// on every save, add the date
  72. createSchema.pre('save', function(next) {
  73.  
  74. // get the current date
  75. var currentDate = new Date();
  76.  
  77. // change the updated_at field to current date
  78. this.updated_at = currentDate;
  79.  
  80. // if created_at doesn't exist, add to that field
  81. if (!this.created_at)
  82. this.created_at = currentDate;
  83.  
  84. next();
  85. });
  86. */
  87.  
  88. userSchema.pre('save', function(next) {
  89. var user = this;
  90. var SALT_FACTOR = 5;
  91.  
  92. if (!user.isModified('password')) return next();
  93.  
  94. bcrypt.genSalt(SALT_FACTOR, function(err, salt) {
  95. if (err) return next(err);
  96.  
  97. bcrypt.hash(user.password, salt, null, function(err, hash) {
  98. if (err) return next(err);
  99. user.password = hash;
  100. next();
  101. });
  102. });
  103. });
  104.  
  105. userSchema.methods.comparePassword = function(candidatePassword, cb) {
  106. bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
  107. if (err) return cb(err);
  108. cb(null, isMatch);
  109. });
  110. };
  111.  
  112.  
  113.  
  114.  
  115.  
  116. var User = mongoose.model('User', userSchema);
  117. var Create = mongoose.model('Create', createSchema);
  118.  
  119. mongoose.connect('localhost');
  120.  
  121. var app = express();
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128. // Middleware
  129. app.set('port', process.env.PORT || 3000);
  130. app.set('views', path.join(__dirname, 'views'));
  131. app.set('view engine', 'jade');
  132. app.use(logger('dev'));
  133. app.use(bodyParser.json());
  134. app.use(bodyParser.urlencoded({ extended: true }));
  135. app.use(cookieParser());
  136. app.use(session({
  137. secret:'keyboard cat',
  138. // connect-mongo session store
  139. proxy: true,
  140. resave: true,
  141. saveUninitialized: true
  142. }));
  143. app.use(flash());
  144. app.use(passport.initialize());
  145. app.use(passport.session());
  146. app.use(express.static(path.join(__dirname,'/public')));
  147. app.use('/img',express.static(path.join(__dirname, 'public/images')));
  148.  
  149.  
  150. // Routes
  151.  
  152. app.get('/images/programming.gif', function(req, res){
  153. res.sendFile(__dirname + '/public/images/programming.gif');
  154. });
  155.  
  156.  
  157. app.get('/', function(req, res){
  158. res.render('index', {
  159. title: 'SDE Tracker',
  160. user: req.user
  161. });
  162. });
  163.  
  164. app.get('/login', function(req, res) {
  165. res.render('login', {
  166. user: req.user
  167. });
  168. });
  169.  
  170. app.get('/home', function(req, res) {
  171. res.render('home', {
  172. user: req.user
  173. });
  174. });
  175.  
  176. app.get('/Account', function(req, res) {
  177. res.render('Account', {
  178. user: req.user
  179. });
  180. });
  181.  
  182. app.get('/Project', function(req, res) {
  183. res.render('Project', {
  184. user: req.user
  185. });
  186. });
  187.  
  188. app.get('/signup', function(req, res) {
  189. res.render('signup', {
  190. user: req.user
  191. });
  192. });
  193.  
  194. app.get('/logout', function(req, res){
  195. req.logout();
  196. res.redirect('/');
  197. });
  198.  
  199.  
  200. app.get('/forgot', function(req, res) {
  201. res.render('forgot', {
  202. user: req.user
  203. });
  204. });
  205.  
  206. app.get('/reset/:token', function(req, res) {
  207. User.findOne({ resetPasswordToken: req.params.token,
  208.  
  209. resetPasswordExpires:
  210.  
  211. { $gt: Date.now() } }, function(err, user) {
  212. if (!user) {
  213. req.flash('error', 'Password reset token is invalid or has expired.');
  214. return res.redirect('/forgot');
  215. }
  216. res.render('reset', {
  217. user: req.user
  218. });
  219. });
  220. });
  221.  
  222.  
  223. app.post('/home', function(req,res){
  224.  
  225. });
  226.  
  227. app.post('/Account', function(req,res,next){
  228. var create = new Create({
  229. cname:req.body.cname,
  230. aname:req.body.aname,
  231. ausername:req.body.ausername
  232.  
  233. });
  234. create.save(function(err, doc){
  235. if(err) res.json(err)
  236. else res.redirect('/home');
  237.  
  238.  
  239. });
  240.  
  241.  
  242. });
  243.  
  244. app.post('/Project', function(req,res,next){
  245. var create = new Create({
  246. aname:req.body.aname,
  247. pname:req.body.pname,
  248. pusername:req.body.pusername
  249. });
  250. create.save(function(err,doc) {
  251. if(err) res.json(err)
  252. else res.redirect('/home');
  253. });
  254. });
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262. app.post('/login', function(req, res, next) {
  263. passport.authenticate('local', function(err, user, info) {
  264. if (err) return next(err)
  265. if (!user) {
  266. return res.redirect('/login')
  267. }
  268. req.logIn(user, function(err) {
  269. if (err) return next(err);
  270. return res.redirect('/home');
  271. });
  272. })(req, res, next);
  273. });
  274.  
  275. app.post('/signup', function(req, res) {
  276. var user = new User({
  277. username: req.body.username,
  278. email: req.body.email,
  279. password: req.body.password
  280. });
  281.  
  282. user.save(function(err) {
  283. req.logIn(user, function(err) {
  284. res.redirect('/');
  285. });
  286. });
  287. });
  288.  
  289. app.post('/forgot', function(req, res, next) {
  290. async.waterfall([
  291. function(done) {
  292. crypto.randomBytes(20, function(err, buf) {
  293. var token = buf.toString('hex');
  294. done(err, token);
  295. });
  296. },
  297. function(token, done) {
  298. User.findOne({ email: req.body.email }, function(err, user) {
  299. if (!user) {
  300. req.flash('error', 'No account with that email address exists.');
  301. return res.redirect('/forgot');
  302. }
  303.  
  304. user.resetPasswordToken = token;
  305. user.resetPasswordExpires = Date.now() + 3600000; // 1 hour
  306.  
  307. user.save(function(err) {
  308. done(err, token, user);
  309. });
  310. });
  311. },
  312. function(token, user, done) {
  313. var smtpTransport = nodemailer.createTransport('SMTP', {
  314. service: 'SendGrid',
  315. auth: {
  316. user: '!!! YOUR SENDGRID USERNAME !!!',
  317. pass: '!!! YOUR SENDGRID PASSWORD !!!'
  318. }
  319. });
  320. var mailOptions = {
  321. to: user.email,
  322. from: 'passwordreset@demo.com',
  323. subject: 'Node.js Password Reset',
  324. text: 'You are receiving this because you (or someone else) have
  325.  
  326. requested the reset of the password for your account.nn' +
  327. 'Please click on the following link, or paste this into your browser
  328.  
  329. to complete the process:nn' +
  330. 'http://' + req.headers.host + '/reset/' + token + 'nn' +
  331. 'If you did not request this, please ignore this email and your
  332.  
  333. password will remain unchanged.n'
  334. };
  335. smtpTransport.sendMail(mailOptions, function(err) {
  336. req.flash('info', 'An e-mail has been sent to ' + user.email + ' with
  337.  
  338. further instructions.');
  339. done(err, 'done');
  340. });
  341. }
  342. ], function(err) {
  343. if (err) return next(err);
  344. res.redirect('/forgot');
  345. });
  346. });
  347.  
  348.  
  349. app.post('/reset/:token', function(req, res) {
  350. async.waterfall([
  351. function(done) {
  352. User.findOne({ resetPasswordToken: req.params.token, resetPasswordExpires:
  353.  
  354. { $gt: Date.now() } }, function(err, user) {
  355. if (!user) {
  356. req.flash('error', 'Password reset token is invalid or has expired.');
  357. return res.redirect('back');
  358. }
  359.  
  360. user.password = req.body.password;
  361. user.resetPasswordToken = undefined;
  362. user.resetPasswordExpires = undefined;
  363.  
  364. user.save(function(err) {
  365. req.logIn(user, function(err) {
  366. done(err, user);
  367. });
  368. });
  369. });
  370. },
  371. function(user, done) {
  372. var smtpTransport = nodemailer.createTransport('SMTP', {
  373. service: 'SendGrid',
  374. auth: {
  375. user: '!!! YOUR SENDGRID USERNAME !!!',
  376. pass: '!!! YOUR SENDGRID PASSWORD !!!'
  377. }
  378. });
  379. var mailOptions = {
  380. to: user.email,
  381. from: 'passwordreset@demo.com',
  382. subject: 'Your password has been changed',
  383. text: 'Hello,nn' +
  384. 'This is a confirmation that the password for your account ' +
  385.  
  386. user.email + ' has just been changed.n'
  387. };
  388. smtpTransport.sendMail(mailOptions, function(err) {
  389. req.flash('success', 'Success! Your password has been changed.');
  390. done(err);
  391. });
  392. }
  393. ], function(err) {
  394. res.redirect('/');
  395. });
  396. });
  397.  
  398.  
  399.  
  400. // Server
  401.  
  402.  
  403. app.listen(app.get('port'), function() {
  404. console.log('Express server listening on port ' + app.get('port'));
  405. });
  406.  
  407. module.exports = app;
  408.  
  409.  
  410.  
  411. *account.jade is not in the suitable format
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement