system.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import { User, ServerSettings } from '../database/config.js';
  2. import { readFileSync } from 'fs';
  3. // Navbar
  4. export async function Navbar (req) {
  5. let username = req.session.username;
  6. let host = '' + req.session.host;
  7. let language = await getLanguage(req);
  8. // Check if the user wants to hide their profile name.
  9. if (req.session.userID != '00000000-0000-0000-0000-000000000000') {
  10. let user = await User.findOne({ where: { userID: req.session.userID }});
  11. let preferences = JSON.parse(user.preferences);
  12. if (preferences.hide_profile == true) { username = 'Anon'; }
  13. }
  14. let sponsored = await ServerSettings.findOne({ where: { key: 'sponsored' }});
  15. if (sponsored) { username = `<label class="text-yellow">${username}</label>`; }
  16. let [host0_active, host0_toggle, host0_tag, host0_ip, host0_port] = ['', '', '', '', ''];
  17. let [host1_active, host1_toggle, host1_tag, host1_ip, host1_port] = ['', '', '', '', ''];
  18. let [host2_active, host2_toggle, host2_tag, host2_ip, host2_port] = ['', '', '', '', ''];
  19. let [host3_active, host3_toggle, host3_tag, host3_ip, host3_port] = ['', '', '', '', ''];
  20. let [host4_active, host4_toggle, host4_tag, host4_ip, host4_port] = ['', '', '', '', ''];
  21. const [host2, created2] = await ServerSettings.findOrCreate({ where: { key: 'host2' }, defaults: { key: 'host2', value: '' }});
  22. const [host3, created3] = await ServerSettings.findOrCreate({ where: { key: 'host3' }, defaults: { key: 'host3', value: '' }});
  23. const [host4, created4] = await ServerSettings.findOrCreate({ where: { key: 'host4' }, defaults: { key: 'host4', value: '' }});
  24. if (host2.value) { host2_toggle = 'checked'; [host2_tag, host2_ip, host2_port] = host2.value.split(','); }
  25. if (host3.value) { host3_toggle = 'checked'; [host3_tag, host3_ip, host3_port] = host3.value.split(','); }
  26. if (host4.value) { host4_toggle = 'checked'; [host4_tag, host4_ip, host4_port] = host4.value.split(','); }
  27. let host_buttons = '';
  28. if (host == '0') { host0_active = 'text-yellow'; }
  29. if (host == '1') { host1_active = 'text-yellow'; }
  30. if (host == '2') { host2_active = 'text-yellow'; }
  31. if (host == '3') { host3_active = 'text-yellow'; }
  32. if (host == '4') { host4_active = 'text-yellow'; }
  33. if (host2_toggle || host3_toggle || host4_toggle) { host_buttons += `<a href="/0/dashboard" class="btn ${host0_active}" title="All">All</a> <a href="/1/dashboard" class="btn ${host1_active}" title="Host 1">Host 1</a>`; }
  34. if (host2_toggle) { host_buttons += `<a href="/2/dashboard" class="btn ${host2_active}" title="${host2_tag}">${host2_tag}</a>`; }
  35. if (host3_toggle) { host_buttons += `<a href="/3/dashboard" class="btn ${host3_active}" title="${host3_tag}">${host3_tag}</a>`; }
  36. if (host4_toggle) { host_buttons += `<a href="/4/dashboard" class="btn ${host4_active}" title="${host4_tag}">${host4_tag}</a>`; }
  37. let navbar = readFileSync('./views/partials/navbar.html', 'utf8');
  38. if (language == 'english') {
  39. navbar = navbar.replace(/Username/g, username);
  40. navbar = navbar.replace(/Userrole/g, req.session.role);
  41. navbar = navbar.replace(/HostButtons/g, host_buttons);
  42. return navbar;
  43. } else {
  44. let lang = readFileSync(`./languages/${language}.json`, 'utf8');
  45. lang = JSON.parse(lang);
  46. navbar = navbar.replace(/Dashboard/g, lang.Dashboard);
  47. navbar = navbar.replace(/Images/g, lang.Images);
  48. navbar = navbar.replace(/Volumes/g, lang.Volumes);
  49. navbar = navbar.replace(/Networks/g, lang.Networks);
  50. navbar = navbar.replace(/Apps/g, lang.Apps);
  51. navbar = navbar.replace(/Users/g, lang.Users);
  52. navbar = navbar.replace(/Syslogs/g, lang.Syslogs);
  53. navbar = navbar.replace(/Search/g, lang.Search);
  54. navbar = navbar.replace(/Account/g, lang.Account);
  55. navbar = navbar.replace(/Notifications/g, lang.Notifications);
  56. navbar = navbar.replace(/Preferences/g, lang.Preferences);
  57. navbar = navbar.replace(/Settings/g, lang.Settings);
  58. navbar = navbar.replace(/Logout/g, lang.Logout);
  59. navbar = navbar.replace(/Username/g, username);
  60. navbar = navbar.replace(/Userrole/g, req.session.role);
  61. navbar = navbar.replace(/HostButtons/g, host_buttons);
  62. return navbar;
  63. }
  64. }
  65. // Sidebar
  66. export async function Sidebar (req) {
  67. let language = await getLanguage(req);
  68. let sidebar = readFileSync('./views/partials/sidebar.html', 'utf8');
  69. if (language == 'english') {
  70. return sidebar;
  71. } else {
  72. let lang = readFileSync(`./languages/${language}.json`, 'utf8');
  73. lang = JSON.parse(lang);
  74. sidebar = sidebar.replace(/Account/g, lang.Account);
  75. sidebar = sidebar.replace(/Notifications/g, lang.Notifications);
  76. sidebar = sidebar.replace(/Preferences/g, lang.Preferences);
  77. sidebar = sidebar.replace(/Settings/g, lang.Settings);
  78. sidebar = sidebar.replace(/Sponsors/g, lang.Sponsors);
  79. sidebar = sidebar.replace(/Credits/g, lang.Credits);
  80. return sidebar;
  81. }
  82. }
  83. // Footer
  84. export async function Footer (req) {
  85. let language = await getLanguage(req);
  86. let footer = readFileSync('./views/partials/footer.html', 'utf8');
  87. let package_info = readFileSync(`package.json`, 'utf8');
  88. package_info = JSON.parse(package_info);
  89. let build_version = package_info.version.split('.').pop();
  90. footer = footer.replace(/BuildVersion/g, build_version);
  91. if (language == 'english') {
  92. return footer;
  93. } else {
  94. let lang = readFileSync(`./languages/${language}.json`, 'utf8');
  95. lang = JSON.parse(lang);
  96. footer = footer.replace(/Documentation/g, lang.Documentation);
  97. return footer;
  98. }
  99. }
  100. // Header Alert
  101. export function Alert (type, message) {
  102. return `
  103. <div class="alert alert-${type} alert-dismissible" role="alert" style="margin-bottom: 0;">
  104. <div class="d-flex">
  105. <div>
  106. <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon alert-icon"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M5 12l5 5l10 -10"></path></svg>
  107. </div>
  108. <div>
  109. ${message}
  110. </div>
  111. </div>
  112. <a class="btn-close" data-bs-dismiss="alert" aria-label="close"></a>
  113. </div>`;
  114. }
  115. export async function getLanguage (req) {
  116. // No userID if authentication is disabled.
  117. if (req.session.userID == '00000000-0000-0000-0000-000000000000') {
  118. let user = await User.findOne({ where: { role: 'admin' }});
  119. let preferences = JSON.parse(user.preferences);
  120. return preferences.language;
  121. } else {
  122. let user = await User.findOne({ where: { userID: req.session.userID }});
  123. let preferences = JSON.parse(user.preferences);
  124. return preferences.language;
  125. }
  126. }
  127. export function Capitalize (string) {
  128. return string.charAt(0).toUpperCase() + string.slice(1);
  129. }