Guest User

Untitled

a guest
Jan 26th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. ###
  2. Module dependencies
  3. ###
  4. require.paths.unshift "#{__dirname}/lib/support/express-csrf/"
  5. require.paths.unshift "#{__dirname}/lib/support/node_hash/lib/"
  6.  
  7. express = require 'express'
  8. app = module.exports = express.createServer()
  9.  
  10. RedisStore = require ('connect-redis')(connect)
  11.  
  12. csrf = require 'express-csrf'
  13. fugue = require 'fugue'
  14.  
  15. couchdb = require 'couchdb'
  16. client = couchdb.createClient 5984, 'localhost'
  17. db = client.db 'blahblahblah-devel'
  18.  
  19. hash = require 'hash.js'
  20. ###
  21. Configuration
  22. ###
  23.  
  24. app.dynamicHelpers({
  25. csrf: csrf.token
  26. })
  27. app.dynamicHelpers({
  28. flash: (req) ->
  29. flash = req.flash()
  30. return flash
  31. })
  32. app.dynamicHelpers({
  33. current_user: (req) -> req.session.user
  34. })
  35.  
  36. app.configure(() ->
  37. app.set 'views', "#{__dirname}/views"
  38. app.use express.logger()
  39. app.use express.bodyParser()
  40. app.use express.cookieParser()
  41. app.use express.session({
  42. store: new RedisStore({
  43. maxAge: 24 * 60 * 60 * 1000
  44. })
  45. secret: 'someSecret'
  46. })
  47. app.use csrf.check()
  48. app.use app.router
  49. app.use express.methodOverride()
  50. app.use express.staticProvider("#{__dirname}/public")
  51. )
  52.  
  53. app.configure 'development', () ->
  54. app.use express.errorHandler({
  55. dumpExceptions: true
  56. showStack : true
  57. })
  58.  
  59. app.configure 'production', () ->
  60. app.use express.errorHandler()
  61. ###
  62. ROUTE: ROOT '/' (GET)
  63. ###
  64. app.get '/', (req, res) ->
  65. if req.session.user
  66. req.flash 'success', "Authenticated as #{req.session.user.name}"
  67. res.redirect '/dashboard'
  68.  
  69. res.render 'index.jade',
  70. locals:
  71. title: 'Home'
  72. ###
  73. ROUTE: DASHBOARD '/dashboard' (GET, POST)
  74. ###
  75. app.get '/dashboard', (req, res) ->
  76. if req.session.user
  77. res.render 'dashboard/index.jade',
  78. locals:
  79. title: 'Dashboard'
  80. else
  81. res.redirect '/login'
  82.  
  83. app.post '/dashboard', (req, res) ->
  84. params = req.body
  85. if req.session.user
  86. user = req.session.user
  87. console.log params
  88. else
  89. res.redirect '/login'
  90. ###
  91. ROUTE: LOGIN '/login' (GET, POST)
  92. ###
  93. app.get '/login', (req, res) ->
  94. if req.session.user
  95. req.flash 'success', "Authenticated as #{req.session.user.name}"
  96. res.redirect '/dashboard'
  97.  
  98. res.render 'index.jade',
  99. locals:
  100. title: 'Login'
  101.  
  102. app.post '/login', (req, res) ->
  103. params = req.body
  104. if params.commit.login
  105. db.getDoc params.user.name, (e, doc) ->
  106. if e
  107. req.flash 'error', 'User does not exist!'
  108. res.redirect '/login'
  109. if doc
  110. salt = "superblahblah--#{params.user.password}"
  111. salted_password = hash.sha1 params.user.password, salt
  112.  
  113. if doc.password is salted_password
  114. req.session.regenerate(() ->
  115. req.session.user = params.user
  116. res.redirect '/dashboard'
  117. )
  118. else
  119. res.redirect '404'
  120. else if params.commit.signup
  121. res.redirect '/signup'
  122. ###
  123. ROUTE: LOGOUT '/logout' (GET)
  124. ###
  125. app.get '/logout', (req, res) ->
  126. req.session.destroy(() ->
  127. res.redirect '/'
  128. )
  129.  
  130. ###
  131. ROUTE: SIGNUP '/signup' (GET, POST)
  132. ###
  133. app.get '/signup', (req, res) ->
  134. if req.session.user
  135. req.flash 'success', "Autenticated as #{req.session.user.name}"
  136. res.redirect '/dashboard'
  137.  
  138. res.render 'users/signup.jade',
  139. locals:
  140. title: 'Signup'
  141. username: ''
  142. password: ''
  143. password_confirmation: ''
  144. email: ''
  145.  
  146. app.post '/signup', (req, res) ->
  147. params = req.body
  148. errors = []
  149. salt = "superblahblah--#{params.user.password}"
  150. salted_password = hash.sha1 params.user.password, salt
  151. salted_confirm_password = hash.sha1 params.user.password_confirmation, salt
  152.  
  153. user =
  154. name: params.user.name
  155. password: salted_password
  156. email: params.user.email
  157. confirm_password = salted_confirm_password
  158.  
  159. create_user = () ->
  160. db.exists (e,c) ->
  161. if c is true
  162. db.saveDoc user.name, couchdb.toJSON(user), (e,c) ->
  163. if e
  164. req.flash 'error', "Document update conflict. This user exists!"
  165. res.redirect 'back'
  166. if c
  167. req.flash 'success', "SUCCESS"
  168. req.session.regenerate(() ->
  169. req.session.user = params.user
  170. res.redirect '/dashboard'
  171. )
  172. if errors.length > 0
  173. errors.forEach (err) ->
  174. req.flash 'error', err
  175. res.render 'users/signup.jade',
  176. locals:
  177. title: "Signup"
  178. username: user.name
  179. password: ""
  180. password_confirmation: ""
  181. email: user.email
  182. else
  183. create_user()
  184. ###
  185. Only listen on $ sudo node server.js
  186. ###
  187. if not module.parent
  188. fugue.start app, 3000, null, 10, {
  189. verbose: true
  190. daemonize: true
  191. }
  192. console.log "Express server listening on port #{app.address().port}"
Add Comment
Please, Sign In to add comment