networks.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { docker } from '../server.js';
  2. export const Networks = async function(req, res) {
  3. let container_networks = [];
  4. let network_name = '';
  5. console.log(req.params.host);
  6. // List all containers
  7. let containers = await docker.listContainers({ all: true });
  8. // Loop through the containers to find out which networks are being used
  9. for (let i = 0; i < containers.length; i++) {
  10. // console.log(Object.keys(containers[i].NetworkSettings.Networks)[0]);
  11. try { network_name += containers[i].HostConfig.NetworkMode; } catch {}
  12. try { container_networks.push(containers[i].NetworkSettings.Networks[network_name].NetworkID); } catch {}
  13. }
  14. // List all networks
  15. let networks = await docker.listNetworks({ all: true });
  16. // Uses template literals to build the networks table
  17. let network_list = `
  18. <thead>
  19. <tr>
  20. <th class="w-1"><input class="form-check-input m-0 align-middle" name="select" type="checkbox" aria-label="Select all" onclick="selectAll()"></th>
  21. <th><label class="table-sort" data-sort="sort-name">Name</label></th>
  22. <th><label class="table-sort" data-sort="sort-city">ID</label></th>
  23. <th><label class="table-sort" data-sort="sort-score">Status</label></th>
  24. <th><label class="table-sort" data-sort="sort-date">Created</label></th>
  25. <th><label class="table-sort" data-sort="sort-progress">Action</label></th>
  26. </tr>
  27. </thead>
  28. <tbody class="table-tbody">`
  29. for (let i = 0; i < networks.length; i++) {
  30. let status = '';
  31. // Check if the network is in use
  32. try { if (container_networks.includes(networks[i].Id)) { status = `In use`; } } catch {}
  33. // Create the row for the network entry
  34. let details = `
  35. <tr>
  36. <td><input class="form-check-input m-0 align-middle" name="select" value="${networks[i].Id}" type="checkbox" aria-label="Select"></td>
  37. <td class="sort-name">${networks[i].Name}</td>
  38. <td class="sort-city">${networks[i].Id}</td>
  39. <td class="sort-score text-green">${status}</td>
  40. <td class="sort-date" data-date="1628122643">${networks[i].Created}</td>
  41. <td class="text-end"><a class="btn" href="#">Details</a></td>
  42. </tr>`
  43. // Add the row to the network list
  44. network_list += details;
  45. }
  46. network_list += `</tbody>`
  47. res.render("networks", {
  48. username: req.session.username,
  49. role: req.session.role,
  50. avatar: req.session.username.charAt(0).toUpperCase(),
  51. network_list: network_list,
  52. network_count: networks.length,
  53. alert: '',
  54. link1: '',
  55. link2: '',
  56. link3: '',
  57. link4: '',
  58. link5: '',
  59. link6: '',
  60. link7: '',
  61. link8: '',
  62. link9: '',
  63. });
  64. }
  65. export const removeNetwork = async function(req, res) {
  66. // Grab the list of networks
  67. let networks = req.body.select;
  68. // Make sure the value is an array
  69. if (typeof(networks) == 'string') { networks = [networks]; }
  70. // Loop through the array
  71. for (let i = 0; i < networks.length; i++) {
  72. if (networks[i] != 'on') {
  73. try {
  74. let network = docker.getNetwork(networks[i]);
  75. await network.remove();
  76. }
  77. catch {
  78. console.log(`Unable to remove network: ${networks[i]}`);
  79. }
  80. }
  81. }
  82. res.redirect("/networks");
  83. }