apps.js 4.9 KB

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