From 5a9e9cc41ba8104881d905ad03becf1e94b3e489 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 21 Jan 2023 16:58:09 +0100 Subject: [PATCH 1/5] Replace Level-2 Dice patch with new release --- composer.json | 11 +-- composer.lock | 104 ++--------------------- mods/patches/level-2-dice-dice-php.patch | 10 --- 3 files changed, 8 insertions(+), 117 deletions(-) delete mode 100644 mods/patches/level-2-dice-dice-php.patch diff --git a/composer.json b/composer.json index a86354acd..c6746c123 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,6 @@ "ext-xml": "*", "asika/simple-console": "^1.0", "bacon/bacon-qr-code": "^2.0.0", - "cweagans/composer-patches": "^1.7", "divineomega/password_exposed": "^2.8", "ezyang/htmlpurifier": "^4.7", "friendica/json-ld": "^1.0", @@ -127,8 +126,7 @@ "mockery/mockery": "^1.3", "mikey179/vfsstream": "^1.6", "phpunit/phpunit": "^9", - "dms/phpunit-arraysubset-asserts": "^0.3.1", - "symplify/vendor-patches": "11.2.0.72" + "dms/phpunit-arraysubset-asserts": "^0.3.1" }, "scripts": { "test": "phpunit", @@ -136,12 +134,5 @@ "cs:install": "@composer install --working-dir=bin/dev/php-cs-fixer", "cs:check": ["@cs:install", "bin/dev/php-cs-fixer/vendor/bin/php-cs-fixer fix --dry-run --diff"], "cs:fix": ["@cs:install", "bin/dev/php-cs-fixer/vendor/bin/php-cs-fixer fix"] - }, - "extra": { - "patches": { - "level-2/dice": [ - "mods/patches/level-2-dice-dice-php.patch" - ] - } } } diff --git a/composer.lock b/composer.lock index aa3f7eed3..003478026 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0bbc4011b7628c0d563f80f361e98cdd", + "content-hash": "5af9ac9003f4653f3aa1860dd5a4d821", "packages": [ { "name": "asika/simple-console", @@ -368,50 +368,6 @@ ], "time": "2022-07-20T07:14:26+00:00" }, - { - "name": "cweagans/composer-patches", - "version": "1.7.3", - "source": { - "type": "git", - "url": "https://github.com/cweagans/composer-patches.git", - "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e190d4466fe2b103a55467dfa83fc2fecfcaf2db", - "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3.0" - }, - "require-dev": { - "composer/composer": "~1.0 || ~2.0", - "phpunit/phpunit": "~4.6" - }, - "type": "composer-plugin", - "extra": { - "class": "cweagans\\Composer\\Patches" - }, - "autoload": { - "psr-4": { - "cweagans\\Composer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Cameron Eagans", - "email": "me@cweagans.net" - } - ], - "description": "Provides a way to patch Composer packages.", - "time": "2022-12-20T22:53:13+00:00" - }, { "name": "dasprid/enum", "version": "1.0.3", @@ -1289,16 +1245,16 @@ }, { "name": "level-2/dice", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/Level-2/Dice.git", - "reference": "3e9a8548398c01e2527110c916a93f6efa17ac9c" + "reference": "e04c98d96bcc932a917b2b7e7944887e4839056a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Level-2/Dice/zipball/3e9a8548398c01e2527110c916a93f6efa17ac9c", - "reference": "3e9a8548398c01e2527110c916a93f6efa17ac9c", + "url": "https://api.github.com/repos/Level-2/Dice/zipball/e04c98d96bcc932a917b2b7e7944887e4839056a", + "reference": "e04c98d96bcc932a917b2b7e7944887e4839056a", "shasum": "" }, "require": { @@ -1309,9 +1265,7 @@ }, "type": "library", "extra": { - "patches_applied": [ - "mods/patches/level-2-dice-dice-php.patch" - ] + "patches_applied": [] }, "autoload": { "psr-4": { @@ -1336,7 +1290,7 @@ "di", "ioc" ], - "time": "2021-04-20T14:06:06+00:00" + "time": "2022-03-28T21:20:23+00:00" }, { "name": "lightopenid/lightopenid", @@ -6418,50 +6372,6 @@ ], "time": "2020-09-28T06:39:44+00:00" }, - { - "name": "symplify/vendor-patches", - "version": "11.2.0.72", - "source": { - "type": "git", - "url": "https://github.com/symplify/vendor-patches.git", - "reference": "83204e1a7a33ca958f9d1cc9c3b1b25f75270775" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/vendor-patches/zipball/83204e1a7a33ca958f9d1cc9c3b1b25f75270775", - "reference": "83204e1a7a33ca958f9d1cc9c3b1b25f75270775", - "shasum": "" - }, - "require": { - "cweagans/composer-patches": "^1.7", - "php": ">=7.2" - }, - "bin": [ - "bin/vendor-patches" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.3-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Generate vendor patches for packages with single command", - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2023-01-11T09:41:31+00:00" - }, { "name": "theseer/tokenizer", "version": "1.2.1", diff --git a/mods/patches/level-2-dice-dice-php.patch b/mods/patches/level-2-dice-dice-php.patch deleted file mode 100644 index 5319804cf..000000000 --- a/mods/patches/level-2-dice-dice-php.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- /dev/null -+++ ../Dice.php -@@ -257,6 +257,7 @@ - for ($i = 0; $i < count($args); $i++) { - if (call_user_func('is_' . $param->getType()->getName(), $args[$i])) { - $parameters[] = array_splice($args, $i, 1)[0]; -+ break; - } - } - } From 9627af924a0ad1fe305881b0febc2f22ab51524a Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 21 Jan 2023 17:19:35 +0100 Subject: [PATCH 2/5] Add support for toString/Serializable --- .../Config/Util/ConfigFileTransformer.php | 11 +++++ tests/Util/SerializableObjectDouble.php | 35 ++++++++++++++++ .../transformer/object_valid.node.config.php | 11 +++++ .../Config/Util/ConfigFileTransformerTest.php | 40 +++++++++++++++++-- 4 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 tests/Util/SerializableObjectDouble.php create mode 100644 tests/datasets/config/transformer/object_valid.node.config.php diff --git a/src/Core/Config/Util/ConfigFileTransformer.php b/src/Core/Config/Util/ConfigFileTransformer.php index 45e7a5522..f15972164 100644 --- a/src/Core/Config/Util/ConfigFileTransformer.php +++ b/src/Core/Config/Util/ConfigFileTransformer.php @@ -214,6 +214,17 @@ class ConfigFileTransformer case "NULL": return "null"; case "object": + if (method_exists($value, '__toString')) { + return sprintf('\'%s\'', $value); + } elseif ($value instanceof \Serializable) { + try { + return $value->serialize(); + } catch (\Exception $e) { + throw new \InvalidArgumentException(sprintf('Cannot serialize %s.', gettype($value)), $e); + } + } else { + throw new \InvalidArgumentException(sprintf('%s is an object without stringify.', gettype($value))); + } case "resource": case "resource (closed)": throw new \InvalidArgumentException(sprintf('%s in configs are not supported yet.', gettype($value))); diff --git a/tests/Util/SerializableObjectDouble.php b/tests/Util/SerializableObjectDouble.php new file mode 100644 index 000000000..5c40a04d8 --- /dev/null +++ b/tests/Util/SerializableObjectDouble.php @@ -0,0 +1,35 @@ +. + * + */ + +namespace Friendica\Test\Util; + +class SerializableObjectDouble implements \Serializable# +{ + public function serialize() + { + return '\'serialized\''; + } + + public function unserialize($data) + { + return '\'unserialized\''; + } +} diff --git a/tests/datasets/config/transformer/object_valid.node.config.php b/tests/datasets/config/transformer/object_valid.node.config.php new file mode 100644 index 000000000..bfe61f3c8 --- /dev/null +++ b/tests/datasets/config/transformer/object_valid.node.config.php @@ -0,0 +1,11 @@ + [ + 'toString' => new HiddenString('test'), + 'serializable' => new SerializableObjectDouble(), + ], +]; diff --git a/tests/src/Core/Config/Util/ConfigFileTransformerTest.php b/tests/src/Core/Config/Util/ConfigFileTransformerTest.php index bb156cf28..e7e8770b6 100644 --- a/tests/src/Core/Config/Util/ConfigFileTransformerTest.php +++ b/tests/src/Core/Config/Util/ConfigFileTransformerTest.php @@ -23,6 +23,9 @@ namespace Friendica\Test\src\Core\Config\Util; use Friendica\Core\Config\Util\ConfigFileTransformer; use Friendica\Test\MockedTest; +use Friendica\Test\Util\SerializableObjectDouble; +use ParagonIE\HiddenString\HiddenString; +use function PHPUnit\Framework\assertEquals; class ConfigFileTransformerTest extends MockedTest { @@ -45,9 +48,34 @@ class ConfigFileTransformerTest extends MockedTest 'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/object.node.config.php'), 'assertException' => true, ], - 'ressource_invalid' => [ + 'ressource' => [ 'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/ressource.node.config.php'), - 'assertException' => true, + 'assertException' => false, + 'assertion' => << [ + 'ressources_not_allowed' => '', + ], +]; + +EOF, + ], + 'object_valid' => [ + 'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/object_valid.node.config.php'), + 'assertException' => false, + 'assertion' => << [ + 'toString' => 'test', + 'serializable' => 'serialized', + ], +]; + +EOF, ], 'test_types' => [ 'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/types.node.config.php'), @@ -63,7 +91,7 @@ class ConfigFileTransformerTest extends MockedTest * * @dataProvider dataTests */ - public function testConfigFile(string $configFile, bool $assertException = false) + public function testConfigFile(string $configFile, bool $assertException = false, $assertion = null) { $dataArray = include $configFile; @@ -73,6 +101,10 @@ class ConfigFileTransformerTest extends MockedTest $newConfig = ConfigFileTransformer::encode($dataArray); - self::assertEquals(file_get_contents($configFile), $newConfig); + if (empty($assertion)) { + self::assertEquals(file_get_contents($configFile), $newConfig); + } else { + self::assertEquals($assertion, $newConfig); + } } } From ac0e2aa9014a1128b631c8d7ae6dfba38be51462 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 21 Jan 2023 19:44:27 +0100 Subject: [PATCH 3/5] Update tests/src/Core/Config/Util/ConfigFileTransformerTest.php Co-authored-by: Hypolite Petovan --- tests/src/Core/Config/Util/ConfigFileTransformerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/src/Core/Config/Util/ConfigFileTransformerTest.php b/tests/src/Core/Config/Util/ConfigFileTransformerTest.php index e7e8770b6..c11a770ad 100644 --- a/tests/src/Core/Config/Util/ConfigFileTransformerTest.php +++ b/tests/src/Core/Config/Util/ConfigFileTransformerTest.php @@ -48,7 +48,7 @@ class ConfigFileTransformerTest extends MockedTest 'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/object.node.config.php'), 'assertException' => true, ], - 'ressource' => [ + 'resource' => [ 'configFile' => (dirname(__DIR__, 4) . '/datasets/config/transformer/ressource.node.config.php'), 'assertException' => false, 'assertion' => << Date: Sat, 21 Jan 2023 19:47:47 +0100 Subject: [PATCH 4/5] fix PHP-CS --- tests/Util/SerializableObjectDouble.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Util/SerializableObjectDouble.php b/tests/Util/SerializableObjectDouble.php index 5c40a04d8..e15965501 100644 --- a/tests/Util/SerializableObjectDouble.php +++ b/tests/Util/SerializableObjectDouble.php @@ -21,7 +21,7 @@ namespace Friendica\Test\Util; -class SerializableObjectDouble implements \Serializable# +class SerializableObjectDouble implements \Serializable { public function serialize() { From a7c4a3023a19039c769d879961b71fb206652f60 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sat, 21 Jan 2023 20:02:40 +0100 Subject: [PATCH 5/5] Add "Database::INSERT_IGNORE" for the initial value check --- src/Database/DBStructure.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php index c0bd005d1..579b9cdc1 100644 --- a/src/Database/DBStructure.php +++ b/src/Database/DBStructure.php @@ -783,7 +783,7 @@ class DBStructure } if (!DBA::exists('verb', ['id' => 0])) { - DBA::insert('verb', ['name' => '']); + DBA::insert('verb', ['name' => ''], Database::INSERT_IGNORE); $lastid = DBA::lastInsertId(); if ($lastid != 0) { DBA::update('verb', ['id' => 0], ['id' => $lastid]); @@ -819,7 +819,7 @@ class DBStructure } if (self::existsTable('contact') && !DBA::exists('contact', ['id' => 0])) { - DBA::insert('contact', ['nurl' => '']); + DBA::insert('contact', ['nurl' => ''], Database::INSERT_IGNORE); $lastid = DBA::lastInsertId(); if ($lastid != 0) { DBA::update('contact', ['id' => 0], ['id' => $lastid]); @@ -834,7 +834,7 @@ class DBStructure } if (self::existsTable('tag') && !DBA::exists('tag', ['id' => 0])) { - DBA::insert('tag', ['name' => '']); + DBA::insert('tag', ['name' => ''], Database::INSERT_IGNORE); $lastid = DBA::lastInsertId(); if ($lastid != 0) { DBA::update('tag', ['id' => 0], ['id' => $lastid]); @@ -850,7 +850,7 @@ class DBStructure if (self::existsTable('permissionset')) { if (!DBA::exists('permissionset', ['id' => 0])) { - DBA::insert('permissionset', ['allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '']); + DBA::insert('permissionset', ['allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => ''], Database::INSERT_IGNORE); $lastid = DBA::lastInsertId(); if ($lastid != 0) { DBA::update('permissionset', ['id' => 0], ['id' => $lastid]); @@ -878,7 +878,7 @@ class DBStructure } $fields = ['id' => $set['psid'], 'uid' => $set['uid'], 'allow_cid' => $permission, 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => '']; - DBA::insert('permissionset', $fields); + DBA::insert('permissionset', $fields, Database::INSERT_IGNORE); } DBA::close($sets); }