summaryrefslogtreecommitdiffstats
path: root/apps/encryption/lib/migrator.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/encryption/lib/migrator.php')
-rw-r--r--apps/encryption/lib/migrator.php123
1 files changed, 123 insertions, 0 deletions
diff --git a/apps/encryption/lib/migrator.php b/apps/encryption/lib/migrator.php
new file mode 100644
index 00000000000..8f7823cb1ae
--- /dev/null
+++ b/apps/encryption/lib/migrator.php
@@ -0,0 +1,123 @@
+<?php
+/**
+ * @author Clark Tomlinson <fallen013@gmail.com>
+ * @since 3/9/15, 2:44 PM
+ * @link http:/www.clarkt.com
+ * @copyright Clark Tomlinson © 2015
+ *
+ */
+
+namespace OCA\Encryption;
+
+
+use OCA\Encryption\Crypto\Crypt;
+use OCP\IConfig;
+use OCP\ILogger;
+use OCP\IUserManager;
+use OCP\IUserSession;
+use OCP\PreConditionNotMetException;
+
+class Migrator {
+
+ /**
+ * @var bool
+ */
+ private $status = false;
+ /**
+ * @var IUserManager
+ */
+ private $user;
+ /**
+ * @var IConfig
+ */
+ private $config;
+ /**
+ * @var string
+ */
+ public static $migrationOpen = '0';
+ /**
+ * @var string
+ */
+ public static $migrationInProgress = '-1';
+ /**
+ * @var string
+ */
+ public static $migrationComplete = '1';
+ /**
+ * @var IUserManager
+ */
+ private $userManager;
+ /**
+ * @var ILogger
+ */
+ private $log;
+ /**
+ * @var Crypt
+ */
+ private $crypt;
+
+ /**
+ * Migrator constructor.
+ *
+ * @param IUserSession $userSession
+ * @param IConfig $config
+ * @param IUserManager $userManager
+ * @param ILogger $log
+ * @param Crypt $crypt
+ */
+ public function __construct(IUserSession $userSession, IConfig $config, IUserManager $userManager, ILogger $log, Crypt $crypt) {
+ $this->user = $userSession && $userSession->isLoggedIn() ? $userSession->getUser() : false;
+ $this->config = $config;
+ $this->userManager = $userManager;
+ $this->log = $log;
+ $this->crypt = $crypt;
+ }
+
+ /**
+ * @param $userId
+ * @return bool|string
+ */
+ public function getStatus($userId) {
+ if ($this->userManager->userExists($userId)) {
+ $this->status = $this->config->getUserValue($userId, 'encryption', 'migrationStatus', false);
+
+ if (!$this->status) {
+ $this->config->setUserValue($userId, 'encryption', 'migrationStatus', self::$migrationOpen);
+ $this->status = self::$migrationOpen;
+ }
+ }
+
+ return $this->status;
+ }
+
+ /**
+ * @return bool
+ */
+ public function beginMigration() {
+ $status = $this->setMigrationStatus(self::$migrationInProgress, self::$migrationOpen);
+
+ if ($status) {
+ $this->log->info('Encryption Library Start migration to encrypt for ' . $this->user->getUID());
+ return $status;
+ }
+ $this->log->warning('Encryption Library Could not activate migration for ' . $this->user->getUID() . '. Probably another process already started the inital encryption');
+ return $status;
+ }
+
+ /**
+ * @param $status
+ * @param bool $preCondition
+ * @return bool
+ */
+ private function setMigrationStatus($status, $preCondition = false) {
+ // Convert to string if preCondition is set
+ $preCondition = ($preCondition === false) ? false : (string)$preCondition;
+
+ try {
+ $this->config->setUserValue($this->user->getUID(), 'encryption', 'migrationStatus', (string)$status, $preCondition);
+ return true;
+ } catch (PreConditionNotMetException $e) {
+ return false;
+ }
+ }
+}