diff --git a/apps/files_sharing/lib/Controller/DeletedShareAPIController.php b/apps/files_sharing/lib/Controller/DeletedShareAPIController.php index f4a2cd500e1..5abb8e69bdd 100644 --- a/apps/files_sharing/lib/Controller/DeletedShareAPIController.php +++ b/apps/files_sharing/lib/Controller/DeletedShareAPIController.php @@ -23,12 +23,12 @@ use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; use OCP\IGroupManager; use OCP\IRequest; -use OCP\IServerContainer; use OCP\IUserManager; use OCP\Share\Exceptions\GenericShareException; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager as ShareManager; use OCP\Share\IShare; +use Psr\Container\ContainerInterface; /** * @psalm-import-type Files_SharingDeletedShare from ResponseDefinitions @@ -44,7 +44,7 @@ class DeletedShareAPIController extends OCSController { private IGroupManager $groupManager, private IRootFolder $rootFolder, private IAppManager $appManager, - private IServerContainer $serverContainer, + private ContainerInterface $serverContainer, ) { parent::__construct($appName, $request); } diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php index 4d802b5c297..01bb5a0674e 100644 --- a/lib/private/AppFramework/DependencyInjection/DIContainer.php +++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php @@ -44,6 +44,7 @@ use OCP\IL10N; use OCP\INavigationManager; use OCP\IRequest; use OCP\IServerContainer; +use OCP\ISession; use OCP\IURLGenerator; use OCP\IUserSession; use OCP\Security\Ip\IRemoteAddress; @@ -110,8 +111,8 @@ class DIContainer extends SimpleContainer implements IAppContainer { $this->registerDeprecatedAlias(IAppContainer::class, ContainerInterface::class); // commonly used attributes - $this->registerService('userId', function (ContainerInterface $c): string { - return $c->get(IUserSession::class)->getSession()->get('user_id'); + $this->registerService('userId', function (ContainerInterface $c): ?string { + return $c->get(ISession::class)->get('user_id'); }); $this->registerService('webRoot', function (ContainerInterface $c): string { @@ -359,6 +360,9 @@ class DIContainer extends SimpleContainer implements IAppContainer { return parent::query($name); } elseif (str_starts_with($name, \OC\AppFramework\App::buildAppNamespace($this->appName) . '\\')) { return parent::query($name); + } elseif (str_starts_with($name, 'OC\\AppFramework\\Services\\')) { + /* AppFramework services are scoped to the application */ + return parent::query($name); } throw new QueryException('Could not resolve ' . $name . '!' diff --git a/lib/private/Support/CrashReport/Registry.php b/lib/private/Support/CrashReport/Registry.php index 77dd8163174..4fbbb8448ca 100644 --- a/lib/private/Support/CrashReport/Registry.php +++ b/lib/private/Support/CrashReport/Registry.php @@ -6,11 +6,12 @@ declare(strict_types=1); * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OC\Support\CrashReport; use Exception; use OCP\AppFramework\QueryException; -use OCP\IServerContainer; +use OCP\Server; use OCP\Support\CrashReport\ICollectBreadcrumbs; use OCP\Support\CrashReport\IMessageReporter; use OCP\Support\CrashReport\IRegistry; @@ -26,17 +27,8 @@ class Registry implements IRegistry { /** @var IReporter[] */ private $reporters = []; - /** @var IServerContainer */ - private $serverContainer; - - public function __construct(IServerContainer $serverContainer) { - $this->serverContainer = $serverContainer; - } - /** * Register a reporter instance - * - * @param IReporter $reporter */ public function register(IReporter $reporter): void { $this->reporters[] = $reporter; @@ -49,10 +41,6 @@ class Registry implements IRegistry { /** * Delegate breadcrumb collection to all registered reporters * - * @param string $message - * @param string $category - * @param array $context - * * @since 15.0.0 */ public function delegateBreadcrumb(string $message, string $category, array $context = []): void { @@ -69,7 +57,6 @@ class Registry implements IRegistry { * Delegate crash reporting to all registered reporters * * @param Exception|Throwable $exception - * @param array $context */ public function delegateReport($exception, array $context = []): void { $this->loadLazyProviders(); @@ -82,9 +69,6 @@ class Registry implements IRegistry { /** * Delegate a message to all reporters that implement IMessageReporter * - * @param string $message - * @param array $context - * * @return void */ public function delegateMessage(string $message, array $context = []): void { @@ -101,13 +85,13 @@ class Registry implements IRegistry { while (($class = array_shift($this->lazyReporters)) !== null) { try { /** @var IReporter $reporter */ - $reporter = $this->serverContainer->query($class); + $reporter = Server::get($class); } catch (QueryException $e) { /* * There is a circular dependency between the logger and the registry, so * we can not inject it. Thus the static call. */ - \OC::$server->get(LoggerInterface::class)->critical('Could not load lazy crash reporter: ' . $e->getMessage(), [ + Server::get(LoggerInterface::class)->critical('Could not load lazy crash reporter: ' . $e->getMessage(), [ 'exception' => $e, ]); return; @@ -123,7 +107,7 @@ class Registry implements IRegistry { * There is a circular dependency between the logger and the registry, so * we can not inject it. Thus the static call. */ - \OC::$server->get(LoggerInterface::class)->critical('Could not register lazy crash reporter: ' . $e->getMessage(), [ + Server::get(LoggerInterface::class)->critical('Could not register lazy crash reporter: ' . $e->getMessage(), [ 'exception' => $e, ]); } diff --git a/tests/lib/AppFramework/AppTest.php b/tests/lib/AppFramework/AppTest.php index c43cd8e3c54..f9b7cf50675 100644 --- a/tests/lib/AppFramework/AppTest.php +++ b/tests/lib/AppFramework/AppTest.php @@ -29,7 +29,7 @@ function rrmdir($directory) { class AppTest extends \Test\TestCase { - private $container; + private DIContainer $container; private $io; private $api; private $controller; @@ -55,8 +55,8 @@ class AppTest extends \Test\TestCase { $this->controllerMethod = 'method'; $this->container[$this->controllerName] = $this->controller; - $this->container['Dispatcher'] = $this->dispatcher; - $this->container['OCP\\AppFramework\\Http\\IOutput'] = $this->io; + $this->container[Dispatcher::class] = $this->dispatcher; + $this->container[IOutput::class] = $this->io; $this->container['urlParams'] = ['_route' => 'not-profiler']; $this->appPath = __DIR__ . '/../../../apps/namespacetestapp'; @@ -165,7 +165,7 @@ class AppTest extends \Test\TestCase { } public function testCoreApp(): void { - $this->container['AppName'] = 'core'; + $this->container['appName'] = 'core'; $this->container['OC\Core\Controller\Foo'] = $this->controller; $this->container['urlParams'] = ['_route' => 'not-profiler']; @@ -183,7 +183,7 @@ class AppTest extends \Test\TestCase { } public function testSettingsApp(): void { - $this->container['AppName'] = 'settings'; + $this->container['appName'] = 'settings'; $this->container['OCA\Settings\Controller\Foo'] = $this->controller; $this->container['urlParams'] = ['_route' => 'not-profiler']; @@ -201,7 +201,7 @@ class AppTest extends \Test\TestCase { } public function testApp(): void { - $this->container['AppName'] = 'bar'; + $this->container['appName'] = 'bar'; $this->container['OCA\Bar\Controller\Foo'] = $this->controller; $this->container['urlParams'] = ['_route' => 'not-profiler']; diff --git a/tests/lib/AppFramework/DependencyInjection/DIContainerTest.php b/tests/lib/AppFramework/DependencyInjection/DIContainerTest.php index e84b44db9a0..31188b12f14 100644 --- a/tests/lib/AppFramework/DependencyInjection/DIContainerTest.php +++ b/tests/lib/AppFramework/DependencyInjection/DIContainerTest.php @@ -18,13 +18,13 @@ use OCP\AppFramework\Middleware; use OCP\AppFramework\QueryException; use OCP\IConfig; use OCP\IRequestId; +use PHPUnit\Framework\MockObject\MockObject; /** * @group DB */ class DIContainerTest extends \Test\TestCase { - /** @var DIContainer|\PHPUnit\Framework\MockObject\MockObject */ - private $container; + private DIContainer&MockObject $container; protected function setUp(): void { parent::setUp(); @@ -45,11 +45,13 @@ class DIContainerTest extends \Test\TestCase { public function testProvidesAppName(): void { $this->assertTrue(isset($this->container['AppName'])); + $this->assertTrue(isset($this->container['appName'])); } public function testAppNameIsSetCorrectly(): void { $this->assertEquals('name', $this->container['AppName']); + $this->assertEquals('name', $this->container['appName']); } public function testMiddlewareDispatcherIncludesSecurityMiddleware(): void {