]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix re-encrypt legacy files
authorFlorin Peter <github@florin-peter.de>
Thu, 30 May 2013 23:36:49 +0000 (01:36 +0200)
committerFlorin Peter <github@florin-peter.de>
Thu, 30 May 2013 23:36:49 +0000 (01:36 +0200)
apps/files_encryption/lib/util.php

index 0d663549bf6fa9f7ccf186e052c4fd2277cdb113..b27b26ccaa1051cd1ccb0172f86338f64ff994ea 100644 (file)
@@ -732,40 +732,28 @@ class Util {
                                        // Fetch data from file
                                        $legacyData = $this->view->file_get_contents($legacyFile['path']);
 
-                                       $sharingEnabled = \OCP\Share::isEnabled();
-
-                                       // if file exists try to get sharing users
-                                       if ($this->view->file_exists($legacyFile['path'])) {
-                                               $uniqueUserIds = $this->getSharingUsersArray($sharingEnabled, $legacyFile['path'], $this->userId);
-                                       } else {
-                                               $uniqueUserIds[] = $this->userId;
-                                       }
-
-                                       // Fetch public keys for all users who will share the file
-                                       $publicKeys = Keymanager::getPublicKeys($this->view, $uniqueUserIds);
-
-                                       // Recrypt data, generate catfile
-                                       $recrypted = Crypt::legacyKeyRecryptKeyfile( $legacyData, $legacyPassphrase, $publicKeys );
+                                       // decrypt data, generate catfile
+                                       $decrypted = Crypt::legacyBlockDecrypt($legacyData, $legacyPassphrase);
 
                                        $rawPath = $legacyFile['path'];
-                                       $relPath = $this->stripUserFilesPath($rawPath);
 
-                                       // Save keyfile
-                                       Keymanager::setFileKey($this->view, $relPath, $this->userId, $recrypted['filekey']);
+                                       // enable proxy the ensure encryption is handled
+                                       \OC_FileProxy::$enabled = true;
+
+                                       // Open enc file handle for binary writing, with same filename as original plain file
+                                       $encHandle = $this->view->fopen( $rawPath, 'wb' );
 
-                                       // Save sharekeys to user folders
-                                       Keymanager::setShareKeys($this->view, $relPath, $recrypted['sharekeys']);
+                                       if (is_resource($encHandle)) {
 
-                                       // Overwrite the existing file with the encrypted one
-                                       $this->view->file_put_contents($rawPath, $recrypted['data']);
+                                               // write data to stream
+                                               fwrite($encHandle, $decrypted);
 
-                                       $size = strlen($recrypted['data']);
+                                               // close stream
+                                               fclose($encHandle);
+                                       }
 
-                                       // Add the file to the cache
-                                       \OC\Files\Filesystem::putFileInfo($rawPath, array(
-                                                                                                                                        'encrypted' => true,
-                                                                                                                                        'size' => $size
-                                                                                                                               ), '');
+                                       // disable proxy to prevent file being encrypted twice
+                                       \OC_FileProxy::$enabled = false;
                                }
                        }