categories.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. const http = require("http");
  2. const convertFileFormat = require("../src/fileFormatConverter");
  3. const httpServer = require("../src/httpServer");
  4. const parseURL = require("../src/parseURL");
  5. const jsl = require("svjsl");
  6. const settings = require("../settings");
  7. jsl.unused(http);
  8. const meta = {
  9. "name": "Categories",
  10. "desc": "Returns a list of all available categories and category aliases",
  11. "usage": {
  12. "method": "GET",
  13. "url": `${settings.info.docsURL}/categories`,
  14. "supportedParams": [
  15. "format",
  16. "lang"
  17. ]
  18. }
  19. };
  20. /**
  21. * Calls this endpoint
  22. * @param {http.IncomingMessage} req The HTTP server request
  23. * @param {http.ServerResponse} res The HTTP server response
  24. * @param {Array<String>} url URL path array gotten from the URL parser module
  25. * @param {Object} params URL query params gotten from the URL parser module
  26. * @param {String} format The file format to respond with
  27. */
  28. const call = (req, res, url, params, format) => {
  29. jsl.unused([req, url, params]);
  30. let responseText = "";
  31. let categories = [settings.jokes.possible.anyCategoryName, ...settings.jokes.possible.categories];
  32. let catAliases = [];
  33. Object.keys(settings.jokes.possible.categoryAliases).forEach(key => {
  34. catAliases.push({
  35. alias: key,
  36. resolved: settings.jokes.possible.categoryAliases[key]
  37. });
  38. });
  39. let lang = (params && params["lang"]) ? params["lang"] : settings.languages.defaultLanguage;
  40. if(format != "xml")
  41. {
  42. responseText = convertFileFormat.auto(format, {
  43. "error": false,
  44. "categories": categories,
  45. "categoryAliases": catAliases,
  46. "timestamp": new Date().getTime()
  47. }, lang);
  48. }
  49. else if(format == "xml")
  50. {
  51. responseText = convertFileFormat.auto(format, {
  52. "error": false,
  53. "categories": {"category": categories},
  54. "categoryAliases": {"categoryAlias": catAliases},
  55. "timestamp": new Date().getTime()
  56. }, lang);
  57. }
  58. httpServer.pipeString(res, responseText, parseURL.getMimeTypeFromFileFormatString(format));
  59. };
  60. module.exports = { meta, call };