|
|
|
|
@ -57,9 +57,6 @@ class Encryption implements IEncryptionModule { |
|
|
|
|
/** @var string */ |
|
|
|
|
private $path; |
|
|
|
|
|
|
|
|
|
/** @var string */ |
|
|
|
|
private $realPath; |
|
|
|
|
|
|
|
|
|
/** @var string */ |
|
|
|
|
private $user; |
|
|
|
|
|
|
|
|
|
@ -108,6 +105,9 @@ class Encryption implements IEncryptionModule { |
|
|
|
|
/** @var int Current version of the file */ |
|
|
|
|
private $version = 0; |
|
|
|
|
|
|
|
|
|
/** @var array remember encryption signature version */ |
|
|
|
|
private static $rememberVersion = []; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* |
|
|
|
|
@ -172,7 +172,6 @@ class Encryption implements IEncryptionModule { |
|
|
|
|
*/ |
|
|
|
|
public function begin($path, $user, $mode, array $header, array $accessList) { |
|
|
|
|
$this->path = $this->getPathToRealFile($path); |
|
|
|
|
$this->realPath = $path; |
|
|
|
|
$this->accessList = $accessList; |
|
|
|
|
$this->user = $user; |
|
|
|
|
$this->isWriteOperation = false; |
|
|
|
|
@ -191,7 +190,7 @@ class Encryption implements IEncryptionModule { |
|
|
|
|
// always use the version from the original file, also part files |
|
|
|
|
// need to have a correct version number if they get moved over to the |
|
|
|
|
// final location |
|
|
|
|
$this->version = (int)$this->keyManager->getVersion($this->stripPartFileExtension($this->realPath), new View()); |
|
|
|
|
$this->version = (int)$this->keyManager->getVersion($this->stripPartFileExtension($path), new View()); |
|
|
|
|
|
|
|
|
|
if ( |
|
|
|
|
$mode === 'w' |
|
|
|
|
@ -241,7 +240,14 @@ class Encryption implements IEncryptionModule { |
|
|
|
|
public function end($path, $position = 0) { |
|
|
|
|
$result = ''; |
|
|
|
|
if ($this->isWriteOperation) { |
|
|
|
|
$this->keyManager->setVersion($this->path, $this->version+1, new View()); |
|
|
|
|
$this->keyManager->setVersion($path, $this->version + 1, new View()); |
|
|
|
|
// in case of a part file we remember the new signature versions |
|
|
|
|
// the version will be set later on update. |
|
|
|
|
// This way we make sure that other apps listening to the pre-hooks |
|
|
|
|
// still get the old version which should be the correct value for them |
|
|
|
|
if (Scanner::isPartialFile($path)) { |
|
|
|
|
self::$rememberVersion[$this->stripPartFileExtension($path)] = $this->version + 1; |
|
|
|
|
} |
|
|
|
|
if (!empty($this->writeCache)) { |
|
|
|
|
$result = $this->crypt->symmetricEncryptFileContent($this->writeCache, $this->fileKey, $this->version + 1, $position); |
|
|
|
|
$this->writeCache = ''; |
|
|
|
|
@ -367,11 +373,16 @@ class Encryption implements IEncryptionModule { |
|
|
|
|
* @return boolean |
|
|
|
|
*/ |
|
|
|
|
public function update($path, $uid, array $accessList) { |
|
|
|
|
$fileKey = $this->keyManager->getFileKey($path, $uid); |
|
|
|
|
if(empty($this->realPath)) { |
|
|
|
|
$this->realPath = $path; |
|
|
|
|
|
|
|
|
|
if (empty($accessList)) { |
|
|
|
|
if (isset(self::$rememberVersion[$path])) { |
|
|
|
|
$this->keyManager->setVersion($path, self::$rememberVersion[$path], new View()); |
|
|
|
|
unset(self::$rememberVersion[$path]); |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
$version = $this->keyManager->getVersion($this->realPath, new View()); |
|
|
|
|
|
|
|
|
|
$fileKey = $this->keyManager->getFileKey($path, $uid); |
|
|
|
|
|
|
|
|
|
if (!empty($fileKey)) { |
|
|
|
|
|
|
|
|
|
@ -392,8 +403,6 @@ class Encryption implements IEncryptionModule { |
|
|
|
|
|
|
|
|
|
$this->keyManager->setAllFileKeys($path, $encryptedFileKey); |
|
|
|
|
|
|
|
|
|
$this->keyManager->setVersion($path, $version, new View()); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
$this->logger->debug('no file key found, we assume that the file "{file}" is not encrypted', |
|
|
|
|
array('file' => $path, 'app' => 'encryption')); |
|
|
|
|
|