WikiController.coffee 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. request = require("request")
  2. settings = require("settings-sharelatex")
  3. logger = require("logger-sharelatex")
  4. ErrorController = require "../Errors/ErrorController"
  5. _ = require("underscore")
  6. AuthenticationController = require("../Authentication/AuthenticationController")
  7. other_lngs = ["es"]
  8. module.exports = WikiController =
  9. _checkIfLoginIsNeeded: (req, res, next)->
  10. if settings.apis.wiki.requireLogin
  11. AuthenticationController.requireLogin()(req, res, next)
  12. else
  13. next()
  14. getPage: (req, res, next) ->
  15. WikiController._checkIfLoginIsNeeded req, res, ->
  16. page = req.url.replace(/^\/learn/, "").replace(/^\//, "")
  17. if page == ""
  18. page = "Main_Page"
  19. logger.log page: page, "getting page from wiki"
  20. if _.include(other_lngs, req.lng)
  21. lngPage = "#{page}_#{req.lng}"
  22. else
  23. lngPage = page
  24. WikiController._getPageContent "Contents", (error, contents) ->
  25. return next(error) if error?
  26. WikiController._getPageContent lngPage, (error, pageData) ->
  27. return next(error) if error?
  28. if pageData.content?.length > 280
  29. if _.include(other_lngs, req.lng)
  30. pageData.title = pageData.title.slice(0, pageData.title.length - (req.lng.length+1) )
  31. WikiController._renderPage(pageData, contents, res)
  32. else
  33. WikiController._getPageContent page, (error, pageData) ->
  34. return next(error) if error?
  35. WikiController._renderPage(pageData, contents, res)
  36. _getPageContent: (page, callback = (error, data = { content: "", title: "" }) ->) ->
  37. request {
  38. url: "#{settings.apis.wiki.url}/learn-scripts/api.php"
  39. qs: {
  40. page: decodeURI(page)
  41. action: "parse"
  42. format: "json"
  43. }
  44. }, (err, response, data)->
  45. return callback(err) if err?
  46. try
  47. data = JSON.parse(data)
  48. catch err
  49. logger.err err:err, data:data, "error parsing data from wiki"
  50. result =
  51. content: data?.parse?.text?['*']
  52. title: data?.parse?.title
  53. callback null, result
  54. _renderPage: (page, contents, res)->
  55. if page.title == "Main Page"
  56. title = "Documentation"
  57. else
  58. title = page.title
  59. res.render "wiki/page", {
  60. page: page
  61. contents: contents
  62. title: title
  63. }