re-use logic from _getExpiredPastes()

Scrutinizer pointed out that the dieerr() function isn't available in this
class. Code does work when invoked by migrate script, but this way it would
also work in other contexts.
This commit is contained in:
El RIDO 2022-11-06 09:09:50 +01:00
parent 8ede84f000
commit a799351db3
No known key found for this signature in database
GPG Key ID: 0F5C940A6BD81F92
1 changed files with 33 additions and 24 deletions

View File

@ -410,37 +410,46 @@ class Filesystem extends AbstractData
public function getAllPastes() public function getAllPastes()
{ {
$pastes = array(); $pastes = array();
$subdirs = scandir($this->_path); $firstLevel = array_filter(
if ($subdirs === false) { scandir($this->_path),
dieerr('Unable to list directory ' . $this->_path); 'PrivateBin\Data\Filesystem::_isFirstLevelDir'
} );
$subdirs = preg_grep('/^[^.].$/', $subdirs); if (count($firstLevel) > 0) {
foreach ($firstLevel as $firstKey) {
$secondLevel = array_filter(
scandir($this->_path . DIRECTORY_SEPARATOR . $firstKey),
'PrivateBin\Data\Filesystem::_isSecondLevelDir'
);
foreach ($subdirs as $subdir) { // skip this folder
$subpath = $this->_path . DIRECTORY_SEPARATOR . $subdir; if (count($secondLevel) == 0) {
continue;
$subsubdirs = scandir($subpath);
if ($subsubdirs === false) {
dieerr('Unable to list directory ' . $subpath);
}
$subsubdirs = preg_grep('/^[^.].$/', $subsubdirs);
foreach ($subsubdirs as $subsubdir) {
$subsubpath = $subpath . DIRECTORY_SEPARATOR . $subsubdir;
$files = scandir($subsubpath);
if ($files === false) {
dieerr('Unable to list directory ' . $subsubpath);
} }
$files = preg_grep('/\.php$/', $files);
foreach ($files as $file) { foreach ($secondLevel as $secondKey) {
if (substr($file, 0, 4) === $subdir . $subsubdir) { $path = $this->_path . DIRECTORY_SEPARATOR . $firstKey .
$pastes[] = substr($file, 0, strlen($file) - 4); DIRECTORY_SEPARATOR . $secondKey;
if (!is_dir($path)) {
continue;
} }
$thirdLevel = array_filter(
array_map(
function ($filename) {
return strlen($filename) >= 20 ?
substr($filename, 0, -4) :
$filename;
},
scandir($path)
),
'PrivateBin\\Model\\Paste::isValidId'
);
if (count($thirdLevel) == 0) {
continue;
}
$pastes += $thirdLevel;
} }
} }
} }
return $pastes; return $pastes;
} }