app.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /********** depend **************/
  2. var express = require('express');
  3. var exphbs = require('express-handlebars');
  4. var session = require('express-session');
  5. var flash = require('express-flash');
  6. var cookieParser = require('cookie-parser');
  7. var compress = require('compression');
  8. var bodyParser = require('body-parser');
  9. var favicon = require('serve-favicon');
  10. var errorHandler = require('errorhandler');
  11. var events = require('events');
  12. var http = require('http');
  13. var path = require('path');
  14. var fs = require('fs');
  15. var logger = require('morgan');
  16. var _ = require('lodash');
  17. var mongoose = require('mongoose');
  18. var MongoStore = require('connect-mongo')(session);
  19. var methodOverride = require('method-override');
  20. var passport = require('passport');
  21. var lusca = require('lusca');
  22. var expressValidator = require('express-validator');
  23. /********** Config **************/
  24. var conf = require('./config/config');
  25. var secure = require('./config/secure');
  26. var passportConf = require('./config/passport');
  27. var app = express();
  28. /********** MongoDB **************/
  29. mongoose.connect(secure.db);
  30. mongoose.connection.on('error', function() {
  31. console.log('MongoDB Connection Error!');
  32. process.exit(1);
  33. });
  34. /********** app.engine **************/
  35. app.set('port', process.env.PORT || 3000);
  36. app.set('views', path.join(__dirname, 'app/views'));
  37. app.set('view engine', 'jade');
  38. app.use(compress());
  39. /********** app.use **************/
  40. app.use(express.static(path.join(__dirname, 'app'), { maxAge: 31557600000 }));
  41. app.use(favicon(path.join(__dirname, 'app/img', 'favicon.png')));
  42. app.use(bodyParser.json());
  43. app.use(bodyParser.urlencoded({ extended: true }));
  44. app.use(expressValidator());
  45. app.use(methodOverride());
  46. app.use(cookieParser());
  47. app.use(session({
  48. resave: true,
  49. saveUninitialized: true,
  50. secret: secure.sessionSecret,
  51. store: new MongoStore({ url: secure.db, autoReconnect: true })
  52. }));
  53. app.use(passport.initialize());
  54. app.use(passport.session());
  55. app.use(flash());
  56. app.use(lusca({
  57. csrf: true,
  58. xframe: 'SAMEORIGIN',
  59. xssProtection: true
  60. }));
  61. app.use(function(req, res, next) {
  62. res.locals.user = req.user;
  63. next();
  64. });
  65. app.use(function(req, res, next) {
  66. if (/api/i.test(req.path)) {
  67. req.session.returnTo = req.path;
  68. }
  69. next();
  70. });
  71. /********** routes controllers **************/
  72. var router = express.Router();
  73. app.use(router);
  74. var homeController = require('./controllers/home_control');
  75. var userController = require('./controllers/user_control');
  76. var contactController = require('./controllers/contact_control');
  77. var eventController = require('./controllers/event_control');
  78. var entryController = require('./controllers/entry_control');
  79. var apiController = require('./controllers/api_control');
  80. /********** user routes **************/
  81. router.get('/', homeController.index);
  82. router.get('/login', userController.getLogin);
  83. router.post('/login', userController.postLogin);
  84. router.get('/logout', userController.logout);
  85. router.get('/forgot', userController.getForgot);
  86. router.post('/forgot', userController.postForgot);
  87. router.get('/reset/:token', userController.getReset);
  88. router.post('/reset/:token', userController.postReset);
  89. router.get('/register', userController.getSignup);
  90. router.post('/register', userController.postSignup);
  91. router.get('/account', passportConf.isAuthenticated, userController.getAccount);
  92. router.post('/account/profile', passportConf.isAuthenticated, userController.postUpdateProfile);
  93. router.post('/account/password', passportConf.isAuthenticated, userController.postUpdatePassword);
  94. router.post('/account/delete', passportConf.isAuthenticated, userController.postDeleteAccount);
  95. router.get('/account/unlink/:provider', passportConf.isAuthenticated, userController.getOauthUnlink);
  96. /********** event routes **************/
  97. var eventRouter = require('./routes/event_route');
  98. app.use('/event', eventRouter);
  99. router.get('/event', eventController.getEvent);
  100. router.get('/event/new', eventController.getEvent_new);
  101. router.get('/event/new', passportConf.isAuthenticated, eventController.postEvent_new);
  102. /********** entry routes **************/
  103. var entryRouter = require('./routes/entry_route');
  104. app.use('/entry', entryRouter);
  105. router.get('/entry', entryController.getEntry);
  106. router.get('/entry/new', entryController.getEntry_new);
  107. router.get('/entry/new', passportConf.isAuthenticated, entryController.postEntry_new);
  108. /********** static routes controllers **************/
  109. router.get('/contact', contactController.getContact);
  110. router.post('/contact', contactController.postContact);
  111. router.get('/about', function(req, res) {
  112. res.render('pages/about', { title: 'About' });
  113. });
  114. router.get('/docs', function(req, res) {
  115. res.render('pages/docs', { title: 'Documentation' });
  116. });
  117. router.get('/privacy', function(req, res) {
  118. res.render('pages/privacy', { title: 'Privacy Policy' });
  119. });
  120. router.get('/terms', function(req, res) {
  121. res.render('pages/terms', { title: 'Terms & Conditions' });
  122. });
  123. router.get('/status', function(req, res) {
  124. res.render('pages/status', { title: 'System Status' });
  125. });
  126. router.get('/support', function(req, res) {
  127. res.render('pages/support', { title: 'Support' });
  128. });
  129. /************* log **************/
  130. app.use(logger('common', {
  131. stream: fs.createWriteStream('./log/access.log', {flags: 'a'})
  132. }));
  133. app.use(logger('dev'));
  134. var logger = new events.EventEmitter();
  135. logger.on('newEvent', function(event, data) {
  136. console.log('%s: %s', event, JSON.stringify(data));
  137. });
  138. /************* errors **************/
  139. app.use(function handleNotFound(req, res, next){
  140. res.status(404);
  141. if (req.accepts('html')) {
  142. res.render('404', { url: req.url, error: '404 Not found' });
  143. return;
  144. }
  145. if (req.accepts('json')) {
  146. res.send({ error: 'Not found' });
  147. return;
  148. };
  149. });
  150. if (process.env.NODE_ENV === 'development') {
  151. app.use(errorHandler())
  152. };
  153. if (process.env.NODE_ENV !== 'development') {
  154. app.use(function(err, req, res, next) {
  155. res.status(err.status || 500);
  156. res.render('500', {
  157. message: err.message,
  158. error: {}
  159. });
  160. });
  161. }
  162. /********** app.listen **************/
  163. app.listen(app.get('port'), function() {
  164. console.log('Express server listening on port %d in %s mode', app.get('port'), app.get('env'));
  165. });
  166. module.exports = app;