예제 #1
0
 /**
  * @medium
  * test restore file
  */
 function testRestoreFile()
 {
     // generate filename
     $filename = 'tmp-' . uniqid() . '.txt';
     $filename2 = $filename . '.backup';
     // a second file with similar name
     // save file with content
     $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename, $this->dataShort);
     $cryptedFile2 = file_put_contents('crypt:///' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2, $this->dataShort);
     // delete both files
     \OC\Files\Filesystem::unlink($filename);
     \OC\Files\Filesystem::unlink($filename2);
     $trashFiles = $this->view->getDirectoryContent('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
     $trashFileSuffix = null;
     $trashFileSuffix2 = null;
     // find created file with timestamp
     foreach ($trashFiles as $file) {
         if (strncmp($file['path'], $filename, strlen($filename))) {
             $path_parts = pathinfo($file['name']);
             $trashFileSuffix = $path_parts['extension'];
         }
         if (strncmp($file['path'], $filename2, strlen($filename2))) {
             $path_parts = pathinfo($file['name']);
             $trashFileSuffix2 = $path_parts['extension'];
         }
     }
     // prepare file information
     $timestamp = str_replace('d', '', $trashFileSuffix);
     // restore first file
     $this->assertTrue(\OCA\Files_Trashbin\Trashbin::restore($filename . '.' . $trashFileSuffix, $filename, $timestamp));
     // check if file exists
     $this->assertTrue($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
     // check if key for admin exists
     $this->assertTrue($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename . '.key'));
     // check if share key for admin exists
     $this->assertTrue($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/' . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
     // check that second file was NOT restored
     $this->assertFalse($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename2));
     // check if key for admin exists
     $this->assertFalse($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename2 . '.key'));
     // check if share key for admin exists
     $this->assertFalse($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/' . $filename2 . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
 }
예제 #2
0
 /**
  * @medium
  * @brief test delete file
  */
 function testDeleteFile()
 {
     // generate filename
     $filename = 'tmp-' . time() . '.txt';
     // save file with content
     $cryptedFile = file_put_contents('crypt:///' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename, $this->dataShort);
     // test that data was successfully written
     $this->assertTrue(is_int($cryptedFile));
     // check if key for admin exists
     $this->assertTrue($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename . '.key'));
     // check if share key for admin exists
     $this->assertTrue($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/' . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
     // delete file
     \OC\FIles\Filesystem::unlink($filename);
     // check if file not exists
     $this->assertFalse($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files/' . $filename));
     // check if key for admin not exists
     $this->assertFalse($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/keyfiles/' . $filename . '.key'));
     // check if share key for admin not exists
     $this->assertFalse($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_encryption/share-keys/' . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey'));
     // get files
     $trashFiles = $this->view->getDirectoryContent('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/files/');
     $trashFileSuffix = null;
     // find created file with timestamp
     foreach ($trashFiles as $file) {
         if (strncmp($file['path'], $filename, strlen($filename))) {
             $path_parts = pathinfo($file['name']);
             $trashFileSuffix = $path_parts['extension'];
         }
     }
     // check if we found the file we created
     $this->assertNotNull($trashFileSuffix);
     // check if key for admin not exists
     $this->assertTrue($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/keyfiles/' . $filename . '.key.' . $trashFileSuffix));
     // check if share key for admin not exists
     $this->assertTrue($this->view->file_exists('/' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '/files_trashbin/share-keys/' . $filename . '.' . \Test_Encryption_Trashbin::TEST_ENCRYPTION_TRASHBIN_USER1 . '.shareKey.' . $trashFileSuffix));
     // return filename for next test
     return $filename . '.' . $trashFileSuffix;
 }
예제 #3
0
파일: util.php 프로젝트: hjimmy/owncloud
 /**
  * test if all keys get moved to the backup folder correctly
  */
 function testBackupAllKeys()
 {
     self::loginHelper(self::TEST_ENCRYPTION_UTIL_USER1);
     // create some dummy key files
     $encPath = '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '/files_encryption';
     $this->view->file_put_contents($encPath . '/keyfiles/foo.key', 'key');
     $this->view->file_put_contents($encPath . '/share-keys/foo.user1.shareKey', 'share key');
     $this->view->mkdir($encPath . '/keyfiles/subfolder/');
     $this->view->mkdir($encPath . '/share-keys/subfolder/');
     $this->view->file_put_contents($encPath . '/keyfiles/subfolder/foo.key', 'key');
     $this->view->file_put_contents($encPath . '/share-keys/subfolder/foo.user1.shareKey', 'share key');
     $util = new \OCA\Encryption\Util($this->view, self::TEST_ENCRYPTION_UTIL_USER1);
     $util->backupAllKeys('testing');
     $encFolderContent = $this->view->getDirectoryContent($encPath);
     $backupPath = '';
     foreach ($encFolderContent as $c) {
         $name = $c['name'];
         if (substr($name, 0, strlen('backup')) === 'backup') {
             $backupPath = $encPath . '/' . $c['name'];
             break;
         }
     }
     $this->assertTrue($backupPath !== '');
     // check backupDir Content
     $this->assertTrue($this->view->is_dir($backupPath . '/keyfiles'));
     $this->assertTrue($this->view->is_dir($backupPath . '/share-keys'));
     $this->assertTrue($this->view->file_exists($backupPath . '/keyfiles/foo.key'));
     $this->assertTrue($this->view->file_exists($backupPath . '/share-keys/foo.user1.shareKey'));
     $this->assertTrue($this->view->file_exists($backupPath . '/keyfiles/subfolder/foo.key'));
     $this->assertTrue($this->view->file_exists($backupPath . '/share-keys/subfolder/foo.user1.shareKey'));
     $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.private.key'));
     $this->assertTrue($this->view->file_exists($backupPath . '/' . self::TEST_ENCRYPTION_UTIL_USER1 . '.public.key'));
     //cleanup
     $this->view->deleteAll($backupPath);
     $this->view->unlink($encPath . '/keyfiles/foo.key', 'key');
     $this->view->unlink($encPath . '/share-keys/foo.user1.shareKey', 'share key');
 }
예제 #4
0
파일: cache.php 프로젝트: hjimmy/owncloud
 function testGetFolderContentsInSubdir()
 {
     $results = $this->user2View->getDirectoryContent('/Shared/shareddir');
     $this->verifyFiles(array(array('name' => 'bar.txt', 'path' => 'files/container/shareddir/bar.txt', 'mimetype' => 'text/plain', 'usersPath' => 'files/Shared/shareddir/bar.txt'), array('name' => 'emptydir', 'path' => 'files/container/shareddir/emptydir', 'mimetype' => 'httpd/unix-directory', 'usersPath' => 'files/Shared/shareddir/emptydir'), array('name' => 'subdir', 'path' => 'files/container/shareddir/subdir', 'mimetype' => 'httpd/unix-directory', 'usersPath' => 'files/Shared/shareddir/subdir')), $results);
 }
예제 #5
0
 /**
  * @brief delete all share keys of a given file
  * @param \OC_FilesystemView $view
  * @param string $userId owner of the file
  * @param string $filePath path to the file, relative to the owners file dir
  */
 public static function delAllShareKeys($view, $userId, $filePath)
 {
     $filePath = ltrim($filePath, '/');
     if ($filePath === '') {
         \OCP\Util::writeLog('Encryption library', 'Can\'t delete share-keys empty path given!', \OCP\Util::ERROR);
         return false;
     }
     $util = new util($view, $userId);
     if ($util->isSystemWideMountPoint($filePath)) {
         $baseDir = '/files_encryption/share-keys/';
     } else {
         $baseDir = $userId . '/files_encryption/share-keys/';
     }
     if ($view->is_dir($baseDir . $filePath)) {
         $view->unlink($baseDir . $filePath);
     } else {
         $parentDir = dirname($baseDir . $filePath);
         $filename = pathinfo($filePath, PATHINFO_BASENAME);
         foreach ($view->getDirectoryContent($parentDir) as $content) {
             $path = $content['path'];
             if (self::getFilenameFromShareKey($content['name']) === $filename) {
                 $view->unlink('/' . $userId . '/' . $path);
             }
         }
     }
 }