overleaf/services/web/app/coffee/infrastructure/ExpressLocals.coffee

203 lines
5.7 KiB
CoffeeScript
Raw Normal View History

2014-02-12 05:23:40 -05:00
logger = require 'logger-sharelatex'
fs = require 'fs'
crypto = require 'crypto'
Settings = require('settings-sharelatex')
SubscriptionFormatters = require('../Features/Subscription/SubscriptionFormatters')
querystring = require('querystring')
2014-07-24 08:24:08 -04:00
SystemMessageManager = require("../Features/SystemMessages/SystemMessageManager")
_ = require("underscore")
2014-09-08 10:40:46 -04:00
Modules = require "./Modules"
2014-02-12 05:23:40 -05:00
fingerprints = {}
Path = require 'path'
imgPath = "/img/"
cssPath = "/stylesheets/"
2014-02-12 05:23:40 -05:00
jsPath =
if Settings.useMinifiedJs
"/minjs/"
else
"/js/"
2016-07-18 09:05:07 -04:00
2014-02-12 05:23:40 -05:00
logger.log "Generating file fingerprints..."
for path in [
"#{jsPath}libs/require.js",
"#{jsPath}ide.js",
"#{jsPath}main.js",
2014-07-18 07:08:35 -04:00
"#{jsPath}libs.js",
"#{jsPath}ace/ace.js",
2016-02-03 10:07:06 -05:00
"#{jsPath}libs/pdfjs-1.3.91/pdf.js",
"#{jsPath}libs/pdfjs-1.3.91/pdf.worker.js",
"#{jsPath}libs/pdfjs-1.3.91/compatibility.js",
"/stylesheets/style.css"
2014-02-12 05:23:40 -05:00
]
filePath = Path.join __dirname, "../../../", "public#{path}"
exists = fs.existsSync filePath
if exists
content = fs.readFileSync filePath
hash = crypto.createHash("md5").update(content).digest("hex")
logger.log "#{filePath}: #{hash}"
fingerprints[path] = hash
else
logger.log filePath:filePath, "file does not exist for fingerprints"
logger.log "Finished generating file fingerprints"
if Settings.cdn?.web?.host?
jsPath = "#{Settings.cdn?.web?.host}#{jsPath}"
imgPath = "#{Settings.cdn?.web?.host}#{imgPath}"
cssPath = "#{Settings.cdn?.web?.host}#{cssPath}"
2014-02-12 05:23:40 -05:00
module.exports = (app, webRouter, apiRouter)->
webRouter.use (req, res, next)->
2014-02-12 05:23:40 -05:00
res.locals.session = req.session
next()
webRouter.use (req, res, next)->
2014-02-12 05:23:40 -05:00
res.locals.jsPath = jsPath
2016-07-18 09:05:07 -04:00
res.locals.imgPath = imgPath
res.locals.cssPath = cssPath
2014-02-12 05:23:40 -05:00
next()
webRouter.use (req, res, next)->
2014-02-12 05:23:40 -05:00
res.locals.settings = Settings
next()
webRouter.use (req, res, next)->
res.locals.translate = (key, vars = {}) ->
vars.appName = Settings.appName
req.i18n.translate(key, vars)
res.locals.currentUrl = req.originalUrl
2014-03-24 13:18:58 -04:00
next()
webRouter.use (req, res, next)->
2014-02-12 05:23:40 -05:00
res.locals.getSiteHost = ->
Settings.siteUrl.substring(Settings.siteUrl.indexOf("//")+2)
next()
webRouter.use (req, res, next)->
res.locals.getUserEmail = ->
email = req?.session?.user?.email or ""
return email
next()
webRouter.use (req, res, next)->
2014-04-07 15:46:58 -04:00
res.locals.formatProjectPublicAccessLevel = (privilegeLevel)->
formatedPrivileges = private:"Private", readOnly:"Public: Read Only", readAndWrite:"Public: Read and Write"
return formatedPrivileges[privilegeLevel] || "Private"
2014-02-12 05:23:40 -05:00
next()
webRouter.use (req, res, next)->
2014-02-12 05:23:40 -05:00
res.locals.buildReferalUrl = (referal_medium) ->
url = Settings.siteUrl
if req.session? and req.session.user? and req.session.user.referal_id?
url+="?r=#{req.session.user.referal_id}&rm=#{referal_medium}&rs=b" # Referal source = bonus
return url
res.locals.getReferalId = ->
if req.session? and req.session.user? and req.session.user.referal_id
return req.session.user.referal_id
res.locals.getReferalTagLine = ->
tagLines = [
"Roar!"
"Shout about us!"
"Please recommend us"
"Tell the world!"
"Thanks for using ShareLaTeX"
]
return tagLines[Math.floor(Math.random()*tagLines.length)]
res.locals.getRedirAsQueryString = ->
if req.query.redir?
return "?#{querystring.stringify({redir:req.query.redir})}"
return ""
res.locals.getLoggedInUserId = ->
return req.session.user?._id
2014-02-12 05:23:40 -05:00
next()
webRouter.use (req, res, next) ->
res.locals.csrfToken = req?.csrfToken()
2014-02-12 05:23:40 -05:00
next()
webRouter.use (req, res, next) ->
res.locals.getReqQueryParam = (field)->
return req.query?[field]
next()
webRouter.use (req, res, next)->
2014-02-12 05:23:40 -05:00
res.locals.fingerprint = (path) ->
if fingerprints[path]?
return fingerprints[path]
else
logger.err "No fingerprint for file: #{path}"
return ""
next()
2014-06-20 16:35:42 -04:00
webRouter.use (req, res, next)->
2014-02-12 05:23:40 -05:00
res.locals.formatPrice = SubscriptionFormatters.formatPrice
next()
webRouter.use (req, res, next)->
res.locals.externalAuthenticationSystemUsed = ->
Settings.ldap?
next()
webRouter.use (req, res, next)->
2014-02-12 05:23:40 -05:00
if req.session.user?
res.locals.user =
email: req.session.user.email
first_name: req.session.user.first_name
last_name: req.session.user.last_name
if req.session.justRegistered
res.locals.justRegistered = true
delete req.session.justRegistered
if req.session.justLoggedIn
res.locals.justLoggedIn = true
delete req.session.justLoggedIn
res.locals.gaToken = Settings.analytics?.ga?.token
res.locals.tenderUrl = Settings.tenderUrl
res.locals.sentrySrc = Settings.sentry?.src
res.locals.sentryPublicDSN = Settings.sentry?.publicDSN
2014-02-12 05:23:40 -05:00
next()
webRouter.use (req, res, next) ->
2014-02-12 05:23:40 -05:00
if req.query? and req.query.scribtex_path?
res.locals.lookingForScribtex = true
res.locals.scribtexPath = req.query.scribtex_path
next()
webRouter.use (req, res, next) ->
# Clone the nav settings so they can be modified for each request
res.locals.nav = {}
for key, value of Settings.nav
res.locals.nav[key] = _.clone(Settings.nav[key])
2014-08-20 09:47:27 -04:00
res.locals.templates = Settings.templateLinks
2014-06-20 16:35:42 -04:00
next()
2014-07-24 08:24:08 -04:00
webRouter.use (req, res, next) ->
2014-07-24 08:24:08 -04:00
SystemMessageManager.getMessages (error, messages = []) ->
res.locals.systemMessages = messages
next()
2014-02-12 05:23:40 -05:00
webRouter.use (req, res, next)->
res.locals.query = req.query
next()
webRouter.use (req, res, next)->
subdomain = _.find Settings.i18n.subdomainLang, (subdomain)->
2014-08-21 12:58:25 -04:00
subdomain.lngCode == req.showUserOtherLng and !subdomain.hide
res.locals.recomendSubdomain = subdomain
res.locals.currentLngCode = req.lng
next()
webRouter.use (req, res, next) ->
if Settings.reloadModuleViewsOnEachRequest
2014-09-08 10:40:46 -04:00
Modules.loadViewIncludes()
res.locals.moduleIncludes = Modules.moduleIncludes
res.locals.moduleIncludesAvailable = Modules.moduleIncludesAvailable
2014-09-08 10:40:46 -04:00
next()