import { docker } from '../server.js'; import { addAlert } from './dashboard.js'; export const Images = async function(req, res) { let action = req.params.action; if (action == "remove") { let images = req.body.select; if (typeof(images) == 'string') { images = [images]; } for (let i = 0; i < images.length; i++) { if (images[i] != 'on') { try { console.log(`Removing image: ${images[i]}`); let image = docker.getImage(images[i]); await image.remove(); } catch (error) { console.log(`Unable to remove image: ${images[i]}`); } } } res.redirect("/images"); return; } else if (action == "add") { let image = req.body.image; let tag = req.body.tag || 'latest'; try { console.log(`Pulling image: ${image}:${tag}`); await docker.pull(`${image}:${tag}`); } catch (error) { console.log(`Unable to pull image: ${image}:${tag}`); } res.redirect("/images"); return; } let containers = await docker.listContainers({ all: true }); let container_images = []; for (let i = 0; i < containers.length; i++) { container_images.push(containers[i].Image); } let images = await docker.listImages({ all: true }); let image_list = ` ` for (let i = 0; i < images.length; i++) { let name = ''; let tag = ''; try { name = images[i].RepoTags[0].split(':')[0]; } catch {} try { tag = images[i].RepoTags[0].split(':')[1]; } catch {} let date = new Date(images[i].Created * 1000); let created = date.toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' }); let size = images[i].Size / 1000 / 1000; // to match docker desktop size = size.toFixed(2); let status = ''; try { if (container_images.includes(images[i].RepoTags[0])) { status = 'In use'; } } catch {} let details = ` ${name} ${tag} ${images[i].Id} ${status} ${created} ${size} MB ` image_list += details; } image_list += `` res.render("images", { name: req.session.user, role: req.session.role, avatar: req.session.user.charAt(0).toUpperCase(), image_list: image_list, image_count: images.length, alert: '', }); }