TemplatesWebController.coffee 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. request = require("request")
  2. settings = require("settings-sharelatex")
  3. logger = require("logger-sharelatex")
  4. module.exports = TemplatesWebController =
  5. renderTemplatesIndexPage: (req, res)->
  6. logger.log "rendering index page of templates"
  7. TemplatesWebController._getDataFromTemplatesApi "/user/#{req.params.user_id}", (err, data)->
  8. if err? or !data?
  9. logger.err err:err, "something went wrong in renderTemplatesIndexPage"
  10. return res.send 500
  11. data.title = "latex_templates"
  12. res.render "templates/index", data
  13. renerTemplateInTag: (req, res)->
  14. {user_id, tag_name, template_name} = req.params
  15. logger.log user_id:user_id, tag_name:tag_name, template_name:template_name, "rendering latex template page"
  16. TemplatesWebController._getDataFromTemplatesApi "/user/#{user_id}/tag/#{tag_name}/template/#{template_name}", (err, data)->
  17. if err? or !data?
  18. logger.err err:err, user_id:user_id, tag_name:tag_name, template_name:template_name, "something went wrong in renerTemplateInTag"
  19. return res.send 500
  20. data.title = data?.template?.name
  21. res.render "templates/template", data
  22. tagOrCanonicalPage: (req, res)->
  23. if req.params.template_id?
  24. TemplatesWebController._renderCanonicalPage(req, res)
  25. else if req.params.tag_name?.toLowerCase() == "all"
  26. TemplatesWebController._renderAllTemplatesPage(req, res)
  27. else if req.params.tag_name?
  28. TemplatesWebController._renderTagPage(req, res)
  29. else
  30. logger.log params:req.params, "problem rendering tagOrCanonicalPage"
  31. res.send 500
  32. proxyToTemplatesApi: (req, res)->
  33. url = req.url
  34. name = req.query.name or "Template"
  35. if req.query.inline?
  36. disposition = "inline"
  37. else
  38. disposition = "attachment"
  39. res.header({"content-disposition": "#{disposition}; filename=#{name}.#{req.params.file_type};"})
  40. logger.log url:url, template_name: name, disposition: disposition, "proxying request to templates api"
  41. getReq = request.get("#{settings.apis.templates.url}#{url}")
  42. getReq.pipe(res)
  43. getReq.on "error", (error) ->
  44. logger.error err: error, "templates proxy API error"
  45. res.send 500
  46. _renderCanonicalPage: (req, res)->
  47. {user_id, template_id} = req.params
  48. logger.log user_id:user_id, template_id:template_id, "rendering template page"
  49. TemplatesWebController._getDataFromTemplatesApi "/user/#{user_id}/template/#{template_id}", (err, data)->
  50. if err?
  51. logger.err err:err, user_id:user_id, template_id:template_id, "something went wrong in _renderCanonicalPage"
  52. return res.send 500
  53. data.title = data?.template?.name
  54. data.tag = null
  55. res.render "templates/template", data
  56. _renderAllTemplatesPage: (req, res)->
  57. {user_id} = req.params
  58. logger.log user_id:user_id, "rendering all templates page"
  59. TemplatesWebController._getDataFromTemplatesApi "/user/#{user_id}/all", (err, data)->
  60. if err?
  61. logger.err err:err, user_id:user_id, "something went wrong in _renderCanonicalPage"
  62. return res.send 500
  63. data.title = "all_templates"
  64. res.render "templates/tag", data
  65. _renderTagPage: (req, res)->
  66. {user_id, tag_name} = req.params
  67. logger.log user_id:user_id, tag_name:tag_name, "rendinging tag page for templates"
  68. TemplatesWebController._getDataFromTemplatesApi "/user/#{user_id}/tag/#{tag_name}", (err, data)->
  69. if err?
  70. logger.err err:err, user_id:user_id, tag_name:tag_name, "something went wrong in _renderCanonicalPage"
  71. return res.send 500
  72. data.title = data?.tag?.name
  73. res.render "templates/tag", data
  74. _getDataFromTemplatesApi: (path, callback)->
  75. opts =
  76. url: "#{settings.apis.templates.url}#{path}"
  77. json:true
  78. request.get opts, (err, response, data)->
  79. callback err, data