Advertisement
Guest User

app coffee

a guest
Mar 30th, 2016
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. console.time 'StartServer'
  2. console.time 'requireLib'
  3. express     = require 'express'
  4. _           = require 'underscore'
  5. http        = require 'http'
  6. url         = require 'url'
  7. crypto      = require 'crypto'
  8. mongo       = require 'mongoskin'
  9. Settings    = require 'settings'
  10. config      = new Settings(require('./applications/config/config'))
  11. error       = new Settings(require('./applications/config/error'))
  12. system      = new Settings(require('./applications/config/system'))
  13. winston     = require 'winston'
  14. passport    = require 'passport'
  15. LocalStrategy = require('passport-local').Strategy
  16. validate    = require 'express-form'
  17. fs          = require 'fs.extra'
  18. ejs         = require 'ejs-locals'
  19. logger      = require 'express-request-logger'
  20. path        = require 'path'
  21. uuid        = require 'node-uuid'
  22. flashify    = require 'flashify'
  23. forms       = require 'forms-bootstrap'
  24. tempDir     = path.join __dirname, './applications/email/mail-template'
  25. emailTemp   = require 'email-templates'
  26. mandrill    = require('node-mandrill')(config.mandrill.API_key)
  27. { SendGrid } = require 'sendgrid'
  28. sendgrid    = new SendGrid(config.sendGrid.username, config.sendGrid.password)
  29. random      = require 'randomstring-extended'
  30. ignoreFiles = ['form.js']
  31. supportFile = ['coffee']
  32. geoip       = require 'geoip-lite'
  33. moment      = require 'moment'
  34. async       = require 'async'
  35. ua          = require 'ua-parser'
  36. redis       = require 'redis'
  37. client      = redis.createClient()
  38. humanize    = require 'humanize'
  39. I18n        = require 'i18n-2'
  40. kue         = require 'kue'
  41. request     = require 'request'
  42. jobs        = kue.createQueue()
  43. RedisStore  = require('connect-redis')(express)
  44. db          = mongo.db("#{config.mongodb.server}:#{config.mongodb.port}/#{config.mongodb.dbname}?#{config.mongodb.options}", { safe: true })
  45. _.str       = require 'underscore.string'
  46. { check, sanitize } = require 'validator'
  47. console.timeEnd 'requireLib'
  48.  
  49.  
  50. console.time 'ConfigLogging'
  51. log = new (winston.Logger)(
  52.     transports: [new (winston.transports.Console)(colorize: true), new (winston.transports.File)(
  53.         filename: config.log.defaultFile
  54.         handleExceptions: true
  55.         colorize: true
  56.     )]
  57.  
  58.     exceptionHandlers: [new (winston.transports.Console)(colorize: true), new winston.transports.File(
  59.         filename: config.log.exceptionsFile
  60.         colorize: true
  61.     )]
  62.     exitOnError: false
  63. )
  64.  
  65. #Ussage: levels: { silly: 0, verbose: 1, info: 2, warn: 3, debug: 4, error: 5 },
  66. console.timeEnd 'ConfigLogging'
  67.  
  68.  
  69. console.time 'BindingDBCollections'
  70. db.bind 'user'
  71. db.bind 'audit'
  72. console.timeEnd 'BindingDBCollections'
  73.  
  74. console.time 'StartJobUI'
  75. kue.app.set 'title', 'Job'
  76. kueApp = express()
  77. kueApp.use express.basicAuth('lokalapps', 'lokalapps')
  78. kueApp.use '/kue', kue.app
  79. kueApp.listen config.port.kue
  80. log.debug "Kue started at port: #{config.port.kue}"
  81. console.timeEnd 'StartJobUI'
  82.  
  83. console.time 'InitializeServer'
  84. app = express()
  85. app.configure ()->
  86.     app.engine '.html', ejs
  87.     app.set 'views', __dirname + '/views'
  88.     app.set 'view engine', 'html'
  89.     app.set 'view options', {layout: false}
  90.     app.use logger.create(log)
  91.     app.use express.bodyParser()
  92.     app.use express.cookieParser(config.cookieSecret)
  93.     app.use express.session({ store: new RedisStore({host: config.redis.server, port: config.redis.port, db: config.redis.db, pass: config.redis.pass, prefix: config.redis.prefix}), secret: config.sessionSecret })
  94.     app.use passport.initialize()
  95.     app.use passport.session()
  96.     I18n.expressBind app,
  97.         locales: config.locales
  98.         defaultLocale: config.defaultLocale
  99.         devMode: false
  100.     app.use (req, res, next) ->
  101.         req.check = check
  102.         req.sanitize = sanitize
  103.         next()
  104.     app.use app.router
  105.     app.use express.methodOverride()
  106.     app.use express.cookieParser()
  107.     oneYear = 31557600000
  108.     app.use "/public", express.static(__dirname + '/public-assets'), { maxAge: oneYear }
  109.     app.use "/qr", express.static(__dirname + '/public-assets/images/qr'), { maxAge: oneYear }
  110.     app.use "/assets", express.static(__dirname + '/views/' + config.adminTemplateDir + '/assets'), { maxAge: oneYear }
  111.     app.use "/assets", express.static(__dirname + '/views/' + config.templateDir + '/assets'), { maxAge: oneYear }
  112.    
  113.     app.disable 'x-powered-by'
  114.  
  115.     console.time 'setupErrorPage'
  116.     app.use (req, res, next) ->
  117.         res.status 500
  118.        
  119.         # respond with html page
  120.         if req.accepts("html")
  121.             res.render  config.adminTemplateDir + "/page-error-500",
  122.                 url: req.url
  123.  
  124.             return
  125.        
  126.         # respond with json
  127.         if req.accepts("json")
  128.             res.send error: "Not found"
  129.             return
  130.        
  131.         # default to plain-text. send()
  132.         res.type("txt").send "Not found"
  133.  
  134.     app.use (req, res, next) ->
  135.         res.status 404
  136.        
  137.         # respond with html page
  138.         if req.accepts("html")
  139.             res.render  config.adminTemplateDir + "/page-error-404",
  140.                 url: req.url
  141.  
  142.             return
  143.        
  144.         # respond with json
  145.         if req.accepts("json")
  146.             res.send error: "Not found"
  147.             return
  148.        
  149.         # default to plain-text. send()
  150.         res.type("txt").send "Not found"
  151.     console.timeEnd 'setupErrorPage'
  152.  
  153. app.configure 'development', () ->
  154.     app.use express.errorHandler({ dumpExceptions: true, showStack: true })
  155.  
  156. app.configure 'production', () ->
  157.     app.use express.errorHandler()
  158.  
  159. console.timeEnd 'InitializeServer'
  160.  
  161. emailTemp tempDir, { open: "{{", close: "}}" }, (err, template) ->
  162.     log.error err  if err
  163.     console.time "LoadModules"
  164.     logic = require("./applications/modules")(app, log, db, config, error, system, crypto, _, uuid, fs,
  165.         template: template
  166.         mandrill: mandrill
  167.         sendgrid: sendgrid
  168.     , random, async, client, geoip, moment, ua, {}, humanize, jobs)
  169.     console.timeEnd "LoadModules"
  170.  
  171.     console.time "LoadAdapter"
  172.     adapter = require("./applications/adapter")(app, log, db, config, error, system, crypto, _, uuid, fs, logic,
  173.         template: template
  174.         mandrill: mandrill
  175.         sendgrid: sendgrid
  176.     , random, async, client, geoip, moment, ua, {}, humanize, jobs)
  177.     console.timeEnd "LoadAdapter"
  178.  
  179.     console.time 'LoadPreDefinedForm'
  180.     form = require('./applications/form')(app, log, db, config, passport, validate, fs, forms, logic, adapter, jobs)
  181.     console.timeEnd 'LoadPreDefinedForm'
  182.  
  183.     console.time 'SetupAuthenticationMethod'
  184.     passport.use new LocalStrategy (username, password, done) ->
  185.         username = username?.toLowerCase()
  186.         password = password
  187.         if config.superUsers[username] and crypto.createHash('sha256').update(password).digest('hex') is config.superUsers[username]
  188.             userAutentication =
  189.                 _id: username
  190.                 idUser: username
  191.                 email: username
  192.                 date: new Date()
  193.                 isSuperAdmin: true
  194.                 changePasswordDate: new Date()
  195.             log.debug "Authentication Success: #{username}"
  196.             return done null, userAutentication
  197.  
  198.         async.parallel
  199.             user: (cb) ->
  200.                 user =
  201.                     email: { $regex: username, $options: 'i' }
  202.                     password: password
  203.                 logic.user.authentication user, (err, user) ->
  204.                     if err
  205.                         return cb err, 'login.error.general'
  206.                     cb err, user
  207.             merchant: (cb) ->
  208.                 merch =
  209.                     email: { $regex: username, $options: 'i' }
  210.                     password: password
  211.                 logic.merchant.authentication merch, (err, authMerch) ->
  212.                     if err
  213.                         return cb err, 'login.error.general'
  214.                     cb err, authMerch
  215.         , (err, {user, merchant}) ->
  216.             if err
  217.                 return done 'login.error.general'
  218.             if user
  219.                 if user.status is system.user.status.pending
  220.                     return done null, false, { message: 'login.error.verification' }
  221.                 if user.status is system.user.status.banned
  222.                     return done null, false, { message: 'login.error.banned' }
  223.                 if user.status is system.user.status.active or user.status is system.user.status.verified
  224.                     log.debug "Authentication Success: #{username}"
  225.                     return done null, user
  226.             else if merchant
  227.                 if merchant.status is system.user.status.pending
  228.                     return done null, false, { message: 'login.error.verification' }
  229.                 if merchant.status is system.user.status.banned
  230.                     return done null, false, { message: 'login.error.banned' }
  231.                 if merchant.status is system.user.status.active or merchant.status is system.user.status.verified
  232.                     log.debug "Merchant Authentication Success: #{username}"
  233.                     return done null, merchant
  234.             else
  235.                 log.error "Username or Password maybe wrong: #{username}"
  236.                 return done null, false, { message: 'login.error.match' }
  237.  
  238.     passport.serializeUser (user, done) ->
  239.         done null, user._id
  240.  
  241.     passport.deserializeUser (id, done) ->
  242.         if config.superUsers[id]
  243.             userAutentication =
  244.                 _id: id
  245.                 idUser: id
  246.                 email: id
  247.                 isSuperAdmin: true
  248.                 status: system.user.status.active
  249.                 changePasswordDate: new Date()
  250.             return done null, userAutentication
  251.         if id
  252.             async.parallel
  253.                 user: (cb) ->
  254.                     logic.user.get id, cb
  255.                 merchant: (cb) ->
  256.                     logic.merchant.get id, cb
  257.             , (err, {user, merchant}) ->
  258.                 if err
  259.                     return done err, null
  260.                 if user
  261.                     _.extend user,
  262.                         isUser: true
  263.                     return done null, user
  264.                 if merchant
  265.                     _.extend merchant,
  266.                         isMerchant: true
  267.                     return done null, merchant
  268.                 done true, null
  269.         else
  270.             done err, null
  271.  
  272.     passport.ensureAuthenticated = (req, res, next) ->
  273.         if req.isAuthenticated()
  274.             if _.str.contains req.path, '/user'
  275.                 unless req.user?.isSuperAdmin
  276.                     return res.send 404
  277.  
  278.             if _.str.contains req.path, '/merchant'
  279.                 unless req.user?.isSuperAdmin
  280.                     return res.send 404
  281.             if _.str.contains req.path, config.adminPath
  282.                 if req.user.isUser
  283.                     return res.send 404
  284.  
  285.             try
  286.                 auditData = { url: req.originalUrl, logTime: new Date(), ip: req.get('x-real-ip') || req.ip, userAgent: req.get('user-agent'), referer: req.get('referer') }
  287.                 _.extend auditData, {user: req.user}
  288.                 db.audit.insert auditData, { safe:true }, (err, dt) -> null
  289.             return next()
  290.        
  291.         req.session.targetUrl = req.url
  292.         res.redirect "#{config.adminPath}/login"
  293.         # res.redirect '/'
  294.  
  295.     console.timeEnd 'SetupAuthenticationMethod'
  296.  
  297.     ['applications/routing-private', 'applications/routing-public', 'applications/email/mail-logic'].forEach (folder) ->
  298.         files = fs.readdirSync(path.join(__dirname, folder))
  299.         files.forEach (file) ->
  300.             return  if not _.contains(supportFile, file.split('.')[1]) or _.include(ignoreFiles, file)
  301.             require(path.join(__dirname, folder, file.replace(/\.coffee$/, "").replace(/\.js$/, ""))) app, log, db, config, error, system, passport, validate, fs, form, adapter, logic,
  302.                 template: template
  303.                 mandrill: mandrill
  304.                 sendgrid: sendgrid
  305.             , _, random, async, client, geoip, moment, ua, humanize, jobs
  306.  
  307.     app.listen config.port.frontend
  308.     log.debug "Server started at port: #{config.port.frontend}"
  309.     console.timeEnd 'StartServer'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement