Merge pull request #17509 from nextcloud/fix/application-singleton
Fix Application instances created multiple times
This commit is contained in:
commit
13960b69da
20 changed files with 96 additions and 75 deletions
|
@ -29,7 +29,8 @@ use Symfony\Component\EventDispatcher\GenericEvent;
|
|||
|
||||
\OC_App::loadApps(['dav']);
|
||||
|
||||
$app = new Application();
|
||||
/** @var Application $app */
|
||||
$app = \OC::$server->query(Application::class);
|
||||
$app->registerHooks();
|
||||
|
||||
\OC::$server->registerService('CardDAVSyncService', function() use ($app) {
|
||||
|
|
|
@ -28,7 +28,8 @@ namespace OCA\Encryption\AppInfo;
|
|||
|
||||
$encryptionSystemReady = \OC::$server->getEncryptionManager()->isReady();
|
||||
|
||||
$app = new Application();
|
||||
/** @var Application $app */
|
||||
$app = \OC::$server->query(Application::class);
|
||||
if ($encryptionSystemReady) {
|
||||
$app->registerEncryptionModule();
|
||||
$app->registerHooks();
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
||||
*
|
||||
|
@ -21,41 +22,37 @@
|
|||
*
|
||||
*/
|
||||
|
||||
|
||||
namespace OCA\Encryption\AppInfo;
|
||||
|
||||
(new Application())->registerRoutes($this, array('routes' => array(
|
||||
|
||||
[
|
||||
'name' => 'Recovery#adminRecovery',
|
||||
'url' => '/ajax/adminRecovery',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Settings#updatePrivateKeyPassword',
|
||||
'url' => '/ajax/updatePrivateKeyPassword',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Settings#setEncryptHomeStorage',
|
||||
'url' => '/ajax/setEncryptHomeStorage',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Recovery#changeRecoveryPassword',
|
||||
'url' => '/ajax/changeRecoveryPassword',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Recovery#userSetRecovery',
|
||||
'url' => '/ajax/userSetRecovery',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Status#getStatus',
|
||||
'url' => '/ajax/getStatus',
|
||||
'verb' => 'GET'
|
||||
return [
|
||||
'routes' => [
|
||||
[
|
||||
'name' => 'Recovery#adminRecovery',
|
||||
'url' => '/ajax/adminRecovery',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Settings#updatePrivateKeyPassword',
|
||||
'url' => '/ajax/updatePrivateKeyPassword',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Settings#setEncryptHomeStorage',
|
||||
'url' => '/ajax/setEncryptHomeStorage',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Recovery#changeRecoveryPassword',
|
||||
'url' => '/ajax/changeRecoveryPassword',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Recovery#userSetRecovery',
|
||||
'url' => '/ajax/userSetRecovery',
|
||||
'verb' => 'POST'
|
||||
],
|
||||
[
|
||||
'name' => 'Status#getStatus',
|
||||
'url' => '/ajax/getStatus',
|
||||
'verb' => 'GET'
|
||||
],
|
||||
]
|
||||
|
||||
|
||||
)));
|
||||
];
|
||||
|
|
|
@ -22,5 +22,6 @@
|
|||
|
||||
namespace OCA\Federation\AppInfo;
|
||||
|
||||
$app = new Application();
|
||||
/** @var Application $app */
|
||||
$app = \OC::$server->query(Application::class);
|
||||
$app->registerHooks();
|
||||
|
|
|
@ -29,7 +29,8 @@ declare(strict_types=1);
|
|||
*/
|
||||
namespace OCA\Files\AppInfo;
|
||||
|
||||
$application = new Application();
|
||||
/** @var Application $application */
|
||||
$application = \OC::$server->query(Application::class);
|
||||
$application->registerRoutes(
|
||||
$this,
|
||||
[
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
||||
* @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
|
||||
|
@ -22,10 +23,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Files_Trashbin\AppInfo;
|
||||
|
||||
$application = new Application();
|
||||
$application->registerRoutes($this, [
|
||||
return [
|
||||
'routes' => [
|
||||
[
|
||||
'name' => 'Preview#getPreview',
|
||||
|
@ -33,4 +31,4 @@ $application->registerRoutes($this, [
|
|||
'verb' => 'GET',
|
||||
],
|
||||
],
|
||||
]);
|
||||
];
|
||||
|
|
|
@ -46,12 +46,7 @@ class Application extends App {
|
|||
/*
|
||||
* Register expiration
|
||||
*/
|
||||
$container->registerService('Expiration', function($c) {
|
||||
return new Expiration(
|
||||
$c->query('ServerContainer')->getConfig(),
|
||||
$c->query(ITimeFactory::class)
|
||||
);
|
||||
});
|
||||
$container->registerAlias('Expiration', Expiration::class);
|
||||
|
||||
/*
|
||||
* Register $principalBackend for the DAV collection
|
||||
|
|
|
@ -62,7 +62,8 @@ class ExpireTrash extends \OC\BackgroundJob\TimedJob {
|
|||
}
|
||||
|
||||
protected function fixDIForJobs() {
|
||||
$application = new Application();
|
||||
/** @var Application $application */
|
||||
$application = \OC::$server->query(Application::class);
|
||||
$this->userManager = \OC::$server->getUserManager();
|
||||
$this->expiration = $application->getContainer()->query('Expiration');
|
||||
}
|
||||
|
|
|
@ -49,7 +49,11 @@ class Expiration {
|
|||
|
||||
public function __construct(IConfig $config,ITimeFactory $timeFactory){
|
||||
$this->timeFactory = $timeFactory;
|
||||
$this->retentionObligation = $config->getSystemValue('trashbin_retention_obligation', 'auto');
|
||||
$this->setRetentionObligation($config->getSystemValue('trashbin_retention_obligation', 'auto'));
|
||||
}
|
||||
|
||||
public function setRetentionObligation(string $obligation) {
|
||||
$this->retentionObligation = $obligation;
|
||||
|
||||
if ($this->retentionObligation !== 'disabled') {
|
||||
$this->parseRetentionObligation();
|
||||
|
|
|
@ -747,7 +747,8 @@ class Trashbin {
|
|||
*/
|
||||
private static function scheduleExpire($user) {
|
||||
// let the admin disable auto expire
|
||||
$application = new Application();
|
||||
/** @var Application $application */
|
||||
$application = \OC::$server->query(Application::class);
|
||||
$expiration = $application->getContainer()->query('Expiration');
|
||||
if ($expiration->isEnabled()) {
|
||||
\OC::$server->getCommandBus()->push(new Expire($user));
|
||||
|
@ -764,7 +765,8 @@ class Trashbin {
|
|||
* @return int size of deleted files
|
||||
*/
|
||||
protected static function deleteFiles($files, $user, $availableSpace) {
|
||||
$application = new Application();
|
||||
/** @var Application $application */
|
||||
$application = \OC::$server->query(Application::class);
|
||||
$expiration = $application->getContainer()->query('Expiration');
|
||||
$size = 0;
|
||||
|
||||
|
@ -791,8 +793,8 @@ class Trashbin {
|
|||
* @return integer[] size of deleted files and number of deleted files
|
||||
*/
|
||||
public static function deleteExpiredFiles($files, $user) {
|
||||
$application = new Application();
|
||||
$expiration = $application->getContainer()->query('Expiration');
|
||||
/** @var Expiration $expiration */
|
||||
$expiration = \OC::$server->query(Expiration::class);
|
||||
$size = 0;
|
||||
$count = 0;
|
||||
foreach ($files as $file) {
|
||||
|
|
|
@ -67,7 +67,7 @@ class TrashbinTest extends \Test\TestCase {
|
|||
// clear share hooks
|
||||
\OC_Hook::clear('OCP\\Share');
|
||||
\OC::registerShareHooks();
|
||||
$application = new \OCA\Files_Sharing\AppInfo\Application();
|
||||
$application = \OC::$server->query(\OCA\Files_Sharing\AppInfo\Application::class);
|
||||
$application->registerMountProviders();
|
||||
|
||||
//disable encryption
|
||||
|
@ -76,7 +76,9 @@ class TrashbinTest extends \Test\TestCase {
|
|||
$config = \OC::$server->getConfig();
|
||||
//configure trashbin
|
||||
self::$rememberRetentionObligation = $config->getSystemValue('trashbin_retention_obligation', \OCA\Files_Trashbin\Expiration::DEFAULT_RETENTION_OBLIGATION);
|
||||
$config->setSystemValue('trashbin_retention_obligation', 'auto, 2');
|
||||
/** @var \OCA\Files_Trashbin\Expiration $expiration */
|
||||
$expiration = \OC::$server->query(\OCA\Files_Trashbin\Expiration::class);
|
||||
$expiration->setRetentionObligation('auto, 2');
|
||||
|
||||
// register hooks
|
||||
\OCA\Files_Trashbin\Trashbin::registerHooks();
|
||||
|
@ -94,7 +96,9 @@ class TrashbinTest extends \Test\TestCase {
|
|||
$user->delete();
|
||||
}
|
||||
|
||||
\OC::$server->getConfig()->setSystemValue('trashbin_retention_obligation', self::$rememberRetentionObligation);
|
||||
/** @var \OCA\Files_Trashbin\Expiration $expiration */
|
||||
$expiration = \OC::$server->query(\OCA\Files_Trashbin\Expiration::class);
|
||||
$expiration->setRetentionObligation(self::$rememberRetentionObligation);
|
||||
|
||||
\OC_Hook::clear();
|
||||
|
||||
|
@ -152,7 +156,9 @@ class TrashbinTest extends \Test\TestCase {
|
|||
*/
|
||||
public function testExpireOldFiles() {
|
||||
|
||||
$currentTime = time();
|
||||
/** @var \OCP\AppFramework\Utility\ITimeFactory $time */
|
||||
$time = \OC::$server->query(\OCP\AppFramework\Utility\ITimeFactory::class);
|
||||
$currentTime = $time->getTime();
|
||||
$expireAt = $currentTime - 2 * 24 * 60 * 60;
|
||||
$expiredDate = $currentTime - 3 * 24 * 60 * 60;
|
||||
|
||||
|
@ -684,9 +690,9 @@ class TrashbinForTesting extends \OCA\Files_Trashbin\Trashbin {
|
|||
* @param OCP\Files\FileInfo[] $files
|
||||
* @param integer $limit
|
||||
*/
|
||||
public function dummyDeleteExpiredFiles($files, $limit) {
|
||||
public function dummyDeleteExpiredFiles($files) {
|
||||
// dummy value for $retention_obligation because it is not needed here
|
||||
return parent::deleteExpiredFiles($files, TrashbinTest::TEST_TRASHBIN_USER1, $limit, 0);
|
||||
return parent::deleteExpiredFiles($files, TrashbinTest::TEST_TRASHBIN_USER1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -26,7 +26,8 @@
|
|||
|
||||
namespace OCA\Files_Versions\AppInfo;
|
||||
|
||||
$application = new Application();
|
||||
/** @var Application $application */
|
||||
$application = \OC::$server->query(Application::class);
|
||||
$application->registerRoutes($this, [
|
||||
'routes' => [
|
||||
[
|
||||
|
|
|
@ -850,8 +850,8 @@ class Storage {
|
|||
* @return Expiration
|
||||
*/
|
||||
protected static function getExpiration(){
|
||||
if (is_null(self::$application)) {
|
||||
self::$application = new Application();
|
||||
if (self::$application === null) {
|
||||
self::$application = \OC::$server->query(Application::class);
|
||||
}
|
||||
return self::$application->getContainer()->query(Expiration::class);
|
||||
}
|
||||
|
|
|
@ -25,9 +25,19 @@ declare(strict_types=1);
|
|||
namespace OCA\Provisioning_API;
|
||||
|
||||
use OCA\FederatedFileSharing\AppInfo\Application;
|
||||
use OCP\IServerContainer;
|
||||
|
||||
class FederatedFileSharingFactory {
|
||||
public function get(): Application {
|
||||
return new Application();
|
||||
|
||||
/** @var IServerContainer */
|
||||
private $serverContainer;
|
||||
|
||||
public function __construct(IServerContainer $serverContainer) {
|
||||
$this->serverContainer = $serverContainer;
|
||||
}
|
||||
|
||||
public function get(): Application {
|
||||
return $this->serverContainer->query(Application::class);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -38,7 +38,8 @@ namespace OCA\Settings;
|
|||
|
||||
use OCA\Settings\AppInfo\Application;
|
||||
|
||||
$application = new Application();
|
||||
/** @var Application $application */
|
||||
$application = \OC::$server->query(Application::class);
|
||||
$this->useCollection('root');
|
||||
$application->registerRoutes($this, [
|
||||
'resources' => [
|
||||
|
|
|
@ -90,7 +90,7 @@ class PersonalInfo implements ISettings {
|
|||
$federatedFileSharingEnabled = $this->appManager->isEnabledForUser('federatedfilesharing');
|
||||
$lookupServerUploadEnabled = false;
|
||||
if($federatedFileSharingEnabled) {
|
||||
$federatedFileSharing = new Application();
|
||||
$federatedFileSharing = \OC::$server->query(Application::class);
|
||||
$shareProvider = $federatedFileSharing->getFederatedShareProvider();
|
||||
$lookupServerUploadEnabled = $shareProvider->isLookupServerUploadEnabled();
|
||||
}
|
||||
|
|
|
@ -34,7 +34,8 @@
|
|||
|
||||
use OC\Core\Application;
|
||||
|
||||
$application = new Application();
|
||||
/** @var Application $application */
|
||||
$application = \OC::$server->query(Application::class);
|
||||
$application->registerRoutes($this, [
|
||||
'routes' => [
|
||||
['name' => 'lost#email', 'url' => '/lostpassword/email', 'verb' => 'POST'],
|
||||
|
|
|
@ -727,7 +727,7 @@ class OC {
|
|||
// Make sure that the application class is not loaded before the database is setup
|
||||
if ($systemConfig->getValue("installed", false)) {
|
||||
OC_App::loadApp('settings');
|
||||
$settings = new \OCA\Settings\AppInfo\Application();
|
||||
$settings = \OC::$server->query(\OCA\Settings\AppInfo\Application::class);
|
||||
$settings->register();
|
||||
}
|
||||
|
||||
|
|
|
@ -371,7 +371,7 @@ class Router implements IRouter {
|
|||
$applicationClassName = $appNameSpace . '\\AppInfo\\Application';
|
||||
|
||||
if (class_exists($applicationClassName)) {
|
||||
$application = new $applicationClassName();
|
||||
$application = \OC::$server->query($applicationClassName);
|
||||
} else {
|
||||
$application = new App($appName);
|
||||
}
|
||||
|
|
|
@ -100,8 +100,9 @@ class ServerContainer extends SimpleContainer {
|
|||
if (!isset($this->hasNoAppContainer[$namespace])) {
|
||||
$applicationClassName = 'OCA\\' . $sensitiveNamespace . '\\AppInfo\\Application';
|
||||
if (class_exists($applicationClassName)) {
|
||||
new $applicationClassName();
|
||||
$app = new $applicationClassName();
|
||||
if (isset($this->appContainers[$namespace])) {
|
||||
$this->appContainers[$namespace]->offsetSet($applicationClassName, $app);
|
||||
return $this->appContainers[$namespace];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue