mirror of
https://github.com/nextcloud/server.git
synced 2026-06-09 08:44:07 -04:00
Merge pull request #28314 from nextcloud/sharing-ibootstrap
move files_sharing to IBootStrap
This commit is contained in:
commit
1021c89454
7 changed files with 102 additions and 166 deletions
|
|
@ -33,10 +33,10 @@ use OC\Files\Filesystem;
|
|||
use OCA\FederatedFileSharing\AddressHandler;
|
||||
use OCA\FederatedFileSharing\FederatedShareProvider;
|
||||
use OCA\Files_Sharing\Activity\Providers\RemoteShares;
|
||||
use OCA\Files_Sharing\External\Manager;
|
||||
use OCP\Activity\IManager as IActivityManager;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\Constants;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Federation\Exceptions\ActionNotSupportedException;
|
||||
use OCP\Federation\Exceptions\AuthenticationFailedException;
|
||||
use OCP\Federation\Exceptions\BadRequestException;
|
||||
|
|
@ -59,7 +59,6 @@ use OCP\Share\Exceptions\ShareNotFound;
|
|||
use OCP\Share\IManager;
|
||||
use OCP\Share\IShare;
|
||||
use OCP\Util;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class CloudFederationProviderFiles implements ICloudFederationProvider {
|
||||
|
||||
|
|
@ -108,6 +107,9 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
|
|||
/** @var IConfig */
|
||||
private $config;
|
||||
|
||||
/** @var Manager */
|
||||
private $externalShareManager;
|
||||
|
||||
/**
|
||||
* CloudFederationProvider constructor.
|
||||
*
|
||||
|
|
@ -125,22 +127,26 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
|
|||
* @param ICloudFederationProviderManager $cloudFederationProviderManager
|
||||
* @param IDBConnection $connection
|
||||
* @param IGroupManager $groupManager
|
||||
* @param IConfig $config
|
||||
* @param Manager $externalShareManager
|
||||
*/
|
||||
public function __construct(IAppManager $appManager,
|
||||
FederatedShareProvider $federatedShareProvider,
|
||||
AddressHandler $addressHandler,
|
||||
ILogger $logger,
|
||||
IUserManager $userManager,
|
||||
IManager $shareManager,
|
||||
ICloudIdManager $cloudIdManager,
|
||||
IActivityManager $activityManager,
|
||||
INotificationManager $notificationManager,
|
||||
IURLGenerator $urlGenerator,
|
||||
ICloudFederationFactory $cloudFederationFactory,
|
||||
ICloudFederationProviderManager $cloudFederationProviderManager,
|
||||
IDBConnection $connection,
|
||||
IGroupManager $groupManager,
|
||||
IConfig $config
|
||||
public function __construct(
|
||||
IAppManager $appManager,
|
||||
FederatedShareProvider $federatedShareProvider,
|
||||
AddressHandler $addressHandler,
|
||||
ILogger $logger,
|
||||
IUserManager $userManager,
|
||||
IManager $shareManager,
|
||||
ICloudIdManager $cloudIdManager,
|
||||
IActivityManager $activityManager,
|
||||
INotificationManager $notificationManager,
|
||||
IURLGenerator $urlGenerator,
|
||||
ICloudFederationFactory $cloudFederationFactory,
|
||||
ICloudFederationProviderManager $cloudFederationProviderManager,
|
||||
IDBConnection $connection,
|
||||
IGroupManager $groupManager,
|
||||
IConfig $config,
|
||||
Manager $externalShareManager
|
||||
) {
|
||||
$this->appManager = $appManager;
|
||||
$this->federatedShareProvider = $federatedShareProvider;
|
||||
|
|
@ -157,6 +163,7 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
|
|||
$this->connection = $connection;
|
||||
$this->groupManager = $groupManager;
|
||||
$this->config = $config;
|
||||
$this->externalShareManager = $externalShareManager;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -239,24 +246,8 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
|
|||
throw new ProviderCouldNotAddShareException('Group does not exists', '',Http::STATUS_BAD_REQUEST);
|
||||
}
|
||||
|
||||
$externalManager = new \OCA\Files_Sharing\External\Manager(
|
||||
\OC::$server->getDatabaseConnection(),
|
||||
Filesystem::getMountManager(),
|
||||
Filesystem::getLoader(),
|
||||
\OC::$server->getHTTPClientService(),
|
||||
\OC::$server->getNotificationManager(),
|
||||
\OC::$server->query(\OCP\OCS\IDiscoveryService::class),
|
||||
\OC::$server->getCloudFederationProviderManager(),
|
||||
\OC::$server->getCloudFederationFactory(),
|
||||
\OC::$server->getGroupManager(),
|
||||
\OC::$server->getUserManager(),
|
||||
$shareWith,
|
||||
\OC::$server->query(IEventDispatcher::class),
|
||||
\OC::$server->get(LoggerInterface::class)
|
||||
);
|
||||
|
||||
try {
|
||||
$externalManager->addShare($remote, $token, '', $name, $owner, $shareType,false, $shareWith, $remoteId);
|
||||
$this->externalShareManager->addShare($remote, $token, '', $name, $owner, $shareType,false, $shareWith, $remoteId);
|
||||
$shareId = \OC::$server->getDatabaseConnection()->lastInsertId('*PREFIX*share_external');
|
||||
|
||||
if ($shareType === IShare::TYPE_USER) {
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
||||
*
|
||||
* @author Björn Schießle <bjoern@schiessle.org>
|
||||
* @author John Molakvoæ <skjnldsv@protonmail.com>
|
||||
* @author Morris Jobke <hey@morrisjobke.de>
|
||||
* @author Robin Appelman <robin@icewind.nl>
|
||||
*
|
||||
* @license AGPL-3.0
|
||||
*
|
||||
* This code is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License, version 3,
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*
|
||||
*/
|
||||
use OCA\Files_Sharing\ShareBackend\File;
|
||||
use OCA\Files_Sharing\ShareBackend\Folder;
|
||||
use OCA\Files_Sharing\AppInfo\Application;
|
||||
|
||||
\OCA\Files_Sharing\Helper::registerHooks();
|
||||
|
||||
\OC\Share\Share::registerBackend('file', File::class);
|
||||
\OC\Share\Share::registerBackend('folder', Folder::class, 'file');
|
||||
|
||||
\OC::$server->query(Application::class);
|
||||
|
|
@ -29,10 +29,12 @@
|
|||
*/
|
||||
namespace OCA\Files_Sharing\AppInfo;
|
||||
|
||||
use OC\AppFramework\Utility\SimpleContainer;
|
||||
use OC\Share\Share;
|
||||
use OCA\Files_Sharing\Capabilities;
|
||||
use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent;
|
||||
use OCA\Files_Sharing\External\Manager;
|
||||
use OCA\Files_Sharing\External\MountProvider as ExternalMountProvider;
|
||||
use OCA\Files_Sharing\Helper;
|
||||
use OCA\Files_Sharing\Listener\LegacyBeforeTemplateRenderedListener;
|
||||
use OCA\Files_Sharing\Listener\LoadAdditionalListener;
|
||||
use OCA\Files_Sharing\Listener\LoadSidebarListener;
|
||||
|
|
@ -47,72 +49,37 @@ use OCA\Files_Sharing\Notification\Listener;
|
|||
use OCA\Files_Sharing\Notification\Notifier;
|
||||
use OCA\Files\Event\LoadAdditionalScriptsEvent;
|
||||
use OCA\Files\Event\LoadSidebar;
|
||||
use OCA\Files_Sharing\ShareBackend\File;
|
||||
use OCA\Files_Sharing\ShareBackend\Folder;
|
||||
use OCP\AppFramework\App;
|
||||
use OCP\AppFramework\Bootstrap\IBootContext;
|
||||
use OCP\AppFramework\Bootstrap\IBootstrap;
|
||||
use OCP\AppFramework\Bootstrap\IRegistrationContext;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Federation\ICloudIdManager;
|
||||
use OCP\Files\Config\IMountProviderCollection;
|
||||
use OCP\Group\Events\UserAddedEvent;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IGroup;
|
||||
use OCP\IServerContainer;
|
||||
use OCP\IUserSession;
|
||||
use OCP\L10N\IFactory;
|
||||
use OCP\Share\Events\ShareCreatedEvent;
|
||||
use OCP\Share\IManager;
|
||||
use OCP\Util;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Component\EventDispatcher\GenericEvent;
|
||||
|
||||
class Application extends App {
|
||||
class Application extends App implements IBootstrap {
|
||||
public const APP_ID = 'files_sharing';
|
||||
|
||||
public function __construct(array $urlParams = []) {
|
||||
parent::__construct(self::APP_ID, $urlParams);
|
||||
}
|
||||
|
||||
$container = $this->getContainer();
|
||||
|
||||
/** @var IServerContainer $server */
|
||||
$server = $container->getServer();
|
||||
|
||||
/** @var IEventDispatcher $dispatcher */
|
||||
$dispatcher = $container->query(IEventDispatcher::class);
|
||||
$oldDispatcher = $container->getServer()->getEventDispatcher();
|
||||
$mountProviderCollection = $server->getMountProviderCollection();
|
||||
$notifications = $server->getNotificationManager();
|
||||
|
||||
/**
|
||||
* Core class wrappers
|
||||
*/
|
||||
$container->registerService(Manager::class, function (SimpleContainer $c) use ($server) {
|
||||
$user = $server->getUserSession()->getUser();
|
||||
$uid = $user ? $user->getUID() : null;
|
||||
return new \OCA\Files_Sharing\External\Manager(
|
||||
$server->getDatabaseConnection(),
|
||||
\OC\Files\Filesystem::getMountManager(),
|
||||
\OC\Files\Filesystem::getLoader(),
|
||||
$server->getHTTPClientService(),
|
||||
$server->getNotificationManager(),
|
||||
$server->query(\OCP\OCS\IDiscoveryService::class),
|
||||
$server->getCloudFederationProviderManager(),
|
||||
$server->getCloudFederationFactory(),
|
||||
$server->getGroupManager(),
|
||||
$server->getUserManager(),
|
||||
$uid,
|
||||
$server->query(IEventDispatcher::class),
|
||||
$server->get(LoggerInterface::class)
|
||||
);
|
||||
});
|
||||
|
||||
/**
|
||||
* Middleware
|
||||
*/
|
||||
$container->registerMiddleWare(SharingCheckMiddleware::class);
|
||||
$container->registerMiddleWare(OCSShareAPIMiddleware::class);
|
||||
$container->registerMiddleWare(ShareInfoMiddleware::class);
|
||||
|
||||
$container->registerService('ExternalMountProvider', function (ContainerInterface $c) {
|
||||
return new \OCA\Files_Sharing\External\MountProvider(
|
||||
public function register(IRegistrationContext $context): void {
|
||||
$context->registerService(ExternalMountProvider::class, function (ContainerInterface $c) {
|
||||
return new ExternalMountProvider(
|
||||
$c->get(IDBConnection::class),
|
||||
function () use ($c) {
|
||||
return $c->get(Manager::class);
|
||||
|
|
@ -122,15 +89,26 @@ class Application extends App {
|
|||
});
|
||||
|
||||
/**
|
||||
* Register capabilities
|
||||
* Middleware
|
||||
*/
|
||||
$container->registerCapability(Capabilities::class);
|
||||
$context->registerMiddleWare(SharingCheckMiddleware::class);
|
||||
$context->registerMiddleWare(OCSShareAPIMiddleware::class);
|
||||
$context->registerMiddleWare(ShareInfoMiddleware::class);
|
||||
|
||||
$notifications->registerNotifierService(Notifier::class);
|
||||
$context->registerCapability(Capabilities::class);
|
||||
|
||||
$this->registerMountProviders($mountProviderCollection);
|
||||
$this->registerEventsScripts($dispatcher, $oldDispatcher);
|
||||
$this->setupSharingMenus();
|
||||
$context->registerNotifierService(Notifier::class);
|
||||
}
|
||||
|
||||
public function boot(IBootContext $context): void {
|
||||
$context->injectFn([$this, 'registerMountProviders']);
|
||||
$context->injectFn([$this, 'registerEventsScripts']);
|
||||
$context->injectFn([$this, 'setupSharingMenus']);
|
||||
|
||||
Helper::registerHooks();
|
||||
|
||||
Share::registerBackend('file', File::class);
|
||||
Share::registerBackend('folder', Folder::class, 'file');
|
||||
|
||||
/**
|
||||
* Always add main sharing script
|
||||
|
|
@ -138,12 +116,13 @@ class Application extends App {
|
|||
Util::addScript(self::APP_ID, 'dist/main');
|
||||
}
|
||||
|
||||
protected function registerMountProviders(IMountProviderCollection $mountProviderCollection) {
|
||||
$mountProviderCollection->registerProvider($this->getContainer()->query(MountProvider::class));
|
||||
$mountProviderCollection->registerProvider($this->getContainer()->query('ExternalMountProvider'));
|
||||
|
||||
public function registerMountProviders(IMountProviderCollection $mountProviderCollection, MountProvider $mountProvider, ExternalMountProvider $externalMountProvider) {
|
||||
$mountProviderCollection->registerProvider($mountProvider);
|
||||
$mountProviderCollection->registerProvider($externalMountProvider);
|
||||
}
|
||||
|
||||
protected function registerEventsScripts(IEventDispatcher $dispatcher, EventDispatcherInterface $oldDispatcher) {
|
||||
public function registerEventsScripts(IEventDispatcher $dispatcher, EventDispatcherInterface $oldDispatcher) {
|
||||
// sidebar and files scripts
|
||||
$dispatcher->addServiceListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class);
|
||||
$dispatcher->addServiceListener(BeforeTemplateRenderedEvent::class, LegacyBeforeTemplateRenderedListener::class);
|
||||
|
|
@ -168,19 +147,15 @@ class Application extends App {
|
|||
});
|
||||
}
|
||||
|
||||
protected function setupSharingMenus() {
|
||||
/** @var IManager $shareManager */
|
||||
$shareManager = \OC::$server->get(IManager::class);
|
||||
|
||||
public function setupSharingMenus(IManager $shareManager, IFactory $l10nFactory, IUserSession $userSession) {
|
||||
if (!$shareManager->shareApiEnabled() || !class_exists('\OCA\Files\App')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$navigationManager = \OCA\Files\App::getNavigationManager();
|
||||
// show_Quick_Access stored as string
|
||||
\OCA\Files\App::getNavigationManager()->add(function () use ($shareManager) {
|
||||
$l = \OC::$server->getL10N('files_sharing');
|
||||
/** @var IUserSession $userSession */
|
||||
$userSession = \OC::$server->get(IUserSession::class);
|
||||
$navigationManager->add(function () use ($shareManager, $l10nFactory, $userSession) {
|
||||
$l = $l10nFactory->get('files_sharing');
|
||||
$user = $userSession->getUser();
|
||||
$userId = $user ? $user->getUID() : null;
|
||||
|
||||
|
|
|
|||
31
apps/files_sharing/lib/External/Manager.php
vendored
31
apps/files_sharing/lib/External/Manager.php
vendored
|
|
@ -31,6 +31,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Files_Sharing\External;
|
||||
|
||||
use Doctrine\DBAL\Driver\Exception;
|
||||
|
|
@ -47,6 +48,7 @@ use OCP\Http\Client\IClientService;
|
|||
use OCP\IDBConnection;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IUserManager;
|
||||
use OCP\IUserSession;
|
||||
use OCP\Notification\IManager;
|
||||
use OCP\OCS\IDiscoveryService;
|
||||
use OCP\Share;
|
||||
|
|
@ -83,7 +85,7 @@ class Manager {
|
|||
/** @var ICloudFederationFactory */
|
||||
private $cloudFederationFactory;
|
||||
|
||||
/** @var IGroupManager */
|
||||
/** @var IGroupManager */
|
||||
private $groupManager;
|
||||
|
||||
/** @var IUserManager */
|
||||
|
|
@ -96,25 +98,26 @@ class Manager {
|
|||
private $logger;
|
||||
|
||||
public function __construct(
|
||||
IDBConnection $connection,
|
||||
\OC\Files\Mount\Manager $mountManager,
|
||||
IStorageFactory $storageLoader,
|
||||
IClientService $clientService,
|
||||
IManager $notificationManager,
|
||||
IDiscoveryService $discoveryService,
|
||||
IDBConnection $connection,
|
||||
\OC\Files\Mount\Manager $mountManager,
|
||||
IStorageFactory $storageLoader,
|
||||
IClientService $clientService,
|
||||
IManager $notificationManager,
|
||||
IDiscoveryService $discoveryService,
|
||||
ICloudFederationProviderManager $cloudFederationProviderManager,
|
||||
ICloudFederationFactory $cloudFederationFactory,
|
||||
IGroupManager $groupManager,
|
||||
IUserManager $userManager,
|
||||
?string $uid,
|
||||
IEventDispatcher $eventDispatcher,
|
||||
LoggerInterface $logger
|
||||
ICloudFederationFactory $cloudFederationFactory,
|
||||
IGroupManager $groupManager,
|
||||
IUserManager $userManager,
|
||||
IUserSession $userSession,
|
||||
IEventDispatcher $eventDispatcher,
|
||||
LoggerInterface $logger
|
||||
) {
|
||||
$user = $userSession->getUser();
|
||||
$this->connection = $connection;
|
||||
$this->mountManager = $mountManager;
|
||||
$this->storageLoader = $storageLoader;
|
||||
$this->clientService = $clientService;
|
||||
$this->uid = $uid;
|
||||
$this->uid = $user ? $user->getUID() : null;
|
||||
$this->notificationManager = $notificationManager;
|
||||
$this->discoveryService = $discoveryService;
|
||||
$this->cloudFederationProviderManager = $cloudFederationProviderManager;
|
||||
|
|
|
|||
|
|
@ -27,26 +27,10 @@
|
|||
namespace OCA\Files_Sharing;
|
||||
|
||||
use OC\Files\Filesystem;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class Hooks {
|
||||
public static function deleteUser($params) {
|
||||
$manager = new External\Manager(
|
||||
\OC::$server->getDatabaseConnection(),
|
||||
\OC\Files\Filesystem::getMountManager(),
|
||||
\OC\Files\Filesystem::getLoader(),
|
||||
\OC::$server->getHTTPClientService(),
|
||||
\OC::$server->getNotificationManager(),
|
||||
\OC::$server->query(\OCP\OCS\IDiscoveryService::class),
|
||||
\OC::$server->getCloudFederationProviderManager(),
|
||||
\OC::$server->getCloudFederationFactory(),
|
||||
\OC::$server->getGroupManager(),
|
||||
\OC::$server->getUserManager(),
|
||||
$params['uid'],
|
||||
\OC::$server->query(IEventDispatcher::class),
|
||||
\OC::$server->get(LoggerInterface::class)
|
||||
);
|
||||
$manager = \OC::$server->get(External\Manager::class);
|
||||
|
||||
$manager->removeUserShares($params['uid']);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,9 @@ use OCP\Http\Client\IResponse;
|
|||
use OCP\IGroup;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use OCP\IUserSession;
|
||||
use OCP\Share\IShare;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Test\Traits\UserTrait;
|
||||
|
|
@ -153,6 +155,13 @@ class ManagerTest extends TestCase {
|
|||
}
|
||||
|
||||
private function createManagerForUser($userId) {
|
||||
$user = $this->createMock(IUser::class);
|
||||
$user->method('getUID')
|
||||
->willReturn($userId);
|
||||
$userSession = $this->createMock(IUserSession::class);
|
||||
$userSession->method('getUser')
|
||||
->willReturn($user);
|
||||
|
||||
return $this->getMockBuilder(Manager::class)
|
||||
->setConstructorArgs(
|
||||
[
|
||||
|
|
@ -166,7 +175,7 @@ class ManagerTest extends TestCase {
|
|||
$this->cloudFederationFactory,
|
||||
$this->groupManager,
|
||||
$this->userManager,
|
||||
$userId,
|
||||
$userSession,
|
||||
$this->eventDispatcher,
|
||||
$this->logger,
|
||||
]
|
||||
|
|
|
|||
|
|
@ -34,6 +34,9 @@ namespace OCA\Files_Sharing\Tests;
|
|||
|
||||
use OC\Files\Filesystem;
|
||||
use OCA\Files_Sharing\AppInfo\Application;
|
||||
use OCA\Files_Sharing\External\MountProvider as ExternalMountProvider;
|
||||
use OCA\Files_Sharing\MountProvider;
|
||||
use OCP\Files\Config\IMountProviderCollection;
|
||||
use OCP\Share\IShare;
|
||||
use Test\Traits\MountProviderTrait;
|
||||
|
||||
|
|
@ -71,7 +74,12 @@ abstract class TestCase extends \Test\TestCase {
|
|||
public static function setUpBeforeClass(): void {
|
||||
parent::setUpBeforeClass();
|
||||
|
||||
new Application();
|
||||
$app = new Application();
|
||||
$app->registerMountProviders(
|
||||
\OC::$server->get(IMountProviderCollection::class),
|
||||
\OC::$server->get(MountProvider::class),
|
||||
\OC::$server->get(ExternalMountProvider::class),
|
||||
);
|
||||
|
||||
// reset backend
|
||||
\OC_User::clearBackends();
|
||||
|
|
|
|||
Loading…
Reference in a new issue