TemplatesWebController.coffee 4.0 KB

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