summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-02-08 14:12:20 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2016-02-08 14:12:20 +0100
commitcf1f92cc12ff8d38c4801d122adc83304cd95e44 (patch)
tree8d29cd3f10e4e6f1ec13df40f2eca7d46feee00e /lib/private
parent97b2e19c786e037acd99e31aabbf193c805617dd (diff)
parent2f6ffdbce552ed519b3e08c1bfe5d100377c52f6 (diff)
downloadnextcloud-server-cf1f92cc12ff8d38c4801d122adc83304cd95e44.tar.gz
nextcloud-server-cf1f92cc12ff8d38c4801d122adc83304cd95e44.zip
Merge pull request #22080 from owncloud/fed_share_provider
implementation of the federated share provider
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/share20/manager.php11
-rw-r--r--lib/private/share20/providerfactory.php74
2 files changed, 81 insertions, 4 deletions
diff --git a/lib/private/share20/manager.php b/lib/private/share20/manager.php
index 33085410e1d..7cd44a7cb37 100644
--- a/lib/private/share20/manager.php
+++ b/lib/private/share20/manager.php
@@ -166,6 +166,10 @@ class Manager implements IManager {
if ($share->getSharedWith() !== null) {
throw new \InvalidArgumentException('SharedWith should be empty');
}
+ } else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_REMOTE) {
+ if ($share->getSharedWith() === null) {
+ throw new \InvalidArgumentException('SharedWith should not be empty');
+ }
} else {
// We can't handle other types yet
throw new \InvalidArgumentException('unkown share type');
@@ -1068,4 +1072,11 @@ class Manager implements IManager {
return false;
}
+ /**
+ * @inheritdoc
+ */
+ public function outgoingServer2ServerSharesAllowed() {
+ return $this->config->getAppValue('files_sharing', 'outgoing_server2server_share_enabled', 'yes') === 'yes';
+ }
+
}
diff --git a/lib/private/share20/providerfactory.php b/lib/private/share20/providerfactory.php
index 64147355596..bb440d2e01f 100644
--- a/lib/private/share20/providerfactory.php
+++ b/lib/private/share20/providerfactory.php
@@ -20,6 +20,10 @@
*/
namespace OC\Share20;
+use OCA\FederatedFileSharing\AddressHandler;
+use OCA\FederatedFileSharing\FederatedShareProvider;
+use OCA\FederatedFileSharing\Notifications;
+use OCA\FederatedFileSharing\TokenHandler;
use OCP\Share\IProviderFactory;
use OC\Share20\Exception\ProviderException;
use OCP\IServerContainer;
@@ -35,6 +39,8 @@ class ProviderFactory implements IProviderFactory {
private $serverContainer;
/** @var DefaultShareProvider */
private $defaultProvider = null;
+ /** @var FederatedShareProvider */
+ private $federatedProvider = null;
/**
* IProviderFactory constructor.
@@ -63,28 +69,88 @@ class ProviderFactory implements IProviderFactory {
}
/**
+ * Create the federated share provider
+ *
+ * @return FederatedShareProvider
+ */
+ protected function federatedShareProvider() {
+ if ($this->federatedProvider === null) {
+ /*
+ * Check if the app is enabled
+ */
+ $appManager = $this->serverContainer->getAppManager();
+ if (!$appManager->isEnabledForUser('federatedfilesharing')) {
+ return null;
+ }
+
+ /*
+ * TODO: add factory to federated sharing app
+ */
+ $l = $this->serverContainer->getL10N('federatedfilessharing');
+ $addressHandler = new AddressHandler(
+ $this->serverContainer->getURLGenerator(),
+ $l
+ );
+ $notifications = new Notifications(
+ $addressHandler,
+ $this->serverContainer->getHTTPClientService()
+ );
+ $tokenHandler = new TokenHandler(
+ $this->serverContainer->getSecureRandom()
+ );
+
+ $this->federatedProvider = new FederatedShareProvider(
+ $this->serverContainer->getDatabaseConnection(),
+ $addressHandler,
+ $notifications,
+ $tokenHandler,
+ $l,
+ $this->serverContainer->getLogger(),
+ $this->serverContainer->getRootFolder()
+ );
+ }
+
+ return $this->federatedProvider;
+ }
+
+ /**
* @inheritdoc
*/
public function getProvider($id) {
+ $provider = null;
if ($id === 'ocinternal') {
- return $this->defaultShareProvider();
+ $provider = $this->defaultShareProvider();
+ } else if ($id === 'ocFederatedSharing') {
+ $provider = $this->federatedShareProvider();
}
- throw new ProviderException('No provider with id .' . $id . ' found.');
+ if ($provider === null) {
+ throw new ProviderException('No provider with id .' . $id . ' found.');
+ }
+
+ return $provider;
}
/**
* @inheritdoc
*/
public function getProviderForType($shareType) {
+ $provider = null;
+
//FIXME we should not report type 2
if ($shareType === \OCP\Share::SHARE_TYPE_USER ||
$shareType === 2 ||
$shareType === \OCP\Share::SHARE_TYPE_GROUP ||
$shareType === \OCP\Share::SHARE_TYPE_LINK) {
- return $this->defaultShareProvider();
+ $provider = $this->defaultShareProvider();
+ } else if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) {
+ $provider = $this->federatedShareProvider();
+ }
+
+ if ($provider === null) {
+ throw new ProviderException('No share provider for share type ' . $shareType);
}
- throw new ProviderException('No share provider for share type ' . $shareType);
+ return $provider;
}
}