apps.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. const User = require('../database/UserModel');
  2. const { appCard } = require('../components/appCard')
  3. const { dashCard } = require('../components/dashCard');
  4. const { install, uninstall } = require('../functions/package_manager');
  5. const templates_json = require('../templates.json');
  6. let templates = templates_json.templates;
  7. // sort templates alphabetically
  8. templates = templates.sort((a, b) => {
  9. if (a.name < b.name) {
  10. return -1;
  11. }
  12. });
  13. exports.Apps = async function(req, res) {
  14. if (req.session.role == "admin") {
  15. // Get the user.
  16. let user = await User.findOne({ where: { UUID: req.session.UUID }});
  17. let page = Number(req.params.page) || 1;
  18. let list_start = (page - 1) * 28;
  19. let list_end = (page * 28);
  20. let last_page = Math.ceil(templates.length / 28);
  21. let prev = '/apps/' + (page - 1);
  22. let next = '/apps/' + (page + 1);
  23. if (page == 1) {
  24. prev = '/apps/' + (page);
  25. }
  26. if (page == last_page) {
  27. next = '/apps/' + (page);
  28. }
  29. let apps_list = '';
  30. for (let i = list_start; i < list_end && i < templates.length; i++) {
  31. let app_card = appCard(templates[i]);
  32. apps_list += app_card;
  33. }
  34. // Render the home page
  35. res.render("pages/apps", {
  36. name: user.first_name + ' ' + user.last_name,
  37. role: user.role,
  38. avatar: user.avatar,
  39. isLoggedIn: true,
  40. list_start: list_start + 1,
  41. list_end: list_end,
  42. app_count: templates.length,
  43. prev: prev,
  44. next: next,
  45. apps_list: apps_list
  46. });
  47. } else {
  48. // Redirect to the login page
  49. res.redirect("/login");
  50. }
  51. }
  52. exports.searchApps = async function(req, res) {
  53. if (req.session.role == "admin") {
  54. // Get the user.
  55. let user = await User.findOne({ where: { UUID: req.session.UUID }});
  56. let page = Number(req.query.page) || 1;
  57. let list_start = (page - 1) * 28;
  58. let list_end = (page * 28);
  59. let last_page = Math.ceil(templates.length / 28);
  60. let prev = '/apps?page=' + (page - 1);
  61. let next = '/apps?page=' + (page + 1);
  62. if (page == 1) {
  63. prev = '/apps?page=' + (page);
  64. }
  65. if (page == last_page) {
  66. next = '/apps?page=' + (page);
  67. }
  68. let apps_list = '';
  69. let search_results = [];
  70. let search = req.body.search;
  71. // split value of search into an array of words
  72. search = search.split(' ');
  73. try {console.log(search[0]);} catch (error) {}
  74. try {console.log(search[1]);} catch (error) {}
  75. try {console.log(search[2]);} catch (error) {}
  76. function searchTemplates(word) {
  77. for (let i = 0; i < templates.length; i++) {
  78. if ((templates[i].description.includes(word)) || (templates[i].name.includes(word)) || (templates[i].title.includes(word))) {
  79. search_results.push(templates[i]);
  80. }
  81. }
  82. // console.log(search_results);
  83. }
  84. searchTemplates(search);
  85. for (let i = 0; i < search_results.length; i++) {
  86. let app_card = appCard(search_results[i]);
  87. apps_list += app_card;
  88. }
  89. // Render the home page
  90. res.render("pages/apps", {
  91. name: user.first_name + ' ' + user.last_name,
  92. role: user.role,
  93. avatar: user.avatar,
  94. isLoggedIn: true,
  95. list_start: list_start + 1,
  96. list_end: list_end,
  97. app_count: templates.length,
  98. prev: prev,
  99. next: next,
  100. apps_list: apps_list
  101. });
  102. } else {
  103. // Redirect to the login page
  104. res.redirect("/login");
  105. }
  106. }
  107. exports.Install = async function (req, res) {
  108. if (req.session.role == "admin") {
  109. console.log(`Starting install for: ${req.body.name}`)
  110. install(req.body);
  111. let container_info = {
  112. name: req.body.name,
  113. service: req.body.service_name,
  114. state: 'installing',
  115. image: req.body.image,
  116. restart_policy: req.body.restart_policy
  117. }
  118. let installCard = dashCard(container_info);
  119. req.app.locals.install = installCard;
  120. // Redirect to the home page
  121. res.redirect("/");
  122. } else {
  123. // Redirect to the login page
  124. res.redirect("/login");
  125. }
  126. }
  127. exports.Uninstall = async function (req, res) {
  128. if (req.session.role == "admin") {
  129. if (req.body.confirm == 'Yes') {
  130. uninstall(req.body);
  131. }
  132. // Redirect to the home page
  133. res.redirect("/");
  134. } else {
  135. // Redirect to the login page
  136. res.redirect("/login");
  137. }
  138. }