mirror of
https://github.com/nextcloud/server.git
synced 2026-06-12 10:10:49 -04:00
fix check if a file is excluded from encryption or not
This commit is contained in:
parent
7e73b25533
commit
c6be1ba8d3
3 changed files with 52 additions and 4 deletions
|
|
@ -389,9 +389,22 @@ class Util {
|
|||
* @return boolean
|
||||
*/
|
||||
public function isExcluded($path) {
|
||||
$root = explode('/', $path, 2);
|
||||
if (isset($root[0])) {
|
||||
if (in_array($root[0], $this->excludedPaths)) {
|
||||
$normalizedPath = \OC\Files\Filesystem::normalizePath($path);
|
||||
$root = explode('/', $normalizedPath, 4);
|
||||
if (count($root) > 2) {
|
||||
|
||||
//detect system wide folders
|
||||
if (in_array($root[1], $this->excludedPaths)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$v1 = $this->userManager->userExists($root[1]);
|
||||
$v2 = in_array($root[2], $this->excludedPaths);
|
||||
|
||||
// detect user specific folders
|
||||
if ($this->userManager->userExists($root[1])
|
||||
&& in_array($root[2], $this->excludedPaths)) {
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@ class Encryption extends Wrapper {
|
|||
'" not found, file will be stored unencrypted');
|
||||
}
|
||||
|
||||
if($shouldEncrypt === true && !$this->util->isExcluded($path) && $encryptionModule !== null) {
|
||||
if($shouldEncrypt === true && !$this->util->isExcluded($fullPath) && $encryptionModule !== null) {
|
||||
$source = $this->storage->fopen($path, $mode);
|
||||
$handle = \OC\Files\Stream\Encryption::wrap($source, $path, $fullPath, $header,
|
||||
$this->uid, $encryptionModule, $this->storage, $this, $this->util, $mode,
|
||||
|
|
|
|||
|
|
@ -98,4 +98,39 @@ class UtilTest extends TestCase {
|
|||
$u->createHeader($header, $em);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providePathsForTestIsExcluded
|
||||
*/
|
||||
public function testIsEcluded($path, $expected) {
|
||||
$this->userManager
|
||||
->expects($this->any())
|
||||
->method('userExists')
|
||||
->will($this->returnCallback(array($this, 'isExcludedCallback')));
|
||||
|
||||
$u = new Util($this->view, $this->userManager);
|
||||
|
||||
$this->assertSame($expected,
|
||||
$u->isExcluded($path)
|
||||
);
|
||||
}
|
||||
|
||||
public function providePathsForTestIsExcluded() {
|
||||
return array(
|
||||
array('files_encryption/foo.txt', true),
|
||||
array('test/foo.txt', false),
|
||||
array('/user1/files_encryption/foo.txt', true),
|
||||
array('/user1/files/foo.txt', false),
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
public function isExcludedCallback() {
|
||||
$args = func_get_args();
|
||||
if ($args[0] === 'user1') {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue