]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix first time encryption after app was enabled
authorBjörn Schießle <schiessle@owncloud.com>
Fri, 24 May 2013 15:35:00 +0000 (17:35 +0200)
committerBjörn Schießle <schiessle@owncloud.com>
Fri, 24 May 2013 15:35:00 +0000 (17:35 +0200)
apps/files_encryption/lib/util.php

index 2980aa94e0c2d00b1e39b2a5c3654526f62e0b96..cac67d496e8261ac34e6c5221e8d03138ca072eb 100644 (file)
@@ -421,7 +421,7 @@ class Util
 
                                                        // If the file uses old
                                                        // encryption system
-                                               } elseif ( Crypt::isLegacyEncryptedContent( $this->tail( $filePath, 3 ), $relPath ) ) {
+                                               } elseif ( Crypt::isLegacyEncryptedContent( $data, $relPath ) ) {
 
                                                        $found['legacy'][] = array( 'name' => $file, 'path' => $filePath );
 
@@ -672,39 +672,28 @@ class Util
                                $relPath = $plainFile['path'];
 
                                //relative to /data
-                               $rawPath = $this->userId . '/files/' . $plainFile['path'];
+                               $rawPath = '/'.$this->userId . '/files/' . $plainFile['path'];
 
                                // Open plain file handle for binary reading
-                               $plainHandle1 = $this->view->fopen( $rawPath, 'rb' );
+                               $plainHandle = $this->view->fopen( $rawPath, 'rb' );
 
-                               // 2nd handle for moving plain file - view->rename() doesn't work, this is a workaround
-                               $plainHandle2 = $this->view->fopen( $rawPath . '.plaintmp', 'wb' );
+                               // Open enc file handle for binary writing, with same filename as original plain file
+                               $encHandle = fopen( 'crypt://' . $relPath.'.tmp', 'wb' );
 
                                // Move plain file to a temporary location
-                               stream_copy_to_stream( $plainHandle1, $plainHandle2 );
-
-                               // Close access to original file
-                               // $this->view->fclose( $plainHandle1 ); // not implemented in view{}
-                               // Delete original plain file so we can rename enc file later
-                               $this->view->unlink( $rawPath );
+                               $size = stream_copy_to_stream( $plainHandle, $encHandle );
 
-                               // Open enc file handle for binary writing, with same filename as original plain file
-                               $encHandle = fopen( 'crypt://' . $relPath, 'wb' );
+                               fclose($encHandle);
 
-                               // Save data from plain stream to new encrypted file via enc stream
-                               // NOTE: Stream{} will be invoked for handling 
-                               // the encryption, and should handle all keys 
-                               // and their generation etc. automatically
-                               stream_copy_to_stream( $plainHandle2, $encHandle );
+                               $fakeRoot = $this->view->getRoot();
+                               $this->view->chroot('/'.$this->userId.'/files');
 
-                               // get file size
-                               $size = $this->view->filesize( $rawPath . '.plaintmp' );
+                               $this->view->rename($relPath . '.tmp', $relPath);
 
-                               // Delete temporary plain copy of file
-                               $this->view->unlink( $rawPath . '.plaintmp' );
+                               $this->view->chroot($fakeRoot);
 
                                // Add the file to the cache
-                               \OC\Files\Filesystem::putFileInfo( $plainFile['path'], array( 'encrypted' => true, 'size' => $size, 'unencrypted_size' => $size ) );
+                               \OC\Files\Filesystem::putFileInfo( $relPath, array( 'encrypted' => true, 'size' => $size, 'unencrypted_size' => $size ) );
                        }
 
                        // Encrypt legacy encrypted files