Completed
Push — master ( 45895d...58599e )
by Morris
99:32 queued 74:23
created
apps/federatedfilesharing/lib/Controller/MountPublicLinkController.php 2 patches
Unused Use Statements   -4 removed lines patch added patch discarded remove patch
@@ -29,17 +29,13 @@
 block discarded – undo
29 29
 
30 30
 namespace OCA\FederatedFileSharing\Controller;
31 31
 
32
-use OC\Files\Filesystem;
33 32
 use OC\HintException;
34
-use OC\Share\Helper;
35 33
 use OCA\FederatedFileSharing\AddressHandler;
36 34
 use OCA\FederatedFileSharing\FederatedShareProvider;
37
-use OCA\Files_Sharing\External\Manager;
38 35
 use OCP\AppFramework\Controller;
39 36
 use OCP\AppFramework\Http;
40 37
 use OCP\AppFramework\Http\JSONResponse;
41 38
 use OCP\Federation\ICloudIdManager;
42
-use OCP\Files\StorageInvalidException;
43 39
 use OCP\Http\Client\IClientService;
44 40
 use OCP\IL10N;
45 41
 use OCP\IRequest;
Please login to merge, or discard this patch.
Indentation   +173 added lines, -173 removed lines patch added patch discarded remove patch
@@ -57,177 +57,177 @@
 block discarded – undo
57 57
  */
58 58
 class MountPublicLinkController extends Controller {
59 59
 
60
-	/** @var FederatedShareProvider */
61
-	private $federatedShareProvider;
62
-
63
-	/** @var AddressHandler */
64
-	private $addressHandler;
65
-
66
-	/** @var IManager  */
67
-	private $shareManager;
68
-
69
-	/** @var  ISession */
70
-	private $session;
71
-
72
-	/** @var IL10N */
73
-	private $l;
74
-
75
-	/** @var IUserSession */
76
-	private $userSession;
77
-
78
-	/** @var IClientService */
79
-	private $clientService;
80
-
81
-	/** @var ICloudIdManager  */
82
-	private $cloudIdManager;
83
-
84
-	/**
85
-	 * MountPublicLinkController constructor.
86
-	 *
87
-	 * @param string $appName
88
-	 * @param IRequest $request
89
-	 * @param FederatedShareProvider $federatedShareProvider
90
-	 * @param IManager $shareManager
91
-	 * @param AddressHandler $addressHandler
92
-	 * @param ISession $session
93
-	 * @param IL10N $l
94
-	 * @param IUserSession $userSession
95
-	 * @param IClientService $clientService
96
-	 * @param ICloudIdManager $cloudIdManager
97
-	 */
98
-	public function __construct($appName,
99
-								IRequest $request,
100
-								FederatedShareProvider $federatedShareProvider,
101
-								IManager $shareManager,
102
-								AddressHandler $addressHandler,
103
-								ISession $session,
104
-								IL10N $l,
105
-								IUserSession $userSession,
106
-								IClientService $clientService,
107
-								ICloudIdManager $cloudIdManager
108
-	) {
109
-		parent::__construct($appName, $request);
110
-
111
-		$this->federatedShareProvider = $federatedShareProvider;
112
-		$this->shareManager = $shareManager;
113
-		$this->addressHandler = $addressHandler;
114
-		$this->session = $session;
115
-		$this->l = $l;
116
-		$this->userSession = $userSession;
117
-		$this->clientService = $clientService;
118
-		$this->cloudIdManager = $cloudIdManager;
119
-	}
120
-
121
-	/**
122
-	 * send federated share to a user of a public link
123
-	 *
124
-	 * @NoCSRFRequired
125
-	 * @PublicPage
126
-	 * @BruteForceProtection(action=publicLink2FederatedShare)
127
-	 *
128
-	 * @param string $shareWith
129
-	 * @param string $token
130
-	 * @param string $password
131
-	 * @return JSONResponse
132
-	 */
133
-	public function createFederatedShare($shareWith, $token, $password = '') {
134
-
135
-		if (!$this->federatedShareProvider->isOutgoingServer2serverShareEnabled()) {
136
-			return new JSONResponse(
137
-				['message' => 'This server doesn\'t support outgoing federated shares'],
138
-				Http::STATUS_BAD_REQUEST
139
-			);
140
-		}
141
-
142
-		try {
143
-			list(, $server) = $this->addressHandler->splitUserRemote($shareWith);
144
-			$share = $this->shareManager->getShareByToken($token);
145
-		} catch (HintException $e) {
146
-			return new JSONResponse(['message' => $e->getHint()], Http::STATUS_BAD_REQUEST);
147
-		}
148
-
149
-		// make sure that user is authenticated in case of a password protected link
150
-		$storedPassword = $share->getPassword();
151
-		$authenticated = $this->session->get('public_link_authenticated') === $share->getId() ||
152
-			$this->shareManager->checkPassword($share, $password);
153
-		if (!empty($storedPassword) && !$authenticated ) {
154
-			$response = new JSONResponse(
155
-				['message' => 'No permission to access the share'],
156
-				Http::STATUS_BAD_REQUEST
157
-			);
158
-			$response->throttle();
159
-			return $response;
160
-		}
161
-
162
-		$share->setSharedWith($shareWith);
163
-
164
-		try {
165
-			$this->federatedShareProvider->create($share);
166
-		} catch (\Exception $e) {
167
-			\OC::$server->getLogger()->logException($e, [
168
-				'level' => \OCP\Util::WARN,
169
-				'app' => 'federatedfilesharing',
170
-			]);
171
-			return new JSONResponse(['message' => $e->getMessage()], Http::STATUS_BAD_REQUEST);
172
-		}
173
-
174
-		return new JSONResponse(['remoteUrl' => $server]);
175
-	}
176
-
177
-	/**
178
-	 * ask other server to get a federated share
179
-	 *
180
-	 * @NoAdminRequired
181
-	 *
182
-	 * @param string $token
183
-	 * @param string $remote
184
-	 * @param string $password
185
-	 * @param string $owner (only for legacy reasons, can be removed with legacyMountPublicLink())
186
-	 * @param string $ownerDisplayName (only for legacy reasons, can be removed with legacyMountPublicLink())
187
-	 * @param string $name (only for legacy reasons, can be removed with legacyMountPublicLink())
188
-	 * @return JSONResponse
189
-	 */
190
-	public function askForFederatedShare($token, $remote, $password = '', $owner = '', $ownerDisplayName = '', $name = '') {
191
-		// check if server admin allows to mount public links from other servers
192
-		if ($this->federatedShareProvider->isIncomingServer2serverShareEnabled() === false) {
193
-			return new JSONResponse(['message' => $this->l->t('Server to server sharing is not enabled on this server')], Http::STATUS_BAD_REQUEST);
194
-		}
195
-
196
-		$cloudId = $this->cloudIdManager->getCloudId($this->userSession->getUser()->getUID(), $this->addressHandler->generateRemoteURL());
197
-
198
-		$httpClient = $this->clientService->newClient();
199
-
200
-		try {
201
-			$response = $httpClient->post($remote . '/index.php/apps/federatedfilesharing/createFederatedShare',
202
-				[
203
-					'body' =>
204
-						[
205
-							'token' => $token,
206
-							'shareWith' => rtrim($cloudId->getId(), '/'),
207
-							'password' => $password
208
-						],
209
-					'connect_timeout' => 10,
210
-				]
211
-			);
212
-		} catch (\Exception $e) {
213
-			if (empty($password)) {
214
-				$message = $this->l->t("Couldn't establish a federated share.");
215
-			} else {
216
-				$message = $this->l->t("Couldn't establish a federated share, maybe the password was wrong.");
217
-			}
218
-			return new JSONResponse(['message' => $message], Http::STATUS_BAD_REQUEST);
219
-		}
220
-
221
-		$body = $response->getBody();
222
-		$result = json_decode($body, true);
223
-
224
-		if (is_array($result) && isset($result['remoteUrl'])) {
225
-			return new JSONResponse(['message' => $this->l->t('Federated Share request sent, you will receive an invitation. Check your notifications.')]);
226
-		}
227
-
228
-		// if we doesn't get the expected response we assume that we try to add
229
-		// a federated share from a Nextcloud <= 9 server
230
-		$message = $this->l->t("Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9).");
231
-		return new JSONResponse(['message' => $message], Http::STATUS_BAD_REQUEST);
232
-	}
60
+    /** @var FederatedShareProvider */
61
+    private $federatedShareProvider;
62
+
63
+    /** @var AddressHandler */
64
+    private $addressHandler;
65
+
66
+    /** @var IManager  */
67
+    private $shareManager;
68
+
69
+    /** @var  ISession */
70
+    private $session;
71
+
72
+    /** @var IL10N */
73
+    private $l;
74
+
75
+    /** @var IUserSession */
76
+    private $userSession;
77
+
78
+    /** @var IClientService */
79
+    private $clientService;
80
+
81
+    /** @var ICloudIdManager  */
82
+    private $cloudIdManager;
83
+
84
+    /**
85
+     * MountPublicLinkController constructor.
86
+     *
87
+     * @param string $appName
88
+     * @param IRequest $request
89
+     * @param FederatedShareProvider $federatedShareProvider
90
+     * @param IManager $shareManager
91
+     * @param AddressHandler $addressHandler
92
+     * @param ISession $session
93
+     * @param IL10N $l
94
+     * @param IUserSession $userSession
95
+     * @param IClientService $clientService
96
+     * @param ICloudIdManager $cloudIdManager
97
+     */
98
+    public function __construct($appName,
99
+                                IRequest $request,
100
+                                FederatedShareProvider $federatedShareProvider,
101
+                                IManager $shareManager,
102
+                                AddressHandler $addressHandler,
103
+                                ISession $session,
104
+                                IL10N $l,
105
+                                IUserSession $userSession,
106
+                                IClientService $clientService,
107
+                                ICloudIdManager $cloudIdManager
108
+    ) {
109
+        parent::__construct($appName, $request);
110
+
111
+        $this->federatedShareProvider = $federatedShareProvider;
112
+        $this->shareManager = $shareManager;
113
+        $this->addressHandler = $addressHandler;
114
+        $this->session = $session;
115
+        $this->l = $l;
116
+        $this->userSession = $userSession;
117
+        $this->clientService = $clientService;
118
+        $this->cloudIdManager = $cloudIdManager;
119
+    }
120
+
121
+    /**
122
+     * send federated share to a user of a public link
123
+     *
124
+     * @NoCSRFRequired
125
+     * @PublicPage
126
+     * @BruteForceProtection(action=publicLink2FederatedShare)
127
+     *
128
+     * @param string $shareWith
129
+     * @param string $token
130
+     * @param string $password
131
+     * @return JSONResponse
132
+     */
133
+    public function createFederatedShare($shareWith, $token, $password = '') {
134
+
135
+        if (!$this->federatedShareProvider->isOutgoingServer2serverShareEnabled()) {
136
+            return new JSONResponse(
137
+                ['message' => 'This server doesn\'t support outgoing federated shares'],
138
+                Http::STATUS_BAD_REQUEST
139
+            );
140
+        }
141
+
142
+        try {
143
+            list(, $server) = $this->addressHandler->splitUserRemote($shareWith);
144
+            $share = $this->shareManager->getShareByToken($token);
145
+        } catch (HintException $e) {
146
+            return new JSONResponse(['message' => $e->getHint()], Http::STATUS_BAD_REQUEST);
147
+        }
148
+
149
+        // make sure that user is authenticated in case of a password protected link
150
+        $storedPassword = $share->getPassword();
151
+        $authenticated = $this->session->get('public_link_authenticated') === $share->getId() ||
152
+            $this->shareManager->checkPassword($share, $password);
153
+        if (!empty($storedPassword) && !$authenticated ) {
154
+            $response = new JSONResponse(
155
+                ['message' => 'No permission to access the share'],
156
+                Http::STATUS_BAD_REQUEST
157
+            );
158
+            $response->throttle();
159
+            return $response;
160
+        }
161
+
162
+        $share->setSharedWith($shareWith);
163
+
164
+        try {
165
+            $this->federatedShareProvider->create($share);
166
+        } catch (\Exception $e) {
167
+            \OC::$server->getLogger()->logException($e, [
168
+                'level' => \OCP\Util::WARN,
169
+                'app' => 'federatedfilesharing',
170
+            ]);
171
+            return new JSONResponse(['message' => $e->getMessage()], Http::STATUS_BAD_REQUEST);
172
+        }
173
+
174
+        return new JSONResponse(['remoteUrl' => $server]);
175
+    }
176
+
177
+    /**
178
+     * ask other server to get a federated share
179
+     *
180
+     * @NoAdminRequired
181
+     *
182
+     * @param string $token
183
+     * @param string $remote
184
+     * @param string $password
185
+     * @param string $owner (only for legacy reasons, can be removed with legacyMountPublicLink())
186
+     * @param string $ownerDisplayName (only for legacy reasons, can be removed with legacyMountPublicLink())
187
+     * @param string $name (only for legacy reasons, can be removed with legacyMountPublicLink())
188
+     * @return JSONResponse
189
+     */
190
+    public function askForFederatedShare($token, $remote, $password = '', $owner = '', $ownerDisplayName = '', $name = '') {
191
+        // check if server admin allows to mount public links from other servers
192
+        if ($this->federatedShareProvider->isIncomingServer2serverShareEnabled() === false) {
193
+            return new JSONResponse(['message' => $this->l->t('Server to server sharing is not enabled on this server')], Http::STATUS_BAD_REQUEST);
194
+        }
195
+
196
+        $cloudId = $this->cloudIdManager->getCloudId($this->userSession->getUser()->getUID(), $this->addressHandler->generateRemoteURL());
197
+
198
+        $httpClient = $this->clientService->newClient();
199
+
200
+        try {
201
+            $response = $httpClient->post($remote . '/index.php/apps/federatedfilesharing/createFederatedShare',
202
+                [
203
+                    'body' =>
204
+                        [
205
+                            'token' => $token,
206
+                            'shareWith' => rtrim($cloudId->getId(), '/'),
207
+                            'password' => $password
208
+                        ],
209
+                    'connect_timeout' => 10,
210
+                ]
211
+            );
212
+        } catch (\Exception $e) {
213
+            if (empty($password)) {
214
+                $message = $this->l->t("Couldn't establish a federated share.");
215
+            } else {
216
+                $message = $this->l->t("Couldn't establish a federated share, maybe the password was wrong.");
217
+            }
218
+            return new JSONResponse(['message' => $message], Http::STATUS_BAD_REQUEST);
219
+        }
220
+
221
+        $body = $response->getBody();
222
+        $result = json_decode($body, true);
223
+
224
+        if (is_array($result) && isset($result['remoteUrl'])) {
225
+            return new JSONResponse(['message' => $this->l->t('Federated Share request sent, you will receive an invitation. Check your notifications.')]);
226
+        }
227
+
228
+        // if we doesn't get the expected response we assume that we try to add
229
+        // a federated share from a Nextcloud <= 9 server
230
+        $message = $this->l->t("Couldn't establish a federated share, it looks like the server to federate with is too old (Nextcloud <= 9).");
231
+        return new JSONResponse(['message' => $message], Http::STATUS_BAD_REQUEST);
232
+    }
233 233
 }
Please login to merge, or discard this patch.