diff --git a/src/Core/Addon.php b/src/Core/Addon.php index 8d1a866915..06f6a12967 100644 --- a/src/Core/Addon.php +++ b/src/Core/Addon.php @@ -84,7 +84,7 @@ class Addon public static function getAdminList(): array { $addons_admin = []; - $addons = DI::config()->get('addons') ?? []; + $addons = array_filter(DI::config()->get('addons') ?? []); ksort($addons); foreach ($addons as $name => $data) { @@ -117,7 +117,7 @@ class Addon */ public static function loadAddons() { - self::$addons = array_keys(DI::config()->get('addons') ?? []); + self::$addons = array_keys(array_filter(DI::config()->get('addons') ?? [])); } /** @@ -192,7 +192,7 @@ class Addon */ public static function reload() { - $addons = DI::config()->get('addons') ?? []; + $addons = array_filter(DI::config()->get('addons') ?? []); foreach ($addons as $name => $data) { $addonname = Strings::sanitizeFilePathItem(trim($name)); @@ -315,7 +315,7 @@ class Addon public static function getVisibleList(): array { $visible_addons = []; - $addons = DI::config()->get('addons') ?? []; + $addons = array_filter(DI::config()->get('addons') ?? []); foreach ($addons as $name => $data) { $visible_addons[] = $name; diff --git a/src/Core/Config/Util/ConfigFileManager.php b/src/Core/Config/Util/ConfigFileManager.php index f3627cf477..011dbf0e48 100644 --- a/src/Core/Config/Util/ConfigFileManager.php +++ b/src/Core/Config/Util/ConfigFileManager.php @@ -177,7 +177,7 @@ class ConfigFileManager { $filename = $this->configDir . '/' . self::CONFIG_DATA_FILE; - if (file_exists($filename)) { + if (file_exists($filename) && (filesize($filename) > 0)) { // The fallback empty return content $content = 'config[$category][$key])) { + if (!key_exists($key, $this->config[$category] ?? [])) { $return[$category][$key] = $config[$category][$key]; } } @@ -311,6 +311,11 @@ class Cache if (is_array($cache->config[$category])) { $keys = array_keys($cache->config[$category]); + if (is_null($newConfig[$category] ?? null)) { + $newConfig[$category] = []; + $newSource[$category] = []; + } + foreach ($keys as $key) { $newConfig[$category][$key] = $cache->config[$category][$key]; $newSource[$category][$key] = $cache->source[$category][$key]; diff --git a/src/Module/Api/ApiResponse.php b/src/Module/Api/ApiResponse.php index 2d54bc1765..b5b2a4717c 100644 --- a/src/Module/Api/ApiResponse.php +++ b/src/Module/Api/ApiResponse.php @@ -276,9 +276,8 @@ class ApiResponse extends Response 'agent' => $_SERVER['HTTP_USER_AGENT'] ?? '', 'request' => $request, ]); - $error = $this->l10n->t('API endpoint %s %s is not implemented', strtoupper($method), $path); - $error_description = $this->l10n->t('The API endpoint is currently not implemented but might be in the future.'); + $error = $this->l10n->t('API endpoint %s %s is not implemented but might be in the future.', strtoupper($method), $path); - $this->exit('error', ['error' => ['error' => $error, 'error_description' => $error_description]]); + $this->error(501, 'Not Implemented', $error); } } diff --git a/src/Module/OStatus/PubSub.php b/src/Module/OStatus/PubSub.php index c4614855ca..5fbc529836 100644 --- a/src/Module/OStatus/PubSub.php +++ b/src/Module/OStatus/PubSub.php @@ -58,7 +58,7 @@ class PubSub extends \Friendica\BaseModule $this->logger->info('Feed arrived.', ['from' => $this->request->getRemoteAddress(), 'for' => $this->args->getCommand(), 'user-agent' => $this->server['HTTP_USER_AGENT']]); $this->logger->debug('Data stream.', ['xml' => $xml]); - $this->logger->debug('Gut request data.', ['request' => $request]); + $this->logger->debug('Got request data.', ['request' => $request]); $nickname = $this->parameters['nickname'] ?? ''; $contact_id = $this->parameters['cid'] ?? 0; diff --git a/src/Module/OStatus/PubSubHubBub.php b/src/Module/OStatus/PubSubHubBub.php index de2104b212..caaa31f98b 100644 --- a/src/Module/OStatus/PubSubHubBub.php +++ b/src/Module/OStatus/PubSubHubBub.php @@ -71,7 +71,7 @@ class PubSubHubBub extends \Friendica\BaseModule throw new HTTPException\ForbiddenException(); } - $this->logger->debug('Gut request data.', ['request' => $request]); + $this->logger->debug('Got request data.', ['request' => $request]); // Subscription request from subscriber // https://pubsubhubbub.github.io/PubSubHubbub/pubsubhubbub-core-0.4.html#rfc.section.5.1 diff --git a/src/Module/OStatus/Salmon.php b/src/Module/OStatus/Salmon.php index 64dcec22cf..889d852d96 100644 --- a/src/Module/OStatus/Salmon.php +++ b/src/Module/OStatus/Salmon.php @@ -65,7 +65,7 @@ class Salmon extends \Friendica\BaseModule protected function post(array $request = []) { $xml = Network::postdata(); - $this->logger->debug('Gut request data.', ['request' => $request]); + $this->logger->debug('Got request data.', ['request' => $request]); $nickname = $this->parameters['nickname'] ?? ''; if (empty($nickname)) { diff --git a/src/Object/Api/Mastodon/Instance.php b/src/Object/Api/Mastodon/Instance.php index fe1a9b3fef..14914cd7fc 100644 --- a/src/Object/Api/Mastodon/Instance.php +++ b/src/Object/Api/Mastodon/Instance.php @@ -54,7 +54,7 @@ class Instance extends BaseDataTransferObject protected $urls; /** @var Stats */ protected $stats; - /** @var string|null */ + /** @var string|null This is meant as a server banner, default Mastodon "thumbnail" is 1600×620px */ protected $thumbnail = null; /** @var array */ protected $languages; @@ -91,7 +91,7 @@ class Instance extends BaseDataTransferObject $this->version = '2.8.0 (compatible; Friendica ' . App::VERSION . ')'; $this->urls = null; // Not supported $this->stats = new Stats($config, $database); - $this->thumbnail = $baseUrl->get() . ($config->get('system', 'shortcut_icon') ?? 'images/friendica-32.png'); + $this->thumbnail = $baseUrl->get() . 'images/friendica-banner.jpg'; $this->languages = [$config->get('system', 'language')]; $this->max_toot_chars = (int)$config->get('config', 'api_import_size', $config->get('config', 'max_import_size')); $this->registrations = ($register_policy != Register::CLOSED); diff --git a/tests/src/Core/Config/Cache/CacheTest.php b/tests/src/Core/Config/Cache/CacheTest.php index dc9b62dc00..e14b7998c5 100644 --- a/tests/src/Core/Config/Cache/CacheTest.php +++ b/tests/src/Core/Config/Cache/CacheTest.php @@ -40,6 +40,7 @@ class CacheTest extends MockedTest 'int' => 235, 'dec' => 2.456, 'array' => ['1', 2, '3', true, false], + 'null' => null, ], 'config' => [ 'a' => 'value', @@ -503,6 +504,24 @@ class CacheTest extends MockedTest ], ], ], + /** @see https://github.com/friendica/friendica/issues/12486#issuecomment-1374609349 */ + 'test_with_null' => [ + 'data' => [ + 'test_with_null' => null, + 'config' => [ + 'register_policy' => 2, + 'register_text' => '', + 'sitename' => 'Friendica Social Network23', + 'hostname' => 'friendica.local', + 'private_addons' => false, + ], + 'system' => [ + 'dbclean_expire_conversation' => 90, + ], + ], + 'cat' => 'test_with_null', + 'assertion' => null, + ], ]; } @@ -511,10 +530,28 @@ class CacheTest extends MockedTest * * @dataProvider dataTestCat */ - public function testGetCategory(array $data, string $category, array $assertion) + public function testGetCategory($data, string $category, $assertion) { $cache = new Cache($data); self::assertEquals($assertion, $cache->get($category)); } + + /** + * Test that the cache can get merged with different categories + * + * @dataProvider dataTestCat + */ + public function testCatMerge($data, string $category) + { + $cache = new Cache($data); + + $newCache = $cache->merge(new Cache([ + $category => [ + 'new_key' => 'new_value', + ], + ])); + + self::assertEquals('new_value', $newCache->get($category, 'new_key')); + } } diff --git a/tests/src/Core/Config/Cache/ConfigFileManagerTest.php b/tests/src/Core/Config/Cache/ConfigFileManagerTest.php index 2adfc27ef7..6c2c41ef65 100644 --- a/tests/src/Core/Config/Cache/ConfigFileManagerTest.php +++ b/tests/src/Core/Config/Cache/ConfigFileManagerTest.php @@ -511,4 +511,23 @@ class ConfigFileManagerTest extends MockedTest self::assertNull($configCache->get('system', 'default_timezone')); } + + /** + * Test for empty node.config.php + */ + public function testEmptyFile() + { + $this->delConfigFile('node.config.php'); + + vfsStream::newFile('node.config.php') + ->at($this->root->getChild('config')) + ->setContent(''); + + $configFileManager = (new Config())->createConfigFileManager($this->root->url()); + $configCache = new Cache(); + + $configFileManager->setupCache($configCache); + + self::assertEquals(1,1); + } } diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index eaf8dacd04..41c14c6149 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2023.03-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-08 17:39+0000\n" +"POT-Creation-Date: 2023-01-08 17:47+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -5230,12 +5230,7 @@ msgstr "" #: src/Module/Api/ApiResponse.php:279 #, php-format -msgid "API endpoint %s %s is not implemented" -msgstr "" - -#: src/Module/Api/ApiResponse.php:280 -msgid "" -"The API endpoint is currently not implemented but might be in the future." +msgid "API endpoint %s %s is not implemented but might be in the future." msgstr "" #: src/Module/Api/Mastodon/Apps.php:64