summaryrefslogtreecommitdiffstats
path: root/apps/cloud_federation_api/lib
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2023-09-22 17:25:33 -0100
committerMaxence Lange <maxence@artificial-owl.com>2023-09-22 17:26:02 -0100
commit0fac750bcd5eccc65f2861a3bb7633912fb30039 (patch)
treeab6497eca13125d5e579bc77b2315bf727506589 /apps/cloud_federation_api/lib
parent0acad69840ff21a103f532548907e480fc5a982a (diff)
downloadnextcloud-server-0fac750bcd5eccc65f2861a3bb7633912fb30039.tar.gz
nextcloud-server-0fac750bcd5eccc65f2861a3bb7633912fb30039.zip
ocm services
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.php65
-rw-r--r--apps/cloud_federation_api/lib/Controller/RequestHandlerController.php59
2 files changed, 55 insertions, 69 deletions
diff --git a/apps/cloud_federation_api/lib/Capabilities.php b/apps/cloud_federation_api/lib/Capabilities.php
index 6164c0e0dba..60d6186b840 100644
--- a/apps/cloud_federation_api/lib/Capabilities.php
+++ b/apps/cloud_federation_api/lib/Capabilities.php
@@ -1,4 +1,7 @@
<?php
+
+declare(strict_types=1);
+
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
@@ -20,45 +23,61 @@
* 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,
+ ) {
}
/**
* Function an app uses to return the capabilities
*
- * @return array Array containing the apps capabilities
- * @since 8.2.0
+ * @return array{
+ * ocm: array{
+ * enabled: bool,
+ * apiVersion: string,
+ * endPoint: string,
+ * resourceTypes: array{
+ * name: string,
+ * shareTypes: 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/',
- ]
- ],
- ]
- ]
- ];
+ $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 $capabilities;
+ 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 ef77f2fa317..fd55746a83c 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>
*
* @license GNU AGPL version 3 or any later version
@@ -51,52 +52,19 @@ use Psr\Log\LoggerInterface;
* @package OCA\CloudFederationAPI\Controller
*/
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;
}
/**
@@ -122,7 +90,6 @@ class RequestHandlerController extends Controller {
* 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) {
-
// check if all required parameters are set
if ($shareWith === null ||
$name === null ||
@@ -281,7 +248,7 @@ class RequestHandlerController extends Controller {
);
}
- return new JSONResponse($result,Http::STATUS_CREATED);
+ return new JSONResponse($result, Http::STATUS_CREATED);
}
/**