import { getImagesForAdmin, DeleteImage, ResetFlagImage} from "../queries/imageQueries.js"; import { getAdminID } from "../queries/adminQueries.js"; import { getAllFlags } from "../queries/flagQueries.js"; import { CreateImage } from "../server.js"; import { Router } from "express"; import exec from 'child_process'; import multer from 'multer'; const storage = multer.memoryStorage(); const upload = multer({ storage }); const router = Router(); // create an Image router.post('/AddImage', upload.array("files"), (req,res) => { // parse the json data that came in and the files const jsondata = req.body.data; let parsedjsondata = JSON.parse(jsondata); const files = req.files; // get all of the values const root = parsedjsondata.root; const imgname = parsedjsondata.imgname; const email = parsedjsondata.email; // create image and return CreateImage(root, imgname, email, files); return res.status(200).json({ success: true }); }); // get all images for Admin router.post('/getImages', async (req,res) => { const { email } = req.body; try{ const Admin = await getAdminID(email); const images = await getImagesForAdmin(Admin); res.json(images); } catch(err){ console.error("Error getting images:", err.message); return res.status(500).json({error: "COULD NOT GET IMAGES"}); } }); // delete image and replace the image of the flag that's using it router.post('/DeleteImageReplaceFlags', (req,res) => { const { images } = req.body; return getAllFlags().then((flags) => { for (var i=0; i < flags.length; i++) { // if the flag's image is being deleted change it to ubuntu if (flags[i].Image === images) { ResetFlagImage(flags[i]); } } // delete the images from the database and from docker if (images === 'ubuntu') return res.status(201).json({ success: true }); else { DeleteImage(images); try { exec.exec(`docker rmi -f ${images}`); } catch (err) { console.error(err.message); } } return res.status(200).json({ success: true }); }); }); export default router;