* @param $status
* @return bool
*/
- public function setMigrationStatus($status) {
+ private function setMigrationStatus($status) {
$sql = 'UPDATE `*PREFIX*encryption` SET `migration_status` = ? WHERE `uid` = ?';
return true;
} else {
-
+ \OCP\Util::writeLog('Encryption library', "Could not set migration status for " . $this->userId, \OCP\Util::ERROR);
return false;
}
}
/**
- * @brief Check whether pwd recovery is enabled for a given user
- * @return bool 1 = yes, 0 = no, false = no record
+ * @brief start migration mode to initially encrypt users data
+ * @return boolean
+ */
+ public function beginMigration() {
+
+ $return = false;
+
+ $transaction = \OC_DB::beginTransaction();
+
+ if ($transaction === false) {
+ \OCP\Util::writeLog('Encryption library', "Your database migration doesn't support transactions", \OCP\Util::WARN);
+ }
+
+ $migrationStatus = $this->getMigrationStatus();
+
+ if ($migrationStatus === '0') {
+
+ $return = $this->setMigrationStatus(-1);
+
+ if ($return === true) {
+ \OCP\Util::writeLog('Encryption library', "Enter migration mode for initial encryption for user " . $this->userId, \OCP\Util::INFO);
+ } else {
+ \OCP\Util::writeLog('Encryption library', "Could not activate migration mode for " . $this->userId . ", encryption aborted", \OCP\Util::ERROR);
+ }
+ } else {
+ \OCP\Util::writeLog('Encryption library', "Another process already performs the migration for user " . $this->userId, \OCP\Util::INFO);
+ }
+
+ \OC_DB::commit();
+
+ return $return;
+ }
+
+ /**
+ * @brief close migration mode after users data has been encrypted successfully
+ * @return boolean
+ */
+ public function finishMigration() {
+
+ $return = false;
+
+ $transaction = \OC_DB::beginTransaction();
+
+ if ($transaction === false) {
+ \OCP\Util::writeLog('Encryption library', "Your database migration doesn't support transactions", \OCP\Util::WARN);
+ }
+
+ $migrationStatus = $this->getMigrationStatus();
+
+ if ($migrationStatus === '-1') {
+
+ $return = $this->setMigrationStatus(1);
+
+ if ($return === true) {
+ \OCP\Util::writeLog('Encryption library', "Leave migration mode for: " . $this->userId . " successfully.", \OCP\Util::INFO);
+ } else {
+ \OCP\Util::writeLog('Encryption library', "Could not deactivate migration mode for " . $this->userId, \OCP\Util::ERROR);
+ }
+ } else {
+ \OCP\Util::writeLog('Encryption library', "Someone else finished the migration mode to early for user " . $this->userId, \OCP\Util::ERROR);
+ }
+
+ \OC_DB::commit();
+
+ return $return;
+ }
+
+ /**
+ * @brief check if files are already migrated to the encryption system
+ * @return '1' = yes, '0' = no, '-1' = migration in progress, false = no record
* @note If records are not being returned, check for a hidden space
* at the start of the uid in db
*/
- public function getMigrationStatus() {
+ private function getMigrationStatus() {
$sql = 'SELECT `migration_status` FROM `*PREFIX*encryption` WHERE `uid` = ?';
// If no record is found
if (empty($migrationStatus)) {
-
+ \OCP\Util::writeLog('Encryption library', "Could not get migration status for " . $this->userId . ", no record found", \OCP\Util::ERROR);
return false;
-
// If a record is found
} else {
-
return $migrationStatus[0];
-
}
}