From d80a29b34d2fc4c555647aa8ef2b83efbed7431f Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Fri, 6 Mar 2020 10:21:49 +0200 Subject: [PATCH] Flex storages: added support for custom key length --- .../Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php | 4 +++- system/src/Grav/Framework/Flex/Storage/FolderStorage.php | 1 + system/src/Grav/Framework/Flex/Storage/SimpleStorage.php | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php b/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php index 4b8be255f..a829b3587 100644 --- a/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/AbstractFilesystemStorage.php @@ -34,6 +34,8 @@ abstract class AbstractFilesystemStorage implements FlexStorageInterface protected $dataFormatter; /** @var string */ protected $keyField = 'storage_key'; + /** @var string */ + protected $keyLen = '32'; /** * @return bool @@ -191,7 +193,7 @@ abstract class AbstractFilesystemStorage implements FlexStorageInterface */ protected function generateKey(): string { - return substr(hash('sha256', random_bytes(32)), 0, 32); + return substr(hash('sha256', random_bytes($this->keyLen)), 0, $this->keyLen); } /** diff --git a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php index 61fda5c46..d72151832 100644 --- a/system/src/Grav/Framework/Flex/Storage/FolderStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/FolderStorage.php @@ -641,6 +641,7 @@ class FolderStorage extends AbstractFilesystemStorage $this->prefixed = (bool)($options['prefixed'] ?? strpos($pattern, '/{KEY:2}/')); $this->indexed = (bool)($options['indexed'] ?? false); $this->keyField = $options['key'] ?? 'storage_key'; + $this->keyLen = (int)($options['key_len'] ?? 32); $variables = ['FOLDER' => '%1$s', 'KEY' => '%2$s', 'KEY:2' => '%3$s', 'FILE' => '%4$s', 'EXT' => '%5$s']; $pattern = Utils::simpleTemplate($pattern, $variables); diff --git a/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php b/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php index e65925d61..a159fc221 100644 --- a/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php +++ b/system/src/Grav/Framework/Flex/Storage/SimpleStorage.php @@ -54,6 +54,7 @@ class SimpleStorage extends AbstractFilesystemStorage $this->dataPattern = basename($pattern, $extension) . $extension; $this->dataFolder = $filesystem->dirname($options['folder']); $this->keyField = $options['key'] ?? 'storage_key'; + $this->keyLen = (int)($options['key_len'] ?? 32); $this->prefix = $options['prefix'] ?? null; // Make sure that the data folder exists.