Merge pull request #52706 from nextcloud/info-file-more-encryption-checks

feat: add more encryption checks to info:file
pull/52774/head
Robin Appelman 2025-05-12 13:17:26 +07:00 committed by GitHub
commit 768b101a9d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 0 deletions

@ -8,6 +8,7 @@ declare(strict_types=1);
namespace OC\Core\Command\Info;
use OC\Files\ObjectStore\ObjectStoreStorage;
use OC\Files\Storage\Wrapper\Encryption;
use OC\Files\View;
use OCA\Files_External\Config\ExternalMountPoint;
use OCA\GroupFolders\Mount\GroupMountPoint;
@ -71,6 +72,15 @@ class File extends Command {
} else {
$output->writeln(' <error>encryption key not found</error> should be located at: ' . $keyPath);
}
$storage = $node->getStorage();
if ($storage->instanceOfStorage(Encryption::class)) {
/** @var Encryption $storage */
if (!$storage->hasValidHeader($node->getInternalPath())) {
$output->writeln(' <error>file doesn\'t have a valid encryption header</error>');
}
} else {
$output->writeln(' <error>file is marked as encrypted, but encryption doesn\'t seem to be setup</error>');
}
}
if ($node instanceof Folder && $node->isEncrypted() || $node instanceof OCPFile && $node->getParent()->isEncrypted()) {

@ -905,4 +905,16 @@ class Encryption extends Wrapper {
public function setEnabled(bool $enabled): void {
$this->enabled = $enabled;
}
/**
* Check if the on-disk data for a file has a valid encrypted header
*
* @param string $path
* @return bool
*/
public function hasValidHeader(string $path): bool {
$firstBlock = $this->readFirstBlock($path);
$header = $this->util->parseRawHeader($firstBlock);
return (count($header) > 0);
}
}