Failed Conditions
Push — master ( e8410d...a45585 )
by Marcos
09:36 queued 11s
created

AdminController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 27

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 10
dl 0
loc 27
ccs 0
cts 16
cp 0
crap 2
rs 9.488
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
/**
3
 * Nextcloud - passman
4
 *
5
 * This file is licensed under the Affero General Public License version 3 or
6
 * later. See the COPYING file.
7
 *
8
 * @author Sander Brand <[email protected]>
9
 * @copyright Sander Brand 2016
10
 */
11
12
namespace OCA\Passman\Controller;
13
14
use OCA\Passman\Db\Credential;
15
use OCA\Passman\Db\CredentialRevision;
16
use OCA\Passman\Db\DeleteVaultRequest;
17
use OCA\Passman\Service\CredentialRevisionService;
18
use OCA\Passman\Service\DeleteVaultRequestService;
19
use OCA\Passman\Service\FileService;
20
use OCA\Passman\Service\VaultService;
21
use OCA\Passman\Utility\Utils;
22
use OCP\IConfig;
23
use OCP\IRequest;
24
use OCP\AppFramework\Http\JSONResponse;
25
use OCP\AppFramework\ApiController;
26
use OCA\Passman\Service\CredentialService;
27
use OCP\IUserManager;
28
29
30
class AdminController extends ApiController {
31
	private $userId;
32
	private $vaultService;
33
	private $credentialService;
34
	private $fileService;
35
	private $revisionService;
36
	private $deleteVaultRequestService;
37
	private $config;
38
	private $userManager;
39
40
	public function __construct($AppName,
41
								IRequest $request,
42
								$UserId,
43
								VaultService $vaultService,
44
								CredentialService $credentialService,
45
								FileService $fileService,
46
								CredentialRevisionService $revisionService,
47
								DeleteVaultRequestService $deleteVaultRequestService,
48
								IConfig $config,
49
								IUserManager $userManager
50
	) {
51
		parent::__construct(
52
			$AppName,
53
			$request,
54
			'GET, POST, DELETE, PUT, PATCH, OPTIONS',
55
			'Authorization, Content-Type, Accept',
56
			86400);
57
		$this->userId = $UserId;
58
		$this->vaultService = $vaultService;
59
		$this->credentialService = $credentialService;
60
		$this->fileService = $fileService;
61
		$this->revisionService = $revisionService;
62
		$this->deleteVaultRequestService = $deleteVaultRequestService;
63
64
		$this->config = $config;
65
		$this->userManager = $userManager;
66
	}
67
68
69
	public function searchUser($term) {
70
		$results = array();
71
		$searchResult = $this->userManager->search($term);
72
		foreach ($searchResult as $user) {
73
			array_push($results, array(
74
				"value" => $user->getUID(),
75
				"label" => $user->getDisplayName() . ' (' . $user->getBackendClassName() . ')',
76
			));
77
		}
78
		return new JSONResponse($results);
79
	}
80
81
	public function moveCredentials($source_account, $destination_account) {
82
		$succeed = false;
83
		if ($source_account != $destination_account){
84
			$vaults = $this->vaultService->getByUser($source_account);
85
			foreach ($vaults as $vault) {
86
				$credentials = $this->credentialService->getCredentialsByVaultId($vault->getId(), $source_account);
87
				foreach ($credentials as $credential) {
88
					$revisions = $this->revisionService->getRevisions($credential->getId());
89
					foreach ($revisions as $revision) {
90
						$r = new CredentialRevision();
91
						$r->setId($revision['revision_id']);
92
						$r->setGuid($revision['guid']);
93
						$r->setCredentialId($credential->getId());
94
						$r->setUserId($destination_account);
95
						$r->setCreated($revision['created']);
96
						$r->setCredentialData(base64_encode(json_encode($revision['credential_data'])));
97
						$r->setEditedBy($revision['edited_by']);
98
						$this->revisionService->updateRevision($r);
99
					}
100
101
					$c = $credential->jsonSerialize();
102
					$c['user_id'] = $destination_account;
103
					$c['icon'] = json_encode($c['icon']);
104
					$this->credentialService->updateCredential($c, true);
105
				}
106
				$vault->setUserId($destination_account);
107
				$this->vaultService->updateVault($vault);
108
			}
109
110
			$files = $this->fileService->getFilesFromUser($source_account);
111
			foreach ($files as $file) {
112
				$file->setUserId($destination_account);
113
				$this->fileService->updateFile($file);
114
			}
115
			$succeed = true;
116
		}
117
118
		return new JSONResponse(array('success' => $succeed));
119
	}
120
121
	public function listRequests(){
122
		$requests = $this->deleteVaultRequestService->getDeleteRequests();
123
		$results = array();
124
		foreach($requests as $request){
125
			$r = $request->jsonSerialize();
126
			$r['displayName'] = Utils::getNameByUid($request->getRequestedBy(), $this->userManager);
127
			array_push($results, $r);
128
		}
129
		return new JSONResponse($results);
130
	}
131
132
	public function acceptRequestDeletion($vault_guid, $requested_by){
133
		$req = $this->deleteVaultRequestService->getDeleteRequestForVault($vault_guid);
134
		try{
135
			$vault = $this->vaultService->getByGuid($vault_guid, $requested_by);
136
		} catch (\Exception $e){
137
			//Ignore
138
		}
139
140
		if(isset($vault)){
141
			$credentials = $this->credentialService->getCredentialsByVaultId($vault->getId(), $requested_by);
142
			foreach($credentials as $credential){
143
				$revisions = $this->revisionService->getRevisions($credential->getId());
144
				foreach($revisions as $revision){
145
					$this->revisionService->deleteRevision($revision['revision_id'], $requested_by);
146
				}
147
				if($credential instanceof Credential){
148
					$this->credentialService->deleteCredential($credential);
149
				}
150
			}
151
			$this->vaultService->deleteVault($vault_guid, $requested_by);
152
		}
153
		if($req instanceof DeleteVaultRequest) {
154
			$this->deleteVaultRequestService->removeDeleteRequestForVault($req);
155
		}
156
157
		return new JSONResponse(array('result' => true));
158
	}
159
160
	/**
161
	 * @NoAdminRequired
162
	 */
163
	public function requestDeletion($vault_guid, $reason) {
164
		$req = $this->deleteVaultRequestService->getDeleteRequestForVault($vault_guid);
165
		if($req){
166
			return new JSONResponse('Already exists');
167
		}
168
		$vault = $this->vaultService->getByGuid($vault_guid, $this->userId);
169
		$result = false;
170
		if ($vault) {
171
			$delete_request = new DeleteVaultRequest();
172
			$delete_request->setRequestedBy($this->userId);
173
			$delete_request->setVaultGuid($vault->getGuid());
174
			$delete_request->setReason($reason);
175
			$delete_request->setCreated(time());
176
			$result = $this->deleteVaultRequestService->createRequest($delete_request);
177
178
		}
179
		return new JSONResponse(array('result' => $result));
180
	}
181
182
	/**
183
	 * @NoAdminRequired
184
	 */
185
	public function deleteRequestDeletion($vault_guid) {
186
		$delete_request = false;
187
		$result = false;
188
		try {
189
			$delete_request = $this->deleteVaultRequestService->getDeleteRequestForVault($vault_guid);
190
		} catch (\Exception $exception){
191
			// Ignore it
192
		}
193
194
		if ($delete_request instanceof DeleteVaultRequest) {
195
			$this->deleteVaultRequestService->removeDeleteRequestForVault($delete_request);
196
			$result = true;
197
		}
198
		return new JSONResponse(array('result' => $result));
199
	}
200
}
201