[TASK] Introduce AbstractHierarchicalFilesystemDriver 16/22916/3
authorSteffen Ritter <info@rs-websystems.de>
Wed, 7 Aug 2013 09:09:55 +0000 (11:09 +0200)
committerHelmut Hummel <helmut.hummel@typo3.org>
Wed, 7 Aug 2013 11:03:51 +0000 (13:03 +0200)
There are many tasks which apply to all drivers working on an
Hierarchical FileSystem (NFS, WebDav, LocalDriver, ....).
When it comes to security we dont want custom drivers to implement
that all on their own, but provide it by the System.

Introducing AbstractHierarchicalFilesystemDriver enables us to
do so, without breaking compatibility (Base class, interface
and Classname stay the same).

Releases: 6.2, 6.1, 6.0
Resolves: #50867
Change-Id: Ib1b45c6ad384f82f7a5138372ed91269b8db38c2
Reviewed-on: https://review.typo3.org/22916
Reviewed-by: Nicole Cordes
Tested-by: Nicole Cordes
Reviewed-by: Helmut Hummel
Tested-by: Helmut Hummel
typo3/sysext/core/Classes/Resource/Driver/AbstractHierarchicalFilesystemDriver.php [new file with mode: 0644]
typo3/sysext/core/Classes/Resource/Driver/LocalDriver.php

diff --git a/typo3/sysext/core/Classes/Resource/Driver/AbstractHierarchicalFilesystemDriver.php b/typo3/sysext/core/Classes/Resource/Driver/AbstractHierarchicalFilesystemDriver.php
new file mode 100644 (file)
index 0000000..41762c4
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+namespace TYPO3\CMS\Core\Resource\Driver;
+
+/***************************************************************
+ * Copyright notice
+ *
+ * (c) 2013 Steffen Ritter <steffen.ritter@typo3.org>
+ * All rights reserved
+ *
+ * This script is part of the TYPO3 project. The TYPO3 project is
+ * free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The GNU General Public License can be found at
+ * http://www.gnu.org/copyleft/gpl.html.
+ * A copy is found in the textfile GPL.txt and important notices to the license
+ * from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ * This script is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Class AbstractHierarchicalFilesystemDriver
+ *
+ * @package TYPO3\CMS\Core\Resource\Driver
+ */
+abstract class AbstractHierarchicalFilesystemDriver extends AbstractDriver {
+
+       /**
+        * Wrapper for \TYPO3\CMS\Core\Utility\GeneralUtility::validPathStr()
+        *
+        * @param string $theFile Filepath to evaluate
+        * @return boolean TRUE if no '/', '..' or '\' is in the $theFile
+        * @see \TYPO3\CMS\Core\Utility\GeneralUtility::validPathStr()
+        */
+       protected function isPathValid($theFile) {
+               return \TYPO3\CMS\Core\Utility\GeneralUtility::validPathStr($theFile);
+       }
+
+       /**
+        * Makes sure the Path given as parameter is valid
+        *
+        * @param string $filePath The file path (including the file name!)
+        * @return void
+        * @throws \TYPO3\CMS\Core\Resource\Exception\InvalidPathException
+        */
+       protected function checkFilePath($filePath) {
+               // filePath must be valid
+               if (!$this->isPathValid($filePath)) {
+                       throw new \TYPO3\CMS\Core\Resource\Exception\InvalidPathException('File ' . $filePath . ' is not valid (".." and "//" is not allowed in path).', 1320286857);
+               }
+       }
+}
+
+?>
\ No newline at end of file
index 22bc6b8..3b40425 100644 (file)
@@ -37,7 +37,7 @@ use TYPO3\CMS\Core\Utility\PathUtility;
  *
  * @author Andreas Wolf <andreas.wolf@ikt-werk.de>
  */
-class LocalDriver extends \TYPO3\CMS\Core\Resource\Driver\AbstractDriver {
+class LocalDriver extends AbstractHierarchicalFilesystemDriver {
 
        /**
         * The absolute base path. It always contains a trailing slash.
@@ -239,16 +239,6 @@ class LocalDriver extends \TYPO3\CMS\Core\Resource\Driver\AbstractDriver {
                return $this->extractFileInformation($absoluteFilePath, $dirPath);
        }
 
-       /**
-        * Wrapper for \TYPO3\CMS\Core\Utility\GeneralUtility::validPathStr()
-        *
-        * @param string $theFile Filepath to evaluate
-        * @return boolean TRUE if no '/', '..' or '\' is in the $theFile
-        * @see \TYPO3\CMS\Core\Utility\GeneralUtility::validPathStr()
-        */
-       protected function isPathValid($theFile) {
-               return \TYPO3\CMS\Core\Utility\GeneralUtility::validPathStr($theFile);
-       }
 
        /**
         * Returns a string where any character not matching [.a-zA-Z0-9_-] is
@@ -961,18 +951,6 @@ class LocalDriver extends \TYPO3\CMS\Core\Resource\Driver\AbstractDriver {
                return $newIdentifier;
        }
 
-       /**
-        * Makes sure the Path given as parameter is valid
-        *
-        * @param string $filePath The file path (including the file name!)
-        * @return void
-        */
-       protected function checkFilePath($filePath) {
-               // filePath must be valid
-               if (!$this->isPathValid($filePath)) {
-                       throw new \TYPO3\CMS\Core\Resource\Exception\InvalidPathException('File ' . $filePath . ' is not valid (".." and "//" is not allowed in path).', 1320286857);
-               }
-       }
 
        /**
         * Renames a folder in this storage.