aboutsummaryrefslogtreecommitdiffstats
path: root/apps/cloud_federation_api/lib
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2023-09-05 11:42:48 -0100
committerMaxence Lange <maxence@artificial-owl.com>2023-09-20 08:23:45 -0100
commit8b9e7e235dd7711bba31441e9a8b09dc33f85d38 (patch)
tree3d0d2725d819cfc53c73d198681e8d00178d4a64 /apps/cloud_federation_api/lib
parentd5fc95b661d34899095dc53b363cdb35fa458565 (diff)
downloadnextcloud-server-8b9e7e235dd7711bba31441e9a8b09dc33f85d38.tar.gz
nextcloud-server-8b9e7e235dd7711bba31441e9a8b09dc33f85d38.zip
ocm controller
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
Diffstat (limited to 'apps/cloud_federation_api/lib')
-rw-r--r--apps/cloud_federation_api/lib/Capabilities.php61
-rw-r--r--apps/cloud_federation_api/lib/Controller/RequestHandlerController.php60
2 files changed, 48 insertions, 73 deletions
diff --git a/apps/cloud_federation_api/lib/Capabilities.php b/apps/cloud_federation_api/lib/Capabilities.php
index f1398661ebe..1682effb145 100644
--- a/apps/cloud_federation_api/lib/Capabilities.php
+++ b/apps/cloud_federation_api/lib/Capabilities.php
@@ -1,9 +1,13 @@
<?php
+
+declare(strict_types=1);
+
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Kate Döen <kate.doeen@nextcloud.com>
+ * @author Maxence Lange <maxence@artificial-owl.com>
*
* @license GNU AGPL version 3 or any later version
*
@@ -21,18 +25,22 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+
namespace OCA\CloudFederationAPI;
+use OC\OCM\Model\OCMProvider;
+use OC\OCM\Model\OCMResource;
use OCP\Capabilities\ICapability;
use OCP\IURLGenerator;
+use OCP\OCM\Exceptions\OCMArgumentException;
class Capabilities implements ICapability {
- /** @var IURLGenerator */
- private $urlGenerator;
+ public const API_VERSION = '1.0-proposal1';
- public function __construct(IURLGenerator $urlGenerator) {
- $this->urlGenerator = $urlGenerator;
+ public function __construct(
+ private IURLGenerator $urlGenerator,
+ ) {
}
/**
@@ -46,32 +54,33 @@ class Capabilities implements ICapability {
* resourceTypes: array{
* name: string,
* shareTypes: string[],
- * protocols: array{
- * webdav: string,
- * },
- * }[],
- * },
+ * protocols: array<string, string>
+ * }[],
+ * },
* }
+ * @throws OCMArgumentException
*/
public function getCapabilities() {
$url = $this->urlGenerator->linkToRouteAbsolute('cloud_federation_api.requesthandlercontroller.addShare');
- $capabilities = ['ocm' =>
- [
- 'enabled' => true,
- 'apiVersion' => '1.0-proposal1',
- 'endPoint' => substr($url, 0, strrpos($url, '/')),
- 'resourceTypes' => [
- [
- 'name' => 'file',
- 'shareTypes' => ['user', 'group'],
- 'protocols' => [
- 'webdav' => '/public.php/webdav/',
- ]
- ],
- ]
- ]
- ];
- return $capabilities;
+ $provider = new OCMProvider();
+ $provider->setEnabled(true);
+ $provider->setApiVersion(self::API_VERSION);
+
+ $pos = strrpos($url, '/');
+ if (false === $pos) {
+ throw new OCMArgumentException('generated route should contains a slash character');
+ }
+
+ $provider->setEndPoint(substr($url, 0, $pos));
+
+ $resource = new OCMResource();
+ $resource->setName('file')
+ ->setShareTypes(['user', 'group'])
+ ->setProtocols(['webdav' => '/public.php/webdav/']);
+
+ $provider->setResourceTypes([$resource]);
+
+ return ['ocm' => $provider->jsonSerialize()];
}
}
diff --git a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
index 416dca67160..a10dadbbdce 100644
--- a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
+++ b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php
@@ -4,6 +4,7 @@
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @author Maxence Lange <maxence@artificial-owl.com>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Kate Döen <kate.doeen@nextcloud.com>
*
@@ -55,52 +56,19 @@ use Psr\Log\LoggerInterface;
* @psalm-import-type CloudFederationApiError from ResponseDefinitions
*/
class RequestHandlerController extends Controller {
-
- /** @var LoggerInterface */
- private $logger;
-
- /** @var IUserManager */
- private $userManager;
-
- /** @var IGroupManager */
- private $groupManager;
-
- /** @var IURLGenerator */
- private $urlGenerator;
-
- /** @var ICloudFederationProviderManager */
- private $cloudFederationProviderManager;
-
- /** @var Config */
- private $config;
-
- /** @var ICloudFederationFactory */
- private $factory;
-
- /** @var ICloudIdManager */
- private $cloudIdManager;
-
- public function __construct($appName,
- IRequest $request,
- LoggerInterface $logger,
- IUserManager $userManager,
- IGroupManager $groupManager,
- IURLGenerator $urlGenerator,
- ICloudFederationProviderManager $cloudFederationProviderManager,
- Config $config,
- ICloudFederationFactory $factory,
- ICloudIdManager $cloudIdManager
+ public function __construct(
+ string $appName,
+ IRequest $request,
+ private LoggerInterface $logger,
+ private IUserManager $userManager,
+ private IGroupManager $groupManager,
+ private IURLGenerator $urlGenerator,
+ private ICloudFederationProviderManager $cloudFederationProviderManager,
+ private Config $config,
+ private ICloudFederationFactory $factory,
+ private ICloudIdManager $cloudIdManager
) {
parent::__construct($appName, $request);
-
- $this->logger = $logger;
- $this->userManager = $userManager;
- $this->groupManager = $groupManager;
- $this->urlGenerator = $urlGenerator;
- $this->cloudFederationProviderManager = $cloudFederationProviderManager;
- $this->config = $config;
- $this->factory = $factory;
- $this->cloudIdManager = $cloudIdManager;
}
/**
@@ -128,7 +96,6 @@ class RequestHandlerController extends Controller {
* 501: Share type or the resource type is not supported
*/
public function addShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $protocol, $shareType, $resourceType) {
-
// check if all required parameters are set
if ($shareWith === null ||
$name === null ||
@@ -253,7 +220,6 @@ class RequestHandlerController extends Controller {
* 501: The resource type is not supported
*/
public function receiveNotification($notificationType, $resourceType, $providerId, ?array $notification) {
-
// check if all required parameters are set
if ($notificationType === null ||
$resourceType === null ||
@@ -311,7 +277,7 @@ class RequestHandlerController extends Controller {
);
}
- return new JSONResponse($result,Http::STATUS_CREATED);
+ return new JSONResponse($result, Http::STATUS_CREATED);
}
/**