diff options
author | Lukas Reschke <lukas@owncloud.com> | 2016-02-08 20:35:33 +0100 |
---|---|---|
committer | Lukas Reschke <lukas@owncloud.com> | 2016-02-09 23:43:27 +0100 |
commit | 5ccb9dfa7e35d78d61d7a973ee2a5fddfda7d766 (patch) | |
tree | c0d45ac7af479ba32dc2fdbd492999489fa62a94 /apps/encryption | |
parent | 3badf5caf579f8ff10c9917f62cb41cd9b0c68f8 (diff) | |
download | nextcloud-server-5ccb9dfa7e35d78d61d7a973ee2a5fddfda7d766.tar.gz nextcloud-server-5ccb9dfa7e35d78d61d7a973ee2a5fddfda7d766.zip |
Use database for keeping track of the version
Diffstat (limited to 'apps/encryption')
-rw-r--r-- | apps/encryption/lib/crypto/encryption.php | 11 | ||||
-rw-r--r-- | apps/encryption/lib/keymanager.php | 25 |
2 files changed, 31 insertions, 5 deletions
diff --git a/apps/encryption/lib/crypto/encryption.php b/apps/encryption/lib/crypto/encryption.php index d4e8087c4b0..b640f9a7a03 100644 --- a/apps/encryption/lib/crypto/encryption.php +++ b/apps/encryption/lib/crypto/encryption.php @@ -56,6 +56,9 @@ class Encryption implements IEncryptionModule { private $path; /** @var string */ + private $realPath; + + /** @var string */ private $user; /** @var string */ @@ -167,6 +170,7 @@ class Encryption implements IEncryptionModule { */ public function begin($path, $user, $mode, array $header, array $accessList) { $this->path = $this->getPathToRealFile($path); + $this->realPath = $this->path; $this->accessList = $accessList; $this->user = $user; $this->isWriteOperation = false; @@ -182,7 +186,7 @@ class Encryption implements IEncryptionModule { $this->fileKey = $this->keyManager->getFileKey($this->path, $this->user); } - $this->version = (int)$this->keyManager->getVersion($this->path); + $this->version = (int)$this->keyManager->getVersion($this->realPath); if ( $mode === 'w' @@ -360,7 +364,10 @@ class Encryption implements IEncryptionModule { */ public function update($path, $uid, array $accessList) { $fileKey = $this->keyManager->getFileKey($path, $uid); - $version = $this->keyManager->getVersion($path); + if(empty($this->realPath)) { + $this->realPath = $path; + } + $version = $this->keyManager->getVersion($this->realPath); if (!empty($fileKey)) { diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php index 4cbb377a43c..7d8bd8485e6 100644 --- a/apps/encryption/lib/keymanager.php +++ b/apps/encryption/lib/keymanager.php @@ -25,12 +25,14 @@ namespace OCA\Encryption; use OC\Encryption\Exceptions\DecryptionFailedException; +use OC\Files\View; use OCA\Encryption\Crypto\Encryption; use OCA\Encryption\Exceptions\PrivateKeyMissingException; use OCA\Encryption\Exceptions\PublicKeyMissingException; use OCA\Encryption\Crypto\Crypt; use OCP\Encryption\Keys\IStorage; use OCP\IConfig; +use OCP\IDBConnection; use OCP\ILogger; use OCP\IUserSession; @@ -416,18 +418,35 @@ class KeyManager { * Get the current version of a file * * @param string $path - * @return mixed + * @return int */ public function getVersion($path) { - return $this->keyStorage->getFileKey($path, 'version', Encryption::ID); + $view = new \OC\Files\View(); + $fileInfo = $view->getFileInfo($path); + if($fileInfo === false) { + return 0; + } + return $fileInfo->getEncryptedVersion(); } /** + * Set the current version of a file + * * @param string $path * @param string $version */ public function setVersion($path, $version) { - $this->keyStorage->setFileKey($path, 'version', $version, Encryption::ID); + $view = new \OC\Files\View(); + $fileInfo= $view->getFileInfo($path); + + if($fileInfo !== false) { + $fileId = $fileInfo->getId(); + $qb = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $qb->update('filecache') + ->set('encrypted', $qb->createNamedParameter($version)) + ->where($qb->expr()->eq('fileid', $qb->createNamedParameter($fileId))) + ->execute(); + } } /** |