diff --git a/composer.lock b/composer.lock index 4b32a068..0f35232f 100644 --- a/composer.lock +++ b/composer.lock @@ -9,30 +9,38 @@ "packages-dev": [ { "name": "composer/pcre", - "version": "3.1.3", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90", + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.8" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.8", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -60,7 +68,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.3" + "source": "https://github.com/composer/pcre/tree/3.2.0" }, "funding": [ { @@ -76,20 +84,20 @@ "type": "tidelift" } ], - "time": "2024-03-19T10:26:25+00:00" + "time": "2024-07-25T09:36:02+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", "shasum": "" }, "require": { @@ -141,7 +149,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.2" }, "funding": [ { @@ -157,7 +165,7 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-07-12T11:35:52+00:00" }, { "name": "composer/xdebug-handler", @@ -434,16 +442,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", "shasum": "" }, "require": { @@ -451,11 +459,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -481,7 +490,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" }, "funding": [ { @@ -489,7 +498,7 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2024-06-12T14:39:25+00:00" }, { "name": "netresearch/jsonmapper", @@ -544,16 +553,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.0.2", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", "shasum": "" }, "require": { @@ -564,7 +573,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -596,22 +605,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" }, - "time": "2024-03-05T20:51:40+00:00" + "time": "2024-07-01T20:03:41+00:00" }, { "name": "phan/phan", - "version": "5.4.3", + "version": "5.4.4", "source": { "type": "git", "url": "https://github.com/phan/phan.git", - "reference": "86a7acd99c1239b8867b49feca2398851212e7fe" + "reference": "a87bbadc95a5b57353f911fdbd227404f3b47c22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phan/phan/zipball/86a7acd99c1239b8867b49feca2398851212e7fe", - "reference": "86a7acd99c1239b8867b49feca2398851212e7fe", + "url": "https://api.github.com/repos/phan/phan/zipball/a87bbadc95a5b57353f911fdbd227404f3b47c22", + "reference": "a87bbadc95a5b57353f911fdbd227404f3b47c22", "shasum": "" }, "require": { @@ -676,9 +685,9 @@ ], "support": { "issues": "https://github.com/phan/phan/issues", - "source": "https://github.com/phan/phan/tree/5.4.3" + "source": "https://github.com/phan/phan/tree/5.4.4" }, - "time": "2023-12-26T17:57:35+00:00" + "time": "2024-07-25T20:34:20+00:00" }, { "name": "phar-io/manifest", @@ -975,16 +984,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.29.0", + "version": "1.29.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc" + "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc", - "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", "shasum": "" }, "require": { @@ -1016,22 +1025,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1" }, - "time": "2024-05-06T12:04:23+00:00" + "time": "2024-05-31T08:52:43+00:00" }, { "name": "phpstan/phpstan", - "version": "1.11.1", + "version": "1.11.9", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b" + "reference": "e370bcddadaede0c1716338b262346f40d296f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e524358f930e41a2b4cca1320e3b04fc26b39e0b", - "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e370bcddadaede0c1716338b262346f40d296f82", + "reference": "e370bcddadaede0c1716338b262346f40d296f82", "shasum": "" }, "require": { @@ -1076,7 +1085,7 @@ "type": "github" } ], - "time": "2024-05-15T08:00:59+00:00" + "time": "2024-08-01T16:25:18+00:00" }, { "name": "phpunit/php-code-coverage", @@ -1399,45 +1408,45 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.19", + "version": "9.6.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" + "reference": "49d7820565836236411f5dc002d16dd689cde42f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f", + "reference": "49d7820565836236411f5dc002d16dd689cde42f", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", + "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-code-coverage": "^9.2.31", + "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", "sebastian/version": "^3.0.2" }, "suggest": { @@ -1482,7 +1491,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.20" }, "funding": [ { @@ -1498,7 +1507,7 @@ "type": "tidelift" } ], - "time": "2024-04-05T04:35:58+00:00" + "time": "2024-07-10T11:45:39+00:00" }, { "name": "psr/container", @@ -1605,16 +1614,16 @@ }, { "name": "sabre/event", - "version": "5.1.4", + "version": "5.1.6", "source": { "type": "git", "url": "https://github.com/sabre-io/event.git", - "reference": "d7da22897125d34d7eddf7977758191c06a74497" + "reference": "e0e1ccbff1965083de9a6530182b8b70819e1347" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497", - "reference": "d7da22897125d34d7eddf7977758191c06a74497", + "url": "https://api.github.com/repos/sabre-io/event/zipball/e0e1ccbff1965083de9a6530182b8b70819e1347", + "reference": "e0e1ccbff1965083de9a6530182b8b70819e1347", "shasum": "" }, "require": { @@ -1623,7 +1632,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "~2.17.1", "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, "type": "library", "autoload": { @@ -1667,7 +1676,7 @@ "issues": "https://github.com/sabre-io/event/issues", "source": "https://github.com/fruux/sabre-event" }, - "time": "2021-11-04T06:51:17+00:00" + "time": "2024-07-26T05:09:47+00:00" }, { "name": "sebastian/cli-parser", @@ -2634,16 +2643,16 @@ }, { "name": "symfony/console", - "version": "v7.0.7", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c981e0e9380ce9f146416bde3150c79197ce9986" + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c981e0e9380ce9f146416bde3150c79197ce9986", - "reference": "c981e0e9380ce9f146416bde3150c79197ce9986", + "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", "shasum": "" }, "require": { @@ -2707,7 +2716,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.0.7" + "source": "https://github.com/symfony/console/tree/v7.1.3" }, "funding": [ { @@ -2723,7 +2732,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2794,16 +2803,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "0424dff1c58f028c451efff2045f5d92410bd540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540", "shasum": "" }, "require": { @@ -2853,7 +2862,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" }, "funding": [ { @@ -2869,20 +2878,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", "shasum": "" }, "require": { @@ -2931,7 +2940,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" }, "funding": [ { @@ -2947,20 +2956,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", "shasum": "" }, "require": { @@ -3012,7 +3021,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" }, "funding": [ { @@ -3028,20 +3037,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", "shasum": "" }, "require": { @@ -3092,7 +3101,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" }, "funding": [ { @@ -3108,20 +3117,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", "shasum": "" }, "require": { @@ -3172,7 +3181,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, "funding": [ { @@ -3188,7 +3197,7 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/service-contracts", @@ -3275,16 +3284,16 @@ }, { "name": "symfony/string", - "version": "v7.0.7", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/e405b5424dc2528e02e31ba26b83a79fd4eb8f63", - "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { @@ -3298,6 +3307,7 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { + "symfony/emoji": "^7.1", "symfony/error-handler": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", "symfony/intl": "^6.4|^7.0", @@ -3341,7 +3351,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.0.7" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -3357,7 +3367,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:29:19+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "theseer/tokenizer", diff --git a/www/composer.lock b/www/composer.lock index cc03d4f0..a9b6e6e1 100644 --- a/www/composer.lock +++ b/www/composer.lock @@ -12,7 +12,7 @@ "dist": { "type": "path", "url": "/storage/var/www/html/developers/clemens/core_data/composer-packages/CoreLibs-Composer-All", - "reference": "1357b98883c6e4bcac163c5fb29e28c8f968a814" + "reference": "3eb122959045f8de10f9dd35e6632199021752b8" }, "require": { "php": ">=8.2", @@ -20,7 +20,8 @@ }, "require-dev": { "egrajp/smarty-extended": "^4.3", - "gullevek/dotenv": "dev-master" + "gullevek/dotenv": "dev-master", + "phpunit/phpunit": "^9" }, "type": "library", "autoload": { diff --git a/www/vendor/composer/installed.json b/www/vendor/composer/installed.json index eedbb13b..02488f4b 100644 --- a/www/vendor/composer/installed.json +++ b/www/vendor/composer/installed.json @@ -7,7 +7,7 @@ "dist": { "type": "path", "url": "/storage/var/www/html/developers/clemens/core_data/composer-packages/CoreLibs-Composer-All", - "reference": "1357b98883c6e4bcac163c5fb29e28c8f968a814" + "reference": "3eb122959045f8de10f9dd35e6632199021752b8" }, "require": { "php": ">=8.2", @@ -15,7 +15,8 @@ }, "require-dev": { "egrajp/smarty-extended": "^4.3", - "gullevek/dotenv": "dev-master" + "gullevek/dotenv": "dev-master", + "phpunit/phpunit": "^9" }, "type": "library", "installation-source": "dist", diff --git a/www/vendor/composer/installed.php b/www/vendor/composer/installed.php index 025bccf2..d4be8e36 100644 --- a/www/vendor/composer/installed.php +++ b/www/vendor/composer/installed.php @@ -13,7 +13,7 @@ 'egrajp/corelibs-composer-all' => array( 'pretty_version' => 'dev-development', 'version' => 'dev-development', - 'reference' => '1357b98883c6e4bcac163c5fb29e28c8f968a814', + 'reference' => '3eb122959045f8de10f9dd35e6632199021752b8', 'type' => 'library', 'install_path' => __DIR__ . '/../egrajp/corelibs-composer-all', 'aliases' => array(), diff --git a/www/vendor/egrajp/corelibs-composer-all/.gitignore b/www/vendor/egrajp/corelibs-composer-all/.gitignore index 7579f743..5855445f 100644 --- a/www/vendor/egrajp/corelibs-composer-all/.gitignore +++ b/www/vendor/egrajp/corelibs-composer-all/.gitignore @@ -1,2 +1,3 @@ -vendor +vendor/ composer.lock +tools/ diff --git a/www/vendor/egrajp/corelibs-composer-all/.phive/phars.xml b/www/vendor/egrajp/corelibs-composer-all/.phive/phars.xml index 653f7f64..36149ce0 100644 --- a/www/vendor/egrajp/corelibs-composer-all/.phive/phars.xml +++ b/www/vendor/egrajp/corelibs-composer-all/.phive/phars.xml @@ -1,8 +1,8 @@ - - + + diff --git a/www/vendor/egrajp/corelibs-composer-all/ReadMe.md b/www/vendor/egrajp/corelibs-composer-all/ReadMe.md index f11fa834..922d56fc 100644 --- a/www/vendor/egrajp/corelibs-composer-all/ReadMe.md +++ b/www/vendor/egrajp/corelibs-composer-all/ReadMe.md @@ -9,16 +9,41 @@ For local install only - Template\SmartyExtended - Admin\EditBase -## Setup from central composer +## Publish to gitea or gitlab server -Setup from gitea internal servers +Currently there are only gitea and gitlab supported, github does not have support for composer packages -```sh -composer config repositories.git.egplusww.jp.Composer composer https://git.egplusww.jp/api/packages/Composer/composer +`publish\publish.sh go` will run the publish script + +All the configuration is done in the `publish\.env.deploy` file + +```ini +# downlaod file name is "Repository name" "-" "version" where +# version is "vN.N.N" +GITEA_PUBLISH=1 +GITEA_UPLOAD_FILENAME="Upload-File-Name"; +GITEA_USER=gitea-user +GITEA_TOKEN=gitea-tokek +GITEA_URL_DL=https://[gitea.hostname]/[to/package/folder]/archive +GITEA_URL_PUSH=https://[gitea.hostname]/api/packages/[organization]/composer + +GITLAB_PUBLISH=1 +GITLAB_URL=gitlab URl to repository +GITLAB_DEPLOY_TOKEN=gitlab-token ``` -Alternative setup composer local zip file repot: -`composer config repositories.composer.egplusww.jp composer http://composer.egplusww.jp` +At the moment there is only one gitea or gitlab target setable + +## Setup from central composer + +Setup from gitea servers + +[hostname] is the hostname for your gitea server (or wherever this is published) +[OrgName] is the organization name where the composer packages are hosted + +```sh +composer config repositories.[hostname].Composer composer https://[hostname]/api/packages/[OrgName]/composer +``` ## Install package diff --git a/www/vendor/egrajp/corelibs-composer-all/composer.json b/www/vendor/egrajp/corelibs-composer-all/composer.json index 6867202d..8cb94eea 100644 --- a/www/vendor/egrajp/corelibs-composer-all/composer.json +++ b/www/vendor/egrajp/corelibs-composer-all/composer.json @@ -21,7 +21,8 @@ }, "require-dev": { "egrajp/smarty-extended": "^4.3", - "gullevek/dotenv": "dev-master" + "gullevek/dotenv": "dev-master", + "phpunit/phpunit": "^9" }, "repositories": { "git.egplusww.jp.Composer": { diff --git a/www/vendor/egrajp/corelibs-composer-all/phpstan.neon b/www/vendor/egrajp/corelibs-composer-all/phpstan.neon index 7c0a0eb7..20798b57 100644 --- a/www/vendor/egrajp/corelibs-composer-all/phpstan.neon +++ b/www/vendor/egrajp/corelibs-composer-all/phpstan.neon @@ -2,7 +2,7 @@ includes: - phpstan-conditional.php parameters: - tmpDir: /tmp/phpstan-corelibs-composer + tmpDir: %currentWorkingDirectory%/tmp/phpstan-corelibs-composer level: 8 # max is now 9 checkMissingCallableSignature: true treatPhpDocTypesAsCertain: false diff --git a/www/vendor/egrajp/corelibs-composer-all/publish/last.published b/www/vendor/egrajp/corelibs-composer-all/publish/last.published index be62bf9b..17920796 100644 --- a/www/vendor/egrajp/corelibs-composer-all/publish/last.published +++ b/www/vendor/egrajp/corelibs-composer-all/publish/last.published @@ -1 +1 @@ -9.12.2 +9.13.2 diff --git a/www/vendor/egrajp/corelibs-composer-all/publish/publish.sh b/www/vendor/egrajp/corelibs-composer-all/publish/publish.sh index fccd3780..c56ac3eb 100755 --- a/www/vendor/egrajp/corelibs-composer-all/publish/publish.sh +++ b/www/vendor/egrajp/corelibs-composer-all/publish/publish.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -BASE_FOLDER=$(dirname $(readlink -f $0))"/"; +BASE_FOLDER=$(dirname "$(readlink -f "$0")")"/"; PACKAGE_DOWNLOAD="${BASE_FOLDER}package-download/"; if [ ! -d "${PACKAGE_DOWNLOAD}" ]; then mkdir "${PACKAGE_DOWNLOAD}"; @@ -15,30 +15,35 @@ if [ -z "${VERSION}" ]; then fi; # compare version, if different or newer, deploy if [ -f "${file_last_published}" ]; then - LAST_PUBLISHED_VERSION=$(cat ${file_last_published}); - if $(dpkg --compare-versions "${VERSION}" le "${LAST_PUBLISHED_VERSION}"); then + LAST_PUBLISHED_VERSION=$(cat "${file_last_published}"); + if dpkg --compare-versions "${VERSION}" le "${LAST_PUBLISHED_VERSION}"; then echo "git tag version ${VERSION} is not newer than previous published version ${LAST_PUBLISHED_VERSION}"; exit; fi; fi; # read in the .env.deploy file and we must have +# for gitea +# GITEA_PUBLISH: must be set with a value to trigger publish run # GITEA_UPLOAD_FILENAME -# GITLAB_USER -# GITLAB_TOKEN -# GITLAB_URL # GITEA_USER # GITEA_DEPLOY_TOKEN # GITEA_URL_DL # GITEA_URL_PUSH +# for gitlab +# GITLAB_PUBLISH: must be set with a value to trigger publish run +# GITLAB_USER +# GITLAB_TOKEN +# GITLAB_URL if [ ! -f "${BASE_FOLDER}.env.deploy" ]; then echo "Deploy enviroment file .env.deploy is missing"; exit; fi; set -o allexport; -cd ${BASE_FOLDER}; +cd "${BASE_FOLDER}" || exit; +# shellcheck source=.env.deploy source .env.deploy; -cd -; +cd - || exit; set +o allexport; if [ "${go_flag}" != "go" ]; then @@ -50,37 +55,42 @@ fi; echo "[START]"; # gitea -if [ ! -z "${GITEA_UPLOAD_FILENAME}" ] && - [ ! -z "${GITEA_URL_DL}" ] && [ ! -z "${GITEA_URL_PUSH}" ] && - [ ! -z "${GITEA_USER}" ] && [ ! -z "${GITEA_TOKEN}" ]; then - if [ ! -f "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" ]; then - curl -LJO \ - --output-dir "${PACKAGE_DOWNLOAD}" \ - ${GITEA_URL_DL}/v${VERSION}.zip; - fi; - if [ ! -f "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" ]; then - echo "Version file does not exist for ${VERSION}"; +# skip iof +if [ -n "${GITEA_PUBLISH}" ]; then + if [ -n "${GITEA_UPLOAD_FILENAME}" ] && + [ -n "${GITEA_URL_DL}" ] && [ -n "${GITEA_URL_PUSH}" ] && + [ -n "${GITEA_USER}" ] && [ -n "${GITEA_TOKEN}" ]; then + if [ ! -f "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" ]; then + curl -LJO \ + --output-dir "${PACKAGE_DOWNLOAD}" \ + "${GITEA_URL_DL}"/v"${VERSION}".zip; + fi; + if [ ! -f "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" ]; then + echo "Version file does not exist for ${VERSION}"; + else + curl --user "${GITEA_USER}":"${GITEA_TOKEN}" \ + --upload-file "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" \ + "${GITEA_URL_PUSH}"?version="${VERSION}"; + echo "${VERSION}" > "${file_last_published}"; + fi; else - curl --user ${GITEA_USER}:${GITEA_TOKEN} \ - --upload-file "${PACKAGE_DOWNLOAD}${GITEA_UPLOAD_FILENAME}-v${VERSION}.zip" \ - ${GITEA_URL_PUSH}?version=${VERSION}; - echo "${VERSION}" > "${file_last_published}"; + echo "Missing either GITEA_UPLOAD_FILENAME, GITEA_URL_DL, GITEA_URL_PUSH, GITEA_USER or GITEA_TOKEN environment variable"; fi; -else - echo "Missing either GITEA_UPLOAD_FILENAME, GITEA_URL_DL, GITEA_URL_PUSH, GITEA_USER or GITEA_TOKEN environment variable"; fi; # gitlab -if [ ! -z "${GITLAB_URL}" ] && [ ! -z "${GITLAB_DEPLOY_TOKEN}" ]; then - curl --data tag=v${VERSION} \ - --header "Deploy-Token: ${GITLAB_DEPLOY_TOKEN}" \ - "${GITLAB_URL}"; - curl --data branch=master \ - --header "Deploy-Token: ${GITLAB_DEPLOY_TOKEN}" \ - "${GITLAB_URL}"; - echo "${VERSION}" > "${file_last_published}"; -else - echo "Missing GITLAB_DEPLOY_TOKEN environment variable"; +if [ -n "${GITLAB_PUBLISH}" ]; then + if [ -n "${GITLAB_URL}" ] && [ -n "${GITLAB_DEPLOY_TOKEN}" ]; then + curl --data tag=v"${VERSION}" \ + --header "Deploy-Token: ${GITLAB_DEPLOY_TOKEN}" \ + "${GITLAB_URL}"; + curl --data branch=master \ + --header "Deploy-Token: ${GITLAB_DEPLOY_TOKEN}" \ + "${GITLAB_URL}"; + echo "${VERSION}" > "${file_last_published}"; + else + echo "Missing GITLAB_URL or GITLAB_DEPLOY_TOKEN environment variable"; + fi; fi; echo ""; echo "[DONE]"; diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Convert/Html.php b/www/vendor/egrajp/corelibs-composer-all/src/Convert/Html.php index 147a6443..2094dc55 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Convert/Html.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Convert/Html.php @@ -16,16 +16,22 @@ class Html /** * full wrapper for html entities * + * uses default params as: ENT_QUOTES | ENT_HTML5 + * switches from ENT_HTML401 to ENT_HTML5 as we assume all our pages have + * removed: ENT_SUBSTITUTE -> wrong characters will be replaced with space + * encodes in UTF-8 + * does not double encode + * * @param mixed $string string to html encode + * @param int $flags [default: ENT_QUOTES | ENT_HTML5] * @return mixed if string, encoded, else as is (eg null) */ - public static function htmlent(mixed $string): mixed + public static function htmlent(mixed $string, int $flags = ENT_QUOTES | ENT_HTML5): mixed { if (is_string($string)) { - return htmlentities($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); - } else { - return $string; + return htmlentities($string, $flags, 'UTF-8', false); } + return $string; } /** @@ -54,14 +60,10 @@ class Html */ public static function checked(array|string $haystack, string $needle, int $type = 0): ?string { - if (is_array($haystack)) { - if (in_array($needle, $haystack)) { - return $type ? 'checked' : 'selected'; - } - } else { - if ($haystack == $needle) { - return $type ? 'checked' : 'selected'; - } + if (is_array($haystack) && in_array($needle, $haystack)) { + return $type ? 'checked' : 'selected'; + } elseif (!is_array($haystack) && $haystack == $needle) { + return $type ? 'checked' : 'selected'; } return null; } diff --git a/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php b/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php index efe3901c..a6d7ad63 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/DB/IO.php @@ -1324,8 +1324,12 @@ class IO // /s for matching new line in . list // [disabled, we don't used ^ or $] /m for multi line match // Matches in 1:, must be array_filtered to remove empty, count with array_unique + $query_split = '[(=,?-]|->|->>|#>|#>>|@>|<@|\?\|\?\&|\|\||#-'; preg_match_all( - '/(?:\'.*?\')?\s*(?:\?\?|<>|[(=,])\s*(?:\d+|(?:\'.*?\')|(\$[1-9]{1}(?:[0-9]{1,})?))/s', + '/' + . '(?:\'.*?\')?\s*(?:\?\?|<>|' . $query_split . ')\s*' + . '(?:\d+|(?:\'.*?\')|(\$[1-9]{1}(?:[0-9]{1,})?))' + . '/s', $query, $match ); diff --git a/www/vendor/egrajp/corelibs-composer-all/src/DB/Support/ConvertPlaceholder.php b/www/vendor/egrajp/corelibs-composer-all/src/DB/Support/ConvertPlaceholder.php index bcfd5613..6e652acc 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/DB/Support/ConvertPlaceholder.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/DB/Support/ConvertPlaceholder.php @@ -39,9 +39,11 @@ class ConvertPlaceholder ): array { $convert_to = strtolower($convert_to); $matches = []; + $query_split = '[(=,?-]|->|->>|#>|#>>|@>|<@|\?\|\?\&|\|\||#-'; $pattern = '/' // prefix string part, must match towards - . '(?:\'.*?\')?\s*(?:\?\?|[(=,])\s*' + // seperator for ( = , ? - [and json/jsonb in pg doc section 9.15] + . '(?:\'.*?\')?\s*(?:\?\?|' . $query_split . ')\s*' // match for replace part . '(?:' // digit -> ignore @@ -96,7 +98,10 @@ class ConvertPlaceholder $type = 'named'; $matches_return = $named_matches; // only check for :named - $pattern_replace = '/((?:\'.*?\')?\s*(?:\?\?|[(=,])\s*)(\d+|(?:\'.*?\')|(:\w+))/s'; + $pattern_replace = '/' + . '((?:\'.*?\')?\s*(?:\?\?|' . $query_split . ')\s*)' + . '(\d+|(?:\'.*?\')|(:\w+))' + . '/s'; // 0: full // 1: pre part // 2: keep part UNLESS '3' is set @@ -134,7 +139,10 @@ class ConvertPlaceholder // order and data stays the same $params_new = $params; // only check for ? - $pattern_replace = '/((?:\'.*?\')?\s*(?:\?\?|[(=,])\s*)(\d+|(?:\'.*?\')|(?:(?:\?\?)?\s*(\?{1})))/s'; + $pattern_replace = '/' + . '((?:\'.*?\')?\s*(?:\?\?|' . $query_split . ')\s*)' + . '(\d+|(?:\'.*?\')|(?:(?:\?\?)?\s*(\?{1})))' + . '/s'; // 0: full // 1: pre part // 2: keep part UNLESS '3' is set @@ -163,7 +171,10 @@ class ConvertPlaceholder $type = 'numbered'; $matches_return = $numbered_matches; // only check for $n - $pattern_replace = '/((?:\'.*?\')?\s*(?:\?\?|[(=,])\s*)(\d+|(?:\'.*?\')|(\$[1-9]{1}(?:[0-9]{1,})?))/s'; + $pattern_replace = '/' + . '((?:\'.*?\')?\s*(?:\?\?|' . $query_split . ')\s*)' + . '(\d+|(?:\'.*?\')|(\$[1-9]{1}(?:[0-9]{1,})?))' + . '/s'; // 0: full // 1: pre part // 2: keep part UNLESS '3' is set diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Language/Core/CachedFileReader.php b/www/vendor/egrajp/corelibs-composer-all/src/Language/Core/CachedFileReader.php index 95721bbc..1160c45a 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Language/Core/CachedFileReader.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Language/Core/CachedFileReader.php @@ -46,7 +46,7 @@ class CachedFileReader extends \CoreLibs\Language\Core\StringReader if (!is_resource($fd)) { $this->error = 3; // Cannot read file, probably permissions } else { - $this->fd_str = fread($fd, filesize($filename) ?: 0) ?: ''; + $this->fd_str = fread($fd, filesize($filename) ?: 1) ?: ''; fclose($fd); } } else { diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Security/SymmetricEncryption.php b/www/vendor/egrajp/corelibs-composer-all/src/Security/SymmetricEncryption.php index 8062fb51..c12f4b3f 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Security/SymmetricEncryption.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Security/SymmetricEncryption.php @@ -21,66 +21,82 @@ use SodiumException; class SymmetricEncryption { + /** @var SymmetricEncryption self instance */ + private static SymmetricEncryption $instance; + + /** @var string bin hex key */ + private string $key = ''; + + /** + * init class + * if key not passed, key must be set with createKey + * + * @param string|null|null $key + */ + public function __construct( + string|null $key = null + ) { + if ($key != null) { + $this->setKey($key); + } + } + + /** + * Returns the singleton self object. + * For function wrapper use + * + * @return SymmetricEncryption object + */ + public static function getInstance(string|null $key = null): self + { + if (empty(self::$instance)) { + self::$instance = new self($key); + } + return self::$instance; + } + + /* ************************************************************************ + * MARK: PRIVATE + * *************************************************************************/ + /** * create key and check validity * * @param string $key The key from which the binary key will be created * @return string Binary key string */ - public static function createKey(string $key): string + private function createKey(string $key): string { try { $key = CreateKey::hex2bin($key); } catch (SodiumException $e) { - throw new \UnexpectedValueException('Invalid hex key'); + throw new \UnexpectedValueException('Invalid hex key: ' . $e->getMessage()); } if (mb_strlen($key, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { throw new \RangeException( 'Key is not the correct size (must be ' - . 'SODIUM_CRYPTO_SECRETBOX_KEYBYTES bytes long).' + . SODIUM_CRYPTO_SECRETBOX_KEYBYTES . ' bytes long).' ); } return $key; } /** - * Encrypt a message + * Decryption call * - * @param string $message Message to encrypt - * @param string $key Encryption key (as hex string) - * @return string - * @throws \Exception + * @param string $encrypted Text to decrypt + * @param ?string $key Mandatory encryption key, will throw exception if empty + * @return string Plain text * @throws \RangeException + * @throws \UnexpectedValueException + * @throws \UnexpectedValueException */ - public static function encrypt(string $message, string $key): string + private function decryptData(string $encrypted, ?string $key): string { - $key = self::createKey($key); - $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); - - $cipher = base64_encode( - $nonce - . sodium_crypto_secretbox( - $message, - $nonce, - $key - ) - ); - sodium_memzero($message); - sodium_memzero($key); - return $cipher; - } - - /** - * Decrypt a message - * - * @param string $encrypted Message encrypted with safeEncrypt() - * @param string $key Encryption key (as hex string) - * @return string - * @throws \Exception - */ - public static function decrypt(string $encrypted, string $key): string - { - $key = self::createKey($key); + if (empty($key)) { + throw new \UnexpectedValueException('Key not set'); + } + $key = $this->createKey($key); $decoded = base64_decode($encrypted); $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit'); $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit'); @@ -93,7 +109,7 @@ class SymmetricEncryption $key ); } catch (SodiumException $e) { - throw new \UnexpectedValueException('Invalid ciphertext (too short)'); + throw new \UnexpectedValueException('Decipher message failed: ' . $e->getMessage()); } if (!is_string($plain)) { throw new \UnexpectedValueException('Invalid Key'); @@ -102,6 +118,117 @@ class SymmetricEncryption sodium_memzero($key); return $plain; } + + /** + * Encrypt a message + * + * @param string $message Message to encrypt + * @param ?string $key Mandatory encryption key, will throw exception if empty + * @return string + * @throws \Exception + * @throws \RangeException + */ + private function encryptData(string $message, ?string $key): string + { + if (empty($this->key) || $key === null) { + throw new \UnexpectedValueException('Key not set'); + } + $key = $this->createKey($key); + $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); + try { + $cipher = base64_encode( + $nonce + . sodium_crypto_secretbox( + $message, + $nonce, + $key, + ) + ); + } catch (SodiumException $e) { + throw new \UnexpectedValueException("Create encrypted message failed: " . $e->getMessage()); + } + sodium_memzero($message); + sodium_memzero($key); + return $cipher; + } + + /* ************************************************************************ + * MARK: PUBLIC + * *************************************************************************/ + + + /** + * set a new key for encryption + * + * @param string $key + * @return void + */ + public function setKey(string $key) + { + if (empty($key)) { + throw new \UnexpectedValueException('Key cannot be empty'); + } + $this->key = $key; + } + + /** + * Decrypt a message + * static version + * + * @param string $encrypted Message encrypted with safeEncrypt() + * @param string $key Encryption key (as hex string) + * @return string + * @throws \Exception + * @throws \RangeException + * @throws \UnexpectedValueException + * @throws \UnexpectedValueException + */ + public static function decryptKey(string $encrypted, string $key): string + { + return self::getInstance()->decryptData($encrypted, $key); + } + + /** + * Decrypt a message + * + * @param string $encrypted Message encrypted with safeEncrypt() + * @return string + * @throws \RangeException + * @throws \UnexpectedValueException + * @throws \UnexpectedValueException + */ + public function decrypt(string $encrypted): string + { + return $this->decryptData($encrypted, $this->key); + } + + /** + * Encrypt a message + * static version + * + * @param string $message Message to encrypt + * @param string $key Encryption key (as hex string) + * @return string + * @throws \Exception + * @throws \RangeException + */ + public static function encryptKey(string $message, string $key): string + { + return self::getInstance()->encryptData($message, $key); + } + + /** + * Encrypt a message + * + * @param string $message Message to encrypt + * @return string + * @throws \Exception + * @throws \RangeException + */ + public function encrypt(string $message): string + { + return $this->encryptData($message, $this->key); + } } // __END__ diff --git a/www/vendor/egrajp/corelibs-composer-all/src/Template/SmartyExtend.php b/www/vendor/egrajp/corelibs-composer-all/src/Template/SmartyExtend.php index c8cb48c5..94870661 100644 --- a/www/vendor/egrajp/corelibs-composer-all/src/Template/SmartyExtend.php +++ b/www/vendor/egrajp/corelibs-composer-all/src/Template/SmartyExtend.php @@ -185,7 +185,7 @@ class SmartyExtend extends \Smarty // call basic smarty // or Smarty::__construct(); parent::__construct(); - // iinit lang + // init lang $this->l10n = $l10n; // parse and read, legacy stuff $locale = $this->l10n->getLocaleAsArray(); diff --git a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Security/CoreLibsSecuritySymmetricEncryptionTest.php b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Security/CoreLibsSecuritySymmetricEncryptionTest.php index 33a2f458..d3f502af 100644 --- a/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Security/CoreLibsSecuritySymmetricEncryptionTest.php +++ b/www/vendor/egrajp/corelibs-composer-all/test/phpunit/Security/CoreLibsSecuritySymmetricEncryptionTest.php @@ -46,12 +46,34 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase public function testEncryptDecryptSuccess(string $input, string $expected): void { $key = CreateKey::generateRandomKey(); - $encrypted = SymmetricEncryption::encrypt($input, $key); - $decrypted = SymmetricEncryption::decrypt($encrypted, $key); + + // test class + $crypt = new SymmetricEncryption($key); + $encrypted = $crypt->encrypt($input); + $decrypted = $crypt->decrypt($encrypted); + $this->assertEquals( + $expected, + $decrypted, + 'Class call', + ); + + // test indirect + $encrypted = SymmetricEncryption::getInstance($key)->encrypt($input); + $decrypted = SymmetricEncryption::getInstance($key)->decrypt($encrypted); + $this->assertEquals( + $expected, + $decrypted, + 'Class Instance call', + ); + + // test static + $encrypted = SymmetricEncryption::encryptKey($input, $key); + $decrypted = SymmetricEncryption::decryptKey($encrypted, $key); $this->assertEquals( $expected, - $decrypted + $decrypted, + 'Static call', ); } @@ -86,10 +108,24 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase public function testEncryptFailed(string $input, string $exception_message): void { $key = CreateKey::generateRandomKey(); - $encrypted = SymmetricEncryption::encrypt($input, $key); $wrong_key = CreateKey::generateRandomKey(); + + // wrong key in class call + $crypt = new SymmetricEncryption($key); + $encrypted = $crypt->encrypt($input); $this->expectExceptionMessage($exception_message); - SymmetricEncryption::decrypt($encrypted, $wrong_key); + $crypt->setKey($key); + $crypt->decrypt($encrypted); + + // class instance + $encrypted = SymmetricEncryption::getInstance($key)->encrypt($input); + $this->expectExceptionMessage($exception_message); + SymmetricEncryption::getInstance($wrong_key)->decrypt($encrypted); + + // class static + $encrypted = SymmetricEncryption::encryptKey($input, $key); + $this->expectExceptionMessage($exception_message); + SymmetricEncryption::decryptKey($encrypted, $wrong_key); } /** @@ -107,7 +143,6 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase 'too short hex key' => [ 'key' => '1cabd5cba9e042f12522f4ff2de5c31d233b', 'excpetion_message' => 'Key is not the correct size (must be ' - . 'SODIUM_CRYPTO_SECRETBOX_KEYBYTES bytes long).' ], ]; } @@ -126,13 +161,33 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase */ public function testWrongKey(string $key, string $exception_message): void { - $this->expectExceptionMessage($exception_message); - SymmetricEncryption::encrypt('test', $key); - // we must encrypt valid thing first so we can fail with the wrong kjey $enc_key = CreateKey::generateRandomKey(); - $encrypted = SymmetricEncryption::encrypt('test', $enc_key); + + // class + $crypt = new SymmetricEncryption($key); $this->expectExceptionMessage($exception_message); - SymmetricEncryption::decrypt($encrypted, $key); + $crypt->encrypt('test'); + $crypt->setKey($enc_key); + $encrypted = $crypt->encrypt('test'); + $this->expectExceptionMessage($exception_message); + $crypt->setKey($key); + $crypt->decrypt($encrypted); + + // class instance + $this->expectExceptionMessage($exception_message); + SymmetricEncryption::getInstance($key)->encrypt('test'); + // we must encrypt valid thing first so we can fail with the wrong key + $encrypted = SymmetricEncryption::getInstance($enc_key)->encrypt('test'); + $this->expectExceptionMessage($exception_message); + SymmetricEncryption::getInstance($key)->decrypt($encrypted); + + // class static + $this->expectExceptionMessage($exception_message); + SymmetricEncryption::encryptKey('test', $key); + // we must encrypt valid thing first so we can fail with the wrong key + $encrypted = SymmetricEncryption::encryptKey('test', $enc_key); + $this->expectExceptionMessage($exception_message); + SymmetricEncryption::decryptKey($encrypted, $key); } /** @@ -145,7 +200,7 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase return [ 'too short ciphertext' => [ 'input' => 'short', - 'exception_message' => 'Invalid ciphertext (too short)' + 'exception_message' => 'Decipher message failed: ' ], ]; } @@ -164,8 +219,18 @@ final class CoreLibsSecuritySymmetricEncryptionTest extends TestCase public function testWrongCiphertext(string $input, string $exception_message): void { $key = CreateKey::generateRandomKey(); + // class + $crypt = new SymmetricEncryption($key); $this->expectExceptionMessage($exception_message); - SymmetricEncryption::decrypt($input, $key); + $crypt->decrypt($input); + + // class instance + $this->expectExceptionMessage($exception_message); + SymmetricEncryption::getInstance($key)->decrypt($input); + + // class static + $this->expectExceptionMessage($exception_message); + SymmetricEncryption::decryptKey($input, $key); } }