ExpressLocals.coffee 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. logger = require 'logger-sharelatex'
  2. fs = require 'fs'
  3. crypto = require 'crypto'
  4. Settings = require('settings-sharelatex')
  5. SubscriptionFormatters = require('../Features/Subscription/SubscriptionFormatters')
  6. querystring = require('querystring')
  7. fingerprints = {}
  8. Path = require 'path'
  9. jsPath =
  10. if Settings.useMinifiedJs
  11. "/minjs/"
  12. else
  13. "/js/"
  14. logger.log "Generating file fingerprints..."
  15. for path in [
  16. "#{jsPath}libs/require.js",
  17. "#{jsPath}ide.js",
  18. "#{jsPath}main.js",
  19. "#{jsPath}list.js",
  20. "#{jsPath}libs/pdf.js",
  21. "#{jsPath}libs/pdf.worker.js",
  22. "/stylesheets/mainStyle.css"
  23. ]
  24. filePath = Path.join __dirname, "../../../", "public#{path}"
  25. content = fs.readFileSync filePath
  26. hash = crypto.createHash("md5").update(content).digest("hex")
  27. logger.log "#{filePath}: #{hash}"
  28. fingerprints[path] = hash
  29. module.exports = (app)->
  30. app.use (req, res, next)->
  31. res.locals.session = req.session
  32. next()
  33. app.use (req, res, next)->
  34. res.locals.jsPath = jsPath
  35. next()
  36. app.use (req, res, next)->
  37. res.locals.settings = Settings
  38. next()
  39. app.use (req, res, next)->
  40. res.locals.getSiteHost = ->
  41. Settings.siteUrl.substring(Settings.siteUrl.indexOf("//")+2)
  42. next()
  43. app.use (req, res, next)->
  44. res.locals.formatPrivlageLevel = (privlageLevel)->
  45. formatedPrivlages = private:"Private", readOnly:"Read Only", readAndWrite:"Read and Write"
  46. return formatedPrivlages[privlageLevel] || "Private"
  47. next()
  48. app.use (req, res, next)->
  49. res.locals.buildReferalUrl = (referal_medium) ->
  50. url = Settings.siteUrl
  51. if req.session? and req.session.user? and req.session.user.referal_id?
  52. url+="?r=#{req.session.user.referal_id}&rm=#{referal_medium}&rs=b" # Referal source = bonus
  53. return url
  54. res.locals.getReferalId = ->
  55. if req.session? and req.session.user? and req.session.user.referal_id
  56. return req.session.user.referal_id
  57. res.locals.getReferalTagLine = ->
  58. tagLines = [
  59. "Roar!"
  60. "Shout about us!"
  61. "Please recommend us"
  62. "Tell the world!"
  63. "Thanks for using ShareLaTeX"
  64. ]
  65. return tagLines[Math.floor(Math.random()*tagLines.length)]
  66. res.locals.getRedirAsQueryString = ->
  67. if req.query.redir?
  68. return "?#{querystring.stringify({redir:req.query.redir})}"
  69. return ""
  70. next()
  71. app.use (req, res, next) ->
  72. res.locals.csrfToken = req.session._csrf
  73. next()
  74. app.use (req, res, next)->
  75. res.locals.fingerprint = (path) ->
  76. if fingerprints[path]?
  77. return fingerprints[path]
  78. else
  79. logger.err "No fingerprint for file: #{path}"
  80. return ""
  81. next()
  82. app.use (req, res, next)->
  83. res.locals.formatPrice = SubscriptionFormatters.formatPrice
  84. next()
  85. app.use (req, res, next)->
  86. if req.session.user?
  87. res.locals.mixpanelId = req.session.user._id
  88. res.locals.user =
  89. email: req.session.user.email
  90. first_name: req.session.user.first_name
  91. last_name: req.session.user.last_name
  92. if req.session.justRegistered
  93. res.locals.justRegistered = true
  94. delete req.session.justRegistered
  95. if req.session.justLoggedIn
  96. res.locals.justLoggedIn = true
  97. delete req.session.justLoggedIn
  98. res.locals.mixpanelToken = Settings.analytics?.mixpanel?.token
  99. res.locals.gaToken = Settings.analytics?.ga?.token
  100. res.locals.heapToken = Settings.analytics?.heap?.token
  101. res.locals.tenderUrl = Settings.tenderUrl
  102. next()
  103. app.use (req, res, next) ->
  104. if req.query? and req.query.scribtex_path?
  105. res.locals.lookingForScribtex = true
  106. res.locals.scribtexPath = req.query.scribtex_path
  107. next()