UniversityController.coffee 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. sixpack = require("../../infrastructure/Sixpack")
  12. module.exports = UniversityController =
  13. getPage: (req, res, next)->
  14. url = req.url?.toLowerCase()
  15. universityUrl = "#{settings.apis.university.url}#{url}"
  16. if StaticPageHelpers.shouldProxy(url)
  17. return UniversityController._directProxy universityUrl, res
  18. logger.log url:url, "proxying request to university api"
  19. request.get universityUrl, (err, r, data)->
  20. if r?.statusCode == 404
  21. return UniversityController.getContentfulPage(req, res, next)
  22. if err?
  23. return res.send 500
  24. data = data.trim()
  25. try
  26. data = JSON.parse(data)
  27. data.content = data.content.replace(/__ref__/g, sanitize.escape(req.query.ref))
  28. catch err
  29. logger.err err:err, data:data, "error parsing data from data"
  30. res.render "university/university_holder", data
  31. getIndexPage: (req, res)->
  32. client = sixpack.client(req?.session?.user?._id?.toString() || req.ip)
  33. client.participate 'instapage-pages', ['default', 'instapage'], (err, response)->
  34. if response?.alternative?.name == "instapage"
  35. return res.redirect("/i/university")
  36. else
  37. req.url = "/university/index.html"
  38. UniversityController.getPage req, res
  39. _directProxy: (originUrl, res)->
  40. upstream = request.get(originUrl)
  41. upstream.on "error", (error) ->
  42. logger.error err: error, "university proxy error"
  43. upstream.pipe res
  44. getContentfulPage: (req, res, next)->
  45. console.log Settings.contentful
  46. if !Settings.contentful?.uni?.space? and !Settings.contentful?.uni?.accessToken?
  47. return ErrorController.notFound(req, res, next)
  48. client = contentful.createClient({
  49. space: Settings.contentful?.uni?.space
  50. accessToken: Settings.contentful?.uni?.accessToken
  51. })
  52. url = req.url?.toLowerCase().replace("/university/","")
  53. client.getEntries({content_type: 'caseStudy', 'fields.slug':url})
  54. .catch (e)->
  55. return res.send 500
  56. .then (entry)->
  57. if !entry? or !entry.items? or entry.items.length == 0
  58. return ErrorController.notFound(req, res, next)
  59. viewData = entry.items[0].fields
  60. viewData.html = marked(viewData.content)
  61. res.render "university/case_study", viewData:viewData