Completed
Pull Request — master (#9345)
by Björn
256:46 queued 240:36
created
lib/private/Federation/CloudFederationFactory.php 1 patch
Indentation   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -27,37 +27,37 @@
 block discarded – undo
27 27
 
28 28
 class CloudFederationFactory implements ICloudFederationFactory {
29 29
 
30
-	/**
31
-	 * get a CloudFederationShare Object to prepare a share you want to send
32
-	 *
33
-	 * @param string $shareWith
34
-	 * @param string $name resource name (e.g. document.odt)
35
-	 * @param string $description share description (optional)
36
-	 * @param string $providerId resource UID on the provider side
37
-	 * @param string $owner provider specific UID of the user who owns the resource
38
-	 * @param string $ownerDisplayName display name of the user who shared the item
39
-	 * @param string $sharedBy provider specific UID of the user who shared the resource
40
-	 * @param string $sharedByDisplayName display name of the user who shared the resource
41
-	 * @param string $sharedSecret used to authenticate requests across servers
42
-	 * @param string $shareType ('group' or 'user' share)
43
-	 * @param $resourceType ('file', 'calendar',...)
44
-	 * @return ICloudFederationShare
45
-	 *
46
-	 * @since 14.0.0
47
-	 */
48
-	public function getCloudFederationShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $sharedSecret, $shareType, $resourceType) {
49
-		return new CloudFederationShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $shareType, $resourceType, $sharedSecret);
50
-	}
30
+    /**
31
+     * get a CloudFederationShare Object to prepare a share you want to send
32
+     *
33
+     * @param string $shareWith
34
+     * @param string $name resource name (e.g. document.odt)
35
+     * @param string $description share description (optional)
36
+     * @param string $providerId resource UID on the provider side
37
+     * @param string $owner provider specific UID of the user who owns the resource
38
+     * @param string $ownerDisplayName display name of the user who shared the item
39
+     * @param string $sharedBy provider specific UID of the user who shared the resource
40
+     * @param string $sharedByDisplayName display name of the user who shared the resource
41
+     * @param string $sharedSecret used to authenticate requests across servers
42
+     * @param string $shareType ('group' or 'user' share)
43
+     * @param $resourceType ('file', 'calendar',...)
44
+     * @return ICloudFederationShare
45
+     *
46
+     * @since 14.0.0
47
+     */
48
+    public function getCloudFederationShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $sharedSecret, $shareType, $resourceType) {
49
+        return new CloudFederationShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $shareType, $resourceType, $sharedSecret);
50
+    }
51 51
 
52
-	/**
53
-	 * get a Cloud FederationNotification object to prepare a notification you
54
-	 * want to send
55
-	 *
56
-	 * @return ICloudFederationNotification
57
-	 *
58
-	 * @since 14.0.0
59
-	 */
60
-	public function getCloudFederationNotification() {
61
-		return new CloudFederationNotification();
62
-	}
52
+    /**
53
+     * get a Cloud FederationNotification object to prepare a notification you
54
+     * want to send
55
+     *
56
+     * @return ICloudFederationNotification
57
+     *
58
+     * @since 14.0.0
59
+     */
60
+    public function getCloudFederationNotification() {
61
+        return new CloudFederationNotification();
62
+    }
63 63
 }
Please login to merge, or discard this patch.
apps/federatedfilesharing/lib/Notifications.php 1 patch
Indentation   +354 added lines, -354 removed lines patch added patch discarded remove patch
@@ -33,358 +33,358 @@
 block discarded – undo
33 33
 use OCP\OCS\IDiscoveryService;
34 34
 
35 35
 class Notifications {
36
-	const RESPONSE_FORMAT = 'json'; // default response format for ocs calls
37
-
38
-	/** @var AddressHandler */
39
-	private $addressHandler;
40
-
41
-	/** @var IClientService */
42
-	private $httpClientService;
43
-
44
-	/** @var IDiscoveryService */
45
-	private $discoveryService;
46
-
47
-	/** @var IJobList  */
48
-	private $jobList;
49
-
50
-	/** @var ICloudFederationProviderManager */
51
-	private $federationProviderManager;
52
-
53
-	/** @var ICloudFederationFactory */
54
-	private $cloudFederationFactory;
55
-
56
-	/**
57
-	 * @param AddressHandler $addressHandler
58
-	 * @param IClientService $httpClientService
59
-	 * @param IDiscoveryService $discoveryService
60
-	 * @param IJobList $jobList
61
-	 * @param ICloudFederationProviderManager $federationProviderManager
62
-	 * @param ICloudFederationFactory $cloudFederationFactory
63
-	 */
64
-	public function __construct(
65
-		AddressHandler $addressHandler,
66
-		IClientService $httpClientService,
67
-		IDiscoveryService $discoveryService,
68
-		IJobList $jobList,
69
-		ICloudFederationProviderManager $federationProviderManager,
70
-		ICloudFederationFactory $cloudFederationFactory
71
-	) {
72
-		$this->addressHandler = $addressHandler;
73
-		$this->httpClientService = $httpClientService;
74
-		$this->discoveryService = $discoveryService;
75
-		$this->jobList = $jobList;
76
-		$this->federationProviderManager = $federationProviderManager;
77
-		$this->cloudFederationFactory = $cloudFederationFactory;
78
-	}
79
-
80
-	/**
81
-	 * send server-to-server share to remote server
82
-	 *
83
-	 * @param string $token
84
-	 * @param string $shareWith
85
-	 * @param string $name
86
-	 * @param int $remote_id
87
-	 * @param string $owner
88
-	 * @param string $ownerFederatedId
89
-	 * @param string $sharedBy
90
-	 * @param string $sharedByFederatedId
91
-	 * @return bool
92
-	 * @throws \OC\HintException
93
-	 * @throws \OC\ServerNotAvailableException
94
-	 */
95
-	public function sendRemoteShare($token, $shareWith, $name, $remote_id, $owner, $ownerFederatedId, $sharedBy, $sharedByFederatedId) {
96
-
97
-		list($user, $remote) = $this->addressHandler->splitUserRemote($shareWith);
98
-
99
-		if ($user && $remote) {
100
-			$local = $this->addressHandler->generateRemoteURL();
101
-
102
-			$fields = array(
103
-				'shareWith' => $user,
104
-				'token' => $token,
105
-				'name' => $name,
106
-				'remoteId' => $remote_id,
107
-				'owner' => $owner,
108
-				'ownerFederatedId' => $ownerFederatedId,
109
-				'sharedBy' => $sharedBy,
110
-				'sharedByFederatedId' => $sharedByFederatedId,
111
-				'remote' => $local,
112
-			);
113
-
114
-			$result = $this->tryHttpPostToShareEndpoint($remote, '', $fields);
115
-			$status = json_decode($result['result'], true);
116
-
117
-			$ocsStatus = isset($status['ocs']);
118
-			$ocsSuccess = $ocsStatus && ($status['ocs']['meta']['statuscode'] === 100 || $status['ocs']['meta']['statuscode'] === 200);
119
-
120
-			if ($result['success'] && (!$ocsStatus ||$ocsSuccess)) {
121
-				\OC_Hook::emit('OCP\Share', 'federated_share_added', ['server' => $remote]);
122
-				return true;
123
-			}
124
-
125
-		}
126
-
127
-		return false;
128
-	}
129
-
130
-	/**
131
-	 * ask owner to re-share the file with the given user
132
-	 *
133
-	 * @param string $token
134
-	 * @param int $id remote Id
135
-	 * @param int $shareId internal share Id
136
-	 * @param string $remote remote address of the owner
137
-	 * @param string $shareWith
138
-	 * @param int $permission
139
-	 * @return bool
140
-	 * @throws \OC\HintException
141
-	 * @throws \OC\ServerNotAvailableException
142
-	 */
143
-	public function requestReShare($token, $id, $shareId, $remote, $shareWith, $permission) {
144
-
145
-		$fields = array(
146
-			'shareWith' => $shareWith,
147
-			'token' => $token,
148
-			'permission' => $permission,
149
-			'remoteId' => $shareId
150
-		);
151
-
152
-		$result = $this->tryHttpPostToShareEndpoint(rtrim($remote, '/'), '/' . $id . '/reshare', $fields);
153
-		$status = json_decode($result['result'], true);
154
-
155
-		$httpRequestSuccessful = $result['success'];
156
-		$ocsCallSuccessful = $status['ocs']['meta']['statuscode'] === 100 || $status['ocs']['meta']['statuscode'] === 200;
157
-		$validToken = isset($status['ocs']['data']['token']) && is_string($status['ocs']['data']['token']);
158
-		$validRemoteId = isset($status['ocs']['data']['remoteId']);
159
-
160
-		if ($httpRequestSuccessful && $ocsCallSuccessful && $validToken && $validRemoteId) {
161
-			return [
162
-				$status['ocs']['data']['token'],
163
-				(int)$status['ocs']['data']['remoteId']
164
-			];
165
-		}
166
-
167
-		return false;
168
-	}
169
-
170
-	/**
171
-	 * send server-to-server unshare to remote server
172
-	 *
173
-	 * @param string $remote url
174
-	 * @param int $id share id
175
-	 * @param string $token
176
-	 * @return bool
177
-	 */
178
-	public function sendRemoteUnShare($remote, $id, $token) {
179
-		$this->sendUpdateToRemote($remote, $id, $token, 'unshare');
180
-	}
181
-
182
-	/**
183
-	 * send server-to-server unshare to remote server
184
-	 *
185
-	 * @param string $remote url
186
-	 * @param int $id share id
187
-	 * @param string $token
188
-	 * @return bool
189
-	 */
190
-	public function sendRevokeShare($remote, $id, $token) {
191
-		$this->sendUpdateToRemote($remote, $id, $token, 'revoke');
192
-	}
193
-
194
-	/**
195
-	 * send notification to remote server if the permissions was changed
196
-	 *
197
-	 * @param string $remote
198
-	 * @param int $remoteId
199
-	 * @param string $token
200
-	 * @param int $permissions
201
-	 * @return bool
202
-	 */
203
-	public function sendPermissionChange($remote, $remoteId, $token, $permissions) {
204
-		$this->sendUpdateToRemote($remote, $remoteId, $token, 'permissions', ['permissions' => $permissions]);
205
-	}
206
-
207
-	/**
208
-	 * forward accept reShare to remote server
209
-	 *
210
-	 * @param string $remote
211
-	 * @param int $remoteId
212
-	 * @param string $token
213
-	 */
214
-	public function sendAcceptShare($remote, $remoteId, $token) {
215
-		$this->sendUpdateToRemote($remote, $remoteId, $token, 'accept');
216
-	}
217
-
218
-	/**
219
-	 * forward decline reShare to remote server
220
-	 *
221
-	 * @param string $remote
222
-	 * @param int $remoteId
223
-	 * @param string $token
224
-	 */
225
-	public function sendDeclineShare($remote, $remoteId, $token) {
226
-		$this->sendUpdateToRemote($remote, $remoteId, $token, 'decline');
227
-	}
228
-
229
-	/**
230
-	 * inform remote server whether server-to-server share was accepted/declined
231
-	 *
232
-	 * @param string $remote
233
-	 * @param string $token
234
-	 * @param int $remoteId Share id on the remote host
235
-	 * @param string $action possible actions: accept, decline, unshare, revoke, permissions
236
-	 * @param array $data
237
-	 * @param int $try
238
-	 * @return boolean
239
-	 */
240
-	public function sendUpdateToRemote($remote, $remoteId, $token, $action, $data = [], $try = 0) {
241
-
242
-		$fields = array('token' => $token);
243
-		foreach ($data as $key => $value) {
244
-			$fields[$key] = $value;
245
-		}
246
-
247
-		$result = $this->tryHttpPostToShareEndpoint(rtrim($remote, '/'), '/' . $remoteId . '/' . $action, $fields);
248
-		$status = json_decode($result['result'], true);
249
-
250
-		if ($result['success'] &&
251
-			($status['ocs']['meta']['statuscode'] === 100 ||
252
-				$status['ocs']['meta']['statuscode'] === 200
253
-			)
254
-		) {
255
-			return true;
256
-		} elseif ($try === 0) {
257
-			// only add new job on first try
258
-			$this->jobList->add('OCA\FederatedFileSharing\BackgroundJob\RetryJob',
259
-				[
260
-					'remote' => $remote,
261
-					'remoteId' => $remoteId,
262
-					'token' => $token,
263
-					'action' => $action,
264
-					'data' => json_encode($data),
265
-					'try' => $try,
266
-					'lastRun' => $this->getTimestamp()
267
-				]
268
-			);
269
-		}
270
-
271
-		return false;
272
-	}
273
-
274
-
275
-	/**
276
-	 * return current timestamp
277
-	 *
278
-	 * @return int
279
-	 */
280
-	protected function getTimestamp() {
281
-		return time();
282
-	}
283
-
284
-	/**
285
-	 * try http post with the given protocol, if no protocol is given we pick
286
-	 * the secure one (https)
287
-	 *
288
-	 * @param string $remoteDomain
289
-	 * @param string $urlSuffix
290
-	 * @param array $fields post parameters
291
-	 * @param string $action define the action (possible values: share, reshare, accept, decline, unshare, revoke, permissions)
292
-	 * @return array
293
-	 * @throws \Exception
294
-	 */
295
-	protected function tryHttpPostToShareEndpoint($remoteDomain, $urlSuffix, array $fields, $action="share") {
296
-
297
-		if ($this->addressHandler->urlContainProtocol($remoteDomain) === false) {
298
-			$remoteDomain = 'https://' . $remoteDomain;
299
-		}
300
-
301
-		$result = [
302
-			'success' => false,
303
-			'result' => '',
304
-		];
305
-
306
-		// if possible we use the new OCM API
307
-		$ocmResult = $this->tryOCMEndPoint($remoteDomain, $fields, $action);
308
-		if ($ocmResult) {
309
-			$result['success'] = true;
310
-			return $result;
311
-		}
312
-
313
-		// Fall back to old API
314
-		$client = $this->httpClientService->newClient();
315
-		$federationEndpoints = $this->discoveryService->discover($remoteDomain, 'FEDERATED_SHARING');
316
-		$endpoint = isset($federationEndpoints['share']) ? $federationEndpoints['share'] : '/ocs/v2.php/cloud/shares';
317
-		try {
318
-			$response = $client->post($remoteDomain . $endpoint . $urlSuffix . '?format=' . self::RESPONSE_FORMAT, [
319
-				'body' => $fields,
320
-				'timeout' => 10,
321
-				'connect_timeout' => 10,
322
-			]);
323
-			$result['result'] = $response->getBody();
324
-			$result['success'] = true;
325
-		} catch (\Exception $e) {
326
-			// if flat re-sharing is not supported by the remote server
327
-			// we re-throw the exception and fall back to the old behaviour.
328
-			// (flat re-shares has been introduced in Nextcloud 9.1)
329
-			if ($e->getCode() === Http::STATUS_INTERNAL_SERVER_ERROR) {
330
-				throw $e;
331
-			}
332
-		}
333
-
334
-		return $result;
335
-	}
336
-
337
-	/**
338
-	 * check if server supports the new OCM api and ask for the correct end-point
339
-	 *
340
-	 * @param string $url
341
-	 * @return string
342
-	 */
343
-	protected function getOCMEndPoint($url) {
344
-		$client = $this->httpClientService->newClient();
345
-		try {
346
-			$response = $client->get($url, ['timeout' => 10, 'connect_timeout' => 10]);
347
-		} catch (\Exception $e) {
348
-			return '';
349
-		}
350
-
351
-		$result = $response->getBody();
352
-		$result = json_decode($result, true);
353
-
354
-		if (isset($result['end-point'])) {
355
-			return $result['end-point'];
356
-		}
357
-
358
-		return '';
359
-	}
360
-
361
-	/**
362
-	 * send action regarding federated sharing to the remote server using the OCM API
363
-	 *
364
-	 * @param $remoteDomain
365
-	 * @param $fields
366
-	 * @param $action
367
-	 *
368
-	 * @return bool
369
-	 */
370
-	protected function tryOCMEndPoint($remoteDomain, $fields, $action) {
371
-		switch ($action) {
372
-			case 'share':
373
-				$share = $this->cloudFederationFactory->getCloudFederationShare(
374
-					$fields['shareWith'] . '@' . $remoteDomain,
375
-					$fields['name'],
376
-					'',
377
-					$fields['remoteId'],
378
-					$fields['ownerFederatedId'],
379
-					$fields['owner'],
380
-					$fields['sharedByFederatedId'],
381
-					$fields['sharedBy'],
382
-					$fields['token'],
383
-					'user',
384
-					'file'
385
-				);
386
-				return $this->federationProviderManager->sendShare($share);
387
-		}
388
-
389
-	}
36
+    const RESPONSE_FORMAT = 'json'; // default response format for ocs calls
37
+
38
+    /** @var AddressHandler */
39
+    private $addressHandler;
40
+
41
+    /** @var IClientService */
42
+    private $httpClientService;
43
+
44
+    /** @var IDiscoveryService */
45
+    private $discoveryService;
46
+
47
+    /** @var IJobList  */
48
+    private $jobList;
49
+
50
+    /** @var ICloudFederationProviderManager */
51
+    private $federationProviderManager;
52
+
53
+    /** @var ICloudFederationFactory */
54
+    private $cloudFederationFactory;
55
+
56
+    /**
57
+     * @param AddressHandler $addressHandler
58
+     * @param IClientService $httpClientService
59
+     * @param IDiscoveryService $discoveryService
60
+     * @param IJobList $jobList
61
+     * @param ICloudFederationProviderManager $federationProviderManager
62
+     * @param ICloudFederationFactory $cloudFederationFactory
63
+     */
64
+    public function __construct(
65
+        AddressHandler $addressHandler,
66
+        IClientService $httpClientService,
67
+        IDiscoveryService $discoveryService,
68
+        IJobList $jobList,
69
+        ICloudFederationProviderManager $federationProviderManager,
70
+        ICloudFederationFactory $cloudFederationFactory
71
+    ) {
72
+        $this->addressHandler = $addressHandler;
73
+        $this->httpClientService = $httpClientService;
74
+        $this->discoveryService = $discoveryService;
75
+        $this->jobList = $jobList;
76
+        $this->federationProviderManager = $federationProviderManager;
77
+        $this->cloudFederationFactory = $cloudFederationFactory;
78
+    }
79
+
80
+    /**
81
+     * send server-to-server share to remote server
82
+     *
83
+     * @param string $token
84
+     * @param string $shareWith
85
+     * @param string $name
86
+     * @param int $remote_id
87
+     * @param string $owner
88
+     * @param string $ownerFederatedId
89
+     * @param string $sharedBy
90
+     * @param string $sharedByFederatedId
91
+     * @return bool
92
+     * @throws \OC\HintException
93
+     * @throws \OC\ServerNotAvailableException
94
+     */
95
+    public function sendRemoteShare($token, $shareWith, $name, $remote_id, $owner, $ownerFederatedId, $sharedBy, $sharedByFederatedId) {
96
+
97
+        list($user, $remote) = $this->addressHandler->splitUserRemote($shareWith);
98
+
99
+        if ($user && $remote) {
100
+            $local = $this->addressHandler->generateRemoteURL();
101
+
102
+            $fields = array(
103
+                'shareWith' => $user,
104
+                'token' => $token,
105
+                'name' => $name,
106
+                'remoteId' => $remote_id,
107
+                'owner' => $owner,
108
+                'ownerFederatedId' => $ownerFederatedId,
109
+                'sharedBy' => $sharedBy,
110
+                'sharedByFederatedId' => $sharedByFederatedId,
111
+                'remote' => $local,
112
+            );
113
+
114
+            $result = $this->tryHttpPostToShareEndpoint($remote, '', $fields);
115
+            $status = json_decode($result['result'], true);
116
+
117
+            $ocsStatus = isset($status['ocs']);
118
+            $ocsSuccess = $ocsStatus && ($status['ocs']['meta']['statuscode'] === 100 || $status['ocs']['meta']['statuscode'] === 200);
119
+
120
+            if ($result['success'] && (!$ocsStatus ||$ocsSuccess)) {
121
+                \OC_Hook::emit('OCP\Share', 'federated_share_added', ['server' => $remote]);
122
+                return true;
123
+            }
124
+
125
+        }
126
+
127
+        return false;
128
+    }
129
+
130
+    /**
131
+     * ask owner to re-share the file with the given user
132
+     *
133
+     * @param string $token
134
+     * @param int $id remote Id
135
+     * @param int $shareId internal share Id
136
+     * @param string $remote remote address of the owner
137
+     * @param string $shareWith
138
+     * @param int $permission
139
+     * @return bool
140
+     * @throws \OC\HintException
141
+     * @throws \OC\ServerNotAvailableException
142
+     */
143
+    public function requestReShare($token, $id, $shareId, $remote, $shareWith, $permission) {
144
+
145
+        $fields = array(
146
+            'shareWith' => $shareWith,
147
+            'token' => $token,
148
+            'permission' => $permission,
149
+            'remoteId' => $shareId
150
+        );
151
+
152
+        $result = $this->tryHttpPostToShareEndpoint(rtrim($remote, '/'), '/' . $id . '/reshare', $fields);
153
+        $status = json_decode($result['result'], true);
154
+
155
+        $httpRequestSuccessful = $result['success'];
156
+        $ocsCallSuccessful = $status['ocs']['meta']['statuscode'] === 100 || $status['ocs']['meta']['statuscode'] === 200;
157
+        $validToken = isset($status['ocs']['data']['token']) && is_string($status['ocs']['data']['token']);
158
+        $validRemoteId = isset($status['ocs']['data']['remoteId']);
159
+
160
+        if ($httpRequestSuccessful && $ocsCallSuccessful && $validToken && $validRemoteId) {
161
+            return [
162
+                $status['ocs']['data']['token'],
163
+                (int)$status['ocs']['data']['remoteId']
164
+            ];
165
+        }
166
+
167
+        return false;
168
+    }
169
+
170
+    /**
171
+     * send server-to-server unshare to remote server
172
+     *
173
+     * @param string $remote url
174
+     * @param int $id share id
175
+     * @param string $token
176
+     * @return bool
177
+     */
178
+    public function sendRemoteUnShare($remote, $id, $token) {
179
+        $this->sendUpdateToRemote($remote, $id, $token, 'unshare');
180
+    }
181
+
182
+    /**
183
+     * send server-to-server unshare to remote server
184
+     *
185
+     * @param string $remote url
186
+     * @param int $id share id
187
+     * @param string $token
188
+     * @return bool
189
+     */
190
+    public function sendRevokeShare($remote, $id, $token) {
191
+        $this->sendUpdateToRemote($remote, $id, $token, 'revoke');
192
+    }
193
+
194
+    /**
195
+     * send notification to remote server if the permissions was changed
196
+     *
197
+     * @param string $remote
198
+     * @param int $remoteId
199
+     * @param string $token
200
+     * @param int $permissions
201
+     * @return bool
202
+     */
203
+    public function sendPermissionChange($remote, $remoteId, $token, $permissions) {
204
+        $this->sendUpdateToRemote($remote, $remoteId, $token, 'permissions', ['permissions' => $permissions]);
205
+    }
206
+
207
+    /**
208
+     * forward accept reShare to remote server
209
+     *
210
+     * @param string $remote
211
+     * @param int $remoteId
212
+     * @param string $token
213
+     */
214
+    public function sendAcceptShare($remote, $remoteId, $token) {
215
+        $this->sendUpdateToRemote($remote, $remoteId, $token, 'accept');
216
+    }
217
+
218
+    /**
219
+     * forward decline reShare to remote server
220
+     *
221
+     * @param string $remote
222
+     * @param int $remoteId
223
+     * @param string $token
224
+     */
225
+    public function sendDeclineShare($remote, $remoteId, $token) {
226
+        $this->sendUpdateToRemote($remote, $remoteId, $token, 'decline');
227
+    }
228
+
229
+    /**
230
+     * inform remote server whether server-to-server share was accepted/declined
231
+     *
232
+     * @param string $remote
233
+     * @param string $token
234
+     * @param int $remoteId Share id on the remote host
235
+     * @param string $action possible actions: accept, decline, unshare, revoke, permissions
236
+     * @param array $data
237
+     * @param int $try
238
+     * @return boolean
239
+     */
240
+    public function sendUpdateToRemote($remote, $remoteId, $token, $action, $data = [], $try = 0) {
241
+
242
+        $fields = array('token' => $token);
243
+        foreach ($data as $key => $value) {
244
+            $fields[$key] = $value;
245
+        }
246
+
247
+        $result = $this->tryHttpPostToShareEndpoint(rtrim($remote, '/'), '/' . $remoteId . '/' . $action, $fields);
248
+        $status = json_decode($result['result'], true);
249
+
250
+        if ($result['success'] &&
251
+            ($status['ocs']['meta']['statuscode'] === 100 ||
252
+                $status['ocs']['meta']['statuscode'] === 200
253
+            )
254
+        ) {
255
+            return true;
256
+        } elseif ($try === 0) {
257
+            // only add new job on first try
258
+            $this->jobList->add('OCA\FederatedFileSharing\BackgroundJob\RetryJob',
259
+                [
260
+                    'remote' => $remote,
261
+                    'remoteId' => $remoteId,
262
+                    'token' => $token,
263
+                    'action' => $action,
264
+                    'data' => json_encode($data),
265
+                    'try' => $try,
266
+                    'lastRun' => $this->getTimestamp()
267
+                ]
268
+            );
269
+        }
270
+
271
+        return false;
272
+    }
273
+
274
+
275
+    /**
276
+     * return current timestamp
277
+     *
278
+     * @return int
279
+     */
280
+    protected function getTimestamp() {
281
+        return time();
282
+    }
283
+
284
+    /**
285
+     * try http post with the given protocol, if no protocol is given we pick
286
+     * the secure one (https)
287
+     *
288
+     * @param string $remoteDomain
289
+     * @param string $urlSuffix
290
+     * @param array $fields post parameters
291
+     * @param string $action define the action (possible values: share, reshare, accept, decline, unshare, revoke, permissions)
292
+     * @return array
293
+     * @throws \Exception
294
+     */
295
+    protected function tryHttpPostToShareEndpoint($remoteDomain, $urlSuffix, array $fields, $action="share") {
296
+
297
+        if ($this->addressHandler->urlContainProtocol($remoteDomain) === false) {
298
+            $remoteDomain = 'https://' . $remoteDomain;
299
+        }
300
+
301
+        $result = [
302
+            'success' => false,
303
+            'result' => '',
304
+        ];
305
+
306
+        // if possible we use the new OCM API
307
+        $ocmResult = $this->tryOCMEndPoint($remoteDomain, $fields, $action);
308
+        if ($ocmResult) {
309
+            $result['success'] = true;
310
+            return $result;
311
+        }
312
+
313
+        // Fall back to old API
314
+        $client = $this->httpClientService->newClient();
315
+        $federationEndpoints = $this->discoveryService->discover($remoteDomain, 'FEDERATED_SHARING');
316
+        $endpoint = isset($federationEndpoints['share']) ? $federationEndpoints['share'] : '/ocs/v2.php/cloud/shares';
317
+        try {
318
+            $response = $client->post($remoteDomain . $endpoint . $urlSuffix . '?format=' . self::RESPONSE_FORMAT, [
319
+                'body' => $fields,
320
+                'timeout' => 10,
321
+                'connect_timeout' => 10,
322
+            ]);
323
+            $result['result'] = $response->getBody();
324
+            $result['success'] = true;
325
+        } catch (\Exception $e) {
326
+            // if flat re-sharing is not supported by the remote server
327
+            // we re-throw the exception and fall back to the old behaviour.
328
+            // (flat re-shares has been introduced in Nextcloud 9.1)
329
+            if ($e->getCode() === Http::STATUS_INTERNAL_SERVER_ERROR) {
330
+                throw $e;
331
+            }
332
+        }
333
+
334
+        return $result;
335
+    }
336
+
337
+    /**
338
+     * check if server supports the new OCM api and ask for the correct end-point
339
+     *
340
+     * @param string $url
341
+     * @return string
342
+     */
343
+    protected function getOCMEndPoint($url) {
344
+        $client = $this->httpClientService->newClient();
345
+        try {
346
+            $response = $client->get($url, ['timeout' => 10, 'connect_timeout' => 10]);
347
+        } catch (\Exception $e) {
348
+            return '';
349
+        }
350
+
351
+        $result = $response->getBody();
352
+        $result = json_decode($result, true);
353
+
354
+        if (isset($result['end-point'])) {
355
+            return $result['end-point'];
356
+        }
357
+
358
+        return '';
359
+    }
360
+
361
+    /**
362
+     * send action regarding federated sharing to the remote server using the OCM API
363
+     *
364
+     * @param $remoteDomain
365
+     * @param $fields
366
+     * @param $action
367
+     *
368
+     * @return bool
369
+     */
370
+    protected function tryOCMEndPoint($remoteDomain, $fields, $action) {
371
+        switch ($action) {
372
+            case 'share':
373
+                $share = $this->cloudFederationFactory->getCloudFederationShare(
374
+                    $fields['shareWith'] . '@' . $remoteDomain,
375
+                    $fields['name'],
376
+                    '',
377
+                    $fields['remoteId'],
378
+                    $fields['ownerFederatedId'],
379
+                    $fields['owner'],
380
+                    $fields['sharedByFederatedId'],
381
+                    $fields['sharedBy'],
382
+                    $fields['token'],
383
+                    'user',
384
+                    'file'
385
+                );
386
+                return $this->federationProviderManager->sendShare($share);
387
+        }
388
+
389
+    }
390 390
 }
Please login to merge, or discard this patch.
lib/public/Federation/Exceptions/BadRequestException.php 1 patch
Indentation   +33 added lines, -33 removed lines patch added patch discarded remove patch
@@ -25,42 +25,42 @@
 block discarded – undo
25 25
 
26 26
 class BadRequestException extends HintException {
27 27
 
28
-	private $parameterList;
28
+    private $parameterList;
29 29
 
30
-	/**
31
-	 * BadRequestException constructor.
32
-	 *
33
-	 * @param array $missingParameters
34
-	 */
35
-	public function __construct(array $missingParameters) {
36
-		$l = \OC::$server->getL10N('federation');
37
-		$this->parameterList = $missingParameters;
38
-		$parameterList = implode(',', $missingParameters);
39
-		$message = 'Parameters missing in order to complete the request. Missing Parameters: ' . $parameterList;
40
-		$hint = $l->t('Parameters missing in order to complete the request. Missing Parameters: "%s"', [$parameterList]);
41
-		parent::__construct($message, $hint);
42
-	}
30
+    /**
31
+     * BadRequestException constructor.
32
+     *
33
+     * @param array $missingParameters
34
+     */
35
+    public function __construct(array $missingParameters) {
36
+        $l = \OC::$server->getL10N('federation');
37
+        $this->parameterList = $missingParameters;
38
+        $parameterList = implode(',', $missingParameters);
39
+        $message = 'Parameters missing in order to complete the request. Missing Parameters: ' . $parameterList;
40
+        $hint = $l->t('Parameters missing in order to complete the request. Missing Parameters: "%s"', [$parameterList]);
41
+        parent::__construct($message, $hint);
42
+    }
43 43
 
44
-	/**
45
-	 * get array with the return message as defined in the OCM API
46
-	 *
47
-	 * @return array
48
-	 */
49
-	public function getReturnMessage() {
50
-		$result = [
51
-			'message' => 'RESOURCE_NOT_FOUND',
52
-			'validationErrors' =>[
53
-			]
54
-		];
44
+    /**
45
+     * get array with the return message as defined in the OCM API
46
+     *
47
+     * @return array
48
+     */
49
+    public function getReturnMessage() {
50
+        $result = [
51
+            'message' => 'RESOURCE_NOT_FOUND',
52
+            'validationErrors' =>[
53
+            ]
54
+        ];
55 55
 
56
-		foreach ($this->parameterList as $missingParameter) {
57
-			$result['validationErrors'] = [
58
-				'name' => $missingParameter,
59
-				'message' => 'NOT_FOUND'
60
-			];
61
-		}
56
+        foreach ($this->parameterList as $missingParameter) {
57
+            $result['validationErrors'] = [
58
+                'name' => $missingParameter,
59
+                'message' => 'NOT_FOUND'
60
+            ];
61
+        }
62 62
 
63
-		return $result;
64
-	}
63
+        return $result;
64
+    }
65 65
 
66 66
 }
Please login to merge, or discard this patch.
lib/public/Federation/Exceptions/AuthenticationFailedException.php 1 patch
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -25,16 +25,16 @@
 block discarded – undo
25 25
 
26 26
 class AuthenticationFailedException extends HintException {
27 27
 
28
-	/**
29
-	 * BadRequestException constructor.
30
-	 *
31
-	 * @param array $missingParameters
32
-	 */
33
-	public function __construct() {
34
-		$l = \OC::$server->getL10N('federation');
35
-		$message = 'Authentication failed, wrong token or provider ID given';
36
-		$hint = $l->t('Authentication failed, wrong token or provider ID given');
37
-		parent::__construct($message, $hint);
38
-	}
28
+    /**
29
+     * BadRequestException constructor.
30
+     *
31
+     * @param array $missingParameters
32
+     */
33
+    public function __construct() {
34
+        $l = \OC::$server->getL10N('federation');
35
+        $message = 'Authentication failed, wrong token or provider ID given';
36
+        $hint = $l->t('Authentication failed, wrong token or provider ID given');
37
+        parent::__construct($message, $hint);
38
+    }
39 39
 
40 40
 }
Please login to merge, or discard this patch.
lib/public/Federation/ICloudFederationProvider.php 1 patch
Indentation   +34 added lines, -34 removed lines patch added patch discarded remove patch
@@ -39,41 +39,41 @@
 block discarded – undo
39 39
 
40 40
 interface ICloudFederationProvider {
41 41
 
42
-	/**
43
-	 * get the name of the share type, handled by this provider
44
-	 *
45
-	 * @return string
46
-	 *
47
-	 * @since 14.0.0
48
-	 */
49
-	public function getShareType();
42
+    /**
43
+     * get the name of the share type, handled by this provider
44
+     *
45
+     * @return string
46
+     *
47
+     * @since 14.0.0
48
+     */
49
+    public function getShareType();
50 50
 
51
-	/**
52
-	 * share received from another server
53
-	 *
54
-	 * @param ICloudFederationShare $share
55
-	 * @return string provider specific unique ID of the share
56
-	 *
57
-	 * @throws ProviderCouldNotAddShareException
58
-	 *
59
-	 * @since 14.0.0
60
-	 */
61
-	public function shareReceived(ICloudFederationShare $share);
51
+    /**
52
+     * share received from another server
53
+     *
54
+     * @param ICloudFederationShare $share
55
+     * @return string provider specific unique ID of the share
56
+     *
57
+     * @throws ProviderCouldNotAddShareException
58
+     *
59
+     * @since 14.0.0
60
+     */
61
+    public function shareReceived(ICloudFederationShare $share);
62 62
 
63
-	/**
64
-	 * notification received from another server
65
-	 *
66
-	 * @param string $notificationType (e.g SHARE_ACCEPTED)
67
-	 * @param string $providerId share ID
68
-	 * @param array $notification provider specific notification
69
-	 *
70
-	 * @throws ShareNotFoundException
71
-	 * @throws ActionNotSupportedException
72
-	 * @throws BadRequestException
73
-	 * @throws AuthenticationFailedException
74
-	 *
75
-	 * @since 14.0.0
76
-	 */
77
-	public function notificationReceived($notificationType, $providerId, array $notification);
63
+    /**
64
+     * notification received from another server
65
+     *
66
+     * @param string $notificationType (e.g SHARE_ACCEPTED)
67
+     * @param string $providerId share ID
68
+     * @param array $notification provider specific notification
69
+     *
70
+     * @throws ShareNotFoundException
71
+     * @throws ActionNotSupportedException
72
+     * @throws BadRequestException
73
+     * @throws AuthenticationFailedException
74
+     *
75
+     * @since 14.0.0
76
+     */
77
+    public function notificationReceived($notificationType, $providerId, array $notification);
78 78
 
79 79
 }
Please login to merge, or discard this patch.
lib/public/Share/IShareProvider.php 1 patch
Indentation   +168 added lines, -168 removed lines patch added patch discarded remove patch
@@ -36,172 +36,172 @@
 block discarded – undo
36 36
  */
37 37
 interface IShareProvider {
38 38
 
39
-	/**
40
-	 * Return the identifier of this provider.
41
-	 *
42
-	 * @return string Containing only [a-zA-Z0-9]
43
-	 * @since 9.0.0
44
-	 */
45
-	public function identifier();
46
-
47
-	/**
48
-	 * Create a share
49
-	 *
50
-	 * @param \OCP\Share\IShare $share
51
-	 * @return \OCP\Share\IShare The share object
52
-	 * @since 9.0.0
53
-	 */
54
-	public function create(\OCP\Share\IShare $share);
55
-
56
-	/**
57
-	 * Update a share
58
-	 *
59
-	 * @param \OCP\Share\IShare $share
60
-	 * @return \OCP\Share\IShare The share object
61
-	 * @since 9.0.0
62
-	 */
63
-	public function update(\OCP\Share\IShare $share);
64
-
65
-	/**
66
-	 * Delete a share
67
-	 *
68
-	 * @param \OCP\Share\IShare $share
69
-	 * @since 9.0.0
70
-	 */
71
-	public function delete(\OCP\Share\IShare $share);
72
-
73
-	/**
74
-	 * Unshare a file from self as recipient.
75
-	 * This may require special handling. If a user unshares a group
76
-	 * share from their self then the original group share should still exist.
77
-	 *
78
-	 * @param \OCP\Share\IShare $share
79
-	 * @param string $recipient UserId of the recipient
80
-	 * @since 9.0.0
81
-	 */
82
-	public function deleteFromSelf(\OCP\Share\IShare $share, $recipient);
83
-
84
-	/**
85
-	 * Move a share as a recipient.
86
-	 * This is updating the share target. Thus the mount point of the recipient.
87
-	 * This may require special handling. If a user moves a group share
88
-	 * the target should only be changed for them.
89
-	 *
90
-	 * @param \OCP\Share\IShare $share
91
-	 * @param string $recipient userId of recipient
92
-	 * @return \OCP\Share\IShare
93
-	 * @since 9.0.0
94
-	 */
95
-	public function move(\OCP\Share\IShare $share, $recipient);
96
-
97
-	/**
98
-	 * Get all shares by the given user in a folder
99
-	 *
100
-	 * @param string $userId
101
-	 * @param Folder $node
102
-	 * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
103
-	 * @return \OCP\Share\IShare[]
104
-	 * @since 11.0.0
105
-	 */
106
-	public function getSharesInFolder($userId, Folder $node, $reshares);
107
-
108
-	/**
109
-	 * Get all shares by the given user
110
-	 *
111
-	 * @param string $userId
112
-	 * @param int $shareType
113
-	 * @param Node|null $node
114
-	 * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
115
-	 * @param int $limit The maximum number of shares to be returned, -1 for all shares
116
-	 * @param int $offset
117
-	 * @return \OCP\Share\IShare[]
118
-	 * @since 9.0.0
119
-	 */
120
-	public function getSharesBy($userId, $shareType, $node, $reshares, $limit, $offset);
121
-
122
-	/**
123
-	 * Get share by id
124
-	 *
125
-	 * @param int $id
126
-	 * @param string|null $recipientId
127
-	 * @return \OCP\Share\IShare
128
-	 * @throws ShareNotFoundException
129
-	 * @since 9.0.0
130
-	 */
131
-	public function getShareById($id, $recipientId = null);
132
-
133
-	/**
134
-	 * Get shares for a given path
135
-	 *
136
-	 * @param Node $path
137
-	 * @return \OCP\Share\IShare[]
138
-	 * @since 9.0.0
139
-	 */
140
-	public function getSharesByPath(Node $path);
141
-
142
-	/**
143
-	 * Get shared with the given user
144
-	 *
145
-	 * @param string $userId get shares where this user is the recipient
146
-	 * @param int $shareType
147
-	 * @param Node|null $node
148
-	 * @param int $limit The max number of entries returned, -1 for all
149
-	 * @param int $offset
150
-	 * @return \OCP\Share\IShare[]
151
-	 * @since 9.0.0
152
-	 */
153
-	public function getSharedWith($userId, $shareType, $node, $limit, $offset);
154
-
155
-	/**
156
-	 * Get a share by token
157
-	 *
158
-	 * @param string $token
159
-	 * @return \OCP\Share\IShare
160
-	 * @throws ShareNotFound
161
-	 * @since 9.0.0
162
-	 */
163
-	public function getShareByToken($token);
164
-
165
-	/**
166
-	 * A user is deleted from the system
167
-	 * So clean up the relevant shares.
168
-	 *
169
-	 * @param string $uid
170
-	 * @param int $shareType
171
-	 * @since 9.1.0
172
-	 */
173
-	public function userDeleted($uid, $shareType);
174
-
175
-	/**
176
-	 * A group is deleted from the system.
177
-	 * We have to clean up all shares to this group.
178
-	 * Providers not handling group shares should just return
179
-	 *
180
-	 * @param string $gid
181
-	 * @since 9.1.0
182
-	 */
183
-	public function groupDeleted($gid);
184
-
185
-	/**
186
-	 * A user is deleted from a group
187
-	 * We have to clean up all the related user specific group shares
188
-	 * Providers not handling group shares should just return
189
-	 *
190
-	 * @param string $uid
191
-	 * @param string $gid
192
-	 * @since 9.1.0
193
-	 */
194
-	public function userDeletedFromGroup($uid, $gid);
195
-
196
-	/**
197
-	 * Get the access list to the array of provided nodes.
198
-	 *
199
-	 * @see IManager::getAccessList() for sample docs
200
-	 *
201
-	 * @param Node[] $nodes The list of nodes to get access for
202
-	 * @param bool $currentAccess If current access is required (like for removed shares that might get revived later)
203
-	 * @return array
204
-	 * @since 12
205
-	 */
206
-	public function getAccessList($nodes, $currentAccess);
39
+    /**
40
+     * Return the identifier of this provider.
41
+     *
42
+     * @return string Containing only [a-zA-Z0-9]
43
+     * @since 9.0.0
44
+     */
45
+    public function identifier();
46
+
47
+    /**
48
+     * Create a share
49
+     *
50
+     * @param \OCP\Share\IShare $share
51
+     * @return \OCP\Share\IShare The share object
52
+     * @since 9.0.0
53
+     */
54
+    public function create(\OCP\Share\IShare $share);
55
+
56
+    /**
57
+     * Update a share
58
+     *
59
+     * @param \OCP\Share\IShare $share
60
+     * @return \OCP\Share\IShare The share object
61
+     * @since 9.0.0
62
+     */
63
+    public function update(\OCP\Share\IShare $share);
64
+
65
+    /**
66
+     * Delete a share
67
+     *
68
+     * @param \OCP\Share\IShare $share
69
+     * @since 9.0.0
70
+     */
71
+    public function delete(\OCP\Share\IShare $share);
72
+
73
+    /**
74
+     * Unshare a file from self as recipient.
75
+     * This may require special handling. If a user unshares a group
76
+     * share from their self then the original group share should still exist.
77
+     *
78
+     * @param \OCP\Share\IShare $share
79
+     * @param string $recipient UserId of the recipient
80
+     * @since 9.0.0
81
+     */
82
+    public function deleteFromSelf(\OCP\Share\IShare $share, $recipient);
83
+
84
+    /**
85
+     * Move a share as a recipient.
86
+     * This is updating the share target. Thus the mount point of the recipient.
87
+     * This may require special handling. If a user moves a group share
88
+     * the target should only be changed for them.
89
+     *
90
+     * @param \OCP\Share\IShare $share
91
+     * @param string $recipient userId of recipient
92
+     * @return \OCP\Share\IShare
93
+     * @since 9.0.0
94
+     */
95
+    public function move(\OCP\Share\IShare $share, $recipient);
96
+
97
+    /**
98
+     * Get all shares by the given user in a folder
99
+     *
100
+     * @param string $userId
101
+     * @param Folder $node
102
+     * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
103
+     * @return \OCP\Share\IShare[]
104
+     * @since 11.0.0
105
+     */
106
+    public function getSharesInFolder($userId, Folder $node, $reshares);
107
+
108
+    /**
109
+     * Get all shares by the given user
110
+     *
111
+     * @param string $userId
112
+     * @param int $shareType
113
+     * @param Node|null $node
114
+     * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
115
+     * @param int $limit The maximum number of shares to be returned, -1 for all shares
116
+     * @param int $offset
117
+     * @return \OCP\Share\IShare[]
118
+     * @since 9.0.0
119
+     */
120
+    public function getSharesBy($userId, $shareType, $node, $reshares, $limit, $offset);
121
+
122
+    /**
123
+     * Get share by id
124
+     *
125
+     * @param int $id
126
+     * @param string|null $recipientId
127
+     * @return \OCP\Share\IShare
128
+     * @throws ShareNotFoundException
129
+     * @since 9.0.0
130
+     */
131
+    public function getShareById($id, $recipientId = null);
132
+
133
+    /**
134
+     * Get shares for a given path
135
+     *
136
+     * @param Node $path
137
+     * @return \OCP\Share\IShare[]
138
+     * @since 9.0.0
139
+     */
140
+    public function getSharesByPath(Node $path);
141
+
142
+    /**
143
+     * Get shared with the given user
144
+     *
145
+     * @param string $userId get shares where this user is the recipient
146
+     * @param int $shareType
147
+     * @param Node|null $node
148
+     * @param int $limit The max number of entries returned, -1 for all
149
+     * @param int $offset
150
+     * @return \OCP\Share\IShare[]
151
+     * @since 9.0.0
152
+     */
153
+    public function getSharedWith($userId, $shareType, $node, $limit, $offset);
154
+
155
+    /**
156
+     * Get a share by token
157
+     *
158
+     * @param string $token
159
+     * @return \OCP\Share\IShare
160
+     * @throws ShareNotFound
161
+     * @since 9.0.0
162
+     */
163
+    public function getShareByToken($token);
164
+
165
+    /**
166
+     * A user is deleted from the system
167
+     * So clean up the relevant shares.
168
+     *
169
+     * @param string $uid
170
+     * @param int $shareType
171
+     * @since 9.1.0
172
+     */
173
+    public function userDeleted($uid, $shareType);
174
+
175
+    /**
176
+     * A group is deleted from the system.
177
+     * We have to clean up all shares to this group.
178
+     * Providers not handling group shares should just return
179
+     *
180
+     * @param string $gid
181
+     * @since 9.1.0
182
+     */
183
+    public function groupDeleted($gid);
184
+
185
+    /**
186
+     * A user is deleted from a group
187
+     * We have to clean up all the related user specific group shares
188
+     * Providers not handling group shares should just return
189
+     *
190
+     * @param string $uid
191
+     * @param string $gid
192
+     * @since 9.1.0
193
+     */
194
+    public function userDeletedFromGroup($uid, $gid);
195
+
196
+    /**
197
+     * Get the access list to the array of provided nodes.
198
+     *
199
+     * @see IManager::getAccessList() for sample docs
200
+     *
201
+     * @param Node[] $nodes The list of nodes to get access for
202
+     * @param bool $currentAccess If current access is required (like for removed shares that might get revived later)
203
+     * @return array
204
+     * @since 12
205
+     */
206
+    public function getAccessList($nodes, $currentAccess);
207 207
 }
Please login to merge, or discard this patch.
lib/private/Federation/CloudFederationProviderManager.php 1 patch
Indentation   +184 added lines, -184 removed lines patch added patch discarded remove patch
@@ -42,190 +42,190 @@
 block discarded – undo
42 42
  */
43 43
 class CloudFederationProviderManager implements ICloudFederationProviderManager {
44 44
 
45
-	/** @var array list of available cloud federation providers */
46
-	private $cloudFederationProvider;
47
-
48
-	/** @var IAppManager */
49
-	private $appManager;
50
-
51
-	/** @var IClientService */
52
-	private $httpClientService;
53
-
54
-	/** @var ICloudIdManager */
55
-	private $cloudIdManager;
56
-
57
-	/** @var ILogger */
58
-	private $logger;
59
-
60
-	private $supportedAPIVersion = '1.0-proposal1';
61
-
62
-	/**
63
-	 * CloudFederationProviderManager constructor.
64
-	 *
65
-	 * @param IAppManager $appManager
66
-	 * @param IClientService $httpClientService
67
-	 * @param ICloudIdManager $cloudIdManager
68
-	 * @param ILogger $logger
69
-	 */
70
-	public function __construct(IAppManager $appManager,
71
-								IClientService $httpClientService,
72
-								ICloudIdManager $cloudIdManager,
73
-								ILogger $logger) {
74
-		$this->cloudFederationProvider= [];
75
-		$this->appManager = $appManager;
76
-		$this->httpClientService = $httpClientService;
77
-		$this->cloudIdManager = $cloudIdManager;
78
-		$this->logger = $logger;
79
-	}
80
-
81
-
82
-	/**
83
-	 * Registers an callback function which must return an cloud federation provider
84
-	 *
85
-	 * @param string $shareType which share type does the provider handles
86
-	 * @param string $displayName user facing name of the federated share provider
87
-	 * @param callable $callback
88
-	 */
89
-	public function addCloudFederationProvider($shareType, $displayName, callable $callback) {
90
-		\OC::$server->getRemoteApiFactory();
91
-
92
-		$this->cloudFederationProvider[$shareType] = [
93
-			'shareType' => $shareType,
94
-			'displayName' => $displayName,
95
-			'callback' => $callback,
96
-		];
97
-
98
-	}
99
-
100
-	/**
101
-	 * remove cloud federation provider
102
-	 *
103
-	 * @param string $providerId
104
-	 */
105
-	public function removeCloudFederationProvider($providerId) {
106
-		unset($this->cloudFederationProvider[$providerId]);
107
-	}
108
-
109
-	/**
110
-	 * get a list of all cloudFederationProviders
111
-	 *
112
-	 * @return array [id => ['id' => $id, 'displayName' => $displayName, 'callback' => callback]]
113
-	 */
114
-	public function getAllCloudFederationProviders() {
115
-		return $this->cloudFederationProvider;
116
-	}
117
-
118
-	/**
119
-	 * get a specific cloud federation provider
120
-	 *
121
-	 * @param string $shareType
122
-	 * @return ICloudFederationProvider
123
-	 * @throws ProviderDoesNotExistsException
124
-	 */
125
-	public function getCloudFederationProvider($shareType) {
126
-		if (isset($this->cloudFederationProvider[$shareType])) {
127
-			return call_user_func($this->cloudFederationProvider[$shareType]['callback']);
128
-		} else {
129
-			throw new ProviderDoesNotExistsException($shareType);
130
-		}
131
-	}
132
-
133
-	public function sendShare(ICloudFederationShare $share) {
134
-		$cloudID = $this->cloudIdManager->resolveCloudId($share->getShareWith());
135
-		$ocmEndPoint = $this->getOCMEndPoint($cloudID->getRemote());
136
-
137
-		if (empty($ocmEndPoint)) {
138
-			return false;
139
-		}
140
-
141
-		$client = $this->httpClientService->newClient();
142
-		try {
143
-			$response = $client->post($ocmEndPoint . '/shares', [
144
-				'body' => $share->getShare(),
145
-				'timeout' => 10,
146
-				'connect_timeout' => 10,
147
-			]);
148
-
149
-			if ($response->getStatusCode() === Http::STATUS_CREATED) {
150
-				return true;
151
-			}
152
-
153
-		} catch (\Exception $e) {
154
-			// if flat re-sharing is not supported by the remote server
155
-			// we re-throw the exception and fall back to the old behaviour.
156
-			// (flat re-shares has been introduced in Nextcloud 9.1)
157
-			if ($e->getCode() === Http::STATUS_INTERNAL_SERVER_ERROR) {
158
-				throw $e;
159
-			}
160
-		}
161
-
162
-		return false;
163
-
164
-	}
165
-
166
-	/**
167
-	 * @param string $url
168
-	 * @param ICloudFederationNotification $notification
169
-	 * @return bool
170
-	 */
171
-	public function sendNotification($url, ICloudFederationNotification $notification) {
172
-		$ocmEndPoint = $this->getOCMEndPoint($url);
173
-
174
-		if (empty($ocmEndPoint)) {
175
-			return false;
176
-		}
177
-
178
-		$client = $this->httpClientService->newClient();
179
-		try {
180
-			$response = $client->post($ocmEndPoint . '/notifications', [
181
-				'body' => $notification->getMessage(),
182
-				'timeout' => 10,
183
-				'connect_timeout' => 10,
184
-			]);
185
-			if ($response->getStatusCode() === Http::STATUS_OK) {
186
-				return true;
187
-			}
188
-		} catch (\Exception $e) {
189
-			// log the error and return false
190
-			$this->logger->error('error while sending notification for federated share: ' . $e->getMessage());
191
-		}
192
-
193
-		return false;
194
-	}
195
-
196
-	/**
197
-	 * check if the new cloud federation API is ready to be used
198
-	 *
199
-	 * @return bool
200
-	 */
201
-	public function isReady() {
202
-		return $this->appManager->isEnabledForUser('cloud_federation_api', false);
203
-	}
204
-	/**
205
-	 * check if server supports the new OCM api and ask for the correct end-point
206
-	 *
207
-	 * @param string $url full base URL of the cloud server
208
-	 * @return string
209
-	 */
210
-	protected function getOCMEndPoint($url) {
211
-		$client = $this->httpClientService->newClient();
212
-		try {
213
-			$response = $client->get($url . '/ocm-provider/', ['timeout' => 10, 'connect_timeout' => 10]);
214
-		} catch (\Exception $e) {
215
-			return '';
216
-		}
217
-
218
-		$result = $response->getBody();
219
-		$result = json_decode($result, true);
220
-
221
-		$supportedVersion = isset($result['apiVersion']) && $result['apiVersion'] === $this->supportedAPIVersion;
222
-
223
-		if (isset($result['endPoint']) && $supportedVersion) {
224
-			return $result['endPoint'];
225
-		}
226
-
227
-		return '';
228
-	}
45
+    /** @var array list of available cloud federation providers */
46
+    private $cloudFederationProvider;
47
+
48
+    /** @var IAppManager */
49
+    private $appManager;
50
+
51
+    /** @var IClientService */
52
+    private $httpClientService;
53
+
54
+    /** @var ICloudIdManager */
55
+    private $cloudIdManager;
56
+
57
+    /** @var ILogger */
58
+    private $logger;
59
+
60
+    private $supportedAPIVersion = '1.0-proposal1';
61
+
62
+    /**
63
+     * CloudFederationProviderManager constructor.
64
+     *
65
+     * @param IAppManager $appManager
66
+     * @param IClientService $httpClientService
67
+     * @param ICloudIdManager $cloudIdManager
68
+     * @param ILogger $logger
69
+     */
70
+    public function __construct(IAppManager $appManager,
71
+                                IClientService $httpClientService,
72
+                                ICloudIdManager $cloudIdManager,
73
+                                ILogger $logger) {
74
+        $this->cloudFederationProvider= [];
75
+        $this->appManager = $appManager;
76
+        $this->httpClientService = $httpClientService;
77
+        $this->cloudIdManager = $cloudIdManager;
78
+        $this->logger = $logger;
79
+    }
80
+
81
+
82
+    /**
83
+     * Registers an callback function which must return an cloud federation provider
84
+     *
85
+     * @param string $shareType which share type does the provider handles
86
+     * @param string $displayName user facing name of the federated share provider
87
+     * @param callable $callback
88
+     */
89
+    public function addCloudFederationProvider($shareType, $displayName, callable $callback) {
90
+        \OC::$server->getRemoteApiFactory();
91
+
92
+        $this->cloudFederationProvider[$shareType] = [
93
+            'shareType' => $shareType,
94
+            'displayName' => $displayName,
95
+            'callback' => $callback,
96
+        ];
97
+
98
+    }
99
+
100
+    /**
101
+     * remove cloud federation provider
102
+     *
103
+     * @param string $providerId
104
+     */
105
+    public function removeCloudFederationProvider($providerId) {
106
+        unset($this->cloudFederationProvider[$providerId]);
107
+    }
108
+
109
+    /**
110
+     * get a list of all cloudFederationProviders
111
+     *
112
+     * @return array [id => ['id' => $id, 'displayName' => $displayName, 'callback' => callback]]
113
+     */
114
+    public function getAllCloudFederationProviders() {
115
+        return $this->cloudFederationProvider;
116
+    }
117
+
118
+    /**
119
+     * get a specific cloud federation provider
120
+     *
121
+     * @param string $shareType
122
+     * @return ICloudFederationProvider
123
+     * @throws ProviderDoesNotExistsException
124
+     */
125
+    public function getCloudFederationProvider($shareType) {
126
+        if (isset($this->cloudFederationProvider[$shareType])) {
127
+            return call_user_func($this->cloudFederationProvider[$shareType]['callback']);
128
+        } else {
129
+            throw new ProviderDoesNotExistsException($shareType);
130
+        }
131
+    }
132
+
133
+    public function sendShare(ICloudFederationShare $share) {
134
+        $cloudID = $this->cloudIdManager->resolveCloudId($share->getShareWith());
135
+        $ocmEndPoint = $this->getOCMEndPoint($cloudID->getRemote());
136
+
137
+        if (empty($ocmEndPoint)) {
138
+            return false;
139
+        }
140
+
141
+        $client = $this->httpClientService->newClient();
142
+        try {
143
+            $response = $client->post($ocmEndPoint . '/shares', [
144
+                'body' => $share->getShare(),
145
+                'timeout' => 10,
146
+                'connect_timeout' => 10,
147
+            ]);
148
+
149
+            if ($response->getStatusCode() === Http::STATUS_CREATED) {
150
+                return true;
151
+            }
152
+
153
+        } catch (\Exception $e) {
154
+            // if flat re-sharing is not supported by the remote server
155
+            // we re-throw the exception and fall back to the old behaviour.
156
+            // (flat re-shares has been introduced in Nextcloud 9.1)
157
+            if ($e->getCode() === Http::STATUS_INTERNAL_SERVER_ERROR) {
158
+                throw $e;
159
+            }
160
+        }
161
+
162
+        return false;
163
+
164
+    }
165
+
166
+    /**
167
+     * @param string $url
168
+     * @param ICloudFederationNotification $notification
169
+     * @return bool
170
+     */
171
+    public function sendNotification($url, ICloudFederationNotification $notification) {
172
+        $ocmEndPoint = $this->getOCMEndPoint($url);
173
+
174
+        if (empty($ocmEndPoint)) {
175
+            return false;
176
+        }
177
+
178
+        $client = $this->httpClientService->newClient();
179
+        try {
180
+            $response = $client->post($ocmEndPoint . '/notifications', [
181
+                'body' => $notification->getMessage(),
182
+                'timeout' => 10,
183
+                'connect_timeout' => 10,
184
+            ]);
185
+            if ($response->getStatusCode() === Http::STATUS_OK) {
186
+                return true;
187
+            }
188
+        } catch (\Exception $e) {
189
+            // log the error and return false
190
+            $this->logger->error('error while sending notification for federated share: ' . $e->getMessage());
191
+        }
192
+
193
+        return false;
194
+    }
195
+
196
+    /**
197
+     * check if the new cloud federation API is ready to be used
198
+     *
199
+     * @return bool
200
+     */
201
+    public function isReady() {
202
+        return $this->appManager->isEnabledForUser('cloud_federation_api', false);
203
+    }
204
+    /**
205
+     * check if server supports the new OCM api and ask for the correct end-point
206
+     *
207
+     * @param string $url full base URL of the cloud server
208
+     * @return string
209
+     */
210
+    protected function getOCMEndPoint($url) {
211
+        $client = $this->httpClientService->newClient();
212
+        try {
213
+            $response = $client->get($url . '/ocm-provider/', ['timeout' => 10, 'connect_timeout' => 10]);
214
+        } catch (\Exception $e) {
215
+            return '';
216
+        }
217
+
218
+        $result = $response->getBody();
219
+        $result = json_decode($result, true);
220
+
221
+        $supportedVersion = isset($result['apiVersion']) && $result['apiVersion'] === $this->supportedAPIVersion;
222
+
223
+        if (isset($result['endPoint']) && $supportedVersion) {
224
+            return $result['endPoint'];
225
+        }
226
+
227
+        return '';
228
+    }
229 229
 
230 230
 
231 231
 }
Please login to merge, or discard this patch.
apps/cloud_federation_api/lib/Capabilities.php 1 patch
Indentation   +30 added lines, -30 removed lines patch added patch discarded remove patch
@@ -28,37 +28,37 @@
 block discarded – undo
28 28
 
29 29
 class Capabilities implements ICapability {
30 30
 
31
-	/** @var IURLGenerator */
32
-	private $urlGenerator;
31
+    /** @var IURLGenerator */
32
+    private $urlGenerator;
33 33
 
34
-	public function __construct(IURLGenerator $urlGenerator) {
35
-		$this->urlGenerator = $urlGenerator;
36
-	}
34
+    public function __construct(IURLGenerator $urlGenerator) {
35
+        $this->urlGenerator = $urlGenerator;
36
+    }
37 37
 
38
-	/**
39
-	 * Function an app uses to return the capabilities
40
-	 *
41
-	 * @return array Array containing the apps capabilities
42
-	 * @since 8.2.0
43
-	 */
44
-	public function getCapabilities() {
45
-		$url = $this->urlGenerator->linkToRouteAbsolute('cloud_federation_api.requesthandlercontroller.addShare');
46
-		$capabilities = ['ocm' =>
47
-			[
48
-				'enabled' => true,
49
-				'apiVersion' => '1.0-proposal1',
50
-				'endPoint' => substr($url, 0, strrpos($url, '/')),
51
-				'shareTypes' => [
52
-					[
53
-						'name' => 'file',
54
-						'protocols' => [
55
-							'webdav' => '/public.php/webdav/',
56
-						]
57
-					],
58
-				]
59
-			]
60
-		];
38
+    /**
39
+     * Function an app uses to return the capabilities
40
+     *
41
+     * @return array Array containing the apps capabilities
42
+     * @since 8.2.0
43
+     */
44
+    public function getCapabilities() {
45
+        $url = $this->urlGenerator->linkToRouteAbsolute('cloud_federation_api.requesthandlercontroller.addShare');
46
+        $capabilities = ['ocm' =>
47
+            [
48
+                'enabled' => true,
49
+                'apiVersion' => '1.0-proposal1',
50
+                'endPoint' => substr($url, 0, strrpos($url, '/')),
51
+                'shareTypes' => [
52
+                    [
53
+                        'name' => 'file',
54
+                        'protocols' => [
55
+                            'webdav' => '/public.php/webdav/',
56
+                        ]
57
+                    ],
58
+                ]
59
+            ]
60
+        ];
61 61
 
62
-		return $capabilities;
63
-	}
62
+        return $capabilities;
63
+    }
64 64
 }
Please login to merge, or discard this patch.
apps/cloud_federation_api/lib/Controller/RequestHandlerController.php 1 patch
Indentation   +203 added lines, -203 removed lines patch added patch discarded remove patch
@@ -51,233 +51,233 @@
 block discarded – undo
51 51
  */
52 52
 class RequestHandlerController extends Controller {
53 53
 
54
-	/** @var ILogger */
55
-	private $logger;
54
+    /** @var ILogger */
55
+    private $logger;
56 56
 
57
-	/** @var IUserManager */
58
-	private $userManager;
57
+    /** @var IUserManager */
58
+    private $userManager;
59 59
 
60
-	/** @var IURLGenerator */
61
-	private $urlGenerator;
60
+    /** @var IURLGenerator */
61
+    private $urlGenerator;
62 62
 
63
-	/** @var ICloudFederationProviderManager */
64
-	private $cloudFederationProviderManager;
63
+    /** @var ICloudFederationProviderManager */
64
+    private $cloudFederationProviderManager;
65 65
 
66
-	/** @var Config */
67
-	private $config;
66
+    /** @var Config */
67
+    private $config;
68 68
 
69
-	/** @var ICloudFederationFactory */
70
-	private $factory;
69
+    /** @var ICloudFederationFactory */
70
+    private $factory;
71 71
 
72
-	/** @var ICloudIdManager */
73
-	private $cloudIdManager;
72
+    /** @var ICloudIdManager */
73
+    private $cloudIdManager;
74 74
 
75
-	public function __construct($appName,
76
-								IRequest $request,
77
-								ILogger $logger,
78
-								IUserManager $userManager,
79
-								IURLGenerator $urlGenerator,
80
-								ICloudFederationProviderManager $cloudFederationProviderManager,
81
-								Config $config,
82
-								ICloudFederationFactory $factory,
83
-								ICloudIdManager $cloudIdManager
84
-	) {
85
-		parent::__construct($appName, $request);
75
+    public function __construct($appName,
76
+                                IRequest $request,
77
+                                ILogger $logger,
78
+                                IUserManager $userManager,
79
+                                IURLGenerator $urlGenerator,
80
+                                ICloudFederationProviderManager $cloudFederationProviderManager,
81
+                                Config $config,
82
+                                ICloudFederationFactory $factory,
83
+                                ICloudIdManager $cloudIdManager
84
+    ) {
85
+        parent::__construct($appName, $request);
86 86
 
87
-		$this->logger = $logger;
88
-		$this->userManager = $userManager;
89
-		$this->urlGenerator = $urlGenerator;
90
-		$this->cloudFederationProviderManager = $cloudFederationProviderManager;
91
-		$this->config = $config;
92
-		$this->factory = $factory;
93
-		$this->cloudIdManager = $cloudIdManager;
94
-	}
87
+        $this->logger = $logger;
88
+        $this->userManager = $userManager;
89
+        $this->urlGenerator = $urlGenerator;
90
+        $this->cloudFederationProviderManager = $cloudFederationProviderManager;
91
+        $this->config = $config;
92
+        $this->factory = $factory;
93
+        $this->cloudIdManager = $cloudIdManager;
94
+    }
95 95
 
96
-	/**
97
-	 * add share
98
-	 *
99
-	 * @NoCSRFRequired
100
-	 * @PublicPage
101
-	 * @BruteForceProtection(action=receiveFederatedShare)
102
-	 *
103
-	 * @param string $shareWith
104
-	 * @param string $name resource name (e.g. document.odt)
105
-	 * @param string $description share description (optional)
106
-	 * @param string $providerId resource UID on the provider side
107
-	 * @param string $owner provider specific UID of the user who owns the resource
108
-	 * @param string $ownerDisplayName display name of the user who shared the item
109
-	 * @param string $sharedBy provider specific UID of the user who shared the resource
110
-	 * @param string $sharedByDisplayName display name of the user who shared the resource
111
-	 * @param string $sharedSecret use to authenticate accross servers
112
-	 * @param array $protocol (e,.g. ['name' => 'webdav', 'options' => ['username' => 'john', 'permissions' => 31]])
113
-	 * @param string $shareType ('group' or 'user' share)
114
-	 * @param $resourceType ('file', 'calendar',...)
115
-	 * @return Http\DataResponse|JSONResponse
116
-	 *
117
-	 * Example: curl -H "Content-Type: application/json" -X POST -d '{"shareWith":"admin1@serve1","name":"welcome server2.txt","description":"desc","providerId":"2","owner":"admin2@http://localhost/server2","ownerDisplayName":"admin2 display","shareType":"user","resourceType":"file","protocol":{"name":"webdav","options":{"sharedSecret":"secret","permissions":"webdav-property"}}}' http://localhost/server/index.php/ocm/shares
118
-	 */
119
-	public function addShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $protocol, $shareType, $resourceType) {
120
-		if (!$this->config->incomingRequestsEnabled()) {
121
-			return new JSONResponse(
122
-				['message' => 'This server doesn\'t support outgoing federated shares'],
123
-			Http::STATUS_NOT_IMPLEMENTED
124
-			);
125
-		}
96
+    /**
97
+     * add share
98
+     *
99
+     * @NoCSRFRequired
100
+     * @PublicPage
101
+     * @BruteForceProtection(action=receiveFederatedShare)
102
+     *
103
+     * @param string $shareWith
104
+     * @param string $name resource name (e.g. document.odt)
105
+     * @param string $description share description (optional)
106
+     * @param string $providerId resource UID on the provider side
107
+     * @param string $owner provider specific UID of the user who owns the resource
108
+     * @param string $ownerDisplayName display name of the user who shared the item
109
+     * @param string $sharedBy provider specific UID of the user who shared the resource
110
+     * @param string $sharedByDisplayName display name of the user who shared the resource
111
+     * @param string $sharedSecret use to authenticate accross servers
112
+     * @param array $protocol (e,.g. ['name' => 'webdav', 'options' => ['username' => 'john', 'permissions' => 31]])
113
+     * @param string $shareType ('group' or 'user' share)
114
+     * @param $resourceType ('file', 'calendar',...)
115
+     * @return Http\DataResponse|JSONResponse
116
+     *
117
+     * Example: curl -H "Content-Type: application/json" -X POST -d '{"shareWith":"admin1@serve1","name":"welcome server2.txt","description":"desc","providerId":"2","owner":"admin2@http://localhost/server2","ownerDisplayName":"admin2 display","shareType":"user","resourceType":"file","protocol":{"name":"webdav","options":{"sharedSecret":"secret","permissions":"webdav-property"}}}' http://localhost/server/index.php/ocm/shares
118
+     */
119
+    public function addShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $protocol, $shareType, $resourceType) {
120
+        if (!$this->config->incomingRequestsEnabled()) {
121
+            return new JSONResponse(
122
+                ['message' => 'This server doesn\'t support outgoing federated shares'],
123
+            Http::STATUS_NOT_IMPLEMENTED
124
+            );
125
+        }
126 126
 
127
-		// check if all required parameters are set
128
-		if ($shareWith === null ||
129
-			$name === null ||
130
-			$providerId === null ||
131
-			$owner === null ||
132
-			$resourceType === null ||
133
-			$shareType === null ||
134
-			!is_array($protocol) ||
135
-			!isset($protocol['name']) ||
136
-			!isset ($protocol['options']) ||
137
-			!is_array($protocol['options']) ||
138
-			!isset($protocol['options']['sharedSecret'])
139
-		) {
140
-			return new JSONResponse(
141
-				['message' => 'Missing arguments'],
142
-				Http::STATUS_BAD_REQUEST
143
-			);
144
-		}
127
+        // check if all required parameters are set
128
+        if ($shareWith === null ||
129
+            $name === null ||
130
+            $providerId === null ||
131
+            $owner === null ||
132
+            $resourceType === null ||
133
+            $shareType === null ||
134
+            !is_array($protocol) ||
135
+            !isset($protocol['name']) ||
136
+            !isset ($protocol['options']) ||
137
+            !is_array($protocol['options']) ||
138
+            !isset($protocol['options']['sharedSecret'])
139
+        ) {
140
+            return new JSONResponse(
141
+                ['message' => 'Missing arguments'],
142
+                Http::STATUS_BAD_REQUEST
143
+            );
144
+        }
145 145
 
146
-		$cloudId = $this->cloudIdManager->resolveCloudId($shareWith);
147
-		$shareWithLocalId = $cloudId->getUser();
148
-		$shareWith = $this->mapUid($shareWithLocalId);
146
+        $cloudId = $this->cloudIdManager->resolveCloudId($shareWith);
147
+        $shareWithLocalId = $cloudId->getUser();
148
+        $shareWith = $this->mapUid($shareWithLocalId);
149 149
 
150
-		if (!$this->userManager->userExists($shareWith)) {
151
-			return new JSONResponse(
152
-				['message' => 'User "' . $shareWith . '" does not exists at ' . $this->urlGenerator->getBaseUrl()],
153
-				Http::STATUS_BAD_REQUEST
154
-			);
155
-		}
150
+        if (!$this->userManager->userExists($shareWith)) {
151
+            return new JSONResponse(
152
+                ['message' => 'User "' . $shareWith . '" does not exists at ' . $this->urlGenerator->getBaseUrl()],
153
+                Http::STATUS_BAD_REQUEST
154
+            );
155
+        }
156 156
 
157
-		// if no explicit display name is given, we use the uid as display name
158
-		$ownerDisplayName = $ownerDisplayName === null ? $owner : $ownerDisplayName;
159
-		$sharedByDisplayName = $sharedByDisplayName === null ? $sharedBy : $sharedByDisplayName;
157
+        // if no explicit display name is given, we use the uid as display name
158
+        $ownerDisplayName = $ownerDisplayName === null ? $owner : $ownerDisplayName;
159
+        $sharedByDisplayName = $sharedByDisplayName === null ? $sharedBy : $sharedByDisplayName;
160 160
 
161
-		// sharedBy* parameter is optional, if nothing is set we assume that it is the same user as the owner
162
-		if ($sharedBy === null) {
163
-			$sharedBy = $owner;
164
-			$sharedByDisplayName = $ownerDisplayName;
165
-		}
161
+        // sharedBy* parameter is optional, if nothing is set we assume that it is the same user as the owner
162
+        if ($sharedBy === null) {
163
+            $sharedBy = $owner;
164
+            $sharedByDisplayName = $ownerDisplayName;
165
+        }
166 166
 
167
-		try {
168
-			$provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
169
-			$share = $this->factory->getCloudFederationShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, '', $shareType, $resourceType);
170
-			$share->setProtocol($protocol);
171
-			$id = $provider->shareReceived($share);
172
-		} catch (ProviderDoesNotExistsException $e) {
173
-			return new JSONResponse(
174
-				['message' => $e->getMessage()],
175
-				Http::STATUS_NOT_IMPLEMENTED
176
-			);
177
-		} catch (ProviderCouldNotAddShareException $e) {
178
-			return new JSONResponse(
179
-				['message' => $e->getMessage()],
180
-				$e->getCode()
181
-			);
182
-		} catch (\Exception $e) {
183
-			return new JSONResponse(
184
-				['message' => 'Internal error at ' . $this->urlGenerator->getBaseUrl()],
185
-				Http::STATUS_BAD_REQUEST
186
-			);
187
-		}
167
+        try {
168
+            $provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
169
+            $share = $this->factory->getCloudFederationShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, '', $shareType, $resourceType);
170
+            $share->setProtocol($protocol);
171
+            $id = $provider->shareReceived($share);
172
+        } catch (ProviderDoesNotExistsException $e) {
173
+            return new JSONResponse(
174
+                ['message' => $e->getMessage()],
175
+                Http::STATUS_NOT_IMPLEMENTED
176
+            );
177
+        } catch (ProviderCouldNotAddShareException $e) {
178
+            return new JSONResponse(
179
+                ['message' => $e->getMessage()],
180
+                $e->getCode()
181
+            );
182
+        } catch (\Exception $e) {
183
+            return new JSONResponse(
184
+                ['message' => 'Internal error at ' . $this->urlGenerator->getBaseUrl()],
185
+                Http::STATUS_BAD_REQUEST
186
+            );
187
+        }
188 188
 
189
-		return new JSONResponse(
190
-			['id' => $id, 'createdAt' => time()],
191
-			Http::STATUS_CREATED);
189
+        return new JSONResponse(
190
+            ['id' => $id, 'createdAt' => time()],
191
+            Http::STATUS_CREATED);
192 192
 
193
-	}
193
+    }
194 194
 
195
-	/**
196
-	 * receive notification about existing share
197
-	 *
198
-	 * @NoCSRFRequired
199
-	 * @PublicPage
200
-	 * @BruteForceProtection(action=receiveFederatedShareNotification)
201
-	 *
202
-	 * @param string $notificationType (notification type, e.g. SHARE_ACCEPTED)
203
-	 * @param string $resourceType (calendar, file, contact,...)
204
-	 * @param string $providerId id of the share
205
-	 * @param array $notification the actual payload of the notification
206
-	 * @return JSONResponse
207
-	 */
208
-	public function receiveNotification($notificationType, $resourceType, $providerId, array $notification) {
209
-		if (!$this->config->incomingRequestsEnabled()) {
210
-			return new JSONResponse(
211
-				['message' => 'This server doesn\'t support outgoing federated shares'],
212
-				Http::STATUS_NOT_IMPLEMENTED
213
-			);
214
-		}
195
+    /**
196
+     * receive notification about existing share
197
+     *
198
+     * @NoCSRFRequired
199
+     * @PublicPage
200
+     * @BruteForceProtection(action=receiveFederatedShareNotification)
201
+     *
202
+     * @param string $notificationType (notification type, e.g. SHARE_ACCEPTED)
203
+     * @param string $resourceType (calendar, file, contact,...)
204
+     * @param string $providerId id of the share
205
+     * @param array $notification the actual payload of the notification
206
+     * @return JSONResponse
207
+     */
208
+    public function receiveNotification($notificationType, $resourceType, $providerId, array $notification) {
209
+        if (!$this->config->incomingRequestsEnabled()) {
210
+            return new JSONResponse(
211
+                ['message' => 'This server doesn\'t support outgoing federated shares'],
212
+                Http::STATUS_NOT_IMPLEMENTED
213
+            );
214
+        }
215 215
 
216
-		// check if all required parameters are set
217
-		if ($notificationType === null ||
218
-			$resourceType === null ||
219
-			$providerId === null ||
220
-			!is_array($notification)
221
-		) {
222
-			return new JSONResponse(
223
-				['message' => 'Missing arguments'],
224
-				Http::STATUS_BAD_REQUEST
225
-			);
226
-		}
216
+        // check if all required parameters are set
217
+        if ($notificationType === null ||
218
+            $resourceType === null ||
219
+            $providerId === null ||
220
+            !is_array($notification)
221
+        ) {
222
+            return new JSONResponse(
223
+                ['message' => 'Missing arguments'],
224
+                Http::STATUS_BAD_REQUEST
225
+            );
226
+        }
227 227
 
228
-		try {
229
-			$provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
230
-			$provider->notificationReceived($notificationType, $providerId, $notification);
231
-		} catch (ProviderDoesNotExistsException $e) {
232
-			return new JSONResponse(
233
-				['message' => $e->getMessage()],
234
-				Http::STATUS_BAD_REQUEST
235
-			);
236
-		} catch (ShareNotFoundException $e) {
237
-			return new JSONResponse(
238
-				['message' => $e->getMessage()],
239
-				Http::STATUS_BAD_REQUEST
240
-			);
241
-		} catch (ActionNotSupportedException $e) {
242
-			return new JSONResponse(
243
-				['message' => $e->getMessage()],
244
-				Http::STATUS_NOT_IMPLEMENTED
245
-			);
246
-		} catch (BadRequestException $e) {
247
-			return new JSONResponse($e->getReturnMessage(), Http::STATUS_BAD_REQUEST);
248
-		} catch (AuthenticationFailedException $e) {
249
-			return new JSONResponse(["message" => "RESOURCE_NOT_FOUND"], Http::STATUS_FORBIDDEN);
250
-		}
251
-		catch (\Exception $e) {
252
-			return new JSONResponse(
253
-				['message' => 'Internal error at ' . $this->urlGenerator->getBaseUrl()],
254
-				Http::STATUS_BAD_REQUEST
255
-			);
256
-		}
228
+        try {
229
+            $provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
230
+            $provider->notificationReceived($notificationType, $providerId, $notification);
231
+        } catch (ProviderDoesNotExistsException $e) {
232
+            return new JSONResponse(
233
+                ['message' => $e->getMessage()],
234
+                Http::STATUS_BAD_REQUEST
235
+            );
236
+        } catch (ShareNotFoundException $e) {
237
+            return new JSONResponse(
238
+                ['message' => $e->getMessage()],
239
+                Http::STATUS_BAD_REQUEST
240
+            );
241
+        } catch (ActionNotSupportedException $e) {
242
+            return new JSONResponse(
243
+                ['message' => $e->getMessage()],
244
+                Http::STATUS_NOT_IMPLEMENTED
245
+            );
246
+        } catch (BadRequestException $e) {
247
+            return new JSONResponse($e->getReturnMessage(), Http::STATUS_BAD_REQUEST);
248
+        } catch (AuthenticationFailedException $e) {
249
+            return new JSONResponse(["message" => "RESOURCE_NOT_FOUND"], Http::STATUS_FORBIDDEN);
250
+        }
251
+        catch (\Exception $e) {
252
+            return new JSONResponse(
253
+                ['message' => 'Internal error at ' . $this->urlGenerator->getBaseUrl()],
254
+                Http::STATUS_BAD_REQUEST
255
+            );
256
+        }
257 257
 
258 258
 
259
-		return new JSONResponse([],Http::STATUS_CREATED);
259
+        return new JSONResponse([],Http::STATUS_CREATED);
260 260
 
261
-	}
261
+    }
262 262
 
263
-	/**
264
-	 * map login name to internal LDAP UID if a LDAP backend is in use
265
-	 *
266
-	 * @param string $uid
267
-	 * @return string mixed
268
-	 */
269
-	private function mapUid($uid) {
270
-		\OC::$server->getURLGenerator()->linkToDocs('key');
271
-		// FIXME this should be a method in the user management instead
272
-		$this->logger->debug('shareWith before, ' . $uid, ['app' => $this->appName]);
273
-		\OCP\Util::emitHook(
274
-			'\OCA\Files_Sharing\API\Server2Server',
275
-			'preLoginNameUsedAsUserName',
276
-			array('uid' => &$uid)
277
-		);
278
-		$this->logger->debug('shareWith after, ' . $uid, ['app' => $this->appName]);
263
+    /**
264
+     * map login name to internal LDAP UID if a LDAP backend is in use
265
+     *
266
+     * @param string $uid
267
+     * @return string mixed
268
+     */
269
+    private function mapUid($uid) {
270
+        \OC::$server->getURLGenerator()->linkToDocs('key');
271
+        // FIXME this should be a method in the user management instead
272
+        $this->logger->debug('shareWith before, ' . $uid, ['app' => $this->appName]);
273
+        \OCP\Util::emitHook(
274
+            '\OCA\Files_Sharing\API\Server2Server',
275
+            'preLoginNameUsedAsUserName',
276
+            array('uid' => &$uid)
277
+        );
278
+        $this->logger->debug('shareWith after, ' . $uid, ['app' => $this->appName]);
279 279
 
280
-		return $uid;
281
-	}
280
+        return $uid;
281
+    }
282 282
 
283 283
 }
Please login to merge, or discard this patch.