info.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 parseJokes = require("../src/parseJokes");
  7. const languages = require("../src/languages");
  8. const settings = require("../settings");
  9. const translate = require("../src/translate");
  10. jsl.unused(http);
  11. const meta = {
  12. "name": "Info",
  13. "desc": `Returns a lot of information about ${settings.info.name} and its jokes`,
  14. "usage": {
  15. "method": "GET",
  16. "url": `${settings.info.docsURL}/info`,
  17. "supportedParams": [
  18. "format",
  19. "lang"
  20. ]
  21. }
  22. };
  23. /**
  24. * Calls this endpoint
  25. * @param {http.IncomingMessage} req The HTTP server request
  26. * @param {http.ServerResponse} res The HTTP server response
  27. * @param {Array<String>} url URL path array gotten from the URL parser module
  28. * @param {Object} params URL query params gotten from the URL parser module
  29. * @param {String} format The file format to respond with
  30. */
  31. const call = (req, res, url, params, format) => {
  32. jsl.unused([req, url, params]);
  33. let supportedLangsLength = languages.jokeLangs().length;
  34. let responseText = {};
  35. let totalJokesCount = (!jsl.isEmpty(parseJokes.jokeCount) ? parseJokes.jokeCount : 0);
  36. let idRangePerLang = {};
  37. let idRangePerLangXml = [];
  38. Object.keys(parseJokes.jokeCountPerLang).forEach(lc => {
  39. let to = (parseJokes.jokeCountPerLang[lc] - 1);
  40. idRangePerLang[lc] = [ 0, to ];
  41. idRangePerLangXml.push({
  42. langCode: lc,
  43. from: 0,
  44. to: to
  45. });
  46. });
  47. let systemLanguagesLength = translate.systemLangs().length;
  48. let lang = (params && params["lang"]) ? params["lang"] : settings.languages.defaultLanguage;
  49. if(format != "xml")
  50. {
  51. responseText = convertFileFormat.auto(format, {
  52. "error": false,
  53. "version": settings.info.version,
  54. "jokes":
  55. {
  56. "totalCount": totalJokesCount,
  57. "categories": [settings.jokes.possible.anyCategoryName, ...settings.jokes.possible.categories],
  58. "flags": settings.jokes.possible.flags,
  59. "types": settings.jokes.possible.types,
  60. "submissionURL": settings.jokes.jokeSubmissionURL,
  61. "idRange": idRangePerLang,
  62. "safeJokes": parseJokes.safeJokes
  63. },
  64. "formats": settings.jokes.possible.formats,
  65. "jokeLanguages": supportedLangsLength,
  66. "systemLanguages": systemLanguagesLength,
  67. "info": translate(lang, "messageOfTheDay", settings.info.name),
  68. "timestamp": new Date().getTime()
  69. }, lang);
  70. }
  71. else if(format == "xml")
  72. {
  73. responseText = convertFileFormat.auto(format, {
  74. "error": false,
  75. "version": settings.info.version,
  76. "jokes":
  77. {
  78. "totalCount": totalJokesCount,
  79. "categories": {"category": [settings.jokes.possible.anyCategoryName, ...settings.jokes.possible.categories]},
  80. "flags": {"flag": settings.jokes.possible.flags},
  81. "types": {"type": settings.jokes.possible.types},
  82. "submissionURL": settings.jokes.jokeSubmissionURL,
  83. "idRanges": { "idRange": idRangePerLangXml },
  84. "safeJokes": { "language": parseJokes.safeJokes }
  85. },
  86. "formats": {"format": settings.jokes.possible.formats},
  87. "jokeLanguages": supportedLangsLength,
  88. "systemLanguages": systemLanguagesLength,
  89. "info": translate(lang, "messageOfTheDay", settings.info.name),
  90. "timestamp": new Date().getTime()
  91. }, lang);
  92. }
  93. httpServer.pipeString(res, responseText, parseURL.getMimeTypeFromFileFormatString(format));
  94. };
  95. module.exports = { meta, call };