Completed
Push — master ( 946999...5f7661 )
by Marcos
04:12
created

ServerSideEncryption::encryptCredentials()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 4
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 6
rs 9.4285
1
<?php
2
/**
3
 * Nextcloud - passman
4
 *
5
 * @copyright Copyright (c) 2016, Sander Brand ([email protected])
6
 * @copyright Copyright (c) 2016, Marcos Zuriaga Miguel ([email protected])
7
 * @license GNU AGPL version 3 or any later version
8
 *
9
 * This program is free software: you can redistribute it and/or modify
10
 * it under the terms of the GNU Affero General Public License as
11
 * published by the Free Software Foundation, either version 3 of the
12
 * License, or (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU Affero General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU Affero General Public License
20
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
 *
22
 */
23
24
namespace OCA\Passman\Migration;
25
26
use OCA\Passman\Db\CredentialRevision;
27
use OCA\Passman\Db\File;
28
use OCA\Passman\Service\CredentialRevisionService;
29
use OCA\Passman\Service\CredentialService;
30
use OCA\Passman\Service\EncryptService;
31
use OCA\Passman\Service\FileService;
32
use OCP\IDBConnection;
33
use OCP\ILogger;
34
use OCP\Migration\IOutput;
35
use OCP\Migration\IRepairStep;
36
37
38
class ServerSideEncryption implements IRepairStep {
39
40
	/** @var EncryptService */
41
	private $encryptService;
42
43
	/** @var IDBConnection */
44
	private $db;
45
46
	/** @var string */
47
	private $installedVersion;
48
49
	/** @var ILogger */
50
	private $logger;
51
52
	/** @var CredentialService */
53
	private $credentialService;
54
55
	/** @var  CredentialRevisionService */
56
	private $revisionService;
57
58
	/** @var FileService */
59
	private $fileService;
60
61
	public function __construct(EncryptService $encryptService, IDBConnection $db, ILogger $logger, CredentialService $credentialService, CredentialRevisionService $revisionService,
62
								FileService $fileService) {
63
		$this->encryptService = $encryptService;
64
		$this->db = $db;
65
		$this->logger = $logger;
66
		$this->credentialService = $credentialService;
67
		$this->revisionService = $revisionService;
68
		$this->fileService = $fileService;
69
		$this->installedVersion = \OC::$server->getConfig()->getAppValue('passman', 'installed_version');
70
	}
71
72
	public function getName() {
73
		return 'Enabling server side encryption for passman';
74
	}
75
76
	public function run(IOutput $output) {
77
		$output->info('Enabling Service Side Encryption for passman');
78
79
		if (version_compare($this->installedVersion, '2.0.0RC4', '<')) {
80
			$this->encryptCredentials();
81
			$this->encryptRevisions();
82
			$this->encryptFiles();
83
		}
84
	}
85
86
	private function fetchAll($sql){
87
		return $this->db->executeQuery($sql)->fetchAll();
88
	}
89
90
	private function encryptCredentials() {
91
		$credentials = $this->fetchAll('SELECT * FROM `*PREFIX*passman_credentials`');
92
		foreach ($credentials as $credential) {
93
			$this->credentialService->updateCredential($credential);
94
		}
95
	}
96
97 View Code Duplication
	private function encryptRevisions() {
98
		$revisions = $this->fetchAll('SELECT * FROM `*PREFIX*passman_revisions`');
99
		foreach ($revisions as $_revision) {
100
			$revision = new CredentialRevision();
101
			$revision->setId($_revision['id']);
102
			$revision->setGuid($_revision['guid']);
103
			$revision->setCredentialId($_revision['credential_id']);
104
			$revision->setUserId($_revision['user_id']);
105
			$revision->setCreated($_revision['created']);
106
			$revision->setEditedBy($_revision['edited_by']);
107
			$revision->setCredentialData($_revision['credential_data']);
108
			$this->revisionService->updateRevision($revision);
109
		}
110
	}
111
112 View Code Duplication
	private function encryptFiles() {
113
		$files = $this->fetchAll('SELECT * FROM `*PREFIX*passman_files`');
114
		foreach ($files as $_file) {
115
			$file = new File();
116
			$file->setId($_file['id']);
117
			$file->setGuid($_file['guid']);
118
			$file->setUserId($_file['user_id']);
119
			$file->setMimetype($_file['minetype']);
120
			$file->setFilename($_file['filename']);
121
			$file->setSize($_file['size']);
122
			$file->setCreated($_file['created']);
123
			$file->setFileData($_file['file_data']);
124
			$this->fileService->updateFile($file);
125
		}
126
	}
127
}
128