Completed
Push — master ( 4bb4df...375c4e )
by Sander
10s
created

AdminController::__construct()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 22
c 1
b 0
f 0
nc 1
nop 9
dl 0
loc 25
ccs 0
cts 15
cp 0
crap 2
rs 8.8571

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
28
29
class AdminController extends ApiController {
30
	private $userId;
31
	private $vaultService;
32
	private $credentialService;
33
	private $fileService;
34
	private $revisionService;
35
	private $deleteVaultRequestService;
36
	private $config;
37
38
	public function __construct($AppName,
39
								IRequest $request,
40
								$UserId,
41
								VaultService $vaultService,
42
								CredentialService $credentialService,
43
								FileService $fileService,
44
								CredentialRevisionService $revisionService,
45
								DeleteVaultRequestService $deleteVaultRequestService,
46
								IConfig $config
47
	) {
48
		parent::__construct(
49
			$AppName,
50
			$request,
51
			'GET, POST, DELETE, PUT, PATCH, OPTIONS',
52
			'Authorization, Content-Type, Accept',
53
			86400);
54
		$this->userId = $UserId;
55
		$this->vaultService = $vaultService;
56
		$this->credentialService = $credentialService;
57
		$this->fileService = $fileService;
58
		$this->revisionService = $revisionService;
59
		$this->deleteVaultRequestService = $deleteVaultRequestService;
60
61
		$this->config = $config;
62
	}
63
64
65
	public function searchUser($term) {
66
		$um = \OC::$server->getUserManager();
67
		$results = array();
68
		$searchResult = $um->search($term);
69
		foreach ($searchResult as $user) {
70
			array_push($results, array(
71
				"value" => $user->getUID(),
72
				"label" => $user->getDisplayName() . ' (' . $user->getBackendClassName() . ')',
73
			));
74
		}
75
		return new JSONResponse($results);
76
	}
77
78
	public function moveCredentials($source_account, $destination_account) {
79
		$vaults = $this->vaultService->getByUser($source_account);
80
		foreach ($vaults as $vault) {
81
			$credentials = $this->credentialService->getCredentialsByVaultId($vault->getId(), $source_account);
82
			foreach ($credentials as $credential) {
83
				$revisions = $this->revisionService->getRevisions($credential->getId());
84
				foreach ($revisions as $revision) {
85
					$r = new CredentialRevision();
86
					$r->setId($revision['revision_id']);
87
					$r->setGuid($revision['guid']);
88
					$r->setCredentialId($credential->getId());
89
					$r->setUserId($destination_account);
90
					$r->setCreated($revision['created']);
91
					$r->setCredentialData(base64_encode(json_encode($revision['credential_data'])));
92
					$r->setEditedBy($revision['edited_by']);
93
					$this->revisionService->updateRevision($r);
94
				}
95
96
				$c = $credential->jsonSerialize();
97
				$c['user_id'] = $destination_account;
98
				$this->credentialService->updateCredential($c, true);
99
			}
100
			$vault->setUserId($destination_account);
101
			$this->vaultService->updateVault($vault);
102
		}
103
104
		$files = $this->fileService->getFilesFromUser($source_account);
105
		foreach ($files as $file) {
106
			$file->setUserId($destination_account);
107
			$this->fileService->updateFile($file);
108
		}
109
		return new JSONResponse(array('success' => true));
110
	}
111
112
	public function listRequests(){
113
		$requests = $this->deleteVaultRequestService->getDeleteRequests();
114
		$results = array();
115
		foreach($requests as $request){
116
			$r = $request->jsonSerialize();
117
			$r['displayName'] = Utils::getNameByUid($request->getRequestedBy());
118
			array_push($results, $r);
119
		}
120
		return new JSONResponse($results);
121
	}
122
123
	public function acceptRequestDeletion($vault_guid, $requested_by){
124
		$req = $this->deleteVaultRequestService->getDeleteRequestForVault($vault_guid);
125
		try{
126
			$vault = $this->vaultService->getByGuid($vault_guid, $requested_by);
127
		} catch (\Exception $e){
128
			//Ignore
129
		}
130
131
		if(isset($vault)){
132
			$credentials = $this->credentialService->getCredentialsByVaultId($vault->getId(), $requested_by);
133
			foreach($credentials as $credential){
134
				$revisions = $this->revisionService->getRevisions($credential->getId());
135
				foreach($revisions as $revision){
136
					$this->revisionService->deleteRevision($revision['revision_id'], $requested_by);
137
				}
138
				if($credential instanceof Credential){
139
					$this->credentialService->deleteCredential($credential);
140
				}
141
			}
142
			$this->vaultService->deleteVault($vault_guid, $requested_by);
143
		}
144
		if($req instanceof DeleteVaultRequest) {
145
			$this->deleteVaultRequestService->removeDeleteRequestForVault($req);
146
		}
147
148
		return new JSONResponse(array('result' => true));
149
	}
150
151
	/**
152
	 * @NoAdminRequired
153
	 */
154
	public function requestDeletion($vault_guid, $reason) {
155
		$req = $this->deleteVaultRequestService->getDeleteRequestForVault($vault_guid);
156
		if($req){
157
			return new JSONResponse('Already exists');
158
		}
159
		$vault = $this->vaultService->getByGuid($vault_guid, $this->userId);
160
		$result = false;
161
		if ($vault) {
162
			$delete_request = new DeleteVaultRequest();
163
			$delete_request->setRequestedBy($this->userId);
164
			$delete_request->setVaultGuid($vault->getGuid());
165
			$delete_request->setReason($reason);
166
			$delete_request->setCreated(time());
167
			$result = $this->deleteVaultRequestService->createRequest($delete_request);
168
169
		}
170
		return new JSONResponse(array('result' => $result));
171
	}
172
173
	/**
174
	 * @NoAdminRequired
175
	 */
176
	public function deleteRequestDeletion($vault_guid) {
177
		$delete_request = false;
178
		$result = false;
179
		try {
180
			$delete_request = $this->deleteVaultRequestService->getDeleteRequestForVault($vault_guid);
181
		} catch (\Exception $exception){
182
			// Ignore it
183
		}
184
185
		if ($delete_request instanceof DeleteVaultRequest) {
186
			$this->deleteVaultRequestService->removeDeleteRequestForVault($delete_request);
187
			$result = true;
188
		}
189
		return new JSONResponse(array('result' => $result));
190
	}
191
}