[Pkg-owncloud-commits] [owncloud] 45/111: instead of writing etmp files we write the dummy file to data/user/cache to avoid that etmp files show up in the users files list

David Prévot taffit at moszumanska.debian.org
Wed Nov 20 21:38:39 UTC 2013


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit faa08da9441f0f4661364f97f2855b55f726e5fa
Author: Bjoern Schiessle <schiessle at owncloud.com>
Date:   Thu Nov 14 17:32:21 2013 +0100

    instead of writing etmp files we write the dummy file to data/user/cache to avoid that etmp files show up in the users files list
---
 apps/files_encryption/lib/helper.php |   51 ++++++++++++++++++++++++++--------
 apps/files_encryption/lib/proxy.php  |   12 ++++++--
 apps/files_encryption/lib/stream.php |    2 +-
 3 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php
index 314ac57..0ac6fcf 100755
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
@@ -165,7 +165,7 @@ class Helper {
 	public static function isPartialFilePath($path) {
 
 		$extension = pathinfo($path, PATHINFO_EXTENSION);
-		if ( $extension === 'part' || $extension === 'etmp') {
+		if ( $extension === 'part') {
 			return true;
 		} else {
 			return false;
@@ -183,7 +183,7 @@ class Helper {
 	public static function stripPartialFileExtension($path) {
 		$extension = pathinfo($path, PATHINFO_EXTENSION);
 
-		if ( $extension === 'part' || $extension === 'etmp') {
+		if ( $extension === 'part') {
 
 			$newLength = strlen($path) - 5; // 5 = strlen(".part") = strlen(".etmp")
 			$fPath = substr($path, 0, $newLength);
@@ -256,24 +256,53 @@ class Helper {
 	}
 
 	/**
-	 * @brief get path to the correspondig file in data/user/files
+	 * @brief get path to the correspondig file in data/user/files if path points
+	 *        to a version or to a file in cache
 	 * @param string $path path to a version or a file in the trash
 	 * @return string path to correspondig file relative to data/user/files
 	 */
 	public static function getPathToRealFile($path) {
 		$trimmed = ltrim($path, '/');
 		$split = explode('/', $trimmed);
-
-		if (count($split) < 3 || $split[1] !== "files_versions") {
-			return false;
+		$result = false;
+
+		if (count($split) >= 3 && ($split[1] === "files_versions" || $split[1] === 'cache')) {
+			$sliced = array_slice($split, 2);
+			$result = implode('/', $sliced);
+			if ($split[1] === "files_versions") {
+				// we skip user/files
+				$sliced = array_slice($split, 2);
+				$relPath = implode('/', $sliced);
+				//remove the last .v
+				$result = substr($relPath, 0, strrpos($relPath, '.v'));
+			}
+			if ($split[1] === "cache") {
+				// we skip /user/cache/transactionId
+				$sliced = array_slice($split, 3);
+				$result = implode('/', $sliced);
+				//prepare the folders
+				self::mkdirr($path, new \OC\Files\View('/'));
+			}
 		}
 
-		$sliced = array_slice($split, 2);
-		$realPath = implode('/', $sliced);
-		//remove the last .v
-		$realPath = substr($realPath, 0, strrpos($realPath, '.v'));
+		return $result;
+	}
 
-		return $realPath;
+	/**
+	 * @brief create directory recursively
+	 * @param string $path
+	 * @param \OC\Files\View $view
+	 */
+	public static function mkdirr($path, $view) {
+		$dirname = \OC_Filesystem::normalizePath(dirname($path));
+		$dirParts = explode('/', $dirname);
+		$dir = "";
+		foreach ($dirParts as $part) {
+			$dir = $dir . '/' . $part;
+			if (!$view->file_exists($dir)) {
+				$view->mkdir($dir);
+			}
+		}
 	}
 
 	/**
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index e2bc8f6..54c3b9c 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -90,7 +90,13 @@ class Proxy extends \OC_FileProxy {
 					return true;
 				}
 
-				$handle = fopen('crypt://' . $path . '.etmp', 'w');
+				// create random cache folder
+				$cacheFolder = rand();
+				$path_slices = explode('/', \OC_Filesystem::normalizePath($path));
+				$path_slices[2] = "cache/".$cacheFolder;
+				$tmpPath = implode('/', $path_slices);
+
+				$handle = fopen('crypt://' . $tmpPath, 'w');
 				if (is_resource($handle)) {
 
 					// write data to stream
@@ -104,10 +110,10 @@ class Proxy extends \OC_FileProxy {
 					\OC_FileProxy::$enabled = false;
 
 					// get encrypted content
-					$data = $view->file_get_contents($path . '.etmp');
+					$data = $view->file_get_contents($tmpPath);
 
 					// remove our temp file
-					$view->unlink($path . '.etmp');
+					$view->deleteAll('/' . \OCP\User::getUser() . '/cache/' . $cacheFolder);
 
 					// re-enable proxy - our work is done
 					\OC_FileProxy::$enabled = $proxyStatus;
diff --git a/apps/files_encryption/lib/stream.php b/apps/files_encryption/lib/stream.php
index 5ce5caf..8c81bb8 100644
--- a/apps/files_encryption/lib/stream.php
+++ b/apps/files_encryption/lib/stream.php
@@ -108,7 +108,7 @@ class Stream {
 		}
 
 		if($this->relPath === false) {
-			\OCP\Util::writeLog('Encryption library', 'failed to open file "' . $this->rawPath . '" expecting a path to user/files or to user/files_versions', \OCP\Util::ERROR);
+			\OCP\Util::writeLog('Encryption library', 'failed to open file "' . $this->rawPath . '" expecting a path to "files", "files_versions" or "cache"', \OCP\Util::ERROR);
 			return false;
 		}
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list