UniversityController.coffee 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. request = require("request")
  2. settings = require("settings-sharelatex")
  3. logger = require("logger-sharelatex")
  4. _ = require("underscore")
  5. ErrorController = require "../Errors/ErrorController"
  6. StaticPageHelpers = require("./StaticPageHelpers")
  7. sanitize = require('sanitizer')
  8. Settings = require("settings-sharelatex")
  9. contentful = require('contentful')
  10. marked = require("marked")
  11. module.exports = UniversityController =
  12. getPage: (req, res, next)->
  13. url = req.url?.toLowerCase()
  14. universityUrl = "#{settings.apis.university.url}#{url}"
  15. if StaticPageHelpers.shouldProxy(url)
  16. return UniversityController._directProxy universityUrl, res
  17. logger.log url:url, "proxying request to university api"
  18. request.get universityUrl, (err, r, data)->
  19. if r?.statusCode == 404
  20. return UniversityController.getContentfulPage(req, res, next)
  21. if err?
  22. return res.send 500
  23. data = data.trim()
  24. try
  25. data = JSON.parse(data)
  26. data.content = data.content.replace(/__ref__/g, sanitize.escape(req.query.ref))
  27. catch err
  28. logger.err err:err, data:data, "error parsing data from data"
  29. res.render "university/university_holder", data
  30. getIndexPage: (req, res)->
  31. req.url = "/university/index.html"
  32. UniversityController.getPage req, res
  33. _directProxy: (originUrl, res)->
  34. upstream = request.get(originUrl)
  35. upstream.on "error", (error) ->
  36. logger.error err: error, "university proxy error"
  37. upstream.pipe res
  38. getContentfulPage: (req, res, next)->
  39. console.log Settings.contentful
  40. if !Settings.contentful?.uni?.space? and !Settings.contentful?.uni?.accessToken?
  41. return ErrorController.notFound(req, res, next)
  42. client = contentful.createClient({
  43. space: Settings.contentful?.uni?.space
  44. accessToken: Settings.contentful?.uni?.accessToken
  45. })
  46. url = req.url?.toLowerCase().replace("/university/","")
  47. client.getEntries({content_type: 'caseStudy', 'fields.slug':url})
  48. .catch (e)->
  49. return res.send 500
  50. .then (entry)->
  51. if !entry? or !entry.items? or entry.items.length == 0
  52. return ErrorController.notFound(req, res, next)
  53. viewData = entry.items[0].fields
  54. viewData.html = marked(viewData.content)
  55. res.render "university/case_study", viewData:viewData