Completed
Pull Request — master (#9345)
by Björn
46:21 queued 21:44
created
lib/public/Share/IShareProvider.php 1 patch
Indentation   +168 added lines, -168 removed lines patch added patch discarded remove patch
@@ -34,172 +34,172 @@
 block discarded – undo
34 34
  */
35 35
 interface IShareProvider {
36 36
 
37
-	/**
38
-	 * Return the identifier of this provider.
39
-	 *
40
-	 * @return string Containing only [a-zA-Z0-9]
41
-	 * @since 9.0.0
42
-	 */
43
-	public function identifier();
44
-
45
-	/**
46
-	 * Create a share
47
-	 *
48
-	 * @param \OCP\Share\IShare $share
49
-	 * @return \OCP\Share\IShare The share object
50
-	 * @since 9.0.0
51
-	 */
52
-	public function create(\OCP\Share\IShare $share);
53
-
54
-	/**
55
-	 * Update a share
56
-	 *
57
-	 * @param \OCP\Share\IShare $share
58
-	 * @return \OCP\Share\IShare The share object
59
-	 * @since 9.0.0
60
-	 */
61
-	public function update(\OCP\Share\IShare $share);
62
-
63
-	/**
64
-	 * Delete a share
65
-	 *
66
-	 * @param \OCP\Share\IShare $share
67
-	 * @since 9.0.0
68
-	 */
69
-	public function delete(\OCP\Share\IShare $share);
70
-
71
-	/**
72
-	 * Unshare a file from self as recipient.
73
-	 * This may require special handling. If a user unshares a group
74
-	 * share from their self then the original group share should still exist.
75
-	 *
76
-	 * @param \OCP\Share\IShare $share
77
-	 * @param string $recipient UserId of the recipient
78
-	 * @since 9.0.0
79
-	 */
80
-	public function deleteFromSelf(\OCP\Share\IShare $share, $recipient);
81
-
82
-	/**
83
-	 * Move a share as a recipient.
84
-	 * This is updating the share target. Thus the mount point of the recipient.
85
-	 * This may require special handling. If a user moves a group share
86
-	 * the target should only be changed for them.
87
-	 *
88
-	 * @param \OCP\Share\IShare $share
89
-	 * @param string $recipient userId of recipient
90
-	 * @return \OCP\Share\IShare
91
-	 * @since 9.0.0
92
-	 */
93
-	public function move(\OCP\Share\IShare $share, $recipient);
94
-
95
-	/**
96
-	 * Get all shares by the given user in a folder
97
-	 *
98
-	 * @param string $userId
99
-	 * @param Folder $node
100
-	 * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
101
-	 * @return \OCP\Share\IShare[]
102
-	 * @since 11.0.0
103
-	 */
104
-	public function getSharesInFolder($userId, Folder $node, $reshares);
105
-
106
-	/**
107
-	 * Get all shares by the given user
108
-	 *
109
-	 * @param string $userId
110
-	 * @param int $shareType
111
-	 * @param Node|null $node
112
-	 * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
113
-	 * @param int $limit The maximum number of shares to be returned, -1 for all shares
114
-	 * @param int $offset
115
-	 * @return \OCP\Share\IShare[]
116
-	 * @since 9.0.0
117
-	 */
118
-	public function getSharesBy($userId, $shareType, $node, $reshares, $limit, $offset);
119
-
120
-	/**
121
-	 * Get share by id
122
-	 *
123
-	 * @param int $id
124
-	 * @param string|null $recipientId
125
-	 * @return \OCP\Share\IShare
126
-	 * @throws ShareNotFound
127
-	 * @since 9.0.0
128
-	 */
129
-	public function getShareById($id, $recipientId = null);
130
-
131
-	/**
132
-	 * Get shares for a given path
133
-	 *
134
-	 * @param Node $path
135
-	 * @return \OCP\Share\IShare[]
136
-	 * @since 9.0.0
137
-	 */
138
-	public function getSharesByPath(Node $path);
139
-
140
-	/**
141
-	 * Get shared with the given user
142
-	 *
143
-	 * @param string $userId get shares where this user is the recipient
144
-	 * @param int $shareType
145
-	 * @param Node|null $node
146
-	 * @param int $limit The max number of entries returned, -1 for all
147
-	 * @param int $offset
148
-	 * @return \OCP\Share\IShare[]
149
-	 * @since 9.0.0
150
-	 */
151
-	public function getSharedWith($userId, $shareType, $node, $limit, $offset);
152
-
153
-	/**
154
-	 * Get a share by token
155
-	 *
156
-	 * @param string $token
157
-	 * @return \OCP\Share\IShare
158
-	 * @throws ShareNotFound
159
-	 * @since 9.0.0
160
-	 */
161
-	public function getShareByToken($token);
162
-
163
-	/**
164
-	 * A user is deleted from the system
165
-	 * So clean up the relevant shares.
166
-	 *
167
-	 * @param string $uid
168
-	 * @param int $shareType
169
-	 * @since 9.1.0
170
-	 */
171
-	public function userDeleted($uid, $shareType);
172
-
173
-	/**
174
-	 * A group is deleted from the system.
175
-	 * We have to clean up all shares to this group.
176
-	 * Providers not handling group shares should just return
177
-	 *
178
-	 * @param string $gid
179
-	 * @since 9.1.0
180
-	 */
181
-	public function groupDeleted($gid);
182
-
183
-	/**
184
-	 * A user is deleted from a group
185
-	 * We have to clean up all the related user specific group shares
186
-	 * Providers not handling group shares should just return
187
-	 *
188
-	 * @param string $uid
189
-	 * @param string $gid
190
-	 * @since 9.1.0
191
-	 */
192
-	public function userDeletedFromGroup($uid, $gid);
193
-
194
-	/**
195
-	 * Get the access list to the array of provided nodes.
196
-	 *
197
-	 * @see IManager::getAccessList() for sample docs
198
-	 *
199
-	 * @param Node[] $nodes The list of nodes to get access for
200
-	 * @param bool $currentAccess If current access is required (like for removed shares that might get revived later)
201
-	 * @return array
202
-	 * @since 12
203
-	 */
204
-	public function getAccessList($nodes, $currentAccess);
37
+    /**
38
+     * Return the identifier of this provider.
39
+     *
40
+     * @return string Containing only [a-zA-Z0-9]
41
+     * @since 9.0.0
42
+     */
43
+    public function identifier();
44
+
45
+    /**
46
+     * Create a share
47
+     *
48
+     * @param \OCP\Share\IShare $share
49
+     * @return \OCP\Share\IShare The share object
50
+     * @since 9.0.0
51
+     */
52
+    public function create(\OCP\Share\IShare $share);
53
+
54
+    /**
55
+     * Update a share
56
+     *
57
+     * @param \OCP\Share\IShare $share
58
+     * @return \OCP\Share\IShare The share object
59
+     * @since 9.0.0
60
+     */
61
+    public function update(\OCP\Share\IShare $share);
62
+
63
+    /**
64
+     * Delete a share
65
+     *
66
+     * @param \OCP\Share\IShare $share
67
+     * @since 9.0.0
68
+     */
69
+    public function delete(\OCP\Share\IShare $share);
70
+
71
+    /**
72
+     * Unshare a file from self as recipient.
73
+     * This may require special handling. If a user unshares a group
74
+     * share from their self then the original group share should still exist.
75
+     *
76
+     * @param \OCP\Share\IShare $share
77
+     * @param string $recipient UserId of the recipient
78
+     * @since 9.0.0
79
+     */
80
+    public function deleteFromSelf(\OCP\Share\IShare $share, $recipient);
81
+
82
+    /**
83
+     * Move a share as a recipient.
84
+     * This is updating the share target. Thus the mount point of the recipient.
85
+     * This may require special handling. If a user moves a group share
86
+     * the target should only be changed for them.
87
+     *
88
+     * @param \OCP\Share\IShare $share
89
+     * @param string $recipient userId of recipient
90
+     * @return \OCP\Share\IShare
91
+     * @since 9.0.0
92
+     */
93
+    public function move(\OCP\Share\IShare $share, $recipient);
94
+
95
+    /**
96
+     * Get all shares by the given user in a folder
97
+     *
98
+     * @param string $userId
99
+     * @param Folder $node
100
+     * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
101
+     * @return \OCP\Share\IShare[]
102
+     * @since 11.0.0
103
+     */
104
+    public function getSharesInFolder($userId, Folder $node, $reshares);
105
+
106
+    /**
107
+     * Get all shares by the given user
108
+     *
109
+     * @param string $userId
110
+     * @param int $shareType
111
+     * @param Node|null $node
112
+     * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator
113
+     * @param int $limit The maximum number of shares to be returned, -1 for all shares
114
+     * @param int $offset
115
+     * @return \OCP\Share\IShare[]
116
+     * @since 9.0.0
117
+     */
118
+    public function getSharesBy($userId, $shareType, $node, $reshares, $limit, $offset);
119
+
120
+    /**
121
+     * Get share by id
122
+     *
123
+     * @param int $id
124
+     * @param string|null $recipientId
125
+     * @return \OCP\Share\IShare
126
+     * @throws ShareNotFound
127
+     * @since 9.0.0
128
+     */
129
+    public function getShareById($id, $recipientId = null);
130
+
131
+    /**
132
+     * Get shares for a given path
133
+     *
134
+     * @param Node $path
135
+     * @return \OCP\Share\IShare[]
136
+     * @since 9.0.0
137
+     */
138
+    public function getSharesByPath(Node $path);
139
+
140
+    /**
141
+     * Get shared with the given user
142
+     *
143
+     * @param string $userId get shares where this user is the recipient
144
+     * @param int $shareType
145
+     * @param Node|null $node
146
+     * @param int $limit The max number of entries returned, -1 for all
147
+     * @param int $offset
148
+     * @return \OCP\Share\IShare[]
149
+     * @since 9.0.0
150
+     */
151
+    public function getSharedWith($userId, $shareType, $node, $limit, $offset);
152
+
153
+    /**
154
+     * Get a share by token
155
+     *
156
+     * @param string $token
157
+     * @return \OCP\Share\IShare
158
+     * @throws ShareNotFound
159
+     * @since 9.0.0
160
+     */
161
+    public function getShareByToken($token);
162
+
163
+    /**
164
+     * A user is deleted from the system
165
+     * So clean up the relevant shares.
166
+     *
167
+     * @param string $uid
168
+     * @param int $shareType
169
+     * @since 9.1.0
170
+     */
171
+    public function userDeleted($uid, $shareType);
172
+
173
+    /**
174
+     * A group is deleted from the system.
175
+     * We have to clean up all shares to this group.
176
+     * Providers not handling group shares should just return
177
+     *
178
+     * @param string $gid
179
+     * @since 9.1.0
180
+     */
181
+    public function groupDeleted($gid);
182
+
183
+    /**
184
+     * A user is deleted from a group
185
+     * We have to clean up all the related user specific group shares
186
+     * Providers not handling group shares should just return
187
+     *
188
+     * @param string $uid
189
+     * @param string $gid
190
+     * @since 9.1.0
191
+     */
192
+    public function userDeletedFromGroup($uid, $gid);
193
+
194
+    /**
195
+     * Get the access list to the array of provided nodes.
196
+     *
197
+     * @see IManager::getAccessList() for sample docs
198
+     *
199
+     * @param Node[] $nodes The list of nodes to get access for
200
+     * @param bool $currentAccess If current access is required (like for removed shares that might get revived later)
201
+     * @return array
202
+     * @since 12
203
+     */
204
+    public function getAccessList($nodes, $currentAccess);
205 205
 }
Please login to merge, or discard this patch.
apps/federatedfilesharing/lib/ocm/CloudFederationProviderFiles.php 2 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -121,7 +121,7 @@
 block discarded – undo
121 121
 	 * share received from another server
122 122
 	 *
123 123
 	 * @param ICloudFederationShare $share
124
-	 * @return string provider specific unique ID of the share
124
+	 * @return integer provider specific unique ID of the share
125 125
 	 *
126 126
 	 * @throws ProviderCouldNotAddShareException
127 127
 	 * @throws \OCP\AppFramework\QueryException
Please login to merge, or discard this patch.
Indentation   +707 added lines, -707 removed lines patch added patch discarded remove patch
@@ -50,713 +50,713 @@
 block discarded – undo
50 50
 
51 51
 class CloudFederationProviderFiles implements ICloudFederationProvider {
52 52
 
53
-	/** @var IAppManager */
54
-	private $appManager;
55
-
56
-	/** @var FederatedShareProvider */
57
-	private $federatedShareProvider;
58
-
59
-	/** @var AddressHandler */
60
-	private $addressHandler;
61
-
62
-	/** @var ILogger */
63
-	private $logger;
64
-
65
-	/** @var IUserManager */
66
-	private $userManager;
67
-
68
-	/** @var ICloudIdManager */
69
-	private $cloudIdManager;
70
-
71
-	/** @var IActivityManager */
72
-	private $activityManager;
73
-
74
-	/** @var INotificationManager */
75
-	private $notificationManager;
76
-
77
-	/** @var IURLGenerator */
78
-	private $urlGenerator;
79
-
80
-	/** @var ICloudFederationFactory */
81
-	private $cloudFederationFactory;
82
-
83
-	/** @var ICloudFederationProviderManager */
84
-	private $cloudFederationProviderManager;
85
-
86
-	/** @var IDBConnection */
87
-	private $connection;
88
-
89
-	/**
90
-	 * CloudFederationProvider constructor.
91
-	 *
92
-	 * @param IAppManager $appManager
93
-	 * @param FederatedShareProvider $federatedShareProvider
94
-	 * @param AddressHandler $addressHandler
95
-	 * @param ILogger $logger
96
-	 * @param IUserManager $userManager
97
-	 * @param ICloudIdManager $cloudIdManager
98
-	 * @param IActivityManager $activityManager
99
-	 * @param INotificationManager $notificationManager
100
-	 * @param IURLGenerator $urlGenerator
101
-	 * @param ICloudFederationFactory $cloudFederationFactory
102
-	 * @param ICloudFederationProviderManager $cloudFederationProviderManager
103
-	 * @param IDBConnection $connection
104
-	 */
105
-	public function __construct(IAppManager $appManager,
106
-								FederatedShareProvider $federatedShareProvider,
107
-								AddressHandler $addressHandler,
108
-								ILogger $logger,
109
-								IUserManager $userManager,
110
-								ICloudIdManager $cloudIdManager,
111
-								IActivityManager $activityManager,
112
-								INotificationManager $notificationManager,
113
-								IURLGenerator $urlGenerator,
114
-								ICloudFederationFactory $cloudFederationFactory,
115
-								ICloudFederationProviderManager $cloudFederationProviderManager,
116
-								IDBConnection $connection
117
-	) {
118
-		$this->appManager = $appManager;
119
-		$this->federatedShareProvider = $federatedShareProvider;
120
-		$this->addressHandler = $addressHandler;
121
-		$this->logger = $logger;
122
-		$this->userManager = $userManager;
123
-		$this->cloudIdManager = $cloudIdManager;
124
-		$this->activityManager = $activityManager;
125
-		$this->notificationManager = $notificationManager;
126
-		$this->urlGenerator = $urlGenerator;
127
-		$this->cloudFederationFactory = $cloudFederationFactory;
128
-		$this->cloudFederationProviderManager = $cloudFederationProviderManager;
129
-		$this->connection = $connection;
130
-	}
131
-
132
-
133
-
134
-	/**
135
-	 * @return string
136
-	 */
137
-	public function getShareType() {
138
-		return 'file';
139
-	}
140
-
141
-	/**
142
-	 * share received from another server
143
-	 *
144
-	 * @param ICloudFederationShare $share
145
-	 * @return string provider specific unique ID of the share
146
-	 *
147
-	 * @throws ProviderCouldNotAddShareException
148
-	 * @throws \OCP\AppFramework\QueryException
149
-	 * @throws \OC\HintException
150
-	 * @since 14.0.0
151
-	 */
152
-	public function shareReceived(ICloudFederationShare $share) {
153
-
154
-		if (!$this->isS2SEnabled(true)) {
155
-			throw new ProviderCouldNotAddShareException('Server does not support federated cloud sharing', '', Http::STATUS_SERVICE_UNAVAILABLE);
156
-		}
157
-
158
-		$protocol = $share->getProtocol();
159
-		if ($protocol['name'] !== 'webdav') {
160
-			throw new ProviderCouldNotAddShareException('Unsupported protocol for data exchange.', '', Http::STATUS_NOT_IMPLEMENTED);
161
-		}
162
-
163
-		list($ownerUid, $remote) = $this->addressHandler->splitUserRemote($share->getOwner());
164
-
165
-		$token = $share->getShareSecret();
166
-		$name = $share->getResourceName();
167
-		$owner = $share->getOwnerDisplayName();
168
-		$sharedBy = $share->getSharedByDisplayName();
169
-		$shareWith = $share->getShareWith();
170
-		$remoteId = $share->getProviderId();
171
-		$sharedByFederatedId = $share->getSharedBy();
172
-		$ownerFederatedId = $share->getOwner();
173
-
174
-		// if no explicit information about the person who created the share was send
175
-		// we assume that the share comes from the owner
176
-		if ($sharedByFederatedId === null) {
177
-			$sharedBy = $owner;
178
-			$sharedByFederatedId = $ownerFederatedId;
179
-		}
180
-
181
-		if ($remote && $token && $name && $owner && $remoteId && $shareWith) {
182
-
183
-			if (!Util::isValidFileName($name)) {
184
-				throw new ProviderCouldNotAddShareException('The mountpoint name contains invalid characters.', '', Http::STATUS_BAD_REQUEST);
185
-			}
186
-
187
-			// FIXME this should be a method in the user management instead
188
-			$this->logger->debug('shareWith before, ' . $shareWith, ['app' => 'files_sharing']);
189
-			Util::emitHook(
190
-				'\OCA\Files_Sharing\API\Server2Server',
191
-				'preLoginNameUsedAsUserName',
192
-				array('uid' => &$shareWith)
193
-			);
194
-			$this->logger->debug('shareWith after, ' . $shareWith, ['app' => 'files_sharing']);
195
-
196
-			if (!$this->userManager->userExists($shareWith)) {
197
-				throw new ProviderCouldNotAddShareException('User does not exists', '',Http::STATUS_BAD_REQUEST);
198
-			}
199
-
200
-			\OC_Util::setupFS($shareWith);
201
-
202
-			$externalManager = new \OCA\Files_Sharing\External\Manager(
203
-				\OC::$server->getDatabaseConnection(),
204
-				Filesystem::getMountManager(),
205
-				Filesystem::getLoader(),
206
-				\OC::$server->getHTTPClientService(),
207
-				\OC::$server->getNotificationManager(),
208
-				\OC::$server->query(\OCP\OCS\IDiscoveryService::class),
209
-				\OC::$server->getCloudFederationProviderManager(),
210
-				\OC::$server->getCloudFederationFactory(),
211
-				$shareWith
212
-			);
213
-
214
-			try {
215
-				$externalManager->addShare($remote, $token, '', $name, $owner, false, $shareWith, $remoteId);
216
-				$shareId = \OC::$server->getDatabaseConnection()->lastInsertId('*PREFIX*share_external');
217
-
218
-				$event = $this->activityManager->generateEvent();
219
-				$event->setApp('files_sharing')
220
-					->setType('remote_share')
221
-					->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_RECEIVED, [$ownerFederatedId, trim($name, '/')])
222
-					->setAffectedUser($shareWith)
223
-					->setObject('remote_share', (int)$shareId, $name);
224
-				\OC::$server->getActivityManager()->publish($event);
225
-
226
-				$notification = $this->notificationManager->createNotification();
227
-				$notification->setApp('files_sharing')
228
-					->setUser($shareWith)
229
-					->setDateTime(new \DateTime())
230
-					->setObject('remote_share', $shareId)
231
-					->setSubject('remote_share', [$ownerFederatedId, $sharedByFederatedId, trim($name, '/')]);
232
-
233
-				$declineAction = $notification->createAction();
234
-				$declineAction->setLabel('decline')
235
-					->setLink($this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'ocs/v2.php/apps/files_sharing/api/v1/remote_shares/pending/' . $shareId)), 'DELETE');
236
-				$notification->addAction($declineAction);
237
-
238
-				$acceptAction = $notification->createAction();
239
-				$acceptAction->setLabel('accept')
240
-					->setLink($this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'ocs/v2.php/apps/files_sharing/api/v1/remote_shares/pending/' . $shareId)), 'POST');
241
-				$notification->addAction($acceptAction);
242
-
243
-				$this->notificationManager->notify($notification);
244
-
245
-				return $shareId;
246
-			} catch (\Exception $e) {
247
-				$this->logger->logException($e, [
248
-					'message' => 'Server can not add remote share.',
249
-					'level' => ILogger::ERROR,
250
-					'app' => 'files_sharing'
251
-				]);
252
-				throw new ProviderCouldNotAddShareException('internal server error, was not able to add share from ' . $remote, '', HTTP::STATUS_INTERNAL_SERVER_ERROR);
253
-			}
254
-		}
255
-
256
-		throw new ProviderCouldNotAddShareException('server can not add remote share, missing parameter', '', HTTP::STATUS_BAD_REQUEST);
257
-
258
-	}
259
-
260
-	/**
261
-	 * notification received from another server
262
-	 *
263
-	 * @param string $notificationType (e.g. SHARE_ACCEPTED)
264
-	 * @param string $providerId id of the share
265
-	 * @param array $notification payload of the notification
266
-	 * @return array data send back to the sender
267
-	 *
268
-	 * @throws ActionNotSupportedException
269
-	 * @throws AuthenticationFailedException
270
-	 * @throws BadRequestException
271
-	 * @throws \OC\HintException
272
-	 * @since 14.0.0
273
-	 */
274
-	public function notificationReceived($notificationType, $providerId, array $notification) {
275
-
276
-		switch ($notificationType) {
277
-			case 'SHARE_ACCEPTED':
278
-				return $this->shareAccepted($providerId, $notification);
279
-			case 'SHARE_DECLINED':
280
-				return $this->shareDeclined($providerId, $notification);
281
-			case 'SHARE_UNSHARED':
282
-				return $this->unshare($providerId, $notification);
283
-			case 'REQUEST_RESHARE':
284
-				return $this->reshareRequested($providerId, $notification);
285
-			case 'RESHARE_UNDO':
286
-				return $this->undoReshare($providerId, $notification);
287
-			case 'RESHARE_CHANGE_PERMISSION':
288
-				return $this->updateResharePermissions($providerId, $notification);
289
-		}
290
-
291
-
292
-		throw new BadRequestException([$notificationType]);
293
-	}
294
-
295
-	/**
296
-	 * process notification that the recipient accepted a share
297
-	 *
298
-	 * @param string $id
299
-	 * @param array $notification
300
-	 * @return array
301
-	 * @throws ActionNotSupportedException
302
-	 * @throws AuthenticationFailedException
303
-	 * @throws BadRequestException
304
-	 * @throws \OC\HintException
305
-	 */
306
-	private function shareAccepted($id, array $notification) {
307
-
308
-		if (!$this->isS2SEnabled()) {
309
-			throw new ActionNotSupportedException('Server does not support federated cloud sharing');
310
-		}
311
-
312
-		if (!isset($notification['sharedSecret'])) {
313
-			throw new BadRequestException(['sharedSecret']);
314
-		}
315
-
316
-		$token = $notification['sharedSecret'];
317
-
318
-		$share = $this->federatedShareProvider->getShareById($id);
319
-
320
-		$this->verifyShare($share, $token);
321
-		$this->executeAcceptShare($share);
322
-		if ($share->getShareOwner() !== $share->getSharedBy()) {
323
-			list(, $remote) = $this->addressHandler->splitUserRemote($share->getSharedBy());
324
-			$remoteId = $this->federatedShareProvider->getRemoteId($share);
325
-			$notification = $this->cloudFederationFactory->getCloudFederationNotification();
326
-			$notification->setMessage(
327
-				'SHARE_ACCEPTED',
328
-				'file',
329
-				$remoteId,
330
-				[
331
-					'sharedSecret' => $token,
332
-					'message' => 'Recipient accepted the re-share'
333
-				]
334
-
335
-			);
336
-			$this->cloudFederationProviderManager->sendNotification($remote, $notification);
337
-
338
-		}
339
-
340
-		return [];
341
-	}
342
-
343
-	/**
344
-	 * @param IShare $share
345
-	 * @throws ShareNotFound
346
-	 */
347
-	protected function executeAcceptShare(IShare $share) {
348
-		try {
349
-			$fileId = (int)$share->getNode()->getId();
350
-			list($file, $link) = $this->getFile($this->getCorrectUid($share), $fileId);
351
-		} catch (\Exception $e) {
352
-			throw new ShareNotFound();
353
-		}
354
-
355
-		$event = $this->activityManager->generateEvent();
356
-		$event->setApp('files_sharing')
357
-			->setType('remote_share')
358
-			->setAffectedUser($this->getCorrectUid($share))
359
-			->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_ACCEPTED, [$share->getSharedWith(), [$fileId => $file]])
360
-			->setObject('files', $fileId, $file)
361
-			->setLink($link);
362
-		$this->activityManager->publish($event);
363
-	}
364
-
365
-	/**
366
-	 * process notification that the recipient declined a share
367
-	 *
368
-	 * @param string $id
369
-	 * @param array $notification
370
-	 * @return array
371
-	 * @throws ActionNotSupportedException
372
-	 * @throws AuthenticationFailedException
373
-	 * @throws BadRequestException
374
-	 * @throws ShareNotFound
375
-	 * @throws \OC\HintException
376
-	 *
377
-	 */
378
-	protected function shareDeclined($id, array $notification) {
379
-
380
-		if (!$this->isS2SEnabled()) {
381
-			throw new ActionNotSupportedException('Server does not support federated cloud sharing');
382
-		}
383
-
384
-		if (!isset($notification['sharedSecret'])) {
385
-			throw new BadRequestException(['sharedSecret']);
386
-		}
387
-
388
-		$token = $notification['sharedSecret'];
389
-
390
-		$share = $this->federatedShareProvider->getShareById($id);
391
-
392
-		$this->verifyShare($share, $token);
393
-
394
-		if ($share->getShareOwner() !== $share->getSharedBy()) {
395
-			list(, $remote) = $this->addressHandler->splitUserRemote($share->getSharedBy());
396
-			$remoteId = $this->federatedShareProvider->getRemoteId($share);
397
-			$notification = $this->cloudFederationFactory->getCloudFederationNotification();
398
-			$notification->setMessage(
399
-				'SHARE_DECLINED',
400
-				'file',
401
-				$remoteId,
402
-				[
403
-					'sharedSecret' => $token,
404
-					'message' => 'Recipient declined the re-share'
405
-				]
406
-
407
-			);
408
-			$this->cloudFederationProviderManager->sendNotification($remote, $notification);
409
-		}
410
-
411
-		$this->executeDeclineShare($share);
412
-
413
-		return [];
414
-
415
-	}
416
-
417
-	/**
418
-	 * delete declined share and create a activity
419
-	 *
420
-	 * @param IShare $share
421
-	 * @throws ShareNotFound
422
-	 */
423
-	protected function executeDeclineShare(IShare $share) {
424
-		$this->federatedShareProvider->removeShareFromTable($share);
425
-
426
-		try {
427
-			$fileId = (int)$share->getNode()->getId();
428
-			list($file, $link) = $this->getFile($this->getCorrectUid($share), $fileId);
429
-		} catch (\Exception $e) {
430
-			throw new ShareNotFound();
431
-		}
432
-
433
-		$event = $this->activityManager->generateEvent();
434
-		$event->setApp('files_sharing')
435
-			->setType('remote_share')
436
-			->setAffectedUser($this->getCorrectUid($share))
437
-			->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_DECLINED, [$share->getSharedWith(), [$fileId => $file]])
438
-			->setObject('files', $fileId, $file)
439
-			->setLink($link);
440
-		$this->activityManager->publish($event);
441
-
442
-	}
443
-
444
-	/**
445
-	 * received the notification that the owner unshared a file from you
446
-	 *
447
-	 * @param string $id
448
-	 * @param array $notification
449
-	 * @return array
450
-	 * @throws AuthenticationFailedException
451
-	 * @throws BadRequestException
452
-	 */
453
-	private function undoReshare($id, array $notification) {
454
-		if (!isset($notification['sharedSecret'])) {
455
-			throw new BadRequestException(['sharedSecret']);
456
-		}
457
-		$token = $notification['sharedSecret'];
458
-
459
-		$share = $this->federatedShareProvider->getShareById($id);
460
-
461
-		$this->verifyShare($share, $token);
462
-		$this->federatedShareProvider->removeShareFromTable($share);
463
-		return [];
464
-	}
465
-
466
-	/**
467
-	 * unshare file from self
468
-	 *
469
-	 * @param string $id
470
-	 * @param array $notification
471
-	 * @return array
472
-	 * @throws ActionNotSupportedException
473
-	 * @throws BadRequestException
474
-	 */
475
-	private function unshare($id, array $notification) {
476
-
477
-		if (!$this->isS2SEnabled(true)) {
478
-			throw new ActionNotSupportedException("incoming shares disabled!");
479
-		}
480
-
481
-		if (!isset($notification['sharedSecret'])) {
482
-			throw new BadRequestException(['sharedSecret']);
483
-		}
484
-		$token = $notification['sharedSecret'];
485
-
486
-		$qb = $this->connection->getQueryBuilder();
487
-		$qb->select('*')
488
-			->from('share_external')
489
-			->where(
490
-				$qb->expr()->andX(
491
-					$qb->expr()->eq('remote_id', $qb->createNamedParameter($id)),
492
-					$qb->expr()->eq('share_token', $qb->createNamedParameter($token))
493
-				)
494
-			);
495
-
496
-		$result = $qb->execute();
497
-		$share = $result->fetch();
498
-		$result->closeCursor();
499
-
500
-		if ($token && $id && !empty($share)) {
501
-
502
-			$remote = $this->cleanupRemote($share['remote']);
503
-
504
-			$owner = $this->cloudIdManager->getCloudId($share['owner'], $remote);
505
-			$mountpoint = $share['mountpoint'];
506
-			$user = $share['user'];
507
-
508
-			$qb = $this->connection->getQueryBuilder();
509
-			$qb->delete('share_external')
510
-				->where(
511
-					$qb->expr()->andX(
512
-						$qb->expr()->eq('remote_id', $qb->createNamedParameter($id)),
513
-						$qb->expr()->eq('share_token', $qb->createNamedParameter($token))
514
-					)
515
-				);
516
-
517
-			$qb->execute();
518
-
519
-			if ($share['accepted']) {
520
-				$path = trim($mountpoint, '/');
521
-			} else {
522
-				$path = trim($share['name'], '/');
523
-			}
524
-
525
-			$notification = $this->notificationManager->createNotification();
526
-			$notification->setApp('files_sharing')
527
-				->setUser($share['user'])
528
-				->setObject('remote_share', (int)$share['id']);
529
-			$this->notificationManager->markProcessed($notification);
530
-
531
-			$event = $this->activityManager->generateEvent();
532
-			$event->setApp('files_sharing')
533
-				->setType('remote_share')
534
-				->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_UNSHARED, [$owner->getId(), $path])
535
-				->setAffectedUser($user)
536
-				->setObject('remote_share', (int)$share['id'], $path);
537
-			\OC::$server->getActivityManager()->publish($event);
538
-		}
539
-
540
-		return [];
541
-	}
542
-
543
-	private function cleanupRemote($remote) {
544
-		$remote = substr($remote, strpos($remote, '://') + 3);
545
-
546
-		return rtrim($remote, '/');
547
-	}
548
-
549
-	/**
550
-	 * recipient of a share request to re-share the file with another user
551
-	 *
552
-	 * @param string $id
553
-	 * @param array $notification
554
-	 * @return array
555
-	 * @throws AuthenticationFailedException
556
-	 * @throws BadRequestException
557
-	 * @throws ProviderCouldNotAddShareException
558
-	 * @throws ShareNotFound
559
-	 */
560
-	protected function reshareRequested($id, array $notification) {
561
-
562
-		if (!isset($notification['sharedSecret'])) {
563
-			throw new BadRequestException(['sharedSecret']);
564
-		}
565
-		$token = $notification['sharedSecret'];
566
-
567
-		if (!isset($notification['shareWith'])) {
568
-			throw new BadRequestException(['shareWith']);
569
-		}
570
-		$shareWith = $notification['shareWith'];
571
-
572
-		if (!isset($notification['senderId'])) {
573
-			throw new BadRequestException(['senderId']);
574
-		}
575
-		$senderId = $notification['senderId'];
576
-
577
-		$share = $this->federatedShareProvider->getShareById($id);
578
-		// don't allow to share a file back to the owner
579
-		try {
580
-			list($user, $remote) = $this->addressHandler->splitUserRemote($shareWith);
581
-			$owner = $share->getShareOwner();
582
-			$currentServer = $this->addressHandler->generateRemoteURL();
583
-			if ($this->addressHandler->compareAddresses($user, $remote, $owner, $currentServer)) {
584
-				throw new ProviderCouldNotAddShareException('Resharing back to the owner is not allowed: ' . $id);
585
-			}
586
-		} catch (\Exception $e) {
587
-			throw new ProviderCouldNotAddShareException($e->getMessage());
588
-		}
589
-
590
-		$this->verifyShare($share, $token);
591
-
592
-		// check if re-sharing is allowed
593
-		if ($share->getPermissions() & Constants::PERMISSION_SHARE) {
594
-			// the recipient of the initial share is now the initiator for the re-share
595
-			$share->setSharedBy($share->getSharedWith());
596
-			$share->setSharedWith($shareWith);
597
-			$result = $this->federatedShareProvider->create($share);
598
-			$this->federatedShareProvider->storeRemoteId((int)$result->getId(), $senderId);
599
-			return ['token' => $result->getToken(), 'providerId' => $result->getId()];
600
-		} else {
601
-			throw new ProviderCouldNotAddShareException('resharing not allowed for share: ' . $id);
602
-		}
603
-
604
-	}
605
-
606
-	/**
607
-	 * update permission of a re-share so that the share dialog shows the right
608
-	 * permission if the owner or the sender changes the permission
609
-	 *
610
-	 * @param string $id
611
-	 * @param array $notification
612
-	 * @return array
613
-	 * @throws AuthenticationFailedException
614
-	 * @throws BadRequestException
615
-	 */
616
-	protected function updateResharePermissions($id, array $notification) {
617
-
618
-		if (!isset($notification['sharedSecret'])) {
619
-			throw new BadRequestException(['sharedSecret']);
620
-		}
621
-		$token = $notification['sharedSecret'];
622
-
623
-		if (!isset($notification['permission'])) {
624
-			throw new BadRequestException(['permission']);
625
-		}
626
-		$ocmPermissions = $notification['permission'];
627
-
628
-		$share = $this->federatedShareProvider->getShareById($id);
629
-
630
-		$ncPermission = $this->ocmPermissions2ncPermissions($ocmPermissions);
631
-
632
-		$this->verifyShare($share, $token);
633
-		$this->updatePermissionsInDatabase($share, $ncPermission);
634
-
635
-		return [];
636
-	}
637
-
638
-	/**
639
-	 * translate OCM Permissions to Nextcloud permissions
640
-	 *
641
-	 * @param array $ocmPermissions
642
-	 * @return int
643
-	 * @throws BadRequestException
644
-	 */
645
-	protected function ocmPermissions2ncPermissions(array $ocmPermissions) {
646
-		$ncPermissions = 0;
647
-		foreach($ocmPermissions as $permission) {
648
-			switch (strtolower($permission)) {
649
-				case 'read':
650
-					$ncPermissions += Constants::PERMISSION_READ;
651
-					break;
652
-				case 'write':
653
-					$ncPermissions += Constants::PERMISSION_CREATE + Constants::PERMISSION_UPDATE;
654
-					break;
655
-				case 'share':
656
-					$ncPermissions += Constants::PERMISSION_SHARE;
657
-					break;
658
-				default:
659
-					throw new BadRequestException(['permission']);
660
-			}
661
-
662
-			error_log("new permissions: " . $ncPermissions);
663
-		}
664
-
665
-		return $ncPermissions;
666
-	}
667
-
668
-	/**
669
-	 * update permissions in database
670
-	 *
671
-	 * @param IShare $share
672
-	 * @param int $permissions
673
-	 */
674
-	protected function updatePermissionsInDatabase(IShare $share, $permissions) {
675
-		$query = $this->connection->getQueryBuilder();
676
-		$query->update('share')
677
-			->where($query->expr()->eq('id', $query->createNamedParameter($share->getId())))
678
-			->set('permissions', $query->createNamedParameter($permissions))
679
-			->execute();
680
-	}
681
-
682
-
683
-	/**
684
-	 * get file
685
-	 *
686
-	 * @param string $user
687
-	 * @param int $fileSource
688
-	 * @return array with internal path of the file and a absolute link to it
689
-	 */
690
-	private function getFile($user, $fileSource) {
691
-		\OC_Util::setupFS($user);
692
-
693
-		try {
694
-			$file = Filesystem::getPath($fileSource);
695
-		} catch (NotFoundException $e) {
696
-			$file = null;
697
-		}
698
-		$args = Filesystem::is_dir($file) ? array('dir' => $file) : array('dir' => dirname($file), 'scrollto' => $file);
699
-		$link = Util::linkToAbsolute('files', 'index.php', $args);
700
-
701
-		return [$file, $link];
702
-
703
-	}
704
-
705
-	/**
706
-	 * check if we are the initiator or the owner of a re-share and return the correct UID
707
-	 *
708
-	 * @param IShare $share
709
-	 * @return string
710
-	 */
711
-	protected function getCorrectUid(IShare $share) {
712
-		if ($this->userManager->userExists($share->getShareOwner())) {
713
-			return $share->getShareOwner();
714
-		}
715
-
716
-		return $share->getSharedBy();
717
-	}
718
-
719
-
720
-
721
-	/**
722
-	 * check if we got the right share
723
-	 *
724
-	 * @param IShare $share
725
-	 * @param string $token
726
-	 * @return bool
727
-	 * @throws AuthenticationFailedException
728
-	 */
729
-	protected function verifyShare(IShare $share, $token) {
730
-		if (
731
-			$share->getShareType() === FederatedShareProvider::SHARE_TYPE_REMOTE &&
732
-			$share->getToken() === $token
733
-		) {
734
-			return true;
735
-		}
736
-
737
-		throw new AuthenticationFailedException();
738
-	}
739
-
740
-
741
-
742
-	/**
743
-	 * check if server-to-server sharing is enabled
744
-	 *
745
-	 * @param bool $incoming
746
-	 * @return bool
747
-	 */
748
-	private function isS2SEnabled($incoming = false) {
749
-
750
-		$result = $this->appManager->isEnabledForUser('files_sharing');
751
-
752
-		if ($incoming) {
753
-			$result = $result && $this->federatedShareProvider->isIncomingServer2serverShareEnabled();
754
-		} else {
755
-			$result = $result && $this->federatedShareProvider->isOutgoingServer2serverShareEnabled();
756
-		}
757
-
758
-		return $result;
759
-	}
53
+    /** @var IAppManager */
54
+    private $appManager;
55
+
56
+    /** @var FederatedShareProvider */
57
+    private $federatedShareProvider;
58
+
59
+    /** @var AddressHandler */
60
+    private $addressHandler;
61
+
62
+    /** @var ILogger */
63
+    private $logger;
64
+
65
+    /** @var IUserManager */
66
+    private $userManager;
67
+
68
+    /** @var ICloudIdManager */
69
+    private $cloudIdManager;
70
+
71
+    /** @var IActivityManager */
72
+    private $activityManager;
73
+
74
+    /** @var INotificationManager */
75
+    private $notificationManager;
76
+
77
+    /** @var IURLGenerator */
78
+    private $urlGenerator;
79
+
80
+    /** @var ICloudFederationFactory */
81
+    private $cloudFederationFactory;
82
+
83
+    /** @var ICloudFederationProviderManager */
84
+    private $cloudFederationProviderManager;
85
+
86
+    /** @var IDBConnection */
87
+    private $connection;
88
+
89
+    /**
90
+     * CloudFederationProvider constructor.
91
+     *
92
+     * @param IAppManager $appManager
93
+     * @param FederatedShareProvider $federatedShareProvider
94
+     * @param AddressHandler $addressHandler
95
+     * @param ILogger $logger
96
+     * @param IUserManager $userManager
97
+     * @param ICloudIdManager $cloudIdManager
98
+     * @param IActivityManager $activityManager
99
+     * @param INotificationManager $notificationManager
100
+     * @param IURLGenerator $urlGenerator
101
+     * @param ICloudFederationFactory $cloudFederationFactory
102
+     * @param ICloudFederationProviderManager $cloudFederationProviderManager
103
+     * @param IDBConnection $connection
104
+     */
105
+    public function __construct(IAppManager $appManager,
106
+                                FederatedShareProvider $federatedShareProvider,
107
+                                AddressHandler $addressHandler,
108
+                                ILogger $logger,
109
+                                IUserManager $userManager,
110
+                                ICloudIdManager $cloudIdManager,
111
+                                IActivityManager $activityManager,
112
+                                INotificationManager $notificationManager,
113
+                                IURLGenerator $urlGenerator,
114
+                                ICloudFederationFactory $cloudFederationFactory,
115
+                                ICloudFederationProviderManager $cloudFederationProviderManager,
116
+                                IDBConnection $connection
117
+    ) {
118
+        $this->appManager = $appManager;
119
+        $this->federatedShareProvider = $federatedShareProvider;
120
+        $this->addressHandler = $addressHandler;
121
+        $this->logger = $logger;
122
+        $this->userManager = $userManager;
123
+        $this->cloudIdManager = $cloudIdManager;
124
+        $this->activityManager = $activityManager;
125
+        $this->notificationManager = $notificationManager;
126
+        $this->urlGenerator = $urlGenerator;
127
+        $this->cloudFederationFactory = $cloudFederationFactory;
128
+        $this->cloudFederationProviderManager = $cloudFederationProviderManager;
129
+        $this->connection = $connection;
130
+    }
131
+
132
+
133
+
134
+    /**
135
+     * @return string
136
+     */
137
+    public function getShareType() {
138
+        return 'file';
139
+    }
140
+
141
+    /**
142
+     * share received from another server
143
+     *
144
+     * @param ICloudFederationShare $share
145
+     * @return string provider specific unique ID of the share
146
+     *
147
+     * @throws ProviderCouldNotAddShareException
148
+     * @throws \OCP\AppFramework\QueryException
149
+     * @throws \OC\HintException
150
+     * @since 14.0.0
151
+     */
152
+    public function shareReceived(ICloudFederationShare $share) {
153
+
154
+        if (!$this->isS2SEnabled(true)) {
155
+            throw new ProviderCouldNotAddShareException('Server does not support federated cloud sharing', '', Http::STATUS_SERVICE_UNAVAILABLE);
156
+        }
157
+
158
+        $protocol = $share->getProtocol();
159
+        if ($protocol['name'] !== 'webdav') {
160
+            throw new ProviderCouldNotAddShareException('Unsupported protocol for data exchange.', '', Http::STATUS_NOT_IMPLEMENTED);
161
+        }
162
+
163
+        list($ownerUid, $remote) = $this->addressHandler->splitUserRemote($share->getOwner());
164
+
165
+        $token = $share->getShareSecret();
166
+        $name = $share->getResourceName();
167
+        $owner = $share->getOwnerDisplayName();
168
+        $sharedBy = $share->getSharedByDisplayName();
169
+        $shareWith = $share->getShareWith();
170
+        $remoteId = $share->getProviderId();
171
+        $sharedByFederatedId = $share->getSharedBy();
172
+        $ownerFederatedId = $share->getOwner();
173
+
174
+        // if no explicit information about the person who created the share was send
175
+        // we assume that the share comes from the owner
176
+        if ($sharedByFederatedId === null) {
177
+            $sharedBy = $owner;
178
+            $sharedByFederatedId = $ownerFederatedId;
179
+        }
180
+
181
+        if ($remote && $token && $name && $owner && $remoteId && $shareWith) {
182
+
183
+            if (!Util::isValidFileName($name)) {
184
+                throw new ProviderCouldNotAddShareException('The mountpoint name contains invalid characters.', '', Http::STATUS_BAD_REQUEST);
185
+            }
186
+
187
+            // FIXME this should be a method in the user management instead
188
+            $this->logger->debug('shareWith before, ' . $shareWith, ['app' => 'files_sharing']);
189
+            Util::emitHook(
190
+                '\OCA\Files_Sharing\API\Server2Server',
191
+                'preLoginNameUsedAsUserName',
192
+                array('uid' => &$shareWith)
193
+            );
194
+            $this->logger->debug('shareWith after, ' . $shareWith, ['app' => 'files_sharing']);
195
+
196
+            if (!$this->userManager->userExists($shareWith)) {
197
+                throw new ProviderCouldNotAddShareException('User does not exists', '',Http::STATUS_BAD_REQUEST);
198
+            }
199
+
200
+            \OC_Util::setupFS($shareWith);
201
+
202
+            $externalManager = new \OCA\Files_Sharing\External\Manager(
203
+                \OC::$server->getDatabaseConnection(),
204
+                Filesystem::getMountManager(),
205
+                Filesystem::getLoader(),
206
+                \OC::$server->getHTTPClientService(),
207
+                \OC::$server->getNotificationManager(),
208
+                \OC::$server->query(\OCP\OCS\IDiscoveryService::class),
209
+                \OC::$server->getCloudFederationProviderManager(),
210
+                \OC::$server->getCloudFederationFactory(),
211
+                $shareWith
212
+            );
213
+
214
+            try {
215
+                $externalManager->addShare($remote, $token, '', $name, $owner, false, $shareWith, $remoteId);
216
+                $shareId = \OC::$server->getDatabaseConnection()->lastInsertId('*PREFIX*share_external');
217
+
218
+                $event = $this->activityManager->generateEvent();
219
+                $event->setApp('files_sharing')
220
+                    ->setType('remote_share')
221
+                    ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_RECEIVED, [$ownerFederatedId, trim($name, '/')])
222
+                    ->setAffectedUser($shareWith)
223
+                    ->setObject('remote_share', (int)$shareId, $name);
224
+                \OC::$server->getActivityManager()->publish($event);
225
+
226
+                $notification = $this->notificationManager->createNotification();
227
+                $notification->setApp('files_sharing')
228
+                    ->setUser($shareWith)
229
+                    ->setDateTime(new \DateTime())
230
+                    ->setObject('remote_share', $shareId)
231
+                    ->setSubject('remote_share', [$ownerFederatedId, $sharedByFederatedId, trim($name, '/')]);
232
+
233
+                $declineAction = $notification->createAction();
234
+                $declineAction->setLabel('decline')
235
+                    ->setLink($this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'ocs/v2.php/apps/files_sharing/api/v1/remote_shares/pending/' . $shareId)), 'DELETE');
236
+                $notification->addAction($declineAction);
237
+
238
+                $acceptAction = $notification->createAction();
239
+                $acceptAction->setLabel('accept')
240
+                    ->setLink($this->urlGenerator->getAbsoluteURL($this->urlGenerator->linkTo('', 'ocs/v2.php/apps/files_sharing/api/v1/remote_shares/pending/' . $shareId)), 'POST');
241
+                $notification->addAction($acceptAction);
242
+
243
+                $this->notificationManager->notify($notification);
244
+
245
+                return $shareId;
246
+            } catch (\Exception $e) {
247
+                $this->logger->logException($e, [
248
+                    'message' => 'Server can not add remote share.',
249
+                    'level' => ILogger::ERROR,
250
+                    'app' => 'files_sharing'
251
+                ]);
252
+                throw new ProviderCouldNotAddShareException('internal server error, was not able to add share from ' . $remote, '', HTTP::STATUS_INTERNAL_SERVER_ERROR);
253
+            }
254
+        }
255
+
256
+        throw new ProviderCouldNotAddShareException('server can not add remote share, missing parameter', '', HTTP::STATUS_BAD_REQUEST);
257
+
258
+    }
259
+
260
+    /**
261
+     * notification received from another server
262
+     *
263
+     * @param string $notificationType (e.g. SHARE_ACCEPTED)
264
+     * @param string $providerId id of the share
265
+     * @param array $notification payload of the notification
266
+     * @return array data send back to the sender
267
+     *
268
+     * @throws ActionNotSupportedException
269
+     * @throws AuthenticationFailedException
270
+     * @throws BadRequestException
271
+     * @throws \OC\HintException
272
+     * @since 14.0.0
273
+     */
274
+    public function notificationReceived($notificationType, $providerId, array $notification) {
275
+
276
+        switch ($notificationType) {
277
+            case 'SHARE_ACCEPTED':
278
+                return $this->shareAccepted($providerId, $notification);
279
+            case 'SHARE_DECLINED':
280
+                return $this->shareDeclined($providerId, $notification);
281
+            case 'SHARE_UNSHARED':
282
+                return $this->unshare($providerId, $notification);
283
+            case 'REQUEST_RESHARE':
284
+                return $this->reshareRequested($providerId, $notification);
285
+            case 'RESHARE_UNDO':
286
+                return $this->undoReshare($providerId, $notification);
287
+            case 'RESHARE_CHANGE_PERMISSION':
288
+                return $this->updateResharePermissions($providerId, $notification);
289
+        }
290
+
291
+
292
+        throw new BadRequestException([$notificationType]);
293
+    }
294
+
295
+    /**
296
+     * process notification that the recipient accepted a share
297
+     *
298
+     * @param string $id
299
+     * @param array $notification
300
+     * @return array
301
+     * @throws ActionNotSupportedException
302
+     * @throws AuthenticationFailedException
303
+     * @throws BadRequestException
304
+     * @throws \OC\HintException
305
+     */
306
+    private function shareAccepted($id, array $notification) {
307
+
308
+        if (!$this->isS2SEnabled()) {
309
+            throw new ActionNotSupportedException('Server does not support federated cloud sharing');
310
+        }
311
+
312
+        if (!isset($notification['sharedSecret'])) {
313
+            throw new BadRequestException(['sharedSecret']);
314
+        }
315
+
316
+        $token = $notification['sharedSecret'];
317
+
318
+        $share = $this->federatedShareProvider->getShareById($id);
319
+
320
+        $this->verifyShare($share, $token);
321
+        $this->executeAcceptShare($share);
322
+        if ($share->getShareOwner() !== $share->getSharedBy()) {
323
+            list(, $remote) = $this->addressHandler->splitUserRemote($share->getSharedBy());
324
+            $remoteId = $this->federatedShareProvider->getRemoteId($share);
325
+            $notification = $this->cloudFederationFactory->getCloudFederationNotification();
326
+            $notification->setMessage(
327
+                'SHARE_ACCEPTED',
328
+                'file',
329
+                $remoteId,
330
+                [
331
+                    'sharedSecret' => $token,
332
+                    'message' => 'Recipient accepted the re-share'
333
+                ]
334
+
335
+            );
336
+            $this->cloudFederationProviderManager->sendNotification($remote, $notification);
337
+
338
+        }
339
+
340
+        return [];
341
+    }
342
+
343
+    /**
344
+     * @param IShare $share
345
+     * @throws ShareNotFound
346
+     */
347
+    protected function executeAcceptShare(IShare $share) {
348
+        try {
349
+            $fileId = (int)$share->getNode()->getId();
350
+            list($file, $link) = $this->getFile($this->getCorrectUid($share), $fileId);
351
+        } catch (\Exception $e) {
352
+            throw new ShareNotFound();
353
+        }
354
+
355
+        $event = $this->activityManager->generateEvent();
356
+        $event->setApp('files_sharing')
357
+            ->setType('remote_share')
358
+            ->setAffectedUser($this->getCorrectUid($share))
359
+            ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_ACCEPTED, [$share->getSharedWith(), [$fileId => $file]])
360
+            ->setObject('files', $fileId, $file)
361
+            ->setLink($link);
362
+        $this->activityManager->publish($event);
363
+    }
364
+
365
+    /**
366
+     * process notification that the recipient declined a share
367
+     *
368
+     * @param string $id
369
+     * @param array $notification
370
+     * @return array
371
+     * @throws ActionNotSupportedException
372
+     * @throws AuthenticationFailedException
373
+     * @throws BadRequestException
374
+     * @throws ShareNotFound
375
+     * @throws \OC\HintException
376
+     *
377
+     */
378
+    protected function shareDeclined($id, array $notification) {
379
+
380
+        if (!$this->isS2SEnabled()) {
381
+            throw new ActionNotSupportedException('Server does not support federated cloud sharing');
382
+        }
383
+
384
+        if (!isset($notification['sharedSecret'])) {
385
+            throw new BadRequestException(['sharedSecret']);
386
+        }
387
+
388
+        $token = $notification['sharedSecret'];
389
+
390
+        $share = $this->federatedShareProvider->getShareById($id);
391
+
392
+        $this->verifyShare($share, $token);
393
+
394
+        if ($share->getShareOwner() !== $share->getSharedBy()) {
395
+            list(, $remote) = $this->addressHandler->splitUserRemote($share->getSharedBy());
396
+            $remoteId = $this->federatedShareProvider->getRemoteId($share);
397
+            $notification = $this->cloudFederationFactory->getCloudFederationNotification();
398
+            $notification->setMessage(
399
+                'SHARE_DECLINED',
400
+                'file',
401
+                $remoteId,
402
+                [
403
+                    'sharedSecret' => $token,
404
+                    'message' => 'Recipient declined the re-share'
405
+                ]
406
+
407
+            );
408
+            $this->cloudFederationProviderManager->sendNotification($remote, $notification);
409
+        }
410
+
411
+        $this->executeDeclineShare($share);
412
+
413
+        return [];
414
+
415
+    }
416
+
417
+    /**
418
+     * delete declined share and create a activity
419
+     *
420
+     * @param IShare $share
421
+     * @throws ShareNotFound
422
+     */
423
+    protected function executeDeclineShare(IShare $share) {
424
+        $this->federatedShareProvider->removeShareFromTable($share);
425
+
426
+        try {
427
+            $fileId = (int)$share->getNode()->getId();
428
+            list($file, $link) = $this->getFile($this->getCorrectUid($share), $fileId);
429
+        } catch (\Exception $e) {
430
+            throw new ShareNotFound();
431
+        }
432
+
433
+        $event = $this->activityManager->generateEvent();
434
+        $event->setApp('files_sharing')
435
+            ->setType('remote_share')
436
+            ->setAffectedUser($this->getCorrectUid($share))
437
+            ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_DECLINED, [$share->getSharedWith(), [$fileId => $file]])
438
+            ->setObject('files', $fileId, $file)
439
+            ->setLink($link);
440
+        $this->activityManager->publish($event);
441
+
442
+    }
443
+
444
+    /**
445
+     * received the notification that the owner unshared a file from you
446
+     *
447
+     * @param string $id
448
+     * @param array $notification
449
+     * @return array
450
+     * @throws AuthenticationFailedException
451
+     * @throws BadRequestException
452
+     */
453
+    private function undoReshare($id, array $notification) {
454
+        if (!isset($notification['sharedSecret'])) {
455
+            throw new BadRequestException(['sharedSecret']);
456
+        }
457
+        $token = $notification['sharedSecret'];
458
+
459
+        $share = $this->federatedShareProvider->getShareById($id);
460
+
461
+        $this->verifyShare($share, $token);
462
+        $this->federatedShareProvider->removeShareFromTable($share);
463
+        return [];
464
+    }
465
+
466
+    /**
467
+     * unshare file from self
468
+     *
469
+     * @param string $id
470
+     * @param array $notification
471
+     * @return array
472
+     * @throws ActionNotSupportedException
473
+     * @throws BadRequestException
474
+     */
475
+    private function unshare($id, array $notification) {
476
+
477
+        if (!$this->isS2SEnabled(true)) {
478
+            throw new ActionNotSupportedException("incoming shares disabled!");
479
+        }
480
+
481
+        if (!isset($notification['sharedSecret'])) {
482
+            throw new BadRequestException(['sharedSecret']);
483
+        }
484
+        $token = $notification['sharedSecret'];
485
+
486
+        $qb = $this->connection->getQueryBuilder();
487
+        $qb->select('*')
488
+            ->from('share_external')
489
+            ->where(
490
+                $qb->expr()->andX(
491
+                    $qb->expr()->eq('remote_id', $qb->createNamedParameter($id)),
492
+                    $qb->expr()->eq('share_token', $qb->createNamedParameter($token))
493
+                )
494
+            );
495
+
496
+        $result = $qb->execute();
497
+        $share = $result->fetch();
498
+        $result->closeCursor();
499
+
500
+        if ($token && $id && !empty($share)) {
501
+
502
+            $remote = $this->cleanupRemote($share['remote']);
503
+
504
+            $owner = $this->cloudIdManager->getCloudId($share['owner'], $remote);
505
+            $mountpoint = $share['mountpoint'];
506
+            $user = $share['user'];
507
+
508
+            $qb = $this->connection->getQueryBuilder();
509
+            $qb->delete('share_external')
510
+                ->where(
511
+                    $qb->expr()->andX(
512
+                        $qb->expr()->eq('remote_id', $qb->createNamedParameter($id)),
513
+                        $qb->expr()->eq('share_token', $qb->createNamedParameter($token))
514
+                    )
515
+                );
516
+
517
+            $qb->execute();
518
+
519
+            if ($share['accepted']) {
520
+                $path = trim($mountpoint, '/');
521
+            } else {
522
+                $path = trim($share['name'], '/');
523
+            }
524
+
525
+            $notification = $this->notificationManager->createNotification();
526
+            $notification->setApp('files_sharing')
527
+                ->setUser($share['user'])
528
+                ->setObject('remote_share', (int)$share['id']);
529
+            $this->notificationManager->markProcessed($notification);
530
+
531
+            $event = $this->activityManager->generateEvent();
532
+            $event->setApp('files_sharing')
533
+                ->setType('remote_share')
534
+                ->setSubject(RemoteShares::SUBJECT_REMOTE_SHARE_UNSHARED, [$owner->getId(), $path])
535
+                ->setAffectedUser($user)
536
+                ->setObject('remote_share', (int)$share['id'], $path);
537
+            \OC::$server->getActivityManager()->publish($event);
538
+        }
539
+
540
+        return [];
541
+    }
542
+
543
+    private function cleanupRemote($remote) {
544
+        $remote = substr($remote, strpos($remote, '://') + 3);
545
+
546
+        return rtrim($remote, '/');
547
+    }
548
+
549
+    /**
550
+     * recipient of a share request to re-share the file with another user
551
+     *
552
+     * @param string $id
553
+     * @param array $notification
554
+     * @return array
555
+     * @throws AuthenticationFailedException
556
+     * @throws BadRequestException
557
+     * @throws ProviderCouldNotAddShareException
558
+     * @throws ShareNotFound
559
+     */
560
+    protected function reshareRequested($id, array $notification) {
561
+
562
+        if (!isset($notification['sharedSecret'])) {
563
+            throw new BadRequestException(['sharedSecret']);
564
+        }
565
+        $token = $notification['sharedSecret'];
566
+
567
+        if (!isset($notification['shareWith'])) {
568
+            throw new BadRequestException(['shareWith']);
569
+        }
570
+        $shareWith = $notification['shareWith'];
571
+
572
+        if (!isset($notification['senderId'])) {
573
+            throw new BadRequestException(['senderId']);
574
+        }
575
+        $senderId = $notification['senderId'];
576
+
577
+        $share = $this->federatedShareProvider->getShareById($id);
578
+        // don't allow to share a file back to the owner
579
+        try {
580
+            list($user, $remote) = $this->addressHandler->splitUserRemote($shareWith);
581
+            $owner = $share->getShareOwner();
582
+            $currentServer = $this->addressHandler->generateRemoteURL();
583
+            if ($this->addressHandler->compareAddresses($user, $remote, $owner, $currentServer)) {
584
+                throw new ProviderCouldNotAddShareException('Resharing back to the owner is not allowed: ' . $id);
585
+            }
586
+        } catch (\Exception $e) {
587
+            throw new ProviderCouldNotAddShareException($e->getMessage());
588
+        }
589
+
590
+        $this->verifyShare($share, $token);
591
+
592
+        // check if re-sharing is allowed
593
+        if ($share->getPermissions() & Constants::PERMISSION_SHARE) {
594
+            // the recipient of the initial share is now the initiator for the re-share
595
+            $share->setSharedBy($share->getSharedWith());
596
+            $share->setSharedWith($shareWith);
597
+            $result = $this->federatedShareProvider->create($share);
598
+            $this->federatedShareProvider->storeRemoteId((int)$result->getId(), $senderId);
599
+            return ['token' => $result->getToken(), 'providerId' => $result->getId()];
600
+        } else {
601
+            throw new ProviderCouldNotAddShareException('resharing not allowed for share: ' . $id);
602
+        }
603
+
604
+    }
605
+
606
+    /**
607
+     * update permission of a re-share so that the share dialog shows the right
608
+     * permission if the owner or the sender changes the permission
609
+     *
610
+     * @param string $id
611
+     * @param array $notification
612
+     * @return array
613
+     * @throws AuthenticationFailedException
614
+     * @throws BadRequestException
615
+     */
616
+    protected function updateResharePermissions($id, array $notification) {
617
+
618
+        if (!isset($notification['sharedSecret'])) {
619
+            throw new BadRequestException(['sharedSecret']);
620
+        }
621
+        $token = $notification['sharedSecret'];
622
+
623
+        if (!isset($notification['permission'])) {
624
+            throw new BadRequestException(['permission']);
625
+        }
626
+        $ocmPermissions = $notification['permission'];
627
+
628
+        $share = $this->federatedShareProvider->getShareById($id);
629
+
630
+        $ncPermission = $this->ocmPermissions2ncPermissions($ocmPermissions);
631
+
632
+        $this->verifyShare($share, $token);
633
+        $this->updatePermissionsInDatabase($share, $ncPermission);
634
+
635
+        return [];
636
+    }
637
+
638
+    /**
639
+     * translate OCM Permissions to Nextcloud permissions
640
+     *
641
+     * @param array $ocmPermissions
642
+     * @return int
643
+     * @throws BadRequestException
644
+     */
645
+    protected function ocmPermissions2ncPermissions(array $ocmPermissions) {
646
+        $ncPermissions = 0;
647
+        foreach($ocmPermissions as $permission) {
648
+            switch (strtolower($permission)) {
649
+                case 'read':
650
+                    $ncPermissions += Constants::PERMISSION_READ;
651
+                    break;
652
+                case 'write':
653
+                    $ncPermissions += Constants::PERMISSION_CREATE + Constants::PERMISSION_UPDATE;
654
+                    break;
655
+                case 'share':
656
+                    $ncPermissions += Constants::PERMISSION_SHARE;
657
+                    break;
658
+                default:
659
+                    throw new BadRequestException(['permission']);
660
+            }
661
+
662
+            error_log("new permissions: " . $ncPermissions);
663
+        }
664
+
665
+        return $ncPermissions;
666
+    }
667
+
668
+    /**
669
+     * update permissions in database
670
+     *
671
+     * @param IShare $share
672
+     * @param int $permissions
673
+     */
674
+    protected function updatePermissionsInDatabase(IShare $share, $permissions) {
675
+        $query = $this->connection->getQueryBuilder();
676
+        $query->update('share')
677
+            ->where($query->expr()->eq('id', $query->createNamedParameter($share->getId())))
678
+            ->set('permissions', $query->createNamedParameter($permissions))
679
+            ->execute();
680
+    }
681
+
682
+
683
+    /**
684
+     * get file
685
+     *
686
+     * @param string $user
687
+     * @param int $fileSource
688
+     * @return array with internal path of the file and a absolute link to it
689
+     */
690
+    private function getFile($user, $fileSource) {
691
+        \OC_Util::setupFS($user);
692
+
693
+        try {
694
+            $file = Filesystem::getPath($fileSource);
695
+        } catch (NotFoundException $e) {
696
+            $file = null;
697
+        }
698
+        $args = Filesystem::is_dir($file) ? array('dir' => $file) : array('dir' => dirname($file), 'scrollto' => $file);
699
+        $link = Util::linkToAbsolute('files', 'index.php', $args);
700
+
701
+        return [$file, $link];
702
+
703
+    }
704
+
705
+    /**
706
+     * check if we are the initiator or the owner of a re-share and return the correct UID
707
+     *
708
+     * @param IShare $share
709
+     * @return string
710
+     */
711
+    protected function getCorrectUid(IShare $share) {
712
+        if ($this->userManager->userExists($share->getShareOwner())) {
713
+            return $share->getShareOwner();
714
+        }
715
+
716
+        return $share->getSharedBy();
717
+    }
718
+
719
+
720
+
721
+    /**
722
+     * check if we got the right share
723
+     *
724
+     * @param IShare $share
725
+     * @param string $token
726
+     * @return bool
727
+     * @throws AuthenticationFailedException
728
+     */
729
+    protected function verifyShare(IShare $share, $token) {
730
+        if (
731
+            $share->getShareType() === FederatedShareProvider::SHARE_TYPE_REMOTE &&
732
+            $share->getToken() === $token
733
+        ) {
734
+            return true;
735
+        }
736
+
737
+        throw new AuthenticationFailedException();
738
+    }
739
+
740
+
741
+
742
+    /**
743
+     * check if server-to-server sharing is enabled
744
+     *
745
+     * @param bool $incoming
746
+     * @return bool
747
+     */
748
+    private function isS2SEnabled($incoming = false) {
749
+
750
+        $result = $this->appManager->isEnabledForUser('files_sharing');
751
+
752
+        if ($incoming) {
753
+            $result = $result && $this->federatedShareProvider->isIncomingServer2serverShareEnabled();
754
+        } else {
755
+            $result = $result && $this->federatedShareProvider->isOutgoingServer2serverShareEnabled();
756
+        }
757
+
758
+        return $result;
759
+    }
760 760
 
761 761
 
762 762
 }
Please login to merge, or discard this patch.
ocm-provider/index.php 1 patch
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -29,11 +29,11 @@
 block discarded – undo
29 29
 $isEnabled = $server->getAppManager()->isEnabledForUser('cloud_federation_api');
30 30
 
31 31
 if ($isEnabled) {
32
-	$capabilities = new OCA\CloudFederationAPI\Capabilities($server->getURLGenerator());
33
-	header('Content-Type: application/json');
34
-	echo json_encode($capabilities->getCapabilities()['ocm']);
32
+    $capabilities = new OCA\CloudFederationAPI\Capabilities($server->getURLGenerator());
33
+    header('Content-Type: application/json');
34
+    echo json_encode($capabilities->getCapabilities()['ocm']);
35 35
 } else {
36
-	header($_SERVER["SERVER_PROTOCOL"]." 501 Not Implemented", true, 501);
37
-	exit("501 Not Implemented");
36
+    header($_SERVER["SERVER_PROTOCOL"]." 501 Not Implemented", true, 501);
37
+    exit("501 Not Implemented");
38 38
 }
39 39
 
Please login to merge, or discard this patch.
apps/cloud_federation_api/lib/Config.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -32,15 +32,15 @@
 block discarded – undo
32 32
  */
33 33
 class Config {
34 34
 
35
-	public function __construct() {
36
-	}
35
+    public function __construct() {
36
+    }
37 37
 
38
-	public function incomingRequestsEnabled() {
39
-		return true;
40
-	}
38
+    public function incomingRequestsEnabled() {
39
+        return true;
40
+    }
41 41
 
42
-	public function outgoingRequestsEnabled() {
43
-		return true;
44
-	}
42
+    public function outgoingRequestsEnabled() {
43
+        return true;
44
+    }
45 45
 
46 46
 }
Please login to merge, or discard this patch.
apps/cloud_federation_api/lib/AppInfo/Application.php 1 patch
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -28,10 +28,10 @@
 block discarded – undo
28 28
 
29 29
 class Application extends App {
30 30
 
31
-	public function __construct() {
32
-		parent::__construct('cloud_federation_api');
31
+    public function __construct() {
32
+        parent::__construct('cloud_federation_api');
33 33
 
34
-		$container = $this->getContainer();
35
-		$container->registerCapability(Capabilities::class);
36
-	}
34
+        $container = $this->getContainer();
35
+        $container->registerCapability(Capabilities::class);
36
+    }
37 37
 }
Please login to merge, or discard this patch.
core/routes.php 1 patch
Indentation   +92 added lines, -92 removed lines patch added patch discarded remove patch
@@ -36,47 +36,47 @@  discard block
 block discarded – undo
36 36
 
37 37
 $application = new Application();
38 38
 $application->registerRoutes($this, [
39
-	'routes' => [
40
-		['name' => 'lost#email', 'url' => '/lostpassword/email', 'verb' => 'POST'],
41
-		['name' => 'lost#resetform', 'url' => '/lostpassword/reset/form/{token}/{userId}', 'verb' => 'GET'],
42
-		['name' => 'lost#setPassword', 'url' => '/lostpassword/set/{token}/{userId}', 'verb' => 'POST'],
43
-		['name' => 'user#getDisplayNames', 'url' => '/displaynames', 'verb' => 'POST'],
44
-		['name' => 'avatar#getAvatar', 'url' => '/avatar/{userId}/{size}', 'verb' => 'GET'],
45
-		['name' => 'avatar#deleteAvatar', 'url' => '/avatar/', 'verb' => 'DELETE'],
46
-		['name' => 'avatar#postCroppedAvatar', 'url' => '/avatar/cropped', 'verb' => 'POST'],
47
-		['name' => 'avatar#getTmpAvatar', 'url' => '/avatar/tmp', 'verb' => 'GET'],
48
-		['name' => 'avatar#postAvatar', 'url' => '/avatar/', 'verb' => 'POST'],
49
-		['name' => 'CSRFToken#index', 'url' => '/csrftoken', 'verb' => 'GET'],
50
-		['name' => 'login#tryLogin', 'url' => '/login', 'verb' => 'POST'],
51
-		['name' => 'login#confirmPassword', 'url' => '/login/confirm', 'verb' => 'POST'],
52
-		['name' => 'login#showLoginForm', 'url' => '/login', 'verb' => 'GET'],
53
-		['name' => 'login#logout', 'url' => '/logout', 'verb' => 'GET'],
54
-		['name' => 'ClientFlowLogin#showAuthPickerPage', 'url' => '/login/flow', 'verb' => 'GET'],
55
-		['name' => 'ClientFlowLogin#redirectPage', 'url' => '/login/flow/redirect', 'verb' => 'GET'],
56
-		['name' => 'ClientFlowLogin#generateAppPassword', 'url' => '/login/flow', 'verb' => 'POST'],
57
-		['name' => 'ClientFlowLogin#grantPage', 'url' => '/login/flow/grant', 'verb' => 'GET'],
58
-		['name' => 'TwoFactorChallenge#selectChallenge', 'url' => '/login/selectchallenge', 'verb' => 'GET'],
59
-		['name' => 'TwoFactorChallenge#showChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'GET'],
60
-		['name' => 'TwoFactorChallenge#solveChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'POST'],
61
-		['name' => 'OCJS#getConfig', 'url' => '/core/js/oc.js', 'verb' => 'GET'],
62
-		['name' => 'Preview#getPreviewByFileId', 'url' => '/core/preview', 'verb' => 'GET'],
63
-		['name' => 'Preview#getPreview', 'url' => '/core/preview.png', 'verb' => 'GET'],
64
-		['name' => 'Css#getCss', 'url' => '/css/{appName}/{fileName}', 'verb' => 'GET'],
65
-		['name' => 'Js#getJs', 'url' => '/js/{appName}/{fileName}', 'verb' => 'GET'],
66
-		['name' => 'contactsMenu#index', 'url' => '/contactsmenu/contacts', 'verb' => 'POST'],
67
-		['name' => 'contactsMenu#findOne', 'url' => '/contactsmenu/findOne', 'verb' => 'POST'],
68
-		['name' => 'WalledGarden#get', 'url' => '/204', 'verb' => 'GET'],
69
-		['name' => 'Search#search', 'url' => '/core/search', 'verb' => 'GET'],
70
-	],
71
-	'ocs' => [
72
-		['root' => '/cloud', 'name' => 'OCS#getCapabilities', 'url' => '/capabilities', 'verb' => 'GET'],
73
-		['root' => '', 'name' => 'OCS#getConfig', 'url' => '/config', 'verb' => 'GET'],
74
-		['root' => '/person', 'name' => 'OCS#personCheck', 'url' => '/check', 'verb' => 'POST'],
75
-		['root' => '/identityproof', 'name' => 'OCS#getIdentityProof', 'url' => '/key/{cloudId}', 'verb' => 'GET'],
76
-		['root' => '/core', 'name' => 'Navigation#getAppsNavigation', 'url' => '/navigation/apps', 'verb' => 'GET'],
77
-		['root' => '/core', 'name' => 'Navigation#getSettingsNavigation', 'url' => '/navigation/settings', 'verb' => 'GET'],
78
-		['root' => '/core', 'name' => 'AutoComplete#get', 'url' => '/autocomplete/get', 'verb' => 'GET'],
79
-	],
39
+    'routes' => [
40
+        ['name' => 'lost#email', 'url' => '/lostpassword/email', 'verb' => 'POST'],
41
+        ['name' => 'lost#resetform', 'url' => '/lostpassword/reset/form/{token}/{userId}', 'verb' => 'GET'],
42
+        ['name' => 'lost#setPassword', 'url' => '/lostpassword/set/{token}/{userId}', 'verb' => 'POST'],
43
+        ['name' => 'user#getDisplayNames', 'url' => '/displaynames', 'verb' => 'POST'],
44
+        ['name' => 'avatar#getAvatar', 'url' => '/avatar/{userId}/{size}', 'verb' => 'GET'],
45
+        ['name' => 'avatar#deleteAvatar', 'url' => '/avatar/', 'verb' => 'DELETE'],
46
+        ['name' => 'avatar#postCroppedAvatar', 'url' => '/avatar/cropped', 'verb' => 'POST'],
47
+        ['name' => 'avatar#getTmpAvatar', 'url' => '/avatar/tmp', 'verb' => 'GET'],
48
+        ['name' => 'avatar#postAvatar', 'url' => '/avatar/', 'verb' => 'POST'],
49
+        ['name' => 'CSRFToken#index', 'url' => '/csrftoken', 'verb' => 'GET'],
50
+        ['name' => 'login#tryLogin', 'url' => '/login', 'verb' => 'POST'],
51
+        ['name' => 'login#confirmPassword', 'url' => '/login/confirm', 'verb' => 'POST'],
52
+        ['name' => 'login#showLoginForm', 'url' => '/login', 'verb' => 'GET'],
53
+        ['name' => 'login#logout', 'url' => '/logout', 'verb' => 'GET'],
54
+        ['name' => 'ClientFlowLogin#showAuthPickerPage', 'url' => '/login/flow', 'verb' => 'GET'],
55
+        ['name' => 'ClientFlowLogin#redirectPage', 'url' => '/login/flow/redirect', 'verb' => 'GET'],
56
+        ['name' => 'ClientFlowLogin#generateAppPassword', 'url' => '/login/flow', 'verb' => 'POST'],
57
+        ['name' => 'ClientFlowLogin#grantPage', 'url' => '/login/flow/grant', 'verb' => 'GET'],
58
+        ['name' => 'TwoFactorChallenge#selectChallenge', 'url' => '/login/selectchallenge', 'verb' => 'GET'],
59
+        ['name' => 'TwoFactorChallenge#showChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'GET'],
60
+        ['name' => 'TwoFactorChallenge#solveChallenge', 'url' => '/login/challenge/{challengeProviderId}', 'verb' => 'POST'],
61
+        ['name' => 'OCJS#getConfig', 'url' => '/core/js/oc.js', 'verb' => 'GET'],
62
+        ['name' => 'Preview#getPreviewByFileId', 'url' => '/core/preview', 'verb' => 'GET'],
63
+        ['name' => 'Preview#getPreview', 'url' => '/core/preview.png', 'verb' => 'GET'],
64
+        ['name' => 'Css#getCss', 'url' => '/css/{appName}/{fileName}', 'verb' => 'GET'],
65
+        ['name' => 'Js#getJs', 'url' => '/js/{appName}/{fileName}', 'verb' => 'GET'],
66
+        ['name' => 'contactsMenu#index', 'url' => '/contactsmenu/contacts', 'verb' => 'POST'],
67
+        ['name' => 'contactsMenu#findOne', 'url' => '/contactsmenu/findOne', 'verb' => 'POST'],
68
+        ['name' => 'WalledGarden#get', 'url' => '/204', 'verb' => 'GET'],
69
+        ['name' => 'Search#search', 'url' => '/core/search', 'verb' => 'GET'],
70
+    ],
71
+    'ocs' => [
72
+        ['root' => '/cloud', 'name' => 'OCS#getCapabilities', 'url' => '/capabilities', 'verb' => 'GET'],
73
+        ['root' => '', 'name' => 'OCS#getConfig', 'url' => '/config', 'verb' => 'GET'],
74
+        ['root' => '/person', 'name' => 'OCS#personCheck', 'url' => '/check', 'verb' => 'POST'],
75
+        ['root' => '/identityproof', 'name' => 'OCS#getIdentityProof', 'url' => '/key/{cloudId}', 'verb' => 'GET'],
76
+        ['root' => '/core', 'name' => 'Navigation#getAppsNavigation', 'url' => '/navigation/apps', 'verb' => 'GET'],
77
+        ['root' => '/core', 'name' => 'Navigation#getSettingsNavigation', 'url' => '/navigation/settings', 'verb' => 'GET'],
78
+        ['root' => '/core', 'name' => 'AutoComplete#get', 'url' => '/autocomplete/get', 'verb' => 'GET'],
79
+    ],
80 80
 ]);
81 81
 
82 82
 // Post installation check
@@ -85,12 +85,12 @@  discard block
 block discarded – undo
85 85
 // Core ajax actions
86 86
 // Routing
87 87
 $this->create('core_ajax_update', '/core/ajax/update.php')
88
-	->actionInclude('core/ajax/update.php');
88
+    ->actionInclude('core/ajax/update.php');
89 89
 
90 90
 // File routes
91 91
 $this->create('files.viewcontroller.showFile', '/f/{fileid}')->action(function($urlParams) {
92
-	$app = new \OCA\Files\AppInfo\Application($urlParams);
93
-	$app->dispatch('ViewController', 'index');
92
+    $app = new \OCA\Files\AppInfo\Application($urlParams);
93
+    $app->dispatch('ViewController', 'index');
94 94
 });
95 95
 
96 96
 // Call routes
@@ -99,12 +99,12 @@  discard block
 block discarded – undo
99 99
  * @suppress PhanUndeclaredClassMethod
100 100
  */
101 101
 $this->create('spreed.pagecontroller.showCall', '/call/{token}')->action(function($urlParams) {
102
-	if (class_exists(\OCA\Spreed\AppInfo\Application::class, false)) {
103
-		$app = new \OCA\Spreed\AppInfo\Application($urlParams);
104
-		$app->dispatch('PageController', 'index');
105
-	} else {
106
-		throw new \OC\HintException('App spreed is not enabled');
107
-	}
102
+    if (class_exists(\OCA\Spreed\AppInfo\Application::class, false)) {
103
+        $app = new \OCA\Spreed\AppInfo\Application($urlParams);
104
+        $app->dispatch('PageController', 'index');
105
+    } else {
106
+        throw new \OC\HintException('App spreed is not enabled');
107
+    }
108 108
 });
109 109
 
110 110
 // OCM routes
@@ -113,12 +113,12 @@  discard block
 block discarded – undo
113 113
  * @suppress PhanUndeclaredClassMethod
114 114
  */
115 115
 $this->create('cloud_federation_api.requesthandlercontroller.addShare', '/ocm/shares')->post()->action(function($urlParams) {
116
-	if (class_exists(\OCA\CloudFederationAPI\AppInfo\Application::class, false)) {
117
-		$app = new \OCA\CloudFederationAPI\AppInfo\Application($urlParams);
118
-		$app->dispatch('RequestHandlerController', 'addShare');
119
-	} else {
120
-		throw new \OC\HintException('Cloud Federation API not enabled');
121
-	}
116
+    if (class_exists(\OCA\CloudFederationAPI\AppInfo\Application::class, false)) {
117
+        $app = new \OCA\CloudFederationAPI\AppInfo\Application($urlParams);
118
+        $app->dispatch('RequestHandlerController', 'addShare');
119
+    } else {
120
+        throw new \OC\HintException('Cloud Federation API not enabled');
121
+    }
122 122
 });
123 123
 
124 124
 /**
@@ -126,53 +126,53 @@  discard block
 block discarded – undo
126 126
  * @suppress PhanUndeclaredClassMethod
127 127
  */
128 128
 $this->create('cloud_federation_api.requesthandlercontroller.receiveNotification', '/ocm/notifications')->post()->action(function($urlParams) {
129
-	if (class_exists(\OCA\CloudFederationAPI\AppInfo\Application::class, false)) {
130
-		$app = new \OCA\CloudFederationAPI\AppInfo\Application($urlParams);
131
-		$app->dispatch('RequestHandlerController', 'receiveNotification');
132
-	} else {
133
-		throw new \OC\HintException('Cloud Federation API not enabled');
134
-	}
129
+    if (class_exists(\OCA\CloudFederationAPI\AppInfo\Application::class, false)) {
130
+        $app = new \OCA\CloudFederationAPI\AppInfo\Application($urlParams);
131
+        $app->dispatch('RequestHandlerController', 'receiveNotification');
132
+    } else {
133
+        throw new \OC\HintException('Cloud Federation API not enabled');
134
+    }
135 135
 });
136 136
 
137 137
 
138 138
 // Sharing routes
139 139
 $this->create('files_sharing.sharecontroller.showShare', '/s/{token}')->action(function($urlParams) {
140
-	if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
141
-		$app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
142
-		$app->dispatch('ShareController', 'showShare');
143
-	} else {
144
-		throw new \OC\HintException('App file sharing is not enabled');
145
-	}
140
+    if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
141
+        $app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
142
+        $app->dispatch('ShareController', 'showShare');
143
+    } else {
144
+        throw new \OC\HintException('App file sharing is not enabled');
145
+    }
146 146
 });
147 147
 $this->create('files_sharing.sharecontroller.authenticate', '/s/{token}/authenticate/{redirect}')->post()->action(function($urlParams) {
148
-	if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
149
-		$app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
150
-		$app->dispatch('ShareController', 'authenticate');
151
-	} else {
152
-		throw new \OC\HintException('App file sharing is not enabled');
153
-	}
148
+    if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
149
+        $app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
150
+        $app->dispatch('ShareController', 'authenticate');
151
+    } else {
152
+        throw new \OC\HintException('App file sharing is not enabled');
153
+    }
154 154
 });
155 155
 $this->create('files_sharing.sharecontroller.showAuthenticate', '/s/{token}/authenticate/{redirect}')->get()->action(function($urlParams) {
156
-	if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
157
-		$app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
158
-		$app->dispatch('ShareController', 'showAuthenticate');
159
-	} else {
160
-		throw new \OC\HintException('App file sharing is not enabled');
161
-	}
156
+    if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
157
+        $app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
158
+        $app->dispatch('ShareController', 'showAuthenticate');
159
+    } else {
160
+        throw new \OC\HintException('App file sharing is not enabled');
161
+    }
162 162
 });
163 163
 $this->create('files_sharing.sharecontroller.downloadShare', '/s/{token}/download')->get()->action(function($urlParams) {
164
-	if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
165
-		$app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
166
-		$app->dispatch('ShareController', 'downloadShare');
167
-	} else {
168
-		throw new \OC\HintException('App file sharing is not enabled');
169
-	}
164
+    if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
165
+        $app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
166
+        $app->dispatch('ShareController', 'downloadShare');
167
+    } else {
168
+        throw new \OC\HintException('App file sharing is not enabled');
169
+    }
170 170
 });
171 171
 $this->create('files_sharing.publicpreview.directLink', '/s/{token}/preview')->get()->action(function($urlParams) {
172
-	if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
173
-		$app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
174
-		$app->dispatch('PublicPreviewController', 'directLink');
175
-	} else {
176
-		throw new \OC\HintException('App file sharing is not enabled');
177
-	}
172
+    if (class_exists(\OCA\Files_Sharing\AppInfo\Application::class, false)) {
173
+        $app = new \OCA\Files_Sharing\AppInfo\Application($urlParams);
174
+        $app->dispatch('PublicPreviewController', 'directLink');
175
+    } else {
176
+        throw new \OC\HintException('App file sharing is not enabled');
177
+    }
178 178
 });
Please login to merge, or discard this patch.
apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php 1 patch
Indentation   +100 added lines, -100 removed lines patch added patch discarded remove patch
@@ -45,105 +45,105 @@
 block discarded – undo
45 45
  */
46 46
 class RetryJob extends Job {
47 47
 
48
-	/** @var  bool */
49
-	private $retainJob = true;
50
-
51
-	/** @var Notifications */
52
-	private $notifications;
53
-
54
-	/** @var int max number of attempts to send the request */
55
-	private $maxTry = 20;
56
-
57
-	/** @var int how much time should be between two tries (10 minutes) */
58
-	private $interval = 600;
59
-
60
-	/**
61
-	 * UnShare constructor.
62
-	 *
63
-	 * @param Notifications $notifications
64
-	 */
65
-	public function __construct(Notifications $notifications = null) {
66
-		if ($notifications) {
67
-			$this->notifications = $notifications;
68
-		} else {
69
-			$addressHandler = new AddressHandler(
70
-				\OC::$server->getURLGenerator(),
71
-				\OC::$server->getL10N('federatedfilesharing'),
72
-				\OC::$server->getCloudIdManager()
73
-			);
74
-			$this->notifications = new Notifications(
75
-				$addressHandler,
76
-				\OC::$server->getHTTPClientService(),
77
-				\OC::$server->query(\OCP\OCS\IDiscoveryService::class),
78
-				\OC::$server->getJobList(),
79
-				\OC::$server->getCloudFederationProviderManager(),
80
-				\OC::$server->getCloudFederationFactory()
81
-			);
82
-		}
83
-
84
-	}
85
-
86
-	/**
87
-	 * run the job, then remove it from the jobList
88
-	 *
89
-	 * @param JobList $jobList
90
-	 * @param ILogger|null $logger
91
-	 */
92
-	public function execute($jobList, ILogger $logger = null) {
93
-
94
-		if ($this->shouldRun($this->argument)) {
95
-			parent::execute($jobList, $logger);
96
-			$jobList->remove($this, $this->argument);
97
-			if ($this->retainJob) {
98
-				$this->reAddJob($jobList, $this->argument);
99
-			}
100
-		}
101
-	}
102
-
103
-	protected function run($argument) {
104
-		$remote = $argument['remote'];
105
-		$remoteId = $argument['remoteId'];
106
-		$token = $argument['token'];
107
-		$action = $argument['action'];
108
-		$data = json_decode($argument['data'], true);
109
-		$try = (int)$argument['try'] + 1;
110
-
111
-		$result = $this->notifications->sendUpdateToRemote($remote, $remoteId, $token, $action, $data, $try);
112
-
113
-		if ($result === true || $try > $this->maxTry) {
114
-			$this->retainJob = false;
115
-		}
116
-	}
117
-
118
-	/**
119
-	 * re-add background job with new arguments
120
-	 *
121
-	 * @param IJobList $jobList
122
-	 * @param array $argument
123
-	 */
124
-	protected function reAddJob(IJobList $jobList, array $argument) {
125
-		$jobList->add(RetryJob::class,
126
-			[
127
-				'remote' => $argument['remote'],
128
-				'remoteId' => $argument['remoteId'],
129
-				'token' => $argument['token'],
130
-				'data' => $argument['data'],
131
-				'action' => $argument['action'],
132
-				'try' => (int)$argument['try'] + 1,
133
-				'lastRun' => time()
134
-			]
135
-		);
136
-	}
137
-
138
-	/**
139
-	 * test if it is time for the next run
140
-	 *
141
-	 * @param array $argument
142
-	 * @return bool
143
-	 */
144
-	protected function shouldRun(array $argument) {
145
-		$lastRun = (int)$argument['lastRun'];
146
-		return ((time() - $lastRun) > $this->interval);
147
-	}
48
+    /** @var  bool */
49
+    private $retainJob = true;
50
+
51
+    /** @var Notifications */
52
+    private $notifications;
53
+
54
+    /** @var int max number of attempts to send the request */
55
+    private $maxTry = 20;
56
+
57
+    /** @var int how much time should be between two tries (10 minutes) */
58
+    private $interval = 600;
59
+
60
+    /**
61
+     * UnShare constructor.
62
+     *
63
+     * @param Notifications $notifications
64
+     */
65
+    public function __construct(Notifications $notifications = null) {
66
+        if ($notifications) {
67
+            $this->notifications = $notifications;
68
+        } else {
69
+            $addressHandler = new AddressHandler(
70
+                \OC::$server->getURLGenerator(),
71
+                \OC::$server->getL10N('federatedfilesharing'),
72
+                \OC::$server->getCloudIdManager()
73
+            );
74
+            $this->notifications = new Notifications(
75
+                $addressHandler,
76
+                \OC::$server->getHTTPClientService(),
77
+                \OC::$server->query(\OCP\OCS\IDiscoveryService::class),
78
+                \OC::$server->getJobList(),
79
+                \OC::$server->getCloudFederationProviderManager(),
80
+                \OC::$server->getCloudFederationFactory()
81
+            );
82
+        }
83
+
84
+    }
85
+
86
+    /**
87
+     * run the job, then remove it from the jobList
88
+     *
89
+     * @param JobList $jobList
90
+     * @param ILogger|null $logger
91
+     */
92
+    public function execute($jobList, ILogger $logger = null) {
93
+
94
+        if ($this->shouldRun($this->argument)) {
95
+            parent::execute($jobList, $logger);
96
+            $jobList->remove($this, $this->argument);
97
+            if ($this->retainJob) {
98
+                $this->reAddJob($jobList, $this->argument);
99
+            }
100
+        }
101
+    }
102
+
103
+    protected function run($argument) {
104
+        $remote = $argument['remote'];
105
+        $remoteId = $argument['remoteId'];
106
+        $token = $argument['token'];
107
+        $action = $argument['action'];
108
+        $data = json_decode($argument['data'], true);
109
+        $try = (int)$argument['try'] + 1;
110
+
111
+        $result = $this->notifications->sendUpdateToRemote($remote, $remoteId, $token, $action, $data, $try);
112
+
113
+        if ($result === true || $try > $this->maxTry) {
114
+            $this->retainJob = false;
115
+        }
116
+    }
117
+
118
+    /**
119
+     * re-add background job with new arguments
120
+     *
121
+     * @param IJobList $jobList
122
+     * @param array $argument
123
+     */
124
+    protected function reAddJob(IJobList $jobList, array $argument) {
125
+        $jobList->add(RetryJob::class,
126
+            [
127
+                'remote' => $argument['remote'],
128
+                'remoteId' => $argument['remoteId'],
129
+                'token' => $argument['token'],
130
+                'data' => $argument['data'],
131
+                'action' => $argument['action'],
132
+                'try' => (int)$argument['try'] + 1,
133
+                'lastRun' => time()
134
+            ]
135
+        );
136
+    }
137
+
138
+    /**
139
+     * test if it is time for the next run
140
+     *
141
+     * @param array $argument
142
+     * @return bool
143
+     */
144
+    protected function shouldRun(array $argument) {
145
+        $lastRun = (int)$argument['lastRun'];
146
+        return ((time() - $lastRun) > $this->interval);
147
+    }
148 148
 
149 149
 }
Please login to merge, or discard this patch.
lib/private/Share20/ProviderFactory.php 1 patch
Indentation   +224 added lines, -224 removed lines patch added patch discarded remove patch
@@ -48,235 +48,235 @@
 block discarded – undo
48 48
  */
49 49
 class ProviderFactory implements IProviderFactory {
50 50
 
51
-	/** @var IServerContainer */
52
-	private $serverContainer;
53
-	/** @var DefaultShareProvider */
54
-	private $defaultProvider = null;
55
-	/** @var FederatedShareProvider */
56
-	private $federatedProvider = null;
57
-	/** @var  ShareByMailProvider */
58
-	private $shareByMailProvider;
59
-	/** @var  \OCA\Circles\ShareByCircleProvider */
60
-	private $shareByCircleProvider = null;
61
-	/** @var bool */
62
-	private $circlesAreNotAvailable = false;
63
-
64
-	/**
65
-	 * IProviderFactory constructor.
66
-	 *
67
-	 * @param IServerContainer $serverContainer
68
-	 */
69
-	public function __construct(IServerContainer $serverContainer) {
70
-		$this->serverContainer = $serverContainer;
71
-	}
72
-
73
-	/**
74
-	 * Create the default share provider.
75
-	 *
76
-	 * @return DefaultShareProvider
77
-	 */
78
-	protected function defaultShareProvider() {
79
-		if ($this->defaultProvider === null) {
80
-			$this->defaultProvider = new DefaultShareProvider(
81
-				$this->serverContainer->getDatabaseConnection(),
82
-				$this->serverContainer->getUserManager(),
83
-				$this->serverContainer->getGroupManager(),
84
-				$this->serverContainer->getLazyRootFolder()
85
-			);
86
-		}
87
-
88
-		return $this->defaultProvider;
89
-	}
90
-
91
-	/**
92
-	 * Create the federated share provider
93
-	 *
94
-	 * @return FederatedShareProvider
95
-	 */
96
-	protected function federatedShareProvider() {
97
-		if ($this->federatedProvider === null) {
98
-			/*
51
+    /** @var IServerContainer */
52
+    private $serverContainer;
53
+    /** @var DefaultShareProvider */
54
+    private $defaultProvider = null;
55
+    /** @var FederatedShareProvider */
56
+    private $federatedProvider = null;
57
+    /** @var  ShareByMailProvider */
58
+    private $shareByMailProvider;
59
+    /** @var  \OCA\Circles\ShareByCircleProvider */
60
+    private $shareByCircleProvider = null;
61
+    /** @var bool */
62
+    private $circlesAreNotAvailable = false;
63
+
64
+    /**
65
+     * IProviderFactory constructor.
66
+     *
67
+     * @param IServerContainer $serverContainer
68
+     */
69
+    public function __construct(IServerContainer $serverContainer) {
70
+        $this->serverContainer = $serverContainer;
71
+    }
72
+
73
+    /**
74
+     * Create the default share provider.
75
+     *
76
+     * @return DefaultShareProvider
77
+     */
78
+    protected function defaultShareProvider() {
79
+        if ($this->defaultProvider === null) {
80
+            $this->defaultProvider = new DefaultShareProvider(
81
+                $this->serverContainer->getDatabaseConnection(),
82
+                $this->serverContainer->getUserManager(),
83
+                $this->serverContainer->getGroupManager(),
84
+                $this->serverContainer->getLazyRootFolder()
85
+            );
86
+        }
87
+
88
+        return $this->defaultProvider;
89
+    }
90
+
91
+    /**
92
+     * Create the federated share provider
93
+     *
94
+     * @return FederatedShareProvider
95
+     */
96
+    protected function federatedShareProvider() {
97
+        if ($this->federatedProvider === null) {
98
+            /*
99 99
 			 * Check if the app is enabled
100 100
 			 */
101
-			$appManager = $this->serverContainer->getAppManager();
102
-			if (!$appManager->isEnabledForUser('federatedfilesharing')) {
103
-				return null;
104
-			}
101
+            $appManager = $this->serverContainer->getAppManager();
102
+            if (!$appManager->isEnabledForUser('federatedfilesharing')) {
103
+                return null;
104
+            }
105 105
 
106
-			/*
106
+            /*
107 107
 			 * TODO: add factory to federated sharing app
108 108
 			 */
109
-			$l = $this->serverContainer->getL10N('federatedfilessharing');
110
-			$addressHandler = new AddressHandler(
111
-				$this->serverContainer->getURLGenerator(),
112
-				$l,
113
-				$this->serverContainer->getCloudIdManager()
114
-			);
115
-			$notifications = new Notifications(
116
-				$addressHandler,
117
-				$this->serverContainer->getHTTPClientService(),
118
-				$this->serverContainer->query(\OCP\OCS\IDiscoveryService::class),
119
-				$this->serverContainer->getJobList(),
120
-				\OC::$server->getCloudFederationProviderManager(),
121
-				\OC::$server->getCloudFederationFactory()
122
-			);
123
-			$tokenHandler = new TokenHandler(
124
-				$this->serverContainer->getSecureRandom()
125
-			);
126
-
127
-			$this->federatedProvider = new FederatedShareProvider(
128
-				$this->serverContainer->getDatabaseConnection(),
129
-				$addressHandler,
130
-				$notifications,
131
-				$tokenHandler,
132
-				$l,
133
-				$this->serverContainer->getLogger(),
134
-				$this->serverContainer->getLazyRootFolder(),
135
-				$this->serverContainer->getConfig(),
136
-				$this->serverContainer->getUserManager(),
137
-				$this->serverContainer->getCloudIdManager(),
138
-				$this->serverContainer->getGlobalScaleConfig()
139
-			);
140
-		}
141
-
142
-		return $this->federatedProvider;
143
-	}
144
-
145
-	/**
146
-	 * Create the federated share provider
147
-	 *
148
-	 * @return ShareByMailProvider
149
-	 */
150
-	protected function getShareByMailProvider() {
151
-		if ($this->shareByMailProvider === null) {
152
-			/*
109
+            $l = $this->serverContainer->getL10N('federatedfilessharing');
110
+            $addressHandler = new AddressHandler(
111
+                $this->serverContainer->getURLGenerator(),
112
+                $l,
113
+                $this->serverContainer->getCloudIdManager()
114
+            );
115
+            $notifications = new Notifications(
116
+                $addressHandler,
117
+                $this->serverContainer->getHTTPClientService(),
118
+                $this->serverContainer->query(\OCP\OCS\IDiscoveryService::class),
119
+                $this->serverContainer->getJobList(),
120
+                \OC::$server->getCloudFederationProviderManager(),
121
+                \OC::$server->getCloudFederationFactory()
122
+            );
123
+            $tokenHandler = new TokenHandler(
124
+                $this->serverContainer->getSecureRandom()
125
+            );
126
+
127
+            $this->federatedProvider = new FederatedShareProvider(
128
+                $this->serverContainer->getDatabaseConnection(),
129
+                $addressHandler,
130
+                $notifications,
131
+                $tokenHandler,
132
+                $l,
133
+                $this->serverContainer->getLogger(),
134
+                $this->serverContainer->getLazyRootFolder(),
135
+                $this->serverContainer->getConfig(),
136
+                $this->serverContainer->getUserManager(),
137
+                $this->serverContainer->getCloudIdManager(),
138
+                $this->serverContainer->getGlobalScaleConfig()
139
+            );
140
+        }
141
+
142
+        return $this->federatedProvider;
143
+    }
144
+
145
+    /**
146
+     * Create the federated share provider
147
+     *
148
+     * @return ShareByMailProvider
149
+     */
150
+    protected function getShareByMailProvider() {
151
+        if ($this->shareByMailProvider === null) {
152
+            /*
153 153
 			 * Check if the app is enabled
154 154
 			 */
155
-			$appManager = $this->serverContainer->getAppManager();
156
-			if (!$appManager->isEnabledForUser('sharebymail')) {
157
-				return null;
158
-			}
159
-
160
-			$settingsManager = new SettingsManager($this->serverContainer->getConfig());
161
-
162
-			$this->shareByMailProvider = new ShareByMailProvider(
163
-				$this->serverContainer->getDatabaseConnection(),
164
-				$this->serverContainer->getSecureRandom(),
165
-				$this->serverContainer->getUserManager(),
166
-				$this->serverContainer->getLazyRootFolder(),
167
-				$this->serverContainer->getL10N('sharebymail'),
168
-				$this->serverContainer->getLogger(),
169
-				$this->serverContainer->getMailer(),
170
-				$this->serverContainer->getURLGenerator(),
171
-				$this->serverContainer->getActivityManager(),
172
-				$settingsManager,
173
-				$this->serverContainer->query(Defaults::class),
174
-				$this->serverContainer->getHasher(),
175
-				$this->serverContainer->query(CapabilitiesManager::class)
176
-			);
177
-		}
178
-
179
-		return $this->shareByMailProvider;
180
-	}
181
-
182
-
183
-	/**
184
-	 * Create the circle share provider
185
-	 *
186
-	 * @return FederatedShareProvider
187
-	 *
188
-	 * @suppress PhanUndeclaredClassMethod
189
-	 */
190
-	protected function getShareByCircleProvider() {
191
-
192
-		if ($this->circlesAreNotAvailable) {
193
-			return null;
194
-		}
195
-
196
-		if (!$this->serverContainer->getAppManager()->isEnabledForUser('circles') ||
197
-			!class_exists('\OCA\Circles\ShareByCircleProvider')
198
-		) {
199
-			$this->circlesAreNotAvailable = true;
200
-			return null;
201
-		}
202
-
203
-		if ($this->shareByCircleProvider === null) {
204
-
205
-			$this->shareByCircleProvider = new \OCA\Circles\ShareByCircleProvider(
206
-				$this->serverContainer->getDatabaseConnection(),
207
-				$this->serverContainer->getSecureRandom(),
208
-				$this->serverContainer->getUserManager(),
209
-				$this->serverContainer->getLazyRootFolder(),
210
-				$this->serverContainer->getL10N('circles'),
211
-				$this->serverContainer->getLogger(),
212
-				$this->serverContainer->getURLGenerator()
213
-			);
214
-		}
215
-
216
-		return $this->shareByCircleProvider;
217
-	}
218
-
219
-
220
-	/**
221
-	 * @inheritdoc
222
-	 */
223
-	public function getProvider($id) {
224
-		$provider = null;
225
-		if ($id === 'ocinternal') {
226
-			$provider = $this->defaultShareProvider();
227
-		} else if ($id === 'ocFederatedSharing') {
228
-			$provider = $this->federatedShareProvider();
229
-		} else if ($id === 'ocMailShare') {
230
-			$provider = $this->getShareByMailProvider();
231
-		} else if ($id === 'ocCircleShare') {
232
-			$provider = $this->getShareByCircleProvider();
233
-		}
234
-
235
-		if ($provider === null) {
236
-			throw new ProviderException('No provider with id .' . $id . ' found.');
237
-		}
238
-
239
-		return $provider;
240
-	}
241
-
242
-	/**
243
-	 * @inheritdoc
244
-	 */
245
-	public function getProviderForType($shareType) {
246
-		$provider = null;
247
-
248
-		if ($shareType === \OCP\Share::SHARE_TYPE_USER ||
249
-			$shareType === \OCP\Share::SHARE_TYPE_GROUP ||
250
-			$shareType === \OCP\Share::SHARE_TYPE_LINK
251
-		) {
252
-			$provider = $this->defaultShareProvider();
253
-		} else if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) {
254
-			$provider = $this->federatedShareProvider();
255
-		} else if ($shareType === \OCP\Share::SHARE_TYPE_EMAIL) {
256
-			$provider = $this->getShareByMailProvider();
257
-		} else if ($shareType === \OCP\Share::SHARE_TYPE_CIRCLE) {
258
-			$provider = $this->getShareByCircleProvider();
259
-		}
260
-
261
-
262
-		if ($provider === null) {
263
-			throw new ProviderException('No share provider for share type ' . $shareType);
264
-		}
265
-
266
-		return $provider;
267
-	}
268
-
269
-	public function getAllProviders() {
270
-		$shares = [$this->defaultShareProvider(), $this->federatedShareProvider()];
271
-		$shareByMail = $this->getShareByMailProvider();
272
-		if ($shareByMail !== null) {
273
-			$shares[] = $shareByMail;
274
-		}
275
-		$shareByCircle = $this->getShareByCircleProvider();
276
-		if ($shareByCircle !== null) {
277
-			$shares[] = $shareByCircle;
278
-		}
279
-
280
-		return $shares;
281
-	}
155
+            $appManager = $this->serverContainer->getAppManager();
156
+            if (!$appManager->isEnabledForUser('sharebymail')) {
157
+                return null;
158
+            }
159
+
160
+            $settingsManager = new SettingsManager($this->serverContainer->getConfig());
161
+
162
+            $this->shareByMailProvider = new ShareByMailProvider(
163
+                $this->serverContainer->getDatabaseConnection(),
164
+                $this->serverContainer->getSecureRandom(),
165
+                $this->serverContainer->getUserManager(),
166
+                $this->serverContainer->getLazyRootFolder(),
167
+                $this->serverContainer->getL10N('sharebymail'),
168
+                $this->serverContainer->getLogger(),
169
+                $this->serverContainer->getMailer(),
170
+                $this->serverContainer->getURLGenerator(),
171
+                $this->serverContainer->getActivityManager(),
172
+                $settingsManager,
173
+                $this->serverContainer->query(Defaults::class),
174
+                $this->serverContainer->getHasher(),
175
+                $this->serverContainer->query(CapabilitiesManager::class)
176
+            );
177
+        }
178
+
179
+        return $this->shareByMailProvider;
180
+    }
181
+
182
+
183
+    /**
184
+     * Create the circle share provider
185
+     *
186
+     * @return FederatedShareProvider
187
+     *
188
+     * @suppress PhanUndeclaredClassMethod
189
+     */
190
+    protected function getShareByCircleProvider() {
191
+
192
+        if ($this->circlesAreNotAvailable) {
193
+            return null;
194
+        }
195
+
196
+        if (!$this->serverContainer->getAppManager()->isEnabledForUser('circles') ||
197
+            !class_exists('\OCA\Circles\ShareByCircleProvider')
198
+        ) {
199
+            $this->circlesAreNotAvailable = true;
200
+            return null;
201
+        }
202
+
203
+        if ($this->shareByCircleProvider === null) {
204
+
205
+            $this->shareByCircleProvider = new \OCA\Circles\ShareByCircleProvider(
206
+                $this->serverContainer->getDatabaseConnection(),
207
+                $this->serverContainer->getSecureRandom(),
208
+                $this->serverContainer->getUserManager(),
209
+                $this->serverContainer->getLazyRootFolder(),
210
+                $this->serverContainer->getL10N('circles'),
211
+                $this->serverContainer->getLogger(),
212
+                $this->serverContainer->getURLGenerator()
213
+            );
214
+        }
215
+
216
+        return $this->shareByCircleProvider;
217
+    }
218
+
219
+
220
+    /**
221
+     * @inheritdoc
222
+     */
223
+    public function getProvider($id) {
224
+        $provider = null;
225
+        if ($id === 'ocinternal') {
226
+            $provider = $this->defaultShareProvider();
227
+        } else if ($id === 'ocFederatedSharing') {
228
+            $provider = $this->federatedShareProvider();
229
+        } else if ($id === 'ocMailShare') {
230
+            $provider = $this->getShareByMailProvider();
231
+        } else if ($id === 'ocCircleShare') {
232
+            $provider = $this->getShareByCircleProvider();
233
+        }
234
+
235
+        if ($provider === null) {
236
+            throw new ProviderException('No provider with id .' . $id . ' found.');
237
+        }
238
+
239
+        return $provider;
240
+    }
241
+
242
+    /**
243
+     * @inheritdoc
244
+     */
245
+    public function getProviderForType($shareType) {
246
+        $provider = null;
247
+
248
+        if ($shareType === \OCP\Share::SHARE_TYPE_USER ||
249
+            $shareType === \OCP\Share::SHARE_TYPE_GROUP ||
250
+            $shareType === \OCP\Share::SHARE_TYPE_LINK
251
+        ) {
252
+            $provider = $this->defaultShareProvider();
253
+        } else if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) {
254
+            $provider = $this->federatedShareProvider();
255
+        } else if ($shareType === \OCP\Share::SHARE_TYPE_EMAIL) {
256
+            $provider = $this->getShareByMailProvider();
257
+        } else if ($shareType === \OCP\Share::SHARE_TYPE_CIRCLE) {
258
+            $provider = $this->getShareByCircleProvider();
259
+        }
260
+
261
+
262
+        if ($provider === null) {
263
+            throw new ProviderException('No share provider for share type ' . $shareType);
264
+        }
265
+
266
+        return $provider;
267
+    }
268
+
269
+    public function getAllProviders() {
270
+        $shares = [$this->defaultShareProvider(), $this->federatedShareProvider()];
271
+        $shareByMail = $this->getShareByMailProvider();
272
+        if ($shareByMail !== null) {
273
+            $shares[] = $shareByMail;
274
+        }
275
+        $shareByCircle = $this->getShareByCircleProvider();
276
+        if ($shareByCircle !== null) {
277
+            $shares[] = $shareByCircle;
278
+        }
279
+
280
+        return $shares;
281
+    }
282 282
 }
Please login to merge, or discard this patch.
apps/files_sharing/lib/AppInfo/Application.php 1 patch
Indentation   +119 added lines, -119 removed lines patch added patch discarded remove patch
@@ -45,136 +45,136 @@
 block discarded – undo
45 45
 use OCA\Files_Sharing\External\Manager;
46 46
 
47 47
 class Application extends App {
48
-	public function __construct(array $urlParams = array()) {
49
-		parent::__construct('files_sharing', $urlParams);
48
+    public function __construct(array $urlParams = array()) {
49
+        parent::__construct('files_sharing', $urlParams);
50 50
 
51
-		$container = $this->getContainer();
52
-		/** @var IServerContainer $server */
53
-		$server = $container->getServer();
51
+        $container = $this->getContainer();
52
+        /** @var IServerContainer $server */
53
+        $server = $container->getServer();
54 54
 
55
-		/**
56
-		 * Controllers
57
-		 */
58
-		$container->registerService('ShareController', function (SimpleContainer $c) use ($server) {
59
-			$federatedSharingApp = new \OCA\FederatedFileSharing\AppInfo\Application();
60
-			return new ShareController(
61
-				$c->query('AppName'),
62
-				$c->query('Request'),
63
-				$server->getConfig(),
64
-				$server->getURLGenerator(),
65
-				$server->getUserManager(),
66
-				$server->getLogger(),
67
-				$server->getActivityManager(),
68
-				$server->getShareManager(),
69
-				$server->getSession(),
70
-				$server->getPreviewManager(),
71
-				$server->getRootFolder(),
72
-				$federatedSharingApp->getFederatedShareProvider(),
73
-				$server->getEventDispatcher(),
74
-				$server->getL10N($c->query('AppName')),
75
-				$server->query(Defaults::class)
76
-			);
77
-		});
78
-		$container->registerService('ExternalSharesController', function (SimpleContainer $c) {
79
-			return new ExternalSharesController(
80
-				$c->query('AppName'),
81
-				$c->query('Request'),
82
-				$c->query('ExternalManager'),
83
-				$c->query('HttpClientService')
84
-			);
85
-		});
55
+        /**
56
+         * Controllers
57
+         */
58
+        $container->registerService('ShareController', function (SimpleContainer $c) use ($server) {
59
+            $federatedSharingApp = new \OCA\FederatedFileSharing\AppInfo\Application();
60
+            return new ShareController(
61
+                $c->query('AppName'),
62
+                $c->query('Request'),
63
+                $server->getConfig(),
64
+                $server->getURLGenerator(),
65
+                $server->getUserManager(),
66
+                $server->getLogger(),
67
+                $server->getActivityManager(),
68
+                $server->getShareManager(),
69
+                $server->getSession(),
70
+                $server->getPreviewManager(),
71
+                $server->getRootFolder(),
72
+                $federatedSharingApp->getFederatedShareProvider(),
73
+                $server->getEventDispatcher(),
74
+                $server->getL10N($c->query('AppName')),
75
+                $server->query(Defaults::class)
76
+            );
77
+        });
78
+        $container->registerService('ExternalSharesController', function (SimpleContainer $c) {
79
+            return new ExternalSharesController(
80
+                $c->query('AppName'),
81
+                $c->query('Request'),
82
+                $c->query('ExternalManager'),
83
+                $c->query('HttpClientService')
84
+            );
85
+        });
86 86
 
87
-		/**
88
-		 * Core class wrappers
89
-		 */
90
-		$container->registerService('HttpClientService', function (SimpleContainer $c) use ($server) {
91
-			return $server->getHTTPClientService();
92
-		});
93
-		$container->registerService(ICloudIdManager::class, function (SimpleContainer $c) use ($server) {
94
-			return $server->getCloudIdManager();
95
-		});
96
-		$container->registerService('ExternalManager', function (SimpleContainer $c) use ($server) {
97
-			$user = $server->getUserSession()->getUser();
98
-			$uid = $user ? $user->getUID() : null;
99
-			return new \OCA\Files_Sharing\External\Manager(
100
-				$server->getDatabaseConnection(),
101
-				\OC\Files\Filesystem::getMountManager(),
102
-				\OC\Files\Filesystem::getLoader(),
103
-				$server->getHTTPClientService(),
104
-				$server->getNotificationManager(),
105
-				$server->query(\OCP\OCS\IDiscoveryService::class),
106
-				$server->getCloudFederationProviderManager(),
107
-				$server->getCloudFederationFactory(),
108
-				$uid
109
-			);
110
-		});
111
-		$container->registerAlias(Manager::class, 'ExternalManager');
87
+        /**
88
+         * Core class wrappers
89
+         */
90
+        $container->registerService('HttpClientService', function (SimpleContainer $c) use ($server) {
91
+            return $server->getHTTPClientService();
92
+        });
93
+        $container->registerService(ICloudIdManager::class, function (SimpleContainer $c) use ($server) {
94
+            return $server->getCloudIdManager();
95
+        });
96
+        $container->registerService('ExternalManager', function (SimpleContainer $c) use ($server) {
97
+            $user = $server->getUserSession()->getUser();
98
+            $uid = $user ? $user->getUID() : null;
99
+            return new \OCA\Files_Sharing\External\Manager(
100
+                $server->getDatabaseConnection(),
101
+                \OC\Files\Filesystem::getMountManager(),
102
+                \OC\Files\Filesystem::getLoader(),
103
+                $server->getHTTPClientService(),
104
+                $server->getNotificationManager(),
105
+                $server->query(\OCP\OCS\IDiscoveryService::class),
106
+                $server->getCloudFederationProviderManager(),
107
+                $server->getCloudFederationFactory(),
108
+                $uid
109
+            );
110
+        });
111
+        $container->registerAlias(Manager::class, 'ExternalManager');
112 112
 
113
-		/**
114
-		 * Middleware
115
-		 */
116
-		$container->registerService('SharingCheckMiddleware', function (SimpleContainer $c) use ($server) {
117
-			return new SharingCheckMiddleware(
118
-				$c->query('AppName'),
119
-				$server->getConfig(),
120
-				$server->getAppManager(),
121
-				$c['ControllerMethodReflector'],
122
-				$server->getShareManager(),
123
-				$server->getRequest()
124
-			);
125
-		});
113
+        /**
114
+         * Middleware
115
+         */
116
+        $container->registerService('SharingCheckMiddleware', function (SimpleContainer $c) use ($server) {
117
+            return new SharingCheckMiddleware(
118
+                $c->query('AppName'),
119
+                $server->getConfig(),
120
+                $server->getAppManager(),
121
+                $c['ControllerMethodReflector'],
122
+                $server->getShareManager(),
123
+                $server->getRequest()
124
+            );
125
+        });
126 126
 
127
-		$container->registerService('OCSShareAPIMiddleware', function (SimpleContainer $c) use ($server) {
128
-			return new OCSShareAPIMiddleware(
129
-				$server->getShareManager(),
130
-				$server->getL10N($c->query('AppName'))
131
-			);
132
-		});
127
+        $container->registerService('OCSShareAPIMiddleware', function (SimpleContainer $c) use ($server) {
128
+            return new OCSShareAPIMiddleware(
129
+                $server->getShareManager(),
130
+                $server->getL10N($c->query('AppName'))
131
+            );
132
+        });
133 133
 
134
-		$container->registerService(ShareInfoMiddleware::class, function () use ($server) {
135
-			return new ShareInfoMiddleware(
136
-				$server->getShareManager()
137
-			);
138
-		});
134
+        $container->registerService(ShareInfoMiddleware::class, function () use ($server) {
135
+            return new ShareInfoMiddleware(
136
+                $server->getShareManager()
137
+            );
138
+        });
139 139
 
140
-		// Execute middlewares
141
-		$container->registerMiddleWare('SharingCheckMiddleware');
142
-		$container->registerMiddleWare('OCSShareAPIMiddleware');
143
-		$container->registerMiddleWare(ShareInfoMiddleware::class);
140
+        // Execute middlewares
141
+        $container->registerMiddleWare('SharingCheckMiddleware');
142
+        $container->registerMiddleWare('OCSShareAPIMiddleware');
143
+        $container->registerMiddleWare(ShareInfoMiddleware::class);
144 144
 
145
-		$container->registerService('MountProvider', function (IContainer $c) {
146
-			/** @var \OCP\IServerContainer $server */
147
-			$server = $c->query('ServerContainer');
148
-			return new MountProvider(
149
-				$server->getConfig(),
150
-				$server->getShareManager(),
151
-				$server->getLogger()
152
-			);
153
-		});
145
+        $container->registerService('MountProvider', function (IContainer $c) {
146
+            /** @var \OCP\IServerContainer $server */
147
+            $server = $c->query('ServerContainer');
148
+            return new MountProvider(
149
+                $server->getConfig(),
150
+                $server->getShareManager(),
151
+                $server->getLogger()
152
+            );
153
+        });
154 154
 
155
-		$container->registerService('ExternalMountProvider', function (IContainer $c) {
156
-			/** @var \OCP\IServerContainer $server */
157
-			$server = $c->query('ServerContainer');
158
-			return new \OCA\Files_Sharing\External\MountProvider(
159
-				$server->getDatabaseConnection(),
160
-				function() use ($c) {
161
-					return $c->query('ExternalManager');
162
-				},
163
-				$server->getCloudIdManager()
164
-			);
165
-		});
155
+        $container->registerService('ExternalMountProvider', function (IContainer $c) {
156
+            /** @var \OCP\IServerContainer $server */
157
+            $server = $c->query('ServerContainer');
158
+            return new \OCA\Files_Sharing\External\MountProvider(
159
+                $server->getDatabaseConnection(),
160
+                function() use ($c) {
161
+                    return $c->query('ExternalManager');
162
+                },
163
+                $server->getCloudIdManager()
164
+            );
165
+        });
166 166
 
167
-		/*
167
+        /*
168 168
 		 * Register capabilities
169 169
 		 */
170
-		$container->registerCapability(Capabilities::class);
171
-	}
170
+        $container->registerCapability(Capabilities::class);
171
+    }
172 172
 
173
-	public function registerMountProviders() {
174
-		/** @var \OCP\IServerContainer $server */
175
-		$server = $this->getContainer()->query('ServerContainer');
176
-		$mountProviderCollection = $server->getMountProviderCollection();
177
-		$mountProviderCollection->registerProvider($this->getContainer()->query('MountProvider'));
178
-		$mountProviderCollection->registerProvider($this->getContainer()->query('ExternalMountProvider'));
179
-	}
173
+    public function registerMountProviders() {
174
+        /** @var \OCP\IServerContainer $server */
175
+        $server = $this->getContainer()->query('ServerContainer');
176
+        $mountProviderCollection = $server->getMountProviderCollection();
177
+        $mountProviderCollection->registerProvider($this->getContainer()->query('MountProvider'));
178
+        $mountProviderCollection->registerProvider($this->getContainer()->query('ExternalMountProvider'));
179
+    }
180 180
 }
Please login to merge, or discard this patch.