Advertisement
Guest User

Untitled

a guest
Jun 6th, 2016
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.62 KB | None | 0 0
  1. require('dotenv').load();
  2. var express = require('express');
  3. var path = require('path');
  4. var favicon = require('serve-favicon');
  5. var logger = require('morgan');
  6. var cookieParser = require('cookie-parser');
  7. var bodyParser = require('body-parser');
  8. var uglifyJs = require("uglify-js");
  9. var fs = require('fs');
  10. var passport = require('passport');
  11.  
  12. require('./app_api/models/db');
  13. require('./app_api/config/passport');
  14.  
  15. var routes = require('./app_server/routes/index');
  16. var routesApi = require('./app_api/routes/index');
  17. // var users = require('./app_server/routes/users');
  18.  
  19. var app = express();
  20.  
  21. // view engine setup
  22. app.set('views', path.join(__dirname, 'app_server', 'views'));
  23. app.set('view engine', 'jade');
  24.  
  25. var appClientFiles = [
  26. 'app_client/app.js',
  27. 'app_client/home/home.controller.js',
  28. 'app_client/about/about.controller.js',
  29. 'app_client/locationDetail/locationDetail.controller.js',
  30. 'app_client/reviewModal/reviewModal.controller.js',
  31. 'app_client/common/services/geolocation.service.js',
  32. 'app_client/common/services/loc8rData.service.js',
  33. 'app_client/common/filters/formatDistance.filter.js',
  34. 'app_client/common/filters/addHtmlLineBreaks.filter.js',
  35. 'app_client/common/directives/navigation/navigation.directive.js',
  36. 'app_client/common/directives/footerGeneric/footerGeneric.directive.js',
  37. 'app_client/common/directives/pageHeader/pageHeader.directive.js',
  38. 'app_client/common/directives/ratingStars/ratingStars.directive.js'
  39. ];
  40. var uglified = uglifyJs.minify(appClientFiles, { compress : false });
  41.  
  42. fs.writeFile('public/angular/loc8r.min.js', uglified.code, function(err) {
  43. if(err) {
  44. console.log(err);
  45. } else {
  46. console.log('Script generated and saved: loc8r.min.js');
  47. }
  48. });
  49.  
  50. // app.locals.pretty = true;
  51.  
  52. // uncomment after placing your favicon in /public
  53. //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  54. app.use(logger('dev'));
  55. app.use(bodyParser.json());
  56. app.use(bodyParser.urlencoded({ extended: false }));
  57. app.use(cookieParser());
  58. app.use(express.static(path.join(__dirname, 'public')));
  59. app.use(express.static(path.join(__dirname, 'app_client')));
  60.  
  61. app.use(passport.initialize());
  62.  
  63. // app.use('/', routes);
  64. app.use('/api', routesApi);
  65. app.use('/users', users);
  66.  
  67. app.use(function(req, res) {
  68. res.sendFile(path.join(__dirname, 'app_client', 'index.html'));
  69. });
  70.  
  71. // catch 404 and forward to error handler
  72. app.use(function(req, res, next) {
  73. var err = new Error('Not Found');
  74. err.status = 404;
  75. next(err);
  76. });
  77.  
  78. // error handlers
  79.  
  80. // development error handler
  81. // will print stacktrace
  82. if (app.get('env') === 'development') {
  83. app.use(function(err, req, res, next) {
  84. res.status(err.status || 500);
  85. res.render('error', {
  86. message: err.message,
  87. error: err
  88. });
  89. });
  90. }
  91.  
  92. // production error handler
  93. // no stacktraces leaked to user
  94. app.use(function(err, req, res, next) {
  95. res.status(err.status || 500);
  96. res.render('error', {
  97. message: err.message,
  98. error: {}
  99. });
  100. });
  101.  
  102.  
  103. module.exports = app;
  104.  
  105. var mongoose = require('mongoose');
  106. var gracefulShutdown;
  107. var dbURI = 'mongodb://localhost/Loc8r';
  108.  
  109. if (process.env.NODE_ENV === 'production') {
  110. dbURI = process.env.MONGOLAB_URI;
  111. }
  112. mongoose.connect(dbURI);
  113.  
  114. // Emulate SIGINT signal for Windows
  115. var readLine = require('readline');
  116. if (process.platform === "win32") {
  117. var rl = readLine.createInterface ({
  118. input: process.stdin,
  119. output: process.stdout
  120. });
  121. rl.on ('SIGINT', function() {
  122. process.emit ("SIGINT");
  123. });
  124. }
  125.  
  126. mongoose.connection.on('connected', function() {
  127. console.log('Mongoose connected to ' + dbURI);
  128. });
  129. mongoose.connection.on('error', function(err) {
  130. console.log('mongoose connection error: ' + err);
  131. });
  132. mongoose.connection.on('disconnected', function() {
  133. console.log('Mongoose disconnected');
  134. });
  135.  
  136. gracefulShutdown = function(msg, callback) {
  137. mongoose.connection.close(function() {
  138. console.log('Mongoose disconnected through ' + msg);
  139. callback();
  140. });
  141. };
  142.  
  143. // For nodemon restarts
  144. process.once('SIGUSR2', function() {
  145. gracefulShutdown('nodemon restart', function() {
  146. process.kill(process.pid, 'SIGUSR2');
  147. });
  148. });
  149. // For app termination
  150. process.on('SIGINT', function() {
  151. gracefulShutdown('app termination', function() {
  152. process.exit(0);
  153. });
  154. });
  155. // For Heroku app termination
  156. process.on('SIGTERM', function() {
  157. gracefulShutdown('Heroku app shutdown', function() {
  158. process.exit(0);
  159. });
  160. });
  161.  
  162. // BRING IN SCHEMAS & MODELS
  163. require('./locations');
  164. require('./users');
  165.  
  166. var mongoose = require('mongoose');
  167. var crypto = require('crypto');
  168. var jwt = require('jsonwebtoken');
  169.  
  170. var userSchema = new mongoose.Schema({
  171. email: {
  172. type: String,
  173. unique: true,
  174. required: true
  175. },
  176. name: {
  177. type: String,
  178. required: true
  179. },
  180. hash: String,
  181. salt: String
  182. });
  183.  
  184. userSchema.methods.setPassword = function(password) {
  185. this.salt = crypto.randomBytes(16).toString('hex');
  186. this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
  187. };
  188.  
  189. userSchema.methods.validPassword = function(password) {
  190. var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
  191. return this.hash === hash;
  192. };
  193.  
  194. userSchema.methods.generateJwt = function() {
  195. var expiry = new Date();
  196. expiry.setDate(expiry.getDate() + 7);
  197.  
  198. return jwt.sign({
  199. _id: this._id,
  200. email: this.email,
  201. name: this.name,
  202. exp: parseInt(expiry.getTime() / 1000)
  203. }, process.env.JWT_SECRET); // DO NOT KEEP SECRET IN CODE
  204. };
  205.  
  206. var passport = require('passport');
  207. var LocalStrategy = require('passport-local').Strategy;
  208. var mongoose = require('mongoose');
  209. var User = mongoose.model('User');
  210.  
  211. passport.use(new LocalStrategy({
  212. usernameField: 'email'
  213. },
  214. function(username, password, done) {
  215. User.findOne({ email: username }, function(err, user) {
  216. if (err) { return done(err); }
  217. if (!user) {
  218. return done(null, false, {
  219. message: 'Incorrect username.'
  220. });
  221. }
  222. if (!user.validPassword(password)) {
  223. return done(null, false, {
  224. message: 'Incorrect password.'
  225. });
  226. }
  227. return done(null, user);
  228. });
  229. }
  230. ));
  231.  
  232. var passport = require('passport');
  233. var mongoose = require('mongoose');
  234. var User = mongoose.model('User');
  235.  
  236. var sendJsonResponse = function(res, status, content) {
  237. res.status(status);
  238. res.json(content);
  239. };
  240.  
  241. module.exports.register = function(req, res) {
  242. if(!req.body.name || !req.body.email || !req.body.password) {
  243. sendJsonResponse(res, 400, { "message" : "All fields required" });
  244. return;
  245. }
  246.  
  247. var user = new User();
  248.  
  249. user.name = req.body.name;
  250. user.email = req.body.email;
  251.  
  252. user.setPasswork(req.body.password);
  253.  
  254. user.save(function(err) {
  255. var token;
  256. if (err) {
  257. sendJsonResponse(res, 404, err);
  258. } else {
  259. token = user.generateJwt();
  260. sendJsonResponse(res, 200, { "token" : token });
  261. }
  262. });
  263. };
  264.  
  265. module.exports.login = function(req, res) {
  266. if(!req.body.email || !req.body.password) {
  267. sendJsonResponse(res, 400, { "message" : "All fields required" });
  268. return;
  269. }
  270.  
  271. passport.authenticate('local', function(err, user, info) {
  272. var token;
  273.  
  274. if (err) {
  275. sendJsonResponse(res, 404, err);
  276. return;
  277. }
  278.  
  279. if(user) {
  280. token = user.generateJwt();
  281. sendJsonResponse(res, 200, { "token" : token });
  282. } else {
  283. sendJsonResponse(res, 401, info);
  284. }
  285. })(req, res);
  286.  
  287. };
  288.  
  289. var express = require('express');
  290. var router = express.Router();
  291. var ctrlLocations = require('../controllers/locations');
  292. var ctrlReviews = require('../controllers/reviews');
  293. var ctrlAuth = require('../controllers/authentication');
  294.  
  295. // locations
  296. router.get('/locations', ctrlLocations.locationsListByDistance);
  297. router.post('/locations', ctrlLocations.locationsCreate);
  298. router.get('/locations/:locationid', ctrlLocations.locationsReadOne);
  299. router.put('/locations/:locationid', ctrlLocations.locationsUpdateOne);
  300. router.delete('/locations/:locationid', ctrlLocations.locationsDeleteOne);
  301.  
  302. // reviews
  303. router.post('/locations/:locationid/reviews', ctrlReviews.reviewsCreate);
  304. router.get('/locations/:locationid/reviews/:reviewid', ctrlReviews.reviewsReadOne);
  305. router.put('/locations/:locationid/reviews/:reviewid', ctrlReviews.reviewsUpdateOne);
  306. router.delete('/locations/:locationid/reviews/:reviewid', ctrlReviews.reviewsDeleteOne);
  307.  
  308. // authentication
  309. router.post('/register', ctrlAuth.register);
  310. router.post('/login', ctrlAuth.login);
  311.  
  312. module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement