diff --git a/composer.json b/composer.json index 8846758..38e9053 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ } }, "require": { - "php": "^8.2", + "php": "^8.3", "guzzlehttp/guzzle": "^7.0", "masterminds/html5": "^2.0", "indieweb/mention-client": "^1.2.1", diff --git a/composer.lock b/composer.lock index abf9dc6..b6e1c6f 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": "8f6d4e39a21374617083e03497938b03", + "content-hash": "85ce707b90de5bd663b4940e0662bf26", "packages": [ { "name": "cebe/markdown", @@ -70,51 +70,6 @@ }, "time": "2018-03-26T11:24:36+00:00" }, - { - "name": "dg/twitter-php", - "version": "v3.8", - "source": { - "type": "git", - "url": "https://github.com/dg/twitter-php.git", - "reference": "d9370c9759138200a77ca86abcb0c5ddfe857c68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dg/twitter-php/zipball/d9370c9759138200a77ca86abcb0c5ddfe857c68", - "reference": "d9370c9759138200a77ca86abcb0c5ddfe857c68", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.4.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - } - ], - "description": "Small and easy Twitter library for PHP", - "homepage": "https://github.com/dg/twitter-php", - "keywords": [ - "oauth", - "twitter" - ], - "support": { - "source": "https://github.com/dg/twitter-php/tree/v3.8" - }, - "time": "2019-02-08T16:20:01+00:00" - }, { "name": "ezyang/htmlpurifier", "version": "v4.17.0", @@ -760,34 +715,31 @@ }, { "name": "lcobucci/clock", - "version": "2.3.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876" + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/c7aadcd6fd97ed9e199114269c0be3f335e38876", - "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/fb533e093fd61321bfcbac08b131ce805fe183d3", + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0", - "stella-maris/clock": "^0.1.7" - }, - "provide": { - "psr/clock-implementation": "1.0" + "php": "^8.0", + "stella-maris/clock": "^0.1.4" }, "require-dev": { "infection/infection": "^0.26", - "lcobucci/coding-standard": "^9.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.27" + "lcobucci/coding-standard": "^8.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { @@ -808,7 +760,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/2.3.0" + "source": "https://github.com/lcobucci/clock/tree/2.2.0" }, "funding": [ { @@ -820,7 +772,7 @@ "type": "patreon" } ], - "time": "2022-12-19T14:38:11+00:00" + "time": "2022-04-19T19:34:17+00:00" }, { "name": "lcobucci/jwt", @@ -1275,21 +1227,20 @@ }, { "name": "p3k/xray", - "version": "v1.15.0", + "version": "v1.15.1", "source": { "type": "git", "url": "https://github.com/aaronpk/XRay.git", - "reference": "c530011b2cd7c37c929beaf9fdaf3890c9650f4a" + "reference": "a4cda273d34c56317197511d0f4799f5f00465e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aaronpk/XRay/zipball/c530011b2cd7c37c929beaf9fdaf3890c9650f4a", - "reference": "c530011b2cd7c37c929beaf9fdaf3890c9650f4a", + "url": "https://api.github.com/repos/aaronpk/XRay/zipball/a4cda273d34c56317197511d0f4799f5f00465e9", + "reference": "a4cda273d34c56317197511d0f4799f5f00465e9", "shasum": "" }, "require": { "cebe/markdown": "^1.1.0", - "dg/twitter-php": "^3.0.0", "ezyang/htmlpurifier": "^4.10", "indieweb/link-rel-parser": "^0.1.0", "masterminds/html5": "^2.3", @@ -1321,9 +1272,9 @@ "homepage": "https://github.com/aaronpk/XRay", "support": { "issues": "https://github.com/aaronpk/XRay/issues", - "source": "https://github.com/aaronpk/XRay/tree/v1.15.0" + "source": "https://github.com/aaronpk/XRay/tree/v1.15.1" }, - "time": "2024-08-30T14:29:22+00:00" + "time": "2024-08-31T16:21:43+00:00" }, { "name": "pfefferle/openwebicons", @@ -1795,16 +1746,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v5.4.40", + "version": "v5.4.44", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "2ad469c3e07fdba677b278d0e266071a51aa0dac" + "reference": "4c76e4176a5472c5afe504194d7bbef5cfdd1703" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2ad469c3e07fdba677b278d0e266071a51aa0dac", - "reference": "2ad469c3e07fdba677b278d0e266071a51aa0dac", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4c76e4176a5472c5afe504194d7bbef5cfdd1703", + "reference": "4c76e4176a5472c5afe504194d7bbef5cfdd1703", "shasum": "" }, "require": { @@ -1850,7 +1801,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.4.40" + "source": "https://github.com/symfony/dom-crawler/tree/v5.4.44" }, "funding": [ { @@ -1866,24 +1817,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:33:22+00:00" + "time": "2024-09-11T06:50:28+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1929,7 +1880,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -1945,24 +1896,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -2009,7 +1960,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -2025,24 +1976,24 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -2089,7 +2040,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -2105,7 +2056,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" } ], "packages-dev": [], @@ -2117,7 +2068,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.2" + "php": "^8.3" }, "platform-dev": [], "plugin-api-version": "2.3.0" diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 83ddd34..5490b88 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -10,19 +10,6 @@ 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'Twitter' => $vendorDir . '/dg/twitter-php/src/Twitter.php', - 'TwitterException' => $vendorDir . '/dg/twitter-php/src/Twitter.php', - 'Twitter_OAuthConsumer' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthDataStore' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthException' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthRequest' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthServer' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthSignatureMethod' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthSignatureMethod_HMAC_SHA1' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthSignatureMethod_PLAINTEXT' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthSignatureMethod_RSA_SHA1' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthToken' => $vendorDir . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthUtil' => $vendorDir . '/dg/twitter-php/src/OAuth.php', 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 9016c3d..442bbec 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -199,19 +199,6 @@ class ComposerStaticInitab3e38c9bd63257d5c8ab767c7dc575e 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'Twitter' => __DIR__ . '/..' . '/dg/twitter-php/src/Twitter.php', - 'TwitterException' => __DIR__ . '/..' . '/dg/twitter-php/src/Twitter.php', - 'Twitter_OAuthConsumer' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthDataStore' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthException' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthRequest' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthServer' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthSignatureMethod' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthSignatureMethod_HMAC_SHA1' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthSignatureMethod_PLAINTEXT' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthSignatureMethod_RSA_SHA1' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthToken' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', - 'Twitter_OAuthUtil' => __DIR__ . '/..' . '/dg/twitter-php/src/OAuth.php', 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', ); diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index a52dac4..43f1ed4 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -67,54 +67,6 @@ }, "install-path": "../cebe/markdown" }, - { - "name": "dg/twitter-php", - "version": "v3.8", - "version_normalized": "3.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/dg/twitter-php.git", - "reference": "d9370c9759138200a77ca86abcb0c5ddfe857c68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dg/twitter-php/zipball/d9370c9759138200a77ca86abcb0c5ddfe857c68", - "reference": "d9370c9759138200a77ca86abcb0c5ddfe857c68", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.4.0" - }, - "time": "2019-02-08T16:20:01+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - } - ], - "description": "Small and easy Twitter library for PHP", - "homepage": "https://github.com/dg/twitter-php", - "keywords": [ - "oauth", - "twitter" - ], - "support": { - "source": "https://github.com/dg/twitter-php/tree/v3.8" - }, - "install-path": "../dg/twitter-php" - }, { "name": "ezyang/htmlpurifier", "version": "v4.17.0", @@ -787,37 +739,34 @@ }, { "name": "lcobucci/clock", - "version": "2.3.0", - "version_normalized": "2.3.0.0", + "version": "2.2.0", + "version_normalized": "2.2.0.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876" + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/c7aadcd6fd97ed9e199114269c0be3f335e38876", - "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/fb533e093fd61321bfcbac08b131ce805fe183d3", + "reference": "fb533e093fd61321bfcbac08b131ce805fe183d3", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0", - "stella-maris/clock": "^0.1.7" - }, - "provide": { - "psr/clock-implementation": "1.0" + "php": "^8.0", + "stella-maris/clock": "^0.1.4" }, "require-dev": { "infection/infection": "^0.26", - "lcobucci/coding-standard": "^9.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.27" - }, - "time": "2022-12-19T14:38:11+00:00", + "lcobucci/coding-standard": "^8.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^9.5" + }, + "time": "2022-04-19T19:34:17+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -838,7 +787,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/2.3.0" + "source": "https://github.com/lcobucci/clock/tree/2.2.0" }, "funding": [ { @@ -1329,22 +1278,21 @@ }, { "name": "p3k/xray", - "version": "v1.15.0", - "version_normalized": "1.15.0.0", + "version": "v1.15.1", + "version_normalized": "1.15.1.0", "source": { "type": "git", "url": "https://github.com/aaronpk/XRay.git", - "reference": "c530011b2cd7c37c929beaf9fdaf3890c9650f4a" + "reference": "a4cda273d34c56317197511d0f4799f5f00465e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aaronpk/XRay/zipball/c530011b2cd7c37c929beaf9fdaf3890c9650f4a", - "reference": "c530011b2cd7c37c929beaf9fdaf3890c9650f4a", + "url": "https://api.github.com/repos/aaronpk/XRay/zipball/a4cda273d34c56317197511d0f4799f5f00465e9", + "reference": "a4cda273d34c56317197511d0f4799f5f00465e9", "shasum": "" }, "require": { "cebe/markdown": "^1.1.0", - "dg/twitter-php": "^3.0.0", "ezyang/htmlpurifier": "^4.10", "indieweb/link-rel-parser": "^0.1.0", "masterminds/html5": "^2.3", @@ -1358,7 +1306,7 @@ "league/route": "^1.0", "phpunit/phpunit": "^8.0.0|^9.0.0" }, - "time": "2024-08-30T14:29:22+00:00", + "time": "2024-08-31T16:21:43+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1378,7 +1326,7 @@ "homepage": "https://github.com/aaronpk/XRay", "support": { "issues": "https://github.com/aaronpk/XRay/issues", - "source": "https://github.com/aaronpk/XRay/tree/v1.15.0" + "source": "https://github.com/aaronpk/XRay/tree/v1.15.1" }, "install-path": "../p3k/xray" }, @@ -1879,17 +1827,17 @@ }, { "name": "symfony/dom-crawler", - "version": "v5.4.40", - "version_normalized": "5.4.40.0", + "version": "v5.4.44", + "version_normalized": "5.4.44.0", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "2ad469c3e07fdba677b278d0e266071a51aa0dac" + "reference": "4c76e4176a5472c5afe504194d7bbef5cfdd1703" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2ad469c3e07fdba677b278d0e266071a51aa0dac", - "reference": "2ad469c3e07fdba677b278d0e266071a51aa0dac", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4c76e4176a5472c5afe504194d7bbef5cfdd1703", + "reference": "4c76e4176a5472c5afe504194d7bbef5cfdd1703", "shasum": "" }, "require": { @@ -1909,7 +1857,7 @@ "suggest": { "symfony/css-selector": "" }, - "time": "2024-05-31T14:33:22+00:00", + "time": "2024-09-11T06:50:28+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1937,7 +1885,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.4.40" + "source": "https://github.com/symfony/dom-crawler/tree/v5.4.44" }, "funding": [ { @@ -1957,21 +1905,21 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.30.0", - "version_normalized": "1.30.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", - "reference": "0424dff1c58f028c451efff2045f5d92410bd540", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1979,7 +1927,7 @@ "suggest": { "ext-ctype": "For best performance" }, - "time": "2024-05-31T15:07:36+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -2019,7 +1967,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -2039,21 +1987,21 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", - "version_normalized": "1.30.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -2061,7 +2009,7 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2024-06-19T12:30:46+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -2102,7 +2050,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -2122,23 +2070,23 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.30.0", - "version_normalized": "1.30.0.0", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", - "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, - "time": "2024-05-31T15:07:36+00:00", + "time": "2024-09-09T11:45:10+00:00", "type": "library", "extra": { "thanks": { @@ -2185,7 +2133,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 5baa5b5..cd6d12a 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -19,15 +19,6 @@ 'aliases' => array(), 'dev_requirement' => false, ), - 'dg/twitter-php' => array( - 'pretty_version' => 'v3.8', - 'version' => '3.8.0.0', - 'reference' => 'd9370c9759138200a77ca86abcb0c5ddfe857c68', - 'type' => 'library', - 'install_path' => __DIR__ . '/../dg/twitter-php', - 'aliases' => array(), - 'dev_requirement' => false, - ), 'ezyang/htmlpurifier' => array( 'pretty_version' => 'v4.17.0', 'version' => '4.17.0.0', @@ -110,9 +101,9 @@ 'dev_requirement' => false, ), 'lcobucci/clock' => array( - 'pretty_version' => '2.3.0', - 'version' => '2.3.0.0', - 'reference' => 'c7aadcd6fd97ed9e199114269c0be3f335e38876', + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'reference' => 'fb533e093fd61321bfcbac08b131ce805fe183d3', 'type' => 'library', 'install_path' => __DIR__ . '/../lcobucci/clock', 'aliases' => array(), @@ -197,9 +188,9 @@ 'dev_requirement' => false, ), 'p3k/xray' => array( - 'pretty_version' => 'v1.15.0', - 'version' => '1.15.0.0', - 'reference' => 'c530011b2cd7c37c929beaf9fdaf3890c9650f4a', + 'pretty_version' => 'v1.15.1', + 'version' => '1.15.1.0', + 'reference' => 'a4cda273d34c56317197511d0f4799f5f00465e9', 'type' => 'library', 'install_path' => __DIR__ . '/../p3k/xray', 'aliases' => array(), @@ -223,12 +214,6 @@ 'aliases' => array(), 'dev_requirement' => false, ), - 'psr/clock-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0', - ), - ), 'psr/http-client' => array( 'pretty_version' => '1.0.3', 'version' => '1.0.3.0', @@ -322,36 +307,36 @@ 'dev_requirement' => false, ), 'symfony/dom-crawler' => array( - 'pretty_version' => 'v5.4.40', - 'version' => '5.4.40.0', - 'reference' => '2ad469c3e07fdba677b278d0e266071a51aa0dac', + 'pretty_version' => 'v5.4.44', + 'version' => '5.4.44.0', + 'reference' => '4c76e4176a5472c5afe504194d7bbef5cfdd1703', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/dom-crawler', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.30.0', - 'version' => '1.30.0.0', - 'reference' => '0424dff1c58f028c451efff2045f5d92410bd540', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => 'a3cc8b044a6ea513310cbd48ef7333b384945638', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.30.0', - 'version' => '1.30.0.0', - 'reference' => 'fd22ab50000ef01661e2a31d850ebaa297f8e03c', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.30.0', - 'version' => '1.30.0.0', - 'reference' => '77fa7995ac1b21ab60769b7323d600a991a90433', + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '60328e362d4c2c802a54fcbf04f9d3fb892b4cf8', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php index d32d90c..2a8f1c8 100644 --- a/vendor/composer/platform_check.php +++ b/vendor/composer/platform_check.php @@ -4,8 +4,8 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 80200)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 8.2.0". You are running ' . PHP_VERSION . '.'; +if (!(PHP_VERSION_ID >= 80300)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 8.3.0". You are running ' . PHP_VERSION . '.'; } if ($issues) { diff --git a/vendor/dg/twitter-php/composer.json b/vendor/dg/twitter-php/composer.json deleted file mode 100644 index 5bcd945..0000000 --- a/vendor/dg/twitter-php/composer.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "dg/twitter-php", - "description": "Small and easy Twitter library for PHP", - "keywords": ["twitter", "oauth"], - "homepage": "https://github.com/dg/twitter-php", - "license": ["BSD-3-Clause"], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - } - ], - "require": { - "php": ">=5.4.0", - "ext-curl": "*" - }, - "autoload": { - "classmap": ["src/"] - } -} diff --git a/vendor/dg/twitter-php/examples/custom-request.php b/vendor/dg/twitter-php/examples/custom-request.php deleted file mode 100644 index 2393fe3..0000000 --- a/vendor/dg/twitter-php/examples/custom-request.php +++ /dev/null @@ -1,24 +0,0 @@ -request('statuses/retweets_of_me', 'GET'); - -?> - - -Twitter retweets of me - - diff --git a/vendor/dg/twitter-php/examples/load.php b/vendor/dg/twitter-php/examples/load.php deleted file mode 100644 index d762542..0000000 --- a/vendor/dg/twitter-php/examples/load.php +++ /dev/null @@ -1,27 +0,0 @@ -load(Twitter::ME_AND_FRIENDS); - -?> - - -Twitter timeline demo - - diff --git a/vendor/dg/twitter-php/examples/search.php b/vendor/dg/twitter-php/examples/search.php deleted file mode 100644 index e1ba4cd..0000000 --- a/vendor/dg/twitter-php/examples/search.php +++ /dev/null @@ -1,25 +0,0 @@ -search('#nette'); -// or use hashmap: $results = $twitter->search(['q' => '#nette', 'geocode' => '50.088224,15.975611,20km']); - -?> - - -Twitter search demo - - diff --git a/vendor/dg/twitter-php/examples/send.php b/vendor/dg/twitter-php/examples/send.php deleted file mode 100644 index 278a936..0000000 --- a/vendor/dg/twitter-php/examples/send.php +++ /dev/null @@ -1,13 +0,0 @@ -send('I am fine'); // you can add $imagePath or array of image paths as second argument - -} catch (TwitterException $e) { - echo 'Error: ' . $e->getMessage(); -} diff --git a/vendor/dg/twitter-php/license.md b/vendor/dg/twitter-php/license.md deleted file mode 100644 index 3aa00ad..0000000 --- a/vendor/dg/twitter-php/license.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2008, Copyright (c) 2008 David Grudl -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * Neither the name of David Grudl nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/dg/twitter-php/readme.md b/vendor/dg/twitter-php/readme.md deleted file mode 100644 index 9730038..0000000 --- a/vendor/dg/twitter-php/readme.md +++ /dev/null @@ -1,175 +0,0 @@ -[Twitter for PHP](https://phpfashion.com/twitter-for-php) [![Buy me a coffee](https://files.nette.org/images/coffee1s.png)](https://nette.org/make-donation?to=twitter-php) -================================ - -[![Downloads this Month](https://img.shields.io/packagist/dm/dg/twitter-php.svg)](https://packagist.org/packages/dg/twitter-php) - -Twitter for PHP is a very small and easy-to-use library for sending -messages to Twitter and receiving status updates. - -If you like this, **[please make a donation now](https://nette.org/make-donation?to=twitter-php)**. Thank you! - -It requires PHP 5.4 or newer with CURL extension and is licensed under the New BSD License. -You can obtain the latest version from our [GitHub repository](https://github.com/dg/twitter-php) -or install it via Composer: - - composer require dg/twitter-php - - -Usage ------ -Sign in to the https://twitter.com and register an application from the https://apps.twitter.com page. Remember -to never reveal your consumer secrets. Click on My Access Token link from the sidebar and retrieve your own access -token. Now you have consumer key, consumer secret, access token and access token secret. - -Create object using application and request/access keys - -```php -$twitter = new Twitter($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret); -``` - -The send() method updates your status. The message must be encoded in UTF-8: - -```php -$twitter->send('I am fine today.'); -``` - -The load() method returns the 20 most recent status updates -posted in the last 24 hours by you: - -```php -$statuses = $twitter->load(Twitter::ME); -``` - -or posted by you and your friends: - -```php -$statuses = $twitter->load(Twitter::ME_AND_FRIENDS); -``` -or most recent mentions for you: - -```php -$statuses = $twitter->load(Twitter::REPLIES); -``` -Extracting the information from the channel is easy: - -```php -foreach ($statuses as $status) { - echo "message: ", Twitter::clickable($status); - echo "posted at " , $status->created_at; - echo "posted by " , $status->user->name; -} -``` - -The static method `Twitter::clickable()` makes links, mentions and hash tags in status clickable. - -The authenticate() method tests if user credentials are valid: - -```php -if (!$twitter->authenticate()) { - die('Invalid name or password'); -} -``` - -The search() method provides searching in twitter statuses: - -```php -$results = $twitter->search('#nette'); -``` - -The returned result is a again array of statuses. - - -Error handling --------------- - -All methods throw a TwitterException on error: - -```php -try { - $statuses = $twitter->load(Twitter::ME); -} catch (TwitterException $e) { - echo "Error: ", $e->getMessage(); -} -``` - -Additional features -------------------- - -The `authenticate()` method tests if user credentials are valid: - -```php -if (!$twitter->authenticate()) { - die('Invalid name or password'); -} -``` - -Other commands --------------- - -You can use all commands defined by [Twitter API 1.1](https://dev.twitter.com/rest/public). -For example [GET statuses/retweets_of_me](https://dev.twitter.com/rest/reference/get/statuses/retweets_of_me) -returns the array of most recent tweets authored by the authenticating user: - -```php -$statuses = $twitter->request('statuses/retweets_of_me', 'GET', ['count' => 20]); -``` - -Changelog ---------- -v3.8 (2/2019) -- Twitter::sendDirectMessage() uses new API -- Twitter::clickable: added support for $status->full_text (#60) - -v3.7 (3/2018) -- minimal required PHP version changed to 5.4 -- Twitter::send() added $options -- Twitter::clickable() now works only with statuses and entites -- fixed coding style - -v3.6 (8/2016) -- added loadUserFollowersList() and sendDirectMessage() -- Twitter::send() allows to upload multiple images -- changed http:// to https:// - -v3.5 (12/2014) -- allows to send message starting with @ and upload file at the same time in PHP >= 5.5 - -v3.4 (11/2014) -- cache expiration can be specified as string -- fixed some bugs - -v3.3 (3/2014) -- Twitter::send($status, $image) can upload image -- added Twitter::follow() - -v3.2 (1/2014) -- Twitter API uses SSL OAuth -- Twitter::clickable() supports media -- added Twitter::loadUserInfoById() and loadUserFollowers() -- fixed Twitter::destroy() - -v3.1 (3/2013) -- Twitter::load() - added third argument $data -- Twitter::clickable() uses entities; pass as parameter status object, not just text -- added Twitter::$httpOptions for custom cURL configuration - -v3.0 (12/2012) -- updated to Twitter API 1.1. Some stuff deprecated by Twitter was removed: - - removed RSS, ATOM and XML support - - removed Twitter::ALL - - Twitter::load() - removed third argument $page - - Twitter::search() requires authentication and returns different structure -- removed shortening URL using http://is.gd -- changed order of Twitter::request() arguments to $resource, $method, $data - -v2.0 (8/2012) -- added support for OAuth authentication protocol -- added Twitter::clickable() which makes links, @usernames and #hashtags clickable -- installable via `composer require dg/twitter-php` - -v1.0 (7/2008) -- initial release - - ------ -(c) David Grudl, 2008, 2016 (https://davidgrudl.com) diff --git a/vendor/dg/twitter-php/src/OAuth.php b/vendor/dg/twitter-php/src/OAuth.php deleted file mode 100644 index 8c8e5df..0000000 --- a/vendor/dg/twitter-php/src/OAuth.php +++ /dev/null @@ -1,1030 +0,0 @@ -key = $key; - $this->secret = $secret; - $this->callback_url = $callback_url; - } - - - public function __toString() - { - return "OAuthConsumer[key=$this->key,secret=$this->secret]"; - } -} - -class Twitter_OAuthToken -{ - // access tokens and request tokens - public $key; - public $secret; - - - /** - * key = the token - * secret = the token secret - */ - public function __construct($key, $secret) - { - $this->key = $key; - $this->secret = $secret; - } - - - /** - * generates the basic string serialization of a token that a server - * would respond to request_token and access_token calls with - */ - public function to_string() - { - return 'oauth_token=' . - Twitter_OAuthUtil::urlencode_rfc3986($this->key) . - '&oauth_token_secret=' . - Twitter_OAuthUtil::urlencode_rfc3986($this->secret); - } - - - public function __toString() - { - return $this->to_string(); - } -} - -/** - * A class for implementing a Signature Method - * See section 9 ("Signing Requests") in the spec - */ -abstract class Twitter_OAuthSignatureMethod -{ - /** - * Needs to return the name of the Signature Method (ie HMAC-SHA1) - * @return string - */ - abstract public function get_name(); - - - /** - * Build up the signature - * NOTE: The output of this function MUST NOT be urlencoded. - * the encoding is handled in OAuthRequest when the final - * request is serialized - * @param Twitter_OAuthRequest $request - * @param Twitter_OAuthConsumer $consumer - * @param Twitter_OAuthToken $token - * @return string - */ - abstract public function build_signature($request, $consumer, $token); - - - /** - * Verifies that a given signature is correct - * @param Twitter_OAuthRequest $request - * @param Twitter_OAuthConsumer $consumer - * @param Twitter_OAuthToken $token - * @param string $signature - * @return bool - */ - public function check_signature($request, $consumer, $token, $signature) - { - $built = $this->build_signature($request, $consumer, $token); - return $built == $signature; - } -} - -/** - * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] - * where the Signature Base String is the text and the key is the concatenated values (each first - * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' - * character (ASCII code 38) even if empty. - * - Chapter 9.2 ("HMAC-SHA1") - */ -class Twitter_OAuthSignatureMethod_HMAC_SHA1 extends Twitter_OAuthSignatureMethod -{ - public function get_name() - { - return 'HMAC-SHA1'; - } - - - public function build_signature($request, $consumer, $token) - { - $base_string = $request->get_signature_base_string(); - $request->base_string = $base_string; - - $key_parts = [ - $consumer->secret, - ($token) ? $token->secret : '', - ]; - - $key_parts = Twitter_OAuthUtil::urlencode_rfc3986($key_parts); - $key = implode('&', $key_parts); - - return base64_encode(hash_hmac('sha1', $base_string, $key, true)); - } -} - -/** - * The PLAINTEXT method does not provide any security protection and SHOULD only be used - * over a secure channel such as HTTPS. It does not use the Signature Base String. - * - Chapter 9.4 ("PLAINTEXT") - */ -class Twitter_OAuthSignatureMethod_PLAINTEXT extends Twitter_OAuthSignatureMethod -{ - public function get_name() - { - return 'PLAINTEXT'; - } - - - /** - * oauth_signature is set to the concatenated encoded values of the Consumer Secret and - * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is - * empty. The result MUST be encoded again. - * - Chapter 9.4.1 ("Generating Signatures") - * - * Please note that the second encoding MUST NOT happen in the SignatureMethod, as - * OAuthRequest handles this! - */ - public function build_signature($request, $consumer, $token) - { - $key_parts = [ - $consumer->secret, - ($token) ? $token->secret : '', - ]; - - $key_parts = Twitter_OAuthUtil::urlencode_rfc3986($key_parts); - $key = implode('&', $key_parts); - $request->base_string = $key; - - return $key; - } -} - -/** - * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in - * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for - * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a - * verified way to the Service Provider, in a manner which is beyond the scope of this - * specification. - * - Chapter 9.3 ("RSA-SHA1") - */ -abstract class Twitter_OAuthSignatureMethod_RSA_SHA1 extends Twitter_OAuthSignatureMethod -{ - public function get_name() - { - return 'RSA-SHA1'; - } - - - // Up to the SP to implement this lookup of keys. Possible ideas are: - // (1) do a lookup in a table of trusted certs keyed off of consumer - // (2) fetch via http using a url provided by the requester - // (3) some sort of specific discovery code based on request - // - // Either way should return a string representation of the certificate - abstract protected function fetch_public_cert(&$request); - - - // Up to the SP to implement this lookup of keys. Possible ideas are: - // (1) do a lookup in a table of trusted certs keyed off of consumer - // - // Either way should return a string representation of the certificate - abstract protected function fetch_private_cert(&$request); - - - public function build_signature($request, $consumer, $token) - { - $base_string = $request->get_signature_base_string(); - $request->base_string = $base_string; - - // Fetch the private key cert based on the request - $cert = $this->fetch_private_cert($request); - - // Pull the private key ID from the certificate - $privatekeyid = openssl_get_privatekey($cert); - - // Sign using the key - $ok = openssl_sign($base_string, $signature, $privatekeyid); - - // Release the key resource - openssl_free_key($privatekeyid); - - return base64_encode($signature); - } - - - public function check_signature($request, $consumer, $token, $signature) - { - $decoded_sig = base64_decode($signature, true); - - $base_string = $request->get_signature_base_string(); - - // Fetch the public key cert based on the request - $cert = $this->fetch_public_cert($request); - - // Pull the public key ID from the certificate - $publickeyid = openssl_get_publickey($cert); - - // Check the computed signature against the one passed in the query - $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); - - // Release the key resource - openssl_free_key($publickeyid); - - return $ok == 1; - } -} - -class Twitter_OAuthRequest -{ - // for debug purposes - public $base_string; - public static $version = '1.0'; - public static $POST_INPUT = 'php://input'; - protected $parameters; - protected $http_method; - protected $http_url; - - - public function __construct($http_method, $http_url, $parameters = null) - { - $parameters = ($parameters) ? $parameters : []; - $parameters = array_merge(Twitter_OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); - $this->parameters = $parameters; - $this->http_method = $http_method; - $this->http_url = $http_url; - } - - - /** - * attempt to build up a request from what was passed to the server - */ - public static function from_request($http_method = null, $http_url = null, $parameters = null) - { - $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on') - ? 'http' - : 'https'; - $http_url = ($http_url) ? $http_url : $scheme . - '://' . $_SERVER['HTTP_HOST'] . - ':' . - $_SERVER['SERVER_PORT'] . - $_SERVER['REQUEST_URI']; - $http_method = ($http_method) ? $http_method : $_SERVER['REQUEST_METHOD']; - - // We weren't handed any parameters, so let's find the ones relevant to - // this request. - // If you run XML-RPC or similar you should use this to provide your own - // parsed parameter-list - if (!$parameters) { - // Find request headers - $request_headers = Twitter_OAuthUtil::get_headers(); - - // Parse the query-string to find GET parameters - $parameters = Twitter_OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); - - // It's a POST request of the proper content-type, so parse POST - // parameters and add those overriding any duplicates from GET - if ($http_method == 'POST' - && isset($request_headers['Content-Type']) - && strstr($request_headers['Content-Type'], - 'application/x-www-form-urlencoded') - ) { - $post_data = Twitter_OAuthUtil::parse_parameters( - file_get_contents(self::$POST_INPUT) - ); - $parameters = array_merge($parameters, $post_data); - } - - // We have a Authorization-header with OAuth data. Parse the header - // and add those overriding any duplicates from GET or POST - if (isset($request_headers['Authorization']) && substr($request_headers['Authorization'], 0, 6) == 'OAuth ') { - $header_parameters = Twitter_OAuthUtil::split_header( - $request_headers['Authorization'] - ); - $parameters = array_merge($parameters, $header_parameters); - } - } - - return new self($http_method, $http_url, $parameters); - } - - - /** - * pretty much a helper function to set up the request - */ - public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters = null) - { - $parameters = ($parameters) ? $parameters : []; - $defaults = ['oauth_version' => self::$version, - 'oauth_nonce' => self::generate_nonce(), - 'oauth_timestamp' => self::generate_timestamp(), - 'oauth_consumer_key' => $consumer->key, ]; - if ($token) { - $defaults['oauth_token'] = $token->key; - } - - $parameters = array_merge($defaults, $parameters); - - return new self($http_method, $http_url, $parameters); - } - - - public function set_parameter($name, $value, $allow_duplicates = true) - { - if ($allow_duplicates && isset($this->parameters[$name])) { - // We have already added parameter(s) with this name, so add to the list - if (is_scalar($this->parameters[$name])) { - // This is the first duplicate, so transform scalar (string) - // into an array so we can add the duplicates - $this->parameters[$name] = [$this->parameters[$name]]; - } - - $this->parameters[$name][] = $value; - } else { - $this->parameters[$name] = $value; - } - } - - - public function get_parameter($name) - { - return isset($this->parameters[$name]) ? $this->parameters[$name] : null; - } - - - public function get_parameters() - { - return $this->parameters; - } - - - public function unset_parameter($name) - { - unset($this->parameters[$name]); - } - - - /** - * The request parameters, sorted and concatenated into a normalized string. - * @return string - */ - public function get_signable_parameters() - { - // Grab all parameters - $params = $this->parameters; - - // Remove oauth_signature if present - // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") - if (isset($params['oauth_signature'])) { - unset($params['oauth_signature']); - } - - return Twitter_OAuthUtil::build_http_query($params); - } - - - /** - * Returns the base string of this request - * - * The base string defined as the method, the url - * and the parameters (normalized), each urlencoded - * and the concated with &. - */ - public function get_signature_base_string() - { - $parts = [ - $this->get_normalized_http_method(), - $this->get_normalized_http_url(), - $this->get_signable_parameters(), - ]; - - $parts = Twitter_OAuthUtil::urlencode_rfc3986($parts); - - return implode('&', $parts); - } - - - /** - * just uppercases the http method - */ - public function get_normalized_http_method() - { - return strtoupper($this->http_method); - } - - - /** - * parses the url and rebuilds it to be - * scheme://host/path - */ - public function get_normalized_http_url() - { - $parts = parse_url($this->http_url); - - $scheme = (isset($parts['scheme'])) ? $parts['scheme'] : 'http'; - $port = (isset($parts['port'])) ? $parts['port'] : (($scheme == 'https') ? '443' : '80'); - $host = (isset($parts['host'])) ? $parts['host'] : ''; - $path = (isset($parts['path'])) ? $parts['path'] : ''; - - if (($scheme == 'https' && $port != '443') - || ($scheme == 'http' && $port != '80')) { - $host = "$host:$port"; - } - return "$scheme://$host$path"; - } - - - /** - * builds a url usable for a GET request - */ - public function to_url() - { - $post_data = $this->to_postdata(); - $out = $this->get_normalized_http_url(); - if ($post_data) { - $out .= '?' . $post_data; - } - return $out; - } - - - /** - * builds the data one would send in a POST request - */ - public function to_postdata() - { - return Twitter_OAuthUtil::build_http_query($this->parameters); - } - - - /** - * builds the Authorization: header - */ - public function to_header($realm = null) - { - $first = true; - if ($realm) { - $out = 'Authorization: OAuth realm="' . Twitter_OAuthUtil::urlencode_rfc3986($realm) . '"'; - $first = false; - } else { - $out = 'Authorization: OAuth'; - } - - $total = []; - foreach ($this->parameters as $k => $v) { - if (substr($k, 0, 5) != 'oauth') { - continue; - } - if (is_array($v)) { - throw new Twitter_OAuthException('Arrays not supported in headers'); - } - $out .= ($first) ? ' ' : ','; - $out .= Twitter_OAuthUtil::urlencode_rfc3986($k) . - '="' . - Twitter_OAuthUtil::urlencode_rfc3986($v) . - '"'; - $first = false; - } - return $out; - } - - - public function __toString() - { - return $this->to_url(); - } - - - public function sign_request($signature_method, $consumer, $token) - { - $this->set_parameter( - 'oauth_signature_method', - $signature_method->get_name(), - false - ); - $signature = $this->build_signature($signature_method, $consumer, $token); - $this->set_parameter('oauth_signature', $signature, false); - } - - - public function build_signature($signature_method, $consumer, $token) - { - $signature = $signature_method->build_signature($this, $consumer, $token); - return $signature; - } - - - /** - * util function: current timestamp - */ - private static function generate_timestamp() - { - return time(); - } - - - /** - * util function: current nonce - */ - private static function generate_nonce() - { - $mt = microtime(); - $rand = mt_rand(); - - return md5($mt . $rand); // md5s look nicer than numbers - } -} - -class Twitter_OAuthServer -{ - protected $timestamp_threshold = 300; // in seconds, five minutes - protected $version = '1.0'; // hi blaine - protected $signature_methods = []; - - protected $data_store; - - - public function __construct($data_store) - { - $this->data_store = $data_store; - } - - - public function add_signature_method($signature_method) - { - $this->signature_methods[$signature_method->get_name()] = - $signature_method; - } - - - // high level functions - - - /** - * process a request_token request - * returns the request token on success - */ - public function fetch_request_token(&$request) - { - $this->get_version($request); - - $consumer = $this->get_consumer($request); - - // no token required for the initial token request - $token = null; - - $this->check_signature($request, $consumer, $token); - - // Rev A change - $callback = $request->get_parameter('oauth_callback'); - $new_token = $this->data_store->new_request_token($consumer, $callback); - - return $new_token; - } - - - /** - * process an access_token request - * returns the access token on success - */ - public function fetch_access_token(&$request) - { - $this->get_version($request); - - $consumer = $this->get_consumer($request); - - // requires authorized request token - $token = $this->get_token($request, $consumer, 'request'); - - $this->check_signature($request, $consumer, $token); - - // Rev A change - $verifier = $request->get_parameter('oauth_verifier'); - $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); - - return $new_token; - } - - - /** - * verify an api call, checks all the parameters - */ - public function verify_request(&$request) - { - $this->get_version($request); - $consumer = $this->get_consumer($request); - $token = $this->get_token($request, $consumer, 'access'); - $this->check_signature($request, $consumer, $token); - return [$consumer, $token]; - } - - - // Internals from here - - - /** - * version 1 - */ - private function get_version(&$request) - { - $version = $request->get_parameter('oauth_version'); - if (!$version) { - // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. - // Chapter 7.0 ("Accessing Protected Ressources") - $version = '1.0'; - } - if ($version !== $this->version) { - throw new Twitter_OAuthException("OAuth version '$version' not supported"); - } - return $version; - } - - - /** - * figure out the signature with some defaults - */ - private function get_signature_method($request) - { - $signature_method = $request instanceof Twitter_OAuthRequest - ? $request->get_parameter('oauth_signature_method') - : null; - - if (!$signature_method) { - // According to chapter 7 ("Accessing Protected Ressources") the signature-method - // parameter is required, and we can't just fallback to PLAINTEXT - throw new Twitter_OAuthException('No signature method parameter. This parameter is required'); - } - - if (!in_array($signature_method, - array_keys($this->signature_methods), true)) { - throw new Twitter_OAuthException( - "Signature method '$signature_method' not supported " . - 'try one of the following: ' . - implode(', ', array_keys($this->signature_methods)) - ); - } - return $this->signature_methods[$signature_method]; - } - - - /** - * try to find the consumer for the provided request's consumer key - */ - private function get_consumer($request) - { - $consumer_key = $request instanceof Twitter_OAuthRequest - ? $request->get_parameter('oauth_consumer_key') - : null; - - if (!$consumer_key) { - throw new Twitter_OAuthException('Invalid consumer key'); - } - - $consumer = $this->data_store->lookup_consumer($consumer_key); - if (!$consumer) { - throw new Twitter_OAuthException('Invalid consumer'); - } - - return $consumer; - } - - - /** - * try to find the token for the provided request's token key - */ - private function get_token($request, $consumer, $token_type = 'access') - { - $token_field = $request instanceof Twitter_OAuthRequest - ? $request->get_parameter('oauth_token') - : null; - - $token = $this->data_store->lookup_token( - $consumer, $token_type, $token_field - ); - if (!$token) { - throw new Twitter_OAuthException("Invalid $token_type token: $token_field"); - } - return $token; - } - - - /** - * all-in-one function to check the signature on a request - * should guess the signature method appropriately - */ - private function check_signature($request, $consumer, $token) - { - // this should probably be in a different method - $timestamp = $request instanceof Twitter_OAuthRequest - ? $request->get_parameter('oauth_timestamp') - : null; - $nonce = $request instanceof Twitter_OAuthRequest - ? $request->get_parameter('oauth_nonce') - : null; - - $this->check_timestamp($timestamp); - $this->check_nonce($consumer, $token, $nonce, $timestamp); - - $signature_method = $this->get_signature_method($request); - - $signature = $request->get_parameter('oauth_signature'); - $valid_sig = $signature_method->check_signature( - $request, - $consumer, - $token, - $signature - ); - - if (!$valid_sig) { - throw new Twitter_OAuthException('Invalid signature'); - } - } - - - /** - * check that the timestamp is new enough - */ - private function check_timestamp($timestamp) - { - if (!$timestamp) { - throw new Twitter_OAuthException( - 'Missing timestamp parameter. The parameter is required' - ); - } - - // verify that timestamp is recentish - $now = time(); - if (abs($now - $timestamp) > $this->timestamp_threshold) { - throw new Twitter_OAuthException( - "Expired timestamp, yours $timestamp, ours $now" - ); - } - } - - - /** - * check that the nonce is not repeated - */ - private function check_nonce($consumer, $token, $nonce, $timestamp) - { - if (!$nonce) { - throw new Twitter_OAuthException( - 'Missing nonce parameter. The parameter is required' - ); - } - - // verify that the nonce is uniqueish - $found = $this->data_store->lookup_nonce( - $consumer, - $token, - $nonce, - $timestamp - ); - if ($found) { - throw new Twitter_OAuthException("Nonce already used: $nonce"); - } - } -} - -class Twitter_OAuthDataStore -{ - public function lookup_consumer($consumer_key) - { - // implement me - } - - - public function lookup_token($consumer, $token_type, $token) - { - // implement me - } - - - public function lookup_nonce($consumer, $token, $nonce, $timestamp) - { - // implement me - } - - - public function new_request_token($consumer, $callback = null) - { - // return a new token attached to this consumer - } - - - public function new_access_token($token, $consumer, $verifier = null) - { - // return a new access token attached to this consumer - // for the user associated with this token if the request token - // is authorized - // should also invalidate the request token - } -} - -class Twitter_OAuthUtil -{ - public static function urlencode_rfc3986($input) - { - if (is_array($input)) { - return array_map(['Twitter_OAuthUtil', 'urlencode_rfc3986'], $input); - } else { - if (is_scalar($input)) { - return str_replace( - '+', - ' ', - str_replace('%7E', '~', rawurlencode($input)) - ); - } else { - return ''; - } - } - } - - - // This decode function isn't taking into consideration the above - // modifications to the encoding process. However, this method doesn't - // seem to be used anywhere so leaving it as is. - public static function urldecode_rfc3986($string) - { - return urldecode($string); - } - - - // Utility function for turning the Authorization: header into - // parameters, has to do some unescaping - // Can filter out any non-oauth parameters if needed (default behaviour) - // May 28th, 2010 - method updated to tjerk.meesters for a speed improvement. - // see http://code.google.com/p/oauth/issues/detail?id=163 - public static function split_header($header, $only_allow_oauth_parameters = true) - { - $params = []; - if (preg_match_all('/(' . ($only_allow_oauth_parameters ? 'oauth_' : '') . '[a-z_-]*)=(:?"([^"]*)"|([^,]*))/', $header, $matches)) { - foreach ($matches[1] as $i => $h) { - $params[$h] = self::urldecode_rfc3986(empty($matches[3][$i]) ? $matches[4][$i] : $matches[3][$i]); - } - if (isset($params['realm'])) { - unset($params['realm']); - } - } - return $params; - } - - - // helper to try to sort out headers for people who aren't running apache - public static function get_headers() - { - if (function_exists('apache_request_headers')) { - // we need this to get the actual Authorization: header - // because apache tends to tell us it doesn't exist - $headers = apache_request_headers(); - - // sanitize the output of apache_request_headers because - // we always want the keys to be Cased-Like-This and arh() - // returns the headers in the same case as they are in the - // request - $out = []; - foreach ($headers as $key => $value) { - $key = str_replace( - ' ', - '-', - ucwords(strtolower(str_replace('-', ' ', $key))) - ); - $out[$key] = $value; - } - } else { - // otherwise we don't have apache and are just going to have to hope - // that $_SERVER actually contains what we need - $out = []; - if (isset($_SERVER['CONTENT_TYPE'])) { - $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; - } - if (isset($_ENV['CONTENT_TYPE'])) { - $out['Content-Type'] = $_ENV['CONTENT_TYPE']; - } - - foreach ($_SERVER as $key => $value) { - if (substr($key, 0, 5) == 'HTTP_') { - // this is chaos, basically it is just there to capitalize the first - // letter of every word that is not an initial HTTP and strip HTTP - // code from przemek - $key = str_replace( - ' ', - '-', - ucwords(strtolower(str_replace('_', ' ', substr($key, 5)))) - ); - $out[$key] = $value; - } - } - } - return $out; - } - - - // This function takes a input like a=b&a=c&d=e and returns the parsed - // parameters like this - // ['a' => array('b','c'), 'd' => 'e'] - public static function parse_parameters($input) - { - if (!isset($input) || !$input) { - return []; - } - - $pairs = explode('&', $input); - - $parsed_parameters = []; - foreach ($pairs as $pair) { - $split = explode('=', $pair, 2); - $parameter = self::urldecode_rfc3986($split[0]); - $value = isset($split[1]) ? self::urldecode_rfc3986($split[1]) : ''; - - if (isset($parsed_parameters[$parameter])) { - // We have already recieved parameter(s) with this name, so add to the list - // of parameters with this name - - if (is_scalar($parsed_parameters[$parameter])) { - // This is the first duplicate, so transform scalar (string) into an array - // so we can add the duplicates - $parsed_parameters[$parameter] = [$parsed_parameters[$parameter]]; - } - - $parsed_parameters[$parameter][] = $value; - } else { - $parsed_parameters[$parameter] = $value; - } - } - return $parsed_parameters; - } - - - public static function build_http_query($params) - { - if (!$params) { - return ''; - } - - // Urlencode both keys and values - $keys = self::urlencode_rfc3986(array_keys($params)); - $values = self::urlencode_rfc3986(array_values($params)); - $params = array_combine($keys, $values); - - // Parameters are sorted by name, using lexicographical byte value ordering. - // Ref: Spec: 9.1.1 (1) - uksort($params, 'strcmp'); - - $pairs = []; - foreach ($params as $parameter => $value) { - if (is_array($value)) { - // If two or more parameters share the same name, they are sorted by their value - // Ref: Spec: 9.1.1 (1) - // June 12th, 2010 - changed to sort because of issue 164 by hidetaka - sort($value, SORT_STRING); - foreach ($value as $duplicate_value) { - $pairs[] = $parameter . '=' . $duplicate_value; - } - } else { - $pairs[] = $parameter . '=' . $value; - } - } - // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) - // Each name-value pair is separated by an '&' character (ASCII code 38) - return implode('&', $pairs); - } -} diff --git a/vendor/dg/twitter-php/src/Twitter.php b/vendor/dg/twitter-php/src/Twitter.php deleted file mode 100644 index a3eaff5..0000000 --- a/vendor/dg/twitter-php/src/Twitter.php +++ /dev/null @@ -1,438 +0,0 @@ - 20, - CURLOPT_SSL_VERIFYPEER => 0, - CURLOPT_USERAGENT => 'Twitter for PHP', - ]; - - /** @var Twitter_OAuthConsumer */ - private $consumer; - - /** @var Twitter_OAuthConsumer */ - private $token; - - - /** - * Creates object using consumer and access keys. - * @param string consumer key - * @param string app secret - * @param string optional access token - * @param string optinal access token secret - * @throws TwitterException when CURL extension is not loaded - */ - public function __construct($consumerKey, $consumerSecret, $accessToken = null, $accessTokenSecret = null) - { - if (!extension_loaded('curl')) { - throw new TwitterException('PHP extension CURL is not loaded.'); - } - - $this->consumer = new Twitter_OAuthConsumer($consumerKey, $consumerSecret); - $this->token = new Twitter_OAuthConsumer($accessToken, $accessTokenSecret); - } - - - /** - * Tests if user credentials are valid. - * @return bool - * @throws TwitterException - */ - public function authenticate() - { - try { - $res = $this->request('account/verify_credentials', 'GET'); - return !empty($res->id); - - } catch (TwitterException $e) { - if ($e->getCode() === 401) { - return false; - } - throw $e; - } - } - - - /** - * Sends message to the Twitter. - * @param string message encoded in UTF-8 - * @param string path to local media file to be uploaded - * @param array additional options to send to statuses/update - * @return stdClass see https://dev.twitter.com/rest/reference/post/statuses/update - * @throws TwitterException - */ - public function send($message, $media = null, $options = []) - { - $mediaIds = []; - foreach ((array) $media as $item) { - $res = $this->request( - 'https://upload.twitter.com/1.1/media/upload.json', - 'POST', - null, - ['media' => $item] - ); - $mediaIds[] = $res->media_id_string; - } - return $this->request( - 'statuses/update', - 'POST', - $options + ['status' => $message, 'media_ids' => implode(',', $mediaIds) ?: null] - ); - } - - - /** - * Sends a direct message to the specified user. - * @return stdClass see https://dev.twitter.com/rest/reference/post/direct_messages/new - * @throws TwitterException - */ - public function sendDirectMessage($username, $message) - { - return $this->request( - 'direct_messages/events/new', - 'JSONPOST', - ['event' => [ - 'type' => 'message_create', - 'message_create' => [ - 'target' => ['recipient_id' => $this->loadUserInfo($username)->id_str], - 'message_data' => ['text' => $message], - ], - ]] - ); - } - - - /** - * Follows a user on Twitter. - * @param string - * @return stdClass see https://dev.twitter.com/rest/reference/post/friendships/create - * @throws TwitterException - */ - public function follow($username) - { - return $this->request('friendships/create', 'POST', ['screen_name' => $username]); - } - - - /** - * Returns the most recent statuses. - * @param int timeline (ME | ME_AND_FRIENDS | REPLIES) and optional (RETWEETS) - * @param int number of statuses to retrieve - * @param array additional options, see https://dev.twitter.com/rest/reference/get/statuses/user_timeline - * @return stdClass[] - * @throws TwitterException - */ - public function load($flags = self::ME, $count = 20, array $data = null) - { - static $timelines = [ - self::ME => 'user_timeline', - self::ME_AND_FRIENDS => 'home_timeline', - self::REPLIES => 'mentions_timeline', - ]; - if (!isset($timelines[$flags & 3])) { - throw new InvalidArgumentException; - } - - return $this->cachedRequest('statuses/' . $timelines[$flags & 3], (array) $data + [ - 'count' => $count, - 'include_rts' => $flags & self::RETWEETS ? 1 : 0, - ]); - } - - - /** - * Returns information of a given user. - * @param string - * @return stdClass see https://dev.twitter.com/rest/reference/get/users/show - * @throws TwitterException - */ - public function loadUserInfo($username) - { - return $this->cachedRequest('users/show', ['screen_name' => $username]); - } - - - /** - * Returns information of a given user by id. - * @param string - * @return stdClass see https://dev.twitter.com/rest/reference/get/users/show - * @throws TwitterException - */ - public function loadUserInfoById($id) - { - return $this->cachedRequest('users/show', ['user_id' => $id]); - } - - - /** - * Returns IDs of followers of a given user. - * @param string - * @return stdClass see https://dev.twitter.com/rest/reference/get/followers/ids - * @throws TwitterException - */ - public function loadUserFollowers($username, $count = 5000, $cursor = -1, $cacheExpiry = null) - { - return $this->cachedRequest('followers/ids', [ - 'screen_name' => $username, - 'count' => $count, - 'cursor' => $cursor, - ], $cacheExpiry); - } - - - /** - * Returns list of followers of a given user. - * @param string - * @return stdClass see https://dev.twitter.com/rest/reference/get/followers/list - * @throws TwitterException - */ - public function loadUserFollowersList($username, $count = 200, $cursor = -1, $cacheExpiry = null) - { - return $this->cachedRequest('followers/list', [ - 'screen_name' => $username, - 'count' => $count, - 'cursor' => $cursor, - ], $cacheExpiry); - } - - - /** - * Destroys status. - * @param int|string id of status to be destroyed - * @return mixed - * @throws TwitterException - */ - public function destroy($id) - { - $res = $this->request("statuses/destroy/$id", 'POST'); - return $res->id ? $res->id : false; - } - - - /** - * Returns tweets that match a specified query. - * @param string|array - * @param bool return complete response? - * @return stdClass see https://dev.twitter.com/rest/reference/get/search/tweets - * @throws TwitterException - */ - public function search($query, $full = false) - { - $res = $this->request('search/tweets', 'GET', is_array($query) ? $query : ['q' => $query]); - return $full ? $res : $res->statuses; - } - - - /** - * Process HTTP request. - * @param string URL or twitter command - * @param string HTTP method GET or POST or JSONPOST - * @param array data - * @param array uploaded files - * @return stdClass|stdClass[] - * @throws TwitterException - */ - public function request($resource, $method, array $data = null, array $files = null) - { - if (!strpos($resource, '://')) { - if (!strpos($resource, '.')) { - $resource .= '.json'; - } - $resource = self::API_URL . $resource; - } - - $hasCURLFile = class_exists('CURLFile', false) && defined('CURLOPT_SAFE_UPLOAD'); - - foreach ((array) $data as $key => $val) { - if ($val === null) { - unset($data[$key]); - } elseif ($files && !$hasCURLFile && substr($val, 0, 1) === '@') { - throw new TwitterException('Due to limitation of cURL it is not possible to send message starting with @ and upload file at the same time in PHP < 5.5'); - } - } - - foreach ((array) $files as $key => $file) { - if (!is_file($file)) { - throw new TwitterException("Cannot read the file $file. Check if file exists on disk and check its permissions."); - } - $data[$key] = $hasCURLFile ? new CURLFile($file) : '@' . $file; - } - - $headers = ['Expect:']; - - if ($method === 'JSONPOST') { - $method = 'POST'; - $data = json_encode($data); - $headers[] = 'Content-Type: application/json'; - - } elseif ($method === 'GET' && $data) { - $resource .= '?' . http_build_query($data, '', '&'); - } - - $request = Twitter_OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $resource); - $request->sign_request(new Twitter_OAuthSignatureMethod_HMAC_SHA1, $this->consumer, $this->token); - $headers[] = $request->to_header(); - - $options = [ - CURLOPT_URL => $resource, - CURLOPT_HEADER => false, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_HTTPHEADER => $headers, - ] + $this->httpOptions; - if ($method === 'POST') { - $options += [ - CURLOPT_POST => true, - CURLOPT_POSTFIELDS => $data, - ]; - if ($hasCURLFile) { - $options[CURLOPT_SAFE_UPLOAD] = true; - } - } - - $curl = curl_init(); - curl_setopt_array($curl, $options); - $result = curl_exec($curl); - if (curl_errno($curl)) { - throw new TwitterException('Server error: ' . curl_error($curl)); - } - - $payload = defined('JSON_BIGINT_AS_STRING') - ? @json_decode($result, false, 128, JSON_BIGINT_AS_STRING) - : @json_decode($result); // intentionally @ - - if ($payload === false) { - throw new TwitterException('Invalid server response'); - } - - $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); - if ($code >= 400) { - throw new TwitterException(isset($payload->errors[0]->message) - ? $payload->errors[0]->message - : "Server error #$code with answer $result", - $code - ); - } - - return $payload; - } - - - /** - * Cached HTTP request. - * @param string URL or twitter command - * @param array - * @param int - * @return stdClass|stdClass[] - */ - public function cachedRequest($resource, array $data = null, $cacheExpire = null) - { - if (!self::$cacheDir) { - return $this->request($resource, 'GET', $data); - } - if ($cacheExpire === null) { - $cacheExpire = self::$cacheExpire; - } - - $cacheFile = self::$cacheDir - . '/twitter.' - . md5($resource . json_encode($data) . serialize([$this->consumer, $this->token])) - . '.json'; - - $cache = @json_decode(@file_get_contents($cacheFile)); // intentionally @ - $expiration = is_string($cacheExpire) ? strtotime($cacheExpire) - time() : $cacheExpire; - if ($cache && @filemtime($cacheFile) + $expiration > time()) { // intentionally @ - return $cache; - } - - try { - $payload = $this->request($resource, 'GET', $data); - file_put_contents($cacheFile, json_encode($payload)); - return $payload; - - } catch (TwitterException $e) { - if ($cache) { - return $cache; - } - throw $e; - } - } - - - /** - * Makes twitter links, @usernames and #hashtags clickable. - * @return string - */ - public static function clickable(stdClass $status) - { - $all = []; - foreach ($status->entities->hashtags as $item) { - $all[$item->indices[0]] = ["https://twitter.com/search?q=%23$item->text", "#$item->text", $item->indices[1]]; - } - foreach ($status->entities->urls as $item) { - if (!isset($item->expanded_url)) { - $all[$item->indices[0]] = [$item->url, $item->url, $item->indices[1]]; - } else { - $all[$item->indices[0]] = [$item->expanded_url, $item->display_url, $item->indices[1]]; - } - } - foreach ($status->entities->user_mentions as $item) { - $all[$item->indices[0]] = ["https://twitter.com/$item->screen_name", "@$item->screen_name", $item->indices[1]]; - } - if (isset($status->entities->media)) { - foreach ($status->entities->media as $item) { - $all[$item->indices[0]] = [$item->url, $item->display_url, $item->indices[1]]; - } - } - - krsort($all); - $s = isset($status->full_text) ? $status->full_text : $status->text; - foreach ($all as $pos => $item) { - $s = iconv_substr($s, 0, $pos, 'UTF-8') - . '' . htmlspecialchars($item[1]) . '' - . iconv_substr($s, $item[2], iconv_strlen($s, 'UTF-8'), 'UTF-8'); - } - return $s; - } -} - - - -/** - * An exception generated by Twitter. - */ -class TwitterException extends Exception -{ -} diff --git a/vendor/dg/twitter-php/src/twitter.class.php b/vendor/dg/twitter-php/src/twitter.class.php deleted file mode 100644 index 35e1b5b..0000000 --- a/vendor/dg/twitter-php/src/twitter.class.php +++ /dev/null @@ -1,4 +0,0 @@ -lcobucci/.github:renovate-config" - ] -} diff --git a/vendor/lcobucci/clock/src/SystemClock.php b/vendor/lcobucci/clock/src/SystemClock.php index 69de81f..437c5f4 100644 --- a/vendor/lcobucci/clock/src/SystemClock.php +++ b/vendor/lcobucci/clock/src/SystemClock.php @@ -10,7 +10,7 @@ final class SystemClock implements Clock { - public function __construct(private readonly DateTimeZone $timezone) + public function __construct(private DateTimeZone $timezone) { } diff --git a/vendor/p3k/xray/composer.json b/vendor/p3k/xray/composer.json index 2b40712..08bdb5b 100644 --- a/vendor/p3k/xray/composer.json +++ b/vendor/p3k/xray/composer.json @@ -8,7 +8,6 @@ "mf2/mf2": "^0.4||^0.5", "ezyang/htmlpurifier": "^4.10", "indieweb/link-rel-parser": "^0.1.0", - "dg/twitter-php": "^3.0.0", "p3k/timezone": "^0.1.0", "p3k/http": "^0.1.0", "cebe/markdown": "^1.1.0", @@ -42,4 +41,4 @@ "scripts": { "test": "vendor/bin/phpunit" } -} \ No newline at end of file +} diff --git a/vendor/p3k/xray/composer.lock b/vendor/p3k/xray/composer.lock index ebf5f65..9016d24 100644 --- a/vendor/p3k/xray/composer.lock +++ b/vendor/p3k/xray/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": "1b65752cb999f79a63d1688f1bc2c7af", + "content-hash": "a5c4ee3f81d0a6720e964ea4a1e54d55", "packages": [ { "name": "cebe/markdown", @@ -70,51 +70,6 @@ }, "time": "2018-03-26T11:24:36+00:00" }, - { - "name": "dg/twitter-php", - "version": "v3.8", - "source": { - "type": "git", - "url": "https://github.com/dg/twitter-php.git", - "reference": "d9370c9759138200a77ca86abcb0c5ddfe857c68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dg/twitter-php/zipball/d9370c9759138200a77ca86abcb0c5ddfe857c68", - "reference": "d9370c9759138200a77ca86abcb0c5ddfe857c68", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.4.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - } - ], - "description": "Small and easy Twitter library for PHP", - "homepage": "https://github.com/dg/twitter-php", - "keywords": [ - "oauth", - "twitter" - ], - "support": { - "source": "https://github.com/dg/twitter-php/tree/v3.8" - }, - "time": "2019-02-08T16:20:01+00:00" - }, { "name": "ezyang/htmlpurifier", "version": "v4.16.0", diff --git a/vendor/p3k/xray/controllers/Parse.php b/vendor/p3k/xray/controllers/Parse.php index 237c2df..421de74 100644 --- a/vendor/p3k/xray/controllers/Parse.php +++ b/vendor/p3k/xray/controllers/Parse.php @@ -98,7 +98,6 @@ public function parse(Request $request, Response $response) { $fetcher = new p3k\XRay\Fetcher($this->http); $fields = [ - 'twitter_api_key','twitter_api_secret','twitter_access_token','twitter_access_token_secret', 'github_access_token', 'token', 'accept', diff --git a/vendor/symfony/dom-crawler/UriResolver.php b/vendor/symfony/dom-crawler/UriResolver.php index 5ff2245..4140dc0 100644 --- a/vendor/symfony/dom-crawler/UriResolver.php +++ b/vendor/symfony/dom-crawler/UriResolver.php @@ -32,8 +32,12 @@ public static function resolve(string $uri, ?string $baseUri): string { $uri = trim($uri); + if (false === ($scheme = parse_url($uri, \PHP_URL_SCHEME)) && '/' === ($uri[0] ?? '')) { + $scheme = parse_url($uri.'#', \PHP_URL_SCHEME); + } + // absolute URL? - if (null !== parse_url($uri, \PHP_URL_SCHEME)) { + if (null !== $scheme) { return $uri; } diff --git a/vendor/symfony/polyfill-ctype/composer.json b/vendor/symfony/polyfill-ctype/composer.json index b222fda..131ca7a 100644 --- a/vendor/symfony/polyfill-ctype/composer.json +++ b/vendor/symfony/polyfill-ctype/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php index 1ad33a8..3d45c9d 100644 --- a/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -50,6 +50,9 @@ * - mb_substr_count - Count the number of substring occurrences * - mb_ucfirst - Make a string's first character uppercase * - mb_lcfirst - Make a string's first character lowercase + * - mb_trim - Strip whitespace (or other characters) from the beginning and end of a string + * - mb_ltrim - Strip whitespace (or other characters) from the beginning of a string + * - mb_rtrim - Strip whitespace (or other characters) from the end of a string * * Not implemented: * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) @@ -83,12 +86,6 @@ final class Mbstring public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) { if (\is_array($s)) { - if (PHP_VERSION_ID < 70200) { - trigger_error('mb_convert_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING); - - return null; - } - $r = []; foreach ($s as $str) { $r[] = self::mb_convert_encoding($str, $toEncoding, $fromEncoding); @@ -427,12 +424,6 @@ public static function mb_encoding_aliases($encoding) public static function mb_check_encoding($var = null, $encoding = null) { - if (\PHP_VERSION_ID < 70200 && \is_array($var)) { - trigger_error('mb_check_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING); - - return null; - } - if (null === $encoding) { if (null === $var) { return false; @@ -980,17 +971,75 @@ private static function getEncoding($encoding) return $encoding; } + public static function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{^[%s]+|[%1$s]+$}Du', $string, $characters, $encoding, __FUNCTION__); + } + + public static function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{^[%s]+}Du', $string, $characters, $encoding, __FUNCTION__); + } + + public static function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string + { + return self::mb_internal_trim('{[%s]+$}D', $string, $characters, $encoding, __FUNCTION__); + } + + private static function mb_internal_trim(string $regex, string $string, ?string $characters, ?string $encoding, string $function): string + { + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } else { + self::assertEncoding($encoding, $function.'(): Argument #3 ($encoding) must be a valid encoding, "%s" given'); + } + + if ('' === $characters) { + return null === $encoding ? $string : self::mb_convert_encoding($string, $encoding); + } + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $string)) { + $string = @iconv('UTF-8', 'UTF-8//IGNORE', $string); + } + if (null !== $characters && !preg_match('//u', $characters)) { + $characters = @iconv('UTF-8', 'UTF-8//IGNORE', $characters); + } + } else { + $string = iconv($encoding, 'UTF-8//IGNORE', $string); + + if (null !== $characters) { + $characters = iconv($encoding, 'UTF-8//IGNORE', $characters); + } + } + + if (null === $characters) { + $characters = "\\0 \f\n\r\t\v\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}"; + } else { + $characters = preg_quote($characters); + } + + $string = preg_replace(sprintf($regex, $characters), '', $string); + + if (null === $encoding) { + return $string; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $string); + } + private static function assertEncoding(string $encoding, string $errorFormat): void { try { $validEncoding = @self::mb_check_encoding('', $encoding); } catch (\ValueError $e) { - throw new \ValueError(\sprintf($errorFormat, $encoding)); + throw new \ValueError(sprintf($errorFormat, $encoding)); } // BC for PHP 7.3 and lower if (!$validEncoding) { - throw new \ValueError(\sprintf($errorFormat, $encoding)); + throw new \ValueError(sprintf($errorFormat, $encoding)); } } } diff --git a/vendor/symfony/polyfill-mbstring/bootstrap.php b/vendor/symfony/polyfill-mbstring/bootstrap.php index 6e4b5fc..ff51ae0 100644 --- a/vendor/symfony/polyfill-mbstring/bootstrap.php +++ b/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -144,6 +144,19 @@ function mb_ucfirst(string $string, ?string $encoding = null): string { return p function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } } +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + + if (extension_loaded('mbstring')) { return; } diff --git a/vendor/symfony/polyfill-mbstring/bootstrap80.php b/vendor/symfony/polyfill-mbstring/bootstrap80.php index ec2ae42..5be7d20 100644 --- a/vendor/symfony/polyfill-mbstring/bootstrap80.php +++ b/vendor/symfony/polyfill-mbstring/bootstrap80.php @@ -93,7 +93,7 @@ function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?strin function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } } if (!function_exists('mb_get_info')) { - function mb_get_info(?string $type = 'all'): array|string|int|false { return p\Mbstring::mb_get_info((string) $type); } + function mb_get_info(?string $type = 'all'): array|string|int|false|null { return p\Mbstring::mb_get_info((string) $type); } } if (!function_exists('mb_http_output')) { function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); } @@ -140,6 +140,18 @@ function mb_ucfirst($string, ?string $encoding = null): string { return p\Mbstri function mb_lcfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); } } +if (!function_exists('mb_trim')) { + function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_trim($string, $characters, $encoding); } +} + +if (!function_exists('mb_ltrim')) { + function mb_ltrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_ltrim($string, $characters, $encoding); } +} + +if (!function_exists('mb_rtrim')) { + function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Mbstring::mb_rtrim($string, $characters, $encoding); } +} + if (extension_loaded('mbstring')) { return; } diff --git a/vendor/symfony/polyfill-mbstring/composer.json b/vendor/symfony/polyfill-mbstring/composer.json index bd99d4b..4ed241a 100644 --- a/vendor/symfony/polyfill-mbstring/composer.json +++ b/vendor/symfony/polyfill-mbstring/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" diff --git a/vendor/symfony/polyfill-php80/composer.json b/vendor/symfony/polyfill-php80/composer.json index 46ccde2..a503b03 100644 --- a/vendor/symfony/polyfill-php80/composer.json +++ b/vendor/symfony/polyfill-php80/composer.json @@ -20,7 +20,7 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.2" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Php80\\": "" },