WikiController.coffee 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. request = require("request")
  2. settings = require("settings-sharelatex")
  3. logger = require("logger-sharelatex")
  4. ErrorController = require "../Errors/ErrorController"
  5. module.exports = WikiController =
  6. getPage: (req, res, next) ->
  7. page = req.url.replace(/^\/learn/, "").replace(/^\//, "")
  8. if page == ""
  9. page = "Main_Page"
  10. logger.log page: page, "getting page from wiki"
  11. WikiController._getPageContent "Contents", (error, contents) ->
  12. return next(error) if error?
  13. WikiController._getPageContent page, (error, page) ->
  14. return next(error) if error?
  15. if page.title == "Main Page"
  16. title = "Documentation"
  17. else
  18. title = page.title
  19. res.render "wiki/page", {
  20. page: page
  21. contents: contents
  22. title: title
  23. }
  24. _getPageContent: (page, callback = (error, data = { content: "", title: "" }) ->) ->
  25. request {
  26. url: "#{settings.apis.wiki.url}/learn-scripts/api.php"
  27. qs: {
  28. page: decodeURI(page)
  29. action: "parse"
  30. format: "json"
  31. }
  32. }, (err, response, data)->
  33. return callback(err) if err?
  34. try
  35. data = JSON.parse(data)
  36. catch err
  37. logger.err err:err, data:data, "error parsing data from wiki"
  38. callback null, {
  39. content: data?.parse?.text?['*']
  40. title: data?.parse?.title
  41. }