TemplatesWebController.coffee 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. console.log "HEADER", "#{disposition}; filename=#{name};"
  40. res.header({"content-disposition": "#{disposition}; filename=#{name}.#{req.params.file_type};"})
  41. logger.log url:url, template_name: name, disposition: disposition, "proxying request to templates api"
  42. getReq = request.get("#{settings.apis.templates.url}#{url}")
  43. getReq.pipe(res)
  44. getReq.on "error", (error) ->
  45. logger.error err: error, "templates proxy API error"
  46. res.send 500
  47. _renderCanonicalPage: (req, res)->
  48. {user_id, template_id} = req.params
  49. logger.log user_id:user_id, template_id:template_id, "rendering template page"
  50. TemplatesWebController._getDataFromTemplatesApi "/user/#{user_id}/template/#{template_id}", (err, data)->
  51. if err?
  52. logger.err err:err, user_id:user_id, template_id:template_id, "something went wrong in _renderCanonicalPage"
  53. return res.send 500
  54. data.title = data?.template?.name
  55. data.tag = null
  56. res.render "templates/template", data
  57. _renderAllTemplatesPage: (req, res)->
  58. {user_id} = req.params
  59. logger.log user_id:user_id, "rendering all templates page"
  60. TemplatesWebController._getDataFromTemplatesApi "/user/#{user_id}/all", (err, data)->
  61. if err?
  62. logger.err err:err, user_id:user_id, "something went wrong in _renderCanonicalPage"
  63. return res.send 500
  64. data.title = "all_templates"
  65. res.render "templates/tag", data
  66. _renderTagPage: (req, res)->
  67. {user_id, tag_name} = req.params
  68. logger.log user_id:user_id, tag_name:tag_name, "rendinging tag page for templates"
  69. TemplatesWebController._getDataFromTemplatesApi "/user/#{user_id}/tag/#{tag_name}", (err, data)->
  70. if err?
  71. logger.err err:err, user_id:user_id, tag_name:tag_name, "something went wrong in _renderCanonicalPage"
  72. return res.send 500
  73. data.title = data?.tag?.name
  74. res.render "templates/tag", data
  75. _getDataFromTemplatesApi: (path, callback)->
  76. opts =
  77. url: "#{settings.apis.templates.url}#{path}"
  78. json:true
  79. request.get opts, (err, response, data)->
  80. callback err, data