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

github.com/nextcloud/passman.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrantje <brantje@gmail.com>2017-01-03 00:01:59 +0300
committerbrantje <brantje@gmail.com>2017-01-11 20:09:49 +0300
commit997071e764edc5c65f2d773c3e654ac27da0578f (patch)
tree0a4a65c398bebabc3644430e3d3c53ed0424bd67 /migration
parent734496ebcc04dee8da332618a5c405eef89dbb5b (diff)
Add migration script
Diffstat (limited to 'migration')
-rw-r--r--migration/serversideencryption.php111
1 files changed, 111 insertions, 0 deletions
diff --git a/migration/serversideencryption.php b/migration/serversideencryption.php
new file mode 100644
index 00000000..72bb2bff
--- /dev/null
+++ b/migration/serversideencryption.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Nextcloud - passman
+ *
+ * @copyright Copyright (c) 2016, Sander Brand (brantje@gmail.com)
+ * @copyright Copyright (c) 2016, Marcos Zuriaga Miguel (wolfi@wolfi.es)
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Passman\Migration;
+
+use OCA\Passman\Db\CredentialRevision;
+use OCA\Passman\Service\CredentialRevisionService;
+use OCA\Passman\Service\CredentialService;
+use OCA\Passman\Service\EncryptService;
+use OCA\Passman\Service\FileService;
+use OCP\IDBConnection;
+use OCP\ILogger;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+
+class ServerSideEncryption implements IRepairStep {
+
+ /** @var encryptService */
+ private $encryptService;
+
+ /** @var IDBConnection */
+ private $db;
+
+ /** @var string */
+ private $installedVersion;
+
+ /** @var ILogger */
+ private $logger;
+
+ /** @var CredentialService */
+ private $credentialService;
+
+ /** @var CredentialRevisionService */
+ private $revisionService;
+
+ /** @var FileService */
+ private $fileService;
+
+ public function __construct(EncryptService $encryptService, IDBConnection $db, ILogger $logger, CredentialService $credentialService, CredentialRevisionService $revisionService,
+ FileService $fileService) {
+ $this->encryptService = $encryptService;
+ $this->db = $db;
+ $this->logger = $logger;
+ $this->credentialService = $credentialService;
+ $this->revisionService = $revisionService;
+ $this->fileService = $fileService;
+ $this->installedVersion = \OC::$server->getConfig()->getAppValue('passman', 'installed_version');
+ }
+
+ public function getName() {
+ return 'Enabling server side encryption for passman';
+ }
+
+ public function run(IOutput $output) {
+ if (version_compare($this->installedVersion, '2.0.0RC4', '<')) {
+ $this->encryptCredentials();
+ $this->encryptRevisions();
+ $this->encryptFiles();
+ }
+ }
+
+ private function encryptCredentials() {
+ $credentials = $this->db->executeQuery('SELECT * FROM `*PREFIX*passman_credentials`')->fetchAll();
+ foreach ($credentials as $credential) {
+ $this->credentialService->updateCredential($credential);
+ }
+ }
+
+ private function encryptRevisions() {
+ $revisions = $this->db->executeQuery('SELECT * FROM `*PREFIX*passman_revisions`')->fetchAll();
+ foreach ($revisions as $_revision) {
+ $revision = new CredentialRevision();
+ $revision->setId($_revision['id']);
+ $revision->setGuid($_revision['guid']);
+ $revision->setCredentialId($_revision['credential_id']);
+ $revision->setUserId($_revision['user_id']);
+ $revision->setCreated($_revision['created']);
+ $revision->setEditedBy($_revision['edited_by']);
+ $revision->setCredentialData( $_revision['credential_data']);
+ $this->revisionService->updateRevision($revision);
+ }
+ }
+
+ private function encryptFiles() {
+ $files = $this->db->executeQuery('SELECT * FROM `*PREFIX*passman_files`')->fetchAll();
+ foreach ($files as $file) {
+ $this->fileService->updateFile($file);
+ }
+ }
+}