Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern Schiessle <schiessle@owncloud.com>2014-02-10 19:43:04 +0400
committerBjoern Schiessle <schiessle@owncloud.com>2014-02-17 13:21:16 +0400
commit37db8a13d4284c53fe8a4f669e5a46c38507e4ed (patch)
tree0d242b92b579765f3e1f3a131087c17edf3c5edc /apps/files_encryption
parenteb8b2210cd9ce4bb0209074b36c36addad556fdc (diff)
catch errors during initial encryption
Diffstat (limited to 'apps/files_encryption')
-rw-r--r--apps/files_encryption/hooks/hooks.php22
-rw-r--r--apps/files_encryption/lib/util.php51
2 files changed, 47 insertions, 26 deletions
diff --git a/apps/files_encryption/hooks/hooks.php b/apps/files_encryption/hooks/hooks.php
index 83abf3ba9de..1eb5f4c41e4 100644
--- a/apps/files_encryption/hooks/hooks.php
+++ b/apps/files_encryption/hooks/hooks.php
@@ -109,21 +109,27 @@ class Hooks {
}
- // Encrypt existing user files:
- if (
- $util->encryptAll('/' . $params['uid'] . '/' . 'files', $session->getLegacyKey(), $params['password'])
- ) {
+ // Encrypt existing user files
+ try {
+ $result = $util->encryptAll('/' . $params['uid'] . '/' . 'files', $session->getLegacyKey(), $params['password']);
+ } catch (\Exception $ex) {
+ \OCP\Util::writeLog('Encryption library', 'Initial encryption failed! Error: ' . $ex->getMessage(), \OCP\Util::FATAL);
+ $util->resetMigrationStatus();
+ \OCP\User::logout();
+ $result = false;
+ }
+
+ if ($result) {
\OC_Log::write(
'Encryption library', 'Encryption of existing files belonging to "' . $params['uid'] . '" completed'
, \OC_Log::INFO
);
- }
-
- // Register successful migration in DB
- $util->finishMigration();
+ // Register successful migration in DB
+ $util->finishMigration();
+ }
}
return true;
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 4d6a084908e..e5cdf9f9946 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -1202,26 +1202,48 @@ class Util {
}
/**
- * @brief start migration mode to initially encrypt users data
+ * @brief set migration status
+ * @param int $status
* @return boolean
*/
- public function beginMigration() {
+ private function setMigrationStatus($status) {
- $return = false;
-
- $sql = 'UPDATE `*PREFIX*encryption` SET `migration_status` = ? WHERE `uid` = ? and `migration_status` = ?';
- $args = array(self::MIGRATION_IN_PROGRESS, $this->userId, self::MIGRATION_OPEN);
+ $sql = 'UPDATE `*PREFIX*encryption` SET `migration_status` = ? WHERE `uid` = ?';
+ $args = array($status, $this->userId);
$query = \OCP\DB::prepare($sql);
$manipulatedRows = $query->execute($args);
if ($manipulatedRows === 1) {
- $return = true;
+ $result = true;
+ \OCP\Util::writeLog('Encryption library', "Migration status set to " . self::MIGRATION_OPEN, \OCP\Util::INFO);
+ } else {
+ $result = false;
+ \OCP\Util::writeLog('Encryption library', "Could not set migration status to " . self::MIGRATION_OPEN, \OCP\Util::WARN);
+ }
+
+ return $result;
+ }
+
+ /**
+ * @brief start migration mode to initially encrypt users data
+ * @return boolean
+ */
+ public function beginMigration() {
+
+ $result = $this->setMigrationStatus(self::MIGRATION_IN_PROGRESS);
+
+ if ($result) {
\OCP\Util::writeLog('Encryption library', "Start migration to encryption mode for " . $this->userId, \OCP\Util::INFO);
} else {
\OCP\Util::writeLog('Encryption library', "Could not activate migration mode for " . $this->userId . ". Probably another process already started the initial encryption", \OCP\Util::WARN);
}
- return $return;
+ return $result;
+ }
+
+ public function resetMigrationStatus() {
+ return $this->setMigrationStatus(self::MIGRATION_OPEN);
+
}
/**
@@ -1229,22 +1251,15 @@ class Util {
* @return boolean
*/
public function finishMigration() {
+ $result = $this->setMigrationStatus(self::MIGRATION_COMPLETED);
- $return = false;
-
- $sql = 'UPDATE `*PREFIX*encryption` SET `migration_status` = ? WHERE `uid` = ? and `migration_status` = ?';
- $args = array(self::MIGRATION_COMPLETED, $this->userId, self::MIGRATION_IN_PROGRESS);
- $query = \OCP\DB::prepare($sql);
- $manipulatedRows = $query->execute($args);
-
- if ($manipulatedRows === 1) {
- $return = true;
+ if ($result) {
\OCP\Util::writeLog('Encryption library', "Finish migration successfully for " . $this->userId, \OCP\Util::INFO);
} else {
\OCP\Util::writeLog('Encryption library', "Could not deactivate migration mode for " . $this->userId, \OCP\Util::WARN);
}
- return $return;
+ return $result;
}
/**