Browse Source

Merge pull request #12185 from nextcloud/cleanup/dicontainer

Cleanup the DIContainer
tags/v15.0.0beta1
Morris Jobke 5 years ago
parent
commit
cba3883410
No account linked to committer's email address

+ 2
- 1
apps/files_sharing/lib/AppInfo/Application.php View File

use OCA\Files_Sharing\Controller\ExternalSharesController; use OCA\Files_Sharing\Controller\ExternalSharesController;
use OCA\Files_Sharing\Controller\ShareController; use OCA\Files_Sharing\Controller\ShareController;
use OCA\Files_Sharing\Middleware\SharingCheckMiddleware; use OCA\Files_Sharing\Middleware\SharingCheckMiddleware;
use OCP\AppFramework\Utility\IControllerMethodReflector;
use OCP\Defaults; use OCP\Defaults;
use OCP\Federation\ICloudIdManager; use OCP\Federation\ICloudIdManager;
use \OCP\IContainer; use \OCP\IContainer;
$c->query('AppName'), $c->query('AppName'),
$server->getConfig(), $server->getConfig(),
$server->getAppManager(), $server->getAppManager(),
$c['ControllerMethodReflector'],
$server->query(IControllerMethodReflector::class),
$server->getShareManager(), $server->getShareManager(),
$server->getRequest() $server->getRequest()
); );

+ 2
- 1
apps/provisioning_api/lib/AppInfo/Application.php View File

use OC\Settings\Mailer\NewUserMailHelper; use OC\Settings\Mailer\NewUserMailHelper;
use OCA\Provisioning_API\Middleware\ProvisioningApiMiddleware; use OCA\Provisioning_API\Middleware\ProvisioningApiMiddleware;
use OCP\AppFramework\App; use OCP\AppFramework\App;
use OCP\AppFramework\Utility\IControllerMethodReflector;
use OCP\Defaults; use OCP\Defaults;
use OCP\Util; use OCP\Util;


$isAdmin = $user !== null ? $server->getGroupManager()->isAdmin($user->getUID()) : false; $isAdmin = $user !== null ? $server->getGroupManager()->isAdmin($user->getUID()) : false;
$isSubAdmin = $user !== null ? $server->getGroupManager()->getSubAdmin()->isSubAdmin($user) : false; $isSubAdmin = $user !== null ? $server->getGroupManager()->getSubAdmin()->isSubAdmin($user) : false;
return new ProvisioningApiMiddleware( return new ProvisioningApiMiddleware(
$c['ControllerMethodReflector'],
$c->query(IControllerMethodReflector::class),
$isAdmin, $isAdmin,
$isSubAdmin $isSubAdmin
); );

+ 2
- 2
lib/private/AppFramework/App.php View File

*/ */
public static function main(string $controllerName, string $methodName, DIContainer $container, array $urlParams = null) { public static function main(string $controllerName, string $methodName, DIContainer $container, array $urlParams = null) {
if (!is_null($urlParams)) { if (!is_null($urlParams)) {
$container[IRequest::class]->setUrlParameters($urlParams);
$container->query(IRequest::class)->setUrlParameters($urlParams);
} else if (isset($container['urlParams']) && !is_null($container['urlParams'])) { } else if (isset($container['urlParams']) && !is_null($container['urlParams'])) {
$container[IRequest::class]->setUrlParameters($container['urlParams']);
$container->query(IRequest::class)->setUrlParameters($container['urlParams']);
} }
$appName = $container['AppName']; $appName = $container['AppName'];



+ 12
- 45
lib/private/AppFramework/DependencyInjection/DIContainer.php View File

use OC\AppFramework\Middleware\Security\SecurityMiddleware; use OC\AppFramework\Middleware\Security\SecurityMiddleware;
use OC\AppFramework\Middleware\SessionMiddleware; use OC\AppFramework\Middleware\SessionMiddleware;
use OC\AppFramework\Utility\SimpleContainer; use OC\AppFramework\Utility\SimpleContainer;
use OC\Collaboration\Collaborators\SearchResult;
use OC\Core\Middleware\TwoFactorMiddleware; use OC\Core\Middleware\TwoFactorMiddleware;
use OC\RichObjectStrings\Validator;
use OC\ServerContainer; use OC\ServerContainer;
use OCP\AppFramework\Http\IOutput; use OCP\AppFramework\Http\IOutput;
use OCP\AppFramework\IAppContainer; use OCP\AppFramework\IAppContainer;
use OCP\AppFramework\QueryException; use OCP\AppFramework\QueryException;
use OCP\AppFramework\Utility\IControllerMethodReflector;
use OCP\AppFramework\Utility\ITimeFactory; use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Collaboration\Collaborators\ISearchResult;
use OCP\Files\Folder; use OCP\Files\Folder;
use OCP\Files\IAppData; use OCP\Files\IAppData;
use OCP\GlobalScale\IConfig; use OCP\GlobalScale\IConfig;
use OCP\IServerContainer; use OCP\IServerContainer;
use OCP\ISession; use OCP\ISession;
use OCP\IUserSession; use OCP\IUserSession;
use OCP\RichObjectStrings\IValidator;
use OCP\Encryption\IManager;
use OCA\WorkflowEngine\Manager; use OCA\WorkflowEngine\Manager;


class DIContainer extends SimpleContainer implements IAppContainer { class DIContainer extends SimpleContainer implements IAppContainer {
$this['AppName'] = $appName; $this['AppName'] = $appName;
$this['urlParams'] = $urlParams; $this['urlParams'] = $urlParams;


$this->registerAlias('Request', IRequest::class);

/** @var \OC\ServerContainer $server */ /** @var \OC\ServerContainer $server */
if ($server === null) { if ($server === null) {
$server = \OC::$server; $server = \OC::$server;
return new OC\AppFramework\Logger($this->server->query(ILogger::class), $c->query('AppName')); return new OC\AppFramework\Logger($this->server->query(ILogger::class), $c->query('AppName'));
}); });


$this->registerAlias(\OCP\AppFramework\Utility\IControllerMethodReflector::class, \OC\AppFramework\Utility\ControllerMethodReflector::class);
$this->registerAlias('ControllerMethodReflector', \OCP\AppFramework\Utility\IControllerMethodReflector::class);

$this->registerService(IRequest::class, function() {
return $this->getServer()->query(IRequest::class);
});
$this->registerAlias('Request', IRequest::class);

$this->registerAlias(\OCP\AppFramework\Utility\ITimeFactory::class, \OC\AppFramework\Utility\TimeFactory::class);
$this->registerAlias('TimeFactory', \OCP\AppFramework\Utility\ITimeFactory::class);

$this->registerAlias(\OC\User\Session::class, \OCP\IUserSession::class);

$this->registerService(IServerContainer::class, function ($c) { $this->registerService(IServerContainer::class, function ($c) {
return $this->getServer(); return $this->getServer();
}); });
return $c; return $c;
}); });


$this->registerAlias(ISearchResult::class, SearchResult::class);

// commonly used attributes // commonly used attributes
$this->registerService('UserId', function ($c) { $this->registerService('UserId', function ($c) {
return $c->query(IUserSession::class)->getSession()->get('user_id'); return $c->query(IUserSession::class)->getSession()->get('user_id');
return $c->getServer()->getThemingDefaults(); return $c->getServer()->getThemingDefaults();
}); });


$this->registerService(IManager::class, function ($c) {
return $this->getServer()->getEncryptionManager();
});

$this->registerService(IConfig::class, function ($c) { $this->registerService(IConfig::class, function ($c) {
return $c->query(OC\GlobalScale\Config::class); return $c->query(OC\GlobalScale\Config::class);
}); });


$this->registerService(IValidator::class, function($c) {
return $c->query(Validator::class);
});

$this->registerService(\OC\Security\IdentityProof\Manager::class, function ($c) {
return new \OC\Security\IdentityProof\Manager(
$this->getServer()->query(\OC\Files\AppData\Factory::class),
$this->getServer()->getCrypto(),
$this->getServer()->getConfig()
);
});

$this->registerService('Protocol', function($c){ $this->registerService('Protocol', function($c){
/** @var \OC\Server $server */ /** @var \OC\Server $server */
$server = $c->query('ServerContainer'); $server = $c->query('ServerContainer');
return new Dispatcher( return new Dispatcher(
$c['Protocol'], $c['Protocol'],
$c['MiddlewareDispatcher'], $c['MiddlewareDispatcher'],
$c['ControllerMethodReflector'],
$c->query(IControllerMethodReflector::class),
$c['Request'] $c['Request']
); );
}); });


return new SecurityMiddleware( return new SecurityMiddleware(
$c['Request'], $c['Request'],
$c['ControllerMethodReflector'],
$server->query(IControllerMethodReflector::class),
$server->getNavigationManager(), $server->getNavigationManager(),
$server->getURLGenerator(), $server->getURLGenerator(),
$server->getLogger(), $server->getLogger(),
$server = $app->getServer(); $server = $app->getServer();


return new OC\AppFramework\Middleware\Security\PasswordConfirmationMiddleware( return new OC\AppFramework\Middleware\Security\PasswordConfirmationMiddleware(
$c['ControllerMethodReflector'],
$c->query(IControllerMethodReflector::class),
$server->getSession(), $server->getSession(),
$server->getUserSession(), $server->getUserSession(),
$server->query(ITimeFactory::class) $server->query(ITimeFactory::class)
$server = $app->getServer(); $server = $app->getServer();


return new OC\AppFramework\Middleware\Security\BruteForceMiddleware( return new OC\AppFramework\Middleware\Security\BruteForceMiddleware(
$c['ControllerMethodReflector'],
$c->query(IControllerMethodReflector::class),
$server->getBruteForceThrottler(), $server->getBruteForceThrottler(),
$server->getRequest() $server->getRequest()
); );
return new RateLimitingMiddleware( return new RateLimitingMiddleware(
$server->getRequest(), $server->getRequest(),
$server->getUserSession(), $server->getUserSession(),
$c['ControllerMethodReflector'],
$c->query(IControllerMethodReflector::class),
$c->query(OC\Security\RateLimiting\Limiter::class) $c->query(OC\Security\RateLimiting\Limiter::class)
); );
}); });
$this->registerService('CORSMiddleware', function($c) { $this->registerService('CORSMiddleware', function($c) {
return new CORSMiddleware( return new CORSMiddleware(
$c['Request'], $c['Request'],
$c['ControllerMethodReflector'],
$c->query(IControllerMethodReflector::class),
$c->query(IUserSession::class), $c->query(IUserSession::class),
$c->getServer()->getBruteForceThrottler() $c->getServer()->getBruteForceThrottler()
); );
$this->registerService('SessionMiddleware', function($c) use ($app) { $this->registerService('SessionMiddleware', function($c) use ($app) {
return new SessionMiddleware( return new SessionMiddleware(
$c['Request'], $c['Request'],
$c['ControllerMethodReflector'],
$c->query(IControllerMethodReflector::class),
$app->getServer()->getSession() $app->getServer()->getSession()
); );
}); });
$userSession = $app->getServer()->getUserSession(); $userSession = $app->getServer()->getUserSession();
$session = $app->getServer()->getSession(); $session = $app->getServer()->getSession();
$urlGenerator = $app->getServer()->getURLGenerator(); $urlGenerator = $app->getServer()->getURLGenerator();
$reflector = $c['ControllerMethodReflector'];
$reflector = $c->query(IControllerMethodReflector::class);
$request = $app->getServer()->getRequest(); $request = $app->getServer()->getRequest();
return new TwoFactorMiddleware($twoFactorManager, $userSession, $session, $urlGenerator, $reflector, $request); return new TwoFactorMiddleware($twoFactorManager, $userSession, $session, $urlGenerator, $reflector, $request);
}); });
$this->registerService(OC\AppFramework\Middleware\Security\SameSiteCookieMiddleware::class, function (SimpleContainer $c) { $this->registerService(OC\AppFramework\Middleware\Security\SameSiteCookieMiddleware::class, function (SimpleContainer $c) {
return new OC\AppFramework\Middleware\Security\SameSiteCookieMiddleware( return new OC\AppFramework\Middleware\Security\SameSiteCookieMiddleware(
$c['Request'], $c['Request'],
$c['ControllerMethodReflector']
$c->query(IControllerMethodReflector::class)
); );
}); });



+ 0
- 1
lib/private/AppFramework/Utility/SimpleContainer.php View File

} }
return $name; return $name;
} }

} }

+ 14
- 3
lib/private/Server.php View File

); );
}); });


$this->registerService('EncryptionManager', function (Server $c) {
$this->registerService(\OCP\Encryption\IManager::class, function (Server $c) {
$view = new View(); $view = new View();
$util = new Encryption\Util( $util = new Encryption\Util(
$view, $view,
new ArrayCache() new ArrayCache()
); );
}); });
$this->registerAlias('EncryptionManager', \OCP\Encryption\IManager::class);


$this->registerService('EncryptionFileHelper', function (Server $c) { $this->registerService('EncryptionFileHelper', function (Server $c) {
$util = new Encryption\Util( $util = new Encryption\Util(
}); });
$this->registerAlias(IProvider::class, Authentication\Token\Manager::class); $this->registerAlias(IProvider::class, Authentication\Token\Manager::class);


$this->registerService(\OCP\IUserSession::class, function (Server $c) {
$this->registerService(\OC\User\Session::class, function (Server $c) {
$manager = $c->getUserManager(); $manager = $c->getUserManager();
$session = new \OC\Session\Memory(''); $session = new \OC\Session\Memory('');
$timeFactory = new TimeFactory(); $timeFactory = new TimeFactory();
}); });
return $userSession; return $userSession;
}); });
$this->registerAlias('UserSession', \OCP\IUserSession::class);
$this->registerAlias(\OCP\IUserSession::class, \OC\User\Session::class);
$this->registerAlias('UserSession', \OC\User\Session::class);


$this->registerAlias(\OCP\Authentication\TwoFactorAuth\IRegistry::class, \OC\Authentication\TwoFactorAuth\Registry::class); $this->registerAlias(\OCP\Authentication\TwoFactorAuth\IRegistry::class, \OC\Authentication\TwoFactorAuth\Registry::class);


return $instance; return $instance;
}); });
$this->registerAlias('CollaboratorSearch', \OCP\Collaboration\Collaborators\ISearch::class); $this->registerAlias('CollaboratorSearch', \OCP\Collaboration\Collaborators\ISearch::class);
$this->registerAlias(\OCP\Collaboration\Collaborators\ISearchResult::class, \OC\Collaboration\Collaborators\SearchResult::class);


$this->registerAlias(\OCP\Collaboration\AutoComplete\IManager::class, \OC\Collaboration\AutoComplete\Manager::class); $this->registerAlias(\OCP\Collaboration\AutoComplete\IManager::class, \OC\Collaboration\AutoComplete\Manager::class);


$this->registerAlias(IDashboardManager::class, DashboardManager::class); $this->registerAlias(IDashboardManager::class, DashboardManager::class);
$this->registerAlias(IFullTextSearchManager::class, FullTextSearchManager::class); $this->registerAlias(IFullTextSearchManager::class, FullTextSearchManager::class);


$this->registerService(\OC\Security\IdentityProof\Manager::class, function (Server $c) {
return new \OC\Security\IdentityProof\Manager(
$c->query(\OC\Files\AppData\Factory::class),
$c->getCrypto(),
$c->getConfig()
);
});

$this->connectDispatcher(); $this->connectDispatcher();
} }



+ 5
- 10
tests/lib/AppFramework/AppTest.php View File

namespace Test\AppFramework; namespace Test\AppFramework;


use OC\AppFramework\App; use OC\AppFramework\App;
use OC\AppFramework\Http\Dispatcher;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http; use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Response; use OCP\AppFramework\Http\Response;


parent::setUp(); parent::setUp();


$this->container = new \OC\AppFramework\DependencyInjection\DIContainer('test', array()); $this->container = new \OC\AppFramework\DependencyInjection\DIContainer('test', array());
$this->controller = $this->getMockBuilder(
'OCP\AppFramework\Controller')
->disableOriginalConstructor()
->getMock();
$this->dispatcher = $this->getMockBuilder(
'OC\AppFramework\Http\Dispatcher')
->disableOriginalConstructor()
->getMock();

$this->io = $this->getMockBuilder('OCP\\AppFramework\\Http\\IOutput')->getMock();
$this->controller = $this->createMock(Controller::class);
$this->dispatcher = $this->createMock(Dispatcher::class);
$this->io = $this->createMock(Http\IOutput::class);


$this->headers = array('key' => 'value'); $this->headers = array('key' => 'value');
$this->output = 'hi'; $this->output = 'hi';

+ 2
- 7
tests/lib/AppFramework/DependencyInjection/DIContainerTest.php View File



/** @var DIContainer|\PHPUnit_Framework_MockObject_MockObject */ /** @var DIContainer|\PHPUnit_Framework_MockObject_MockObject */
private $container; private $container;
private $api;


protected function setUp(){ protected function setUp(){
parent::setUp(); parent::setUp();
public function testMiddlewareDispatcherIncludesSecurityMiddleware(){ public function testMiddlewareDispatcherIncludesSecurityMiddleware(){
$this->container['Request'] = new Request( $this->container['Request'] = new Request(
['method' => 'GET'], ['method' => 'GET'],
$this->getMockBuilder(ISecureRandom::class)
->disableOriginalConstructor()
->getMock(),
$this->getMockBuilder(IConfig::class)
->disableOriginalConstructor()
->getMock()
$this->createMock(ISecureRandom::class),
$this->createMock(IConfig::class)
); );
$security = $this->container['SecurityMiddleware']; $security = $this->container['SecurityMiddleware'];
$dispatcher = $this->container['MiddlewareDispatcher']; $dispatcher = $this->container['MiddlewareDispatcher'];

Loading…
Cancel
Save