From 39354a0cc0ef32ddd432d8421dc8483002cd855b Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 28 Sep 2020 15:25:58 +0200 Subject: [dozmod] Implement deleting orphaned files from vm store This is the UI part that communicates with dmsd to show or delete all files on the vm store that don't belong to a known VM. Might be dangerous, use wisely. Closes #3321 --- .../dozmod/pages/expiredimages.inc.php | 105 +++++++++++++-------- 1 file changed, 68 insertions(+), 37 deletions(-) (limited to 'modules-available/dozmod/pages/expiredimages.inc.php') diff --git a/modules-available/dozmod/pages/expiredimages.inc.php b/modules-available/dozmod/pages/expiredimages.inc.php index 2b5a2274..ffd7b026 100644 --- a/modules-available/dozmod/pages/expiredimages.inc.php +++ b/modules-available/dozmod/pages/expiredimages.inc.php @@ -5,40 +5,7 @@ class SubPage public static function doPreprocess() { - $action = Request::post('action', false, 'string'); - if ($action === 'delimages') { - if (User::hasPermission("expiredimages.delete")) { - $result = self::handleDeleteImages(); - if (!empty($result)) { - Message::addInfo('delete-images', $result); - } - Util::redirect('?do=DozMod'); - } - } - } - - private static function handleDeleteImages() - { - $images = Request::post('images', false); - if (is_array($images)) { - foreach ($images as $image => $val) { - if (strtolower($val) !== 'on') - continue; - Database::exec("UPDATE sat.imageversion SET deletestate = 'WANT_DELETE'" - . " WHERE deletestate = 'SHOULD_DELETE' AND imageversionid = :imageversionid", array( - 'imageversionid' => $image - )); - } - if (!empty($images)) { - $ret = Download::asStringPost('http://127.0.0.1:9080/do/delete-images', false, 10, $code); - if ($code == 999) { - $ret .= "\nConnection to DMSD failed."; - } - return $ret; - } - } - return false; } private static function loadExpiredImages() @@ -80,7 +47,9 @@ class SubPage if (empty($expiredImages)) { Message::addSuccess('no-expired-images'); } else { - Render::addTemplate('images-delete', array('images' => $expiredImages, 'allowedDelete' => User::hasPermission("expiredimages.delete"))); + $data = ['images' => $expiredImages]; + Permission::addGlobalTags($data['perm'], null, ['expiredimages.delete', 'orphaned.scan']); + Render::addTemplate('images-delete', $data); } } @@ -88,10 +57,72 @@ class SubPage { $action = Request::post('action'); if ($action === 'delimages') { - User::assertPermission("expiredimages.delete"); - die(self::handleDeleteImages()); + self::handleDeleteImages(); + } elseif ($action === 'orphaned') { + self::handleOrphaned(); + } else { + echo 'Huh?'; + } + } + + private static function handleDeleteImages() + { + User::assertPermission("expiredimages.delete"); + $images = Request::post('images', false); + $result = false; + if (is_array($images)) { + foreach ($images as $image => $val) { + if (strtolower($val) !== 'on') + continue; + Database::exec("UPDATE sat.imageversion SET deletestate = 'WANT_DELETE'" + . " WHERE deletestate = 'SHOULD_DELETE' AND imageversionid = :imageversionid", array( + 'imageversionid' => $image + )); + } + if (!empty($images)) { + $result = Download::asStringPost('http://127.0.0.1:9080/do/delete-images', false, 10, $code); + if ($code == 999) { + $result .= "\nConnection to DMSD failed."; + } + } + } + if (!empty($result)) { + echo $result; + } + } + + private static function handleOrphaned() + { + if (Request::post('delete', 0, 'int') !== 0) { + User::assertPermission("orphaned.delete"); + $action = 'delete'; + } else { + User::assertPermission("orphaned.scan"); + $action = 'scan'; + } + // Talk to dmsd + $result = Download::asStringPost('http://127.0.0.1:9080/do/scan-orphaned-files', ['action' => $action], + 10, $code); + if ($code == 999) { + $result = '
' + . $result . ' - Connection to DMSD failed.
'; + } else { + $json = json_decode($result, true); + if (is_array($json)) { + $result = []; + $showDelete = false; + foreach ($json as $k => $v) { + $result[] = ['file' => $k, 'status' => $v]; + if ($v === 'EXISTS') { + $showDelete = true; + } + } + $data = ['files' => $result, 'show_delete' => $showDelete]; + Permission::addGlobalTags($data['perm'], null, ['orphaned.delete']); + $result = Render::parse('images-orphaned', $data); + } } - die('Huh?'); + echo $result; } } -- cgit v1.2.3-55-g7522