summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorBjoern Schiessle <bjoern@schiessle.org>2018-05-28 17:13:19 +0200
committerBjoern Schiessle <bjoern@schiessle.org>2018-07-02 11:29:28 +0200
commitbbce8c3ea1c73726f233961fe7bdb16b8a08bb67 (patch)
treee3f345e7e2e6f5d21947013331af1f83593fb20a /apps
parentdaba042d269bfd701c78e014c0ad7794975d2133 (diff)
downloadnextcloud-server-bbce8c3ea1c73726f233961fe7bdb16b8a08bb67.tar.gz
nextcloud-server-bbce8c3ea1c73726f233961fe7bdb16b8a08bb67.zip
adjust to latest api version
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
Diffstat (limited to 'apps')
-rw-r--r--apps/cloud_federation_api/lib/Capabilities.php6
-rw-r--r--apps/cloud_federation_api/lib/Controller/RequestHandlerController.php31
-rw-r--r--apps/federatedfilesharing/lib/Controller/RequestHandlerController.php2
-rw-r--r--apps/federatedfilesharing/lib/Notifications.php2
-rw-r--r--apps/federatedfilesharing/lib/ocm/CloudFederationProviderFiles.php9
-rw-r--r--apps/files_sharing/lib/External/Manager.php12
6 files changed, 36 insertions, 26 deletions
diff --git a/apps/cloud_federation_api/lib/Capabilities.php b/apps/cloud_federation_api/lib/Capabilities.php
index 15417f85222..88b8c7b391b 100644
--- a/apps/cloud_federation_api/lib/Capabilities.php
+++ b/apps/cloud_federation_api/lib/Capabilities.php
@@ -46,9 +46,9 @@ class Capabilities implements ICapability {
$capabilities = ['ocm' =>
[
'enabled' => true,
- 'api-version' => '1.0-proposal1',
- 'end-point' => substr($url, 0, strrpos($url, '/')),
- 'share-types' => ['file'],
+ 'apiVersion' => '1.0-proposal1',
+ 'endPoint' => substr($url, 0, strrpos($url, '/')),
+ 'shareTypes' => ['file'],
'protocol' => [
'webdav' => '/public.php/webdav/',
]
diff --git a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
index 319380ec3c3..5ec1496ce6b 100644
--- a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
+++ b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
@@ -105,16 +105,16 @@ class RequestHandlerController extends Controller {
* @param string $owner provider specific UID of the user who owns the resource
* @param string $ownerDisplayName display name of the user who shared the item
* @param string $sharedBy provider specific UID of the user who shared the resource
- * @param $sharedByDisplayName display name of the user who shared the resource
+ * @param string $sharedByDisplayName display name of the user who shared the resource
+ * @param string $sharedSecret use to authenticate accross servers
* @param array $protocol (e,.g. ['name' => 'webdav', 'options' => ['username' => 'john', 'permissions' => 31]])
* @param string $shareType ('group' or 'user' share)
* @param $resourceType ('file', 'calendar',...)
* @return Http\DataResponse|JSONResponse
*
- * Example: curl -H "Content-Type: application/json" -X POST -d '{"shareWith":"admin1@serve1","name":"welcome server2.txt","description":"desc","providerId":"2","owner":"admin2@http://localhost/server2","ownerDisplayName":"admin2 display","shareType":"user","resourceType":"file","protocol":{"name":"webdav","options":{"access_token":"8Lrd1FVEREthux7","permissions":31}}}' http://localhost/server/index.php/ocm/shares
+ * Example: curl -H "Content-Type: application/json" -X POST -d '{"shareWith":"admin1@serve1","name":"welcome server2.txt","description":"desc","providerId":"2","owner":"admin2@http://localhost/server2","ownerDisplayName":"admin2 display","shareType":"user","resourceType":"file","protocol":{"name":"webdav","options":{"sharedSecret":"secret","permissions":"webdav-property"}}}' http://localhost/server/index.php/ocm/shares
*/
public function addShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $protocol, $shareType, $resourceType) {
-
if (!$this->config->incomingRequestsEnabled()) {
return new JSONResponse(
['message' => 'This server doesn\'t support outgoing federated shares'],
@@ -132,7 +132,8 @@ class RequestHandlerController extends Controller {
!is_array($protocol) ||
!isset($protocol['name']) ||
!isset ($protocol['options']) ||
- !is_array($protocol['options'])
+ !is_array($protocol['options']) ||
+ !isset($protocol['options']['sharedSecret'])
) {
return new JSONResponse(
['message' => 'Missing arguments'],
@@ -163,7 +164,8 @@ class RequestHandlerController extends Controller {
try {
$provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
- $share = $this->factory->getCloudFederationShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $protocol, $shareType, $resourceType);
+ $share = $this->factory->getCloudFederationShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, '', $shareType, $resourceType);
+ $share->setProtocol($protocol);
$id = $provider->shareReceived($share);
} catch (ProviderDoesNotExistsException $e) {
return new JSONResponse(
@@ -191,12 +193,17 @@ class RequestHandlerController extends Controller {
/**
* receive notification about existing share
*
+ * @NoCSRFRequired
+ * @PublicPage
+ * @BruteForceProtection(action=receiveFederatedShareNotification)
+ *
* @param string $notificationType (notification type, e.g. SHARE_ACCEPTED)
* @param string $resourceType (calendar, file, contact,...)
- * @param array $message contain the actual notification, content is defined by cloud federation provider
+ * @param string $providerId id of the share
+ * @param array $notification the actual payload of the notification
* @return JSONResponse
*/
- public function receiveNotification($notificationType, $resourceType, $message) {
+ public function receiveNotification($notificationType, $resourceType, $providerId, array $notification) {
if (!$this->config->incomingRequestsEnabled()) {
return new JSONResponse(
['message' => 'This server doesn\'t support outgoing federated shares'],
@@ -207,7 +214,8 @@ class RequestHandlerController extends Controller {
// check if all required parameters are set
if ($notificationType === null ||
$resourceType === null ||
- !is_array($message)
+ $providerId === null ||
+ !is_array($notification)
) {
return new JSONResponse(
['message' => 'Missing arguments'],
@@ -217,7 +225,7 @@ class RequestHandlerController extends Controller {
try {
$provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
- $provider->notificationReceived($notificationType, $message);
+ $provider->notificationReceived($notificationType, $providerId, $notification);
} catch (ProviderDoesNotExistsException $e) {
return new JSONResponse(
['message' => $e->getMessage()],
@@ -241,10 +249,7 @@ class RequestHandlerController extends Controller {
}
- return new JSONResponse(
- ['id' => $id, 'createdAt' => date()],
- Http::STATUS_CREATED);
-
+ return new JSONResponse([],Http::STATUS_CREATED);
}
diff --git a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
index 2d0a3c528fb..e2cc050d879 100644
--- a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
+++ b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php
@@ -170,7 +170,7 @@ class RequestHandlerController extends OCSController {
$owner,
$sharedByFederatedId,
$sharedBy,
- ['name' => 'webdav', 'options' => ['access_token' => $token]],
+ $token,
'user',
'file'
);
diff --git a/apps/federatedfilesharing/lib/Notifications.php b/apps/federatedfilesharing/lib/Notifications.php
index 65151e34135..e0f8735f900 100644
--- a/apps/federatedfilesharing/lib/Notifications.php
+++ b/apps/federatedfilesharing/lib/Notifications.php
@@ -379,7 +379,7 @@ class Notifications {
$fields['owner'],
$fields['sharedByFederatedId'],
$fields['sharedBy'],
- ['name' => 'webdav', 'options' => ['access_token' => $fields['token'], 'permissions' => ['read', 'write', 'share']]],
+ $fields['token'],
'user',
'file'
);
diff --git a/apps/federatedfilesharing/lib/ocm/CloudFederationProviderFiles.php b/apps/federatedfilesharing/lib/ocm/CloudFederationProviderFiles.php
index 6c5b63b1cd2..e7f6f1b9194 100644
--- a/apps/federatedfilesharing/lib/ocm/CloudFederationProviderFiles.php
+++ b/apps/federatedfilesharing/lib/ocm/CloudFederationProviderFiles.php
@@ -135,7 +135,7 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
list($ownerUid, $remote) = $this->addressHandler->splitUserRemote($share->getOwner());
$remote = $remote;
- $token = isset($protocol['options']['access_token']) ? $protocol['options']['access_token'] : null;
+ $token = $share->getShareSecret();
$name = $share->getResourceName();
$owner = $share->getOwnerDisplayName();
$sharedBy = $share->getSharedByDisplayName();
@@ -234,21 +234,22 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
* notification received from another server
*
* @param string $notificationType (e.g. SHARE_ACCEPTED)
- * @param array $message
+ * @param string $providerId id of the share
+ * @param array $notification payload of the notification
*
* @throws ShareNotFoundException
* @throws ActionNotSupportedException
*
* @since 14.0.0
*/
- public function notificationReceived($notificationType, array $message) {
+ public function notificationReceived($notificationType, $providerId, array $notification) {
switch ($notificationType) {
case 'SHARE_ACCEPTED' :
return;
}
- throw new ActionNotSupportedException($notificationType);
+ throw new ActionNotSupportedException($notification);
}
/**
diff --git a/apps/files_sharing/lib/External/Manager.php b/apps/files_sharing/lib/External/Manager.php
index cb1e947f603..0bbbbea7675 100644
--- a/apps/files_sharing/lib/External/Manager.php
+++ b/apps/files_sharing/lib/External/Manager.php
@@ -324,7 +324,7 @@ class Manager {
*
* @param string $remoteDomain
* @param string $token
- * @param $remoteId
+ * @param $remoteId id of the share
* @param string $feedback
* @return mixed
*/
@@ -332,11 +332,15 @@ class Manager {
switch ($feedback) {
case 'accept':
$notification = $this->cloudFederationFactory->getCloudFederationNotification();
- $notification->setMessage('SHARE_ACCEPTED', 'file',
+ $notification->setMessage(
+ 'SHARE_ACCEPTED',
+ 'file',
+ $remoteId,
[
- 'id' => $remoteId,
- 'access_token' => $token
+ 'sharedSecret' => $token,
+ 'message' => 'Recipient accept the share'
]
+
);
return $this->cloudFederationProviderManager->sendNotification($remoteDomain, $notification);
}