apps.js 4.9 KB

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