From 324385b07a20500f4c93dfd67c534a58af30fb6d Mon Sep 17 00:00:00 2001
From: Julien Loizelet
Date: Fri, 13 Dec 2024 08:58:02 +0900
Subject: [PATCH] feat(*): Enable admin bounce by default (#161)
* feat(admin): Enable protection by default on admin
* test(end to end): Disable protection on admin for test
* fix(captcha): Patch Gregwar Captcha to avoid deprecated error in PHP 8.4
* feat(*): Prepare release 2.8.0
---
.github/workflows/release.yml | 208 --
CHANGELOG.md | 16 +
composer.json | 13 +-
composer.lock | 222 +-
crowdsec.php | 4 +-
docs/USER_GUIDE.md | 8 +-
inc/Admin/settings.php | 2 +-
inc/Constants.php | 2 +-
inc/options-config.php | 2 +-
patches/gregwar-captcha-constructor.patch | 13 +
readme.txt | 6 +-
tests/e2e-ddev/utils/helpers.js | 1 +
vendor/autoload.php | 2 +-
vendor/composer/InstalledVersions.php | 11 +-
vendor/composer/autoload_classmap.php | 3 +
vendor/composer/autoload_psr4.php | 1 +
vendor/composer/autoload_real.php | 10 +-
vendor/composer/autoload_static.php | 19 +-
vendor/composer/ca-bundle/res/cacert.pem | 32 +-
vendor/composer/ca-bundle/src/CaBundle.php | 8 +-
vendor/composer/installed.json | 262 +-
vendor/composer/installed.php | 85 +-
.../cweagans/composer-patches/.editorconfig | 11 +
vendor/cweagans/composer-patches/.gitignore | 1 +
vendor/cweagans/composer-patches/LICENSE.md | 9 +
vendor/cweagans/composer-patches/README.md | 205 ++
.../cweagans/composer-patches/composer.json | 30 +
.../cweagans/composer-patches/composer.lock | 2568 +++++++++++++++++
.../composer-patches/phpunit.xml.dist | 18 +
.../composer-patches/src/PatchEvent.php | 70 +
.../composer-patches/src/PatchEvents.php | 30 +
.../cweagans/composer-patches/src/Patches.php | 599 ++++
.../composer-patches/tests/PatchEventTest.php | 39 +
vendor/gregwar/captcha/PATCHES.txt | 7 +
.../src/Gregwar/Captcha/CaptchaBuilder.php | 2 +-
vendor/maxmind-db/reader/CHANGELOG.md | 7 +
vendor/maxmind-db/reader/README.md | 2 +-
vendor/maxmind-db/reader/autoload.php | 2 +-
vendor/maxmind-db/reader/composer.json | 4 +-
vendor/maxmind-db/reader/ext/php_maxminddb.h | 2 +-
vendor/maxmind-db/reader/package.xml | 12 +-
.../reader/src/MaxMind/Db/Reader.php | 33 +-
.../reader/src/MaxMind/Db/Reader/Decoder.php | 17 +
.../reader/src/MaxMind/Db/Reader/Metadata.php | 9 +-
.../web-service-common/dev-bin/release.sh | 0
vendor/mlocati/ip-lib/README.md | 28 +-
vendor/mlocati/ip-lib/src/Factory.php | 20 +-
vendor/monolog/monolog/CHANGELOG.md | 8 +
.../src/Monolog/Formatter/JsonFormatter.php | 4 +
.../Monolog/Handler/ElasticsearchHandler.php | 1 +
.../Monolog/Handler/RotatingFileHandler.php | 13 +-
.../src/Monolog/Handler/StreamHandler.php | 44 +-
vendor/monolog/monolog/src/Monolog/Logger.php | 7 +-
vendor/monolog/monolog/src/Monolog/Utils.php | 2 +-
vendor/symfony/cache-contracts/.gitignore | 3 -
vendor/symfony/cache/Traits/RedisTrait.php | 18 +-
vendor/symfony/config/FileLocator.php | 3 +-
.../symfony/deprecation-contracts/.gitignore | 3 -
vendor/symfony/filesystem/Filesystem.php | 4 +-
vendor/symfony/service-contracts/.gitignore | 3 -
60 files changed, 4223 insertions(+), 545 deletions(-)
create mode 100644 patches/gregwar-captcha-constructor.patch
create mode 100644 vendor/cweagans/composer-patches/.editorconfig
create mode 100644 vendor/cweagans/composer-patches/.gitignore
create mode 100644 vendor/cweagans/composer-patches/LICENSE.md
create mode 100644 vendor/cweagans/composer-patches/README.md
create mode 100644 vendor/cweagans/composer-patches/composer.json
create mode 100644 vendor/cweagans/composer-patches/composer.lock
create mode 100644 vendor/cweagans/composer-patches/phpunit.xml.dist
create mode 100644 vendor/cweagans/composer-patches/src/PatchEvent.php
create mode 100644 vendor/cweagans/composer-patches/src/PatchEvents.php
create mode 100644 vendor/cweagans/composer-patches/src/Patches.php
create mode 100644 vendor/cweagans/composer-patches/tests/PatchEventTest.php
create mode 100644 vendor/gregwar/captcha/PATCHES.txt
mode change 100644 => 100755 vendor/maxmind/web-service-common/dev-bin/release.sh
delete mode 100644 vendor/symfony/cache-contracts/.gitignore
delete mode 100644 vendor/symfony/deprecation-contracts/.gitignore
delete mode 100644 vendor/symfony/service-contracts/.gitignore
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index f464d084..1ded63f4 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -161,211 +161,3 @@ jobs:
draft: false
prerelease: false
- end-to-end-release-zip-test:
- strategy:
- fail-fast: false
- # First and last minor versions of each major version
- # Highest compatible PHP version
- matrix:
- include:
- - wp-version: '4.9'
- php-version: '7.2'
- - wp-version: '5.0'
- php-version: '7.2'
- - wp-version: '5.9'
- php-version: '7.2'
- - wp-version: '5.9'
- php-version: '8.0'
- - wp-version: '6.0'
- php-version: '7.2'
- - wp-version: '6.0'
- php-version: '8.0'
- - wp-version: '6.7'
- php-version: '7.2'
- - wp-version: '6.7'
- php-version: '8.3'
-
- name: End-to-end release test suite
- runs-on: ubuntu-latest
- if: success()
- needs: [ deploy-create-release ]
-
- env:
- EXTENSION_NAME: "CrowdSec_Bouncer"
- EXTENSION_PATH: "wp-content/plugins/crowdsec"
- GITHUB_ORIGIN: "crowdsecurity/cs-wordpress-bouncer"
-
- steps:
-
- - name: Install DDEV
- # @see https://ddev.readthedocs.io/en/stable/#installationupgrade-script-linux-and-macos-armarm64-and-amd64-architectures
- run: |
- curl -fsSL https://apt.fury.io/drud/gpg.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/ddev.gpg > /dev/null
- echo "deb [signed-by=/etc/apt/trusted.gpg.d/ddev.gpg] https://apt.fury.io/drud/ * *" | sudo tee /etc/apt/sources.list.d/ddev.list
- sudo apt-get -q update
- sudo apt-get -q -y install libnss3-tools ddev
- mkcert -install
- ddev config global --instrumentation-opt-in=false --omit-containers=ddev-ssh-agent
-
- - name: Set WP_VERSION_CODE env
- # used in some directory path and conventional file naming
- # Example : 5.6.5 => wp565
- id: set-wp-version-code
- run: |
- echo "wp_version_code=$(echo wp${{ matrix.wp-version }} | sed 's/\.//g' )" >> $GITHUB_OUTPUT
-
- - name: Create empty WordPress DDEV project (with Apache)
- run: ddev config --project-type=wordpress --project-name=${{ steps.set-wp-version-code.outputs.wp_version_code }} --php-version=${{ matrix.php-version }} --webserver-type=apache-fpm
-
- - name: Disable automatic update
- run: |
- # @see https://wordpress.org/documentation/article/configuring-automatic-background-updates/#constant-to-disable-all-updates
- sed -i -e 's/#ddev-generated//g' wp-config-ddev.php
- echo "define( 'AUTOMATIC_UPDATER_DISABLED', true );" >> wp-config-ddev.php
-
- - name: Add Redis, Memcached, Crowdsec and Playwright
- run: |
- ddev get ddev/ddev-redis
- ddev get ddev/ddev-memcached
- ddev get julienloizelet/ddev-playwright
- # override redis.conf
- ddev get julienloizelet/ddev-tools
- ddev get julienloizelet/ddev-crowdsec-php
-
- - name: Start DDEV
- uses: nick-fields/retry@v3
- with:
- timeout_minutes: 5
- max_attempts: 3
- shell: bash
- command: |
- ddev start
-
- - name: Download WordPress
- run: ddev wp core download --version=${{ matrix.wp-version }}
-
- - name: Setup WordPress ${{ matrix.wp-version }} with PHP ${{ matrix.php-version }}
- run: |
- ddev exec wp core install --url='https://${{ steps.set-wp-version-code.outputs.wp_version_code }}.ddev.site' --title='WordPress' --admin_user='admin' --admin_password='admin123' --admin_email='admin@admin.com'
-
- - name: Set LAST_TAG env
- id: set-last-tag
- run: |
- echo "last_tag=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/${{ env.GITHUB_ORIGIN }}/releases/latest | grep -oP "\/tag\/v\K(.*)$")" >> $GITHUB_OUTPUT
-
- - name: Clone files from last release
- uses: actions/checkout@v4
- with:
- path: raw_sources
- ref: "v${{ steps.set-last-tag.outputs.last_tag }}"
- repository: "${{ env.GITHUB_ORIGIN }}"
-
- - name: Retrieve last stable release zip
- run: |
- curl -fL https://downloads.wordpress.org/plugin/crowdsec.${{ steps.set-last-tag.outputs.last_tag }}.zip -o crowdsec.$LAST_TAG.zip
- unzip crowdsec.${{ steps.set-last-tag.outputs.last_tag }}.zip -d ${{ github.workspace }}/wp-content/plugins
-
- - name: Copy needed tests files
- run: |
- cp -r raw_sources/tests wp-content/plugins/crowdsec
- cp -r raw_sources/.github wp-content/plugins/crowdsec
-
- - name: Prepare for playwright test
- run: |
- ddev exec -s crowdsec apk add iproute2
- cp .ddev/okaeli-add-on/wordpress/custom_files/crowdsec/php/wp_appsec_custom_upload.php wp_appsec_custom_upload.php
- cat .ddev/okaeli-add-on/wordpress/custom_files/crowdsec/html/appsec-upload.html | ddev wp post create --post_type=page --post_status=publish --post_title="AppSec Upload" -
- cat .ddev/okaeli-add-on/wordpress/custom_files/crowdsec/html/appsec-post.html | ddev wp post create --post_type=page --post_status=publish --post_title="AppSec" -
- ddev wp rewrite structure "/%postname%/"
- mkdir -p crowdsec/tls
- mkdir -p crowdsec/geolocation
- cp .ddev/okaeli-add-on/wordpress/custom_files/crowdsec/php/cache-actions-with-wordpress-load.php cache-actions.php
- cp -r .ddev/okaeli-add-on/custom_files/crowdsec/cfssl/* crowdsec/tls
- ddev maxmind-download DEFAULT GeoLite2-City crowdsec/geolocation
- ddev maxmind-download DEFAULT GeoLite2-Country crowdsec/geolocation
- cd crowdsec/geolocation
- sha256sum -c GeoLite2-Country.tar.gz.sha256.txt
- sha256sum -c GeoLite2-City.tar.gz.sha256.txt
- tar -xf GeoLite2-Country.tar.gz
- tar -xf GeoLite2-City.tar.gz
- rm GeoLite2-Country.tar.gz GeoLite2-Country.tar.gz.sha256.txt GeoLite2-City.tar.gz GeoLite2-City.tar.gz.sha256.txt
- cd ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev/__scripts__
- chmod +x test-init.sh
- ./test-init.sh
- chmod +x run-tests.sh
-
- - name: Some DEBUG information
- run: |
- ddev --version
- ddev exec php -v
- ddev exec -s crowdsec crowdsec -version
-
- - name: Run Plugin activation tests
- uses: ./wp-content/plugins/crowdsec/.github/workflows/end-to-end/run-single-test
- with:
- test_path: ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev
- file_path: 1-activate-plugin.js
-
- - name: Configure CrowdSec and Wordpress bouncer plugin
- run: |
- ddev crowdsec-config
-
- - name: Run Live mode remediation tests
- uses: ./wp-content/plugins/crowdsec/.github/workflows/end-to-end/run-single-test
- with:
- test_path: ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev
- file_path: 2-live-mode-remediations.js
-
- - name: Run more Live mode remediation tests
- uses: ./wp-content/plugins/crowdsec/.github/workflows/end-to-end/run-single-test
- with:
- test_path: ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev
- file_path: 3-live-mode-more.js
-
- - name: Run Live mode cache tests
- uses: ./wp-content/plugins/crowdsec/.github/workflows/end-to-end/run-single-test
- with:
- test_path: ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev
- file_path: 4-live-mode-cache.js
-
- - name: Prepare cron usage
- run: |
- sed -i 's/fastcgi_finish_request/\/\/fastcgi_finish_request/g' wp-cron.php
-
- - name: Run Stream mode tests
- uses: ./wp-content/plugins/crowdsec/.github/workflows/end-to-end/run-single-test
- with:
- test_path: ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev
- file_path: 5-stream-mode.js
-
- - name: Run Redis tests
- uses: ./wp-content/plugins/crowdsec/.github/workflows/end-to-end/run-single-test
- with:
- test_path: ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev
- file_path: 6-redis.js
-
- - name: Run Memcached tests
- uses: ./wp-content/plugins/crowdsec/.github/workflows/end-to-end/run-single-test
- with:
- test_path: ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev
- file_path: 7-memcached.js
-
- - name: Run Geolocation tests
- uses: ./wp-content/plugins/crowdsec/.github/workflows/end-to-end/run-single-test
- with:
- test_path: ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev
- file_path: 8-geolocation.js
-
- - name: Run AppSec tests
- uses: ./wp-content/plugins/crowdsec/.github/workflows/end-to-end/run-single-test
- with:
- test_path: ${{ github.workspace }}/${{ env.EXTENSION_PATH }}/tests/e2e-ddev
- file_path: 11-appsec.js
-
- - name: tmate debugging session
- uses: mxschmitt/action-tmate@v3
- with:
- limit-access-to-actor: true
- github-token: ${{ secrets.GITHUB_TOKEN }}
- timeout-minutes: 30
- if: failure()
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 42110193..19f4e565 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
---
+
+## [2.8.0](https://github.com/crowdsecurity/cs-wordpress-bouncer/releases/tag/v2.8.0) - 2024-12-13
+[_Compare with previous release_](https://github.com/crowdsecurity/cs-wordpress-bouncer/compare/v2.7.0...v2.8.0)
+
+
+### Changed
+
+- Set the "Public website only" setting to OFF by default
+
+### Fixed
+
+- Fix deprecated warning in PHP 8.4 for Captcha
+
+---
+
+
## [2.7.0](https://github.com/crowdsecurity/cs-wordpress-bouncer/releases/tag/v2.7.0) - 2024-12-12
[_Compare with previous release_](https://github.com/crowdsecurity/cs-wordpress-bouncer/compare/v2.6.7...v2.7.0)
diff --git a/composer.json b/composer.json
index fe8cfdf0..288a4540 100644
--- a/composer.json
+++ b/composer.json
@@ -16,13 +16,17 @@
"config" : {
"platform": {
"php": "7.2.5"
+ },
+ "allow-plugins": {
+ "cweagans/composer-patches": true
}
},
"require": {
"crowdsec/bouncer": "^3.2.0",
"symfony/cache": "5.4.40",
"symfony/polyfill-mbstring": "^1.31.0",
- "symfony/service-contracts": "^2.5.3"
+ "symfony/service-contracts": "^2.5.3",
+ "cweagans/composer-patches": "^1.7"
},
"replace": {
"twig/twig": "*"
@@ -31,5 +35,12 @@
"psr-4": {
"CrowdSecWordPressBouncer\\": "./inc/"
}
+ },
+ "extra": {
+ "patches": {
+ "gregwar/captcha": {
+ "Fix deprecation in CaptchaBuilder constructor": "patches/gregwar-captcha-constructor.patch"
+ }
+ }
}
}
diff --git a/composer.lock b/composer.lock
index f018c585..9245d9ed 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "77e38fdfa09bc412f913fcfb5a4b9af1",
+ "content-hash": "736dd03e0c646515fc0f7d62cc50f074",
"packages": [
{
"name": "composer/ca-bundle",
- "version": "1.5.2",
+ "version": "1.5.4",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137"
+ "reference": "bc0593537a463e55cadf45fd938d23b75095b7e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/48a792895a2b7a6ee65dd5442c299d7b835b6137",
- "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/bc0593537a463e55cadf45fd938d23b75095b7e1",
+ "reference": "bc0593537a463e55cadf45fd938d23b75095b7e1",
"shasum": ""
},
"require": {
@@ -64,7 +64,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.5.2"
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.4"
},
"funding": [
{
@@ -80,7 +80,7 @@
"type": "tidelift"
}
],
- "time": "2024-09-25T07:49:53+00:00"
+ "time": "2024-11-27T15:35:25+00:00"
},
{
"name": "crowdsec/bouncer",
@@ -434,6 +434,54 @@
},
"time": "2024-10-18T05:40:39+00:00"
},
+ {
+ "name": "cweagans/composer-patches",
+ "version": "1.7.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cweagans/composer-patches.git",
+ "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e190d4466fe2b103a55467dfa83fc2fecfcaf2db",
+ "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "composer/composer": "~1.0 || ~2.0",
+ "phpunit/phpunit": "~4.6"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "cweagans\\Composer\\Patches"
+ },
+ "autoload": {
+ "psr-4": {
+ "cweagans\\Composer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Cameron Eagans",
+ "email": "me@cweagans.net"
+ }
+ ],
+ "description": "Provides a way to patch Composer packages.",
+ "support": {
+ "issues": "https://github.com/cweagans/composer-patches/issues",
+ "source": "https://github.com/cweagans/composer-patches/tree/1.7.3"
+ },
+ "time": "2022-12-20T22:53:13+00:00"
+ },
{
"name": "geoip2/geoip2",
"version": "v2.13.0",
@@ -551,29 +599,27 @@
},
{
"name": "maxmind-db/reader",
- "version": "v1.11.1",
+ "version": "v1.12.0",
"source": {
"type": "git",
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
- "reference": "1e66f73ffcf25e17c7a910a1317e9720a95497c7"
+ "reference": "5b2d7a721dedfaef9dc20822c5fe7d26f9f8eb90"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/1e66f73ffcf25e17c7a910a1317e9720a95497c7",
- "reference": "1e66f73ffcf25e17c7a910a1317e9720a95497c7",
+ "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/5b2d7a721dedfaef9dc20822c5fe7d26f9f8eb90",
+ "reference": "5b2d7a721dedfaef9dc20822c5fe7d26f9f8eb90",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"conflict": {
- "ext-maxminddb": "<1.11.1,>=2.0.0"
+ "ext-maxminddb": "<1.11.1 || >=2.0.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "3.*",
- "php-coveralls/php-coveralls": "^2.1",
"phpstan/phpstan": "*",
- "phpunit/phpcov": ">=6.0.0",
"phpunit/phpunit": ">=8.0.0,<10.0.0",
"squizlabs/php_codesniffer": "3.*"
},
@@ -610,9 +656,9 @@
],
"support": {
"issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues",
- "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.11.1"
+ "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.12.0"
},
- "time": "2023-12-02T00:09:23+00:00"
+ "time": "2024-11-14T22:43:47+00:00"
},
{
"name": "maxmind/web-service-common",
@@ -667,16 +713,16 @@
},
{
"name": "mlocati/ip-lib",
- "version": "1.18.0",
+ "version": "1.18.1",
"source": {
"type": "git",
"url": "https://github.com/mlocati/ip-lib.git",
- "reference": "c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2"
+ "reference": "08bb43b4949069c543ebdf099a6b2c322d0172ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mlocati/ip-lib/zipball/c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2",
- "reference": "c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2",
+ "url": "https://api.github.com/repos/mlocati/ip-lib/zipball/08bb43b4949069c543ebdf099a6b2c322d0172ab",
+ "reference": "08bb43b4949069c543ebdf099a6b2c322d0172ab",
"shasum": ""
},
"require": {
@@ -722,7 +768,7 @@
],
"support": {
"issues": "https://github.com/mlocati/ip-lib/issues",
- "source": "https://github.com/mlocati/ip-lib/tree/1.18.0"
+ "source": "https://github.com/mlocati/ip-lib/tree/1.18.1"
},
"funding": [
{
@@ -734,20 +780,20 @@
"type": "other"
}
],
- "time": "2022-01-13T18:05:33+00:00"
+ "time": "2024-10-29T15:44:19+00:00"
},
{
"name": "monolog/monolog",
- "version": "2.9.3",
+ "version": "2.10.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215"
+ "reference": "5cf826f2991858b54d5c3809bee745560a1042a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215",
- "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7",
+ "reference": "5cf826f2991858b54d5c3809bee745560a1042a7",
"shasum": ""
},
"require": {
@@ -824,7 +870,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/2.9.3"
+ "source": "https://github.com/Seldaek/monolog/tree/2.10.0"
},
"funding": [
{
@@ -836,7 +882,7 @@
"type": "tidelift"
}
],
- "time": "2024-04-12T20:52:51+00:00"
+ "time": "2024-11-12T12:43:37+00:00"
},
{
"name": "psr/cache",
@@ -1084,16 +1130,16 @@
},
{
"name": "symfony/cache-contracts",
- "version": "v2.5.3",
+ "version": "v2.5.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
- "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463"
+ "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463",
- "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463",
+ "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e",
+ "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e",
"shasum": ""
},
"require": {
@@ -1143,7 +1189,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/cache-contracts/tree/v2.5.3"
+ "source": "https://github.com/symfony/cache-contracts/tree/v2.5.4"
},
"funding": [
{
@@ -1159,20 +1205,20 @@
"type": "tidelift"
}
],
- "time": "2024-01-23T13:51:25+00:00"
+ "time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/config",
- "version": "v5.4.40",
+ "version": "v5.4.46",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e"
+ "reference": "977c88a02d7d3f16904a81907531b19666a08e78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/d4e1db78421163b98dd9971d247fd0df4a57ee5e",
- "reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e",
+ "url": "https://api.github.com/repos/symfony/config/zipball/977c88a02d7d3f16904a81907531b19666a08e78",
+ "reference": "977c88a02d7d3f16904a81907531b19666a08e78",
"shasum": ""
},
"require": {
@@ -1222,7 +1268,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/config/tree/v5.4.40"
+ "source": "https://github.com/symfony/config/tree/v5.4.46"
},
"funding": [
{
@@ -1238,20 +1284,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:33:22+00:00"
+ "time": "2024-10-30T07:58:02+00:00"
},
{
"name": "symfony/deprecation-contracts",
- "version": "v2.5.3",
+ "version": "v2.5.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "80d075412b557d41002320b96a096ca65aa2c98d"
+ "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d",
- "reference": "80d075412b557d41002320b96a096ca65aa2c98d",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918",
+ "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918",
"shasum": ""
},
"require": {
@@ -1289,7 +1335,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.3"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4"
},
"funding": [
{
@@ -1305,20 +1351,20 @@
"type": "tidelift"
}
],
- "time": "2023-01-24T14:02:46+00:00"
+ "time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v5.4.44",
+ "version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc"
+ "reference": "57c8294ed37d4a055b77057827c67f9558c95c54"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/76c3818964e9d32be3862c9318ae3ba9aa280ddc",
- "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54",
+ "reference": "57c8294ed37d4a055b77057827c67f9558c95c54",
"shasum": ""
},
"require": {
@@ -1356,7 +1402,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.4.44"
+ "source": "https://github.com/symfony/filesystem/tree/v5.4.45"
},
"funding": [
{
@@ -1372,20 +1418,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-16T14:52:48+00:00"
+ "time": "2024-10-22T13:05:35+00:00"
},
{
"name": "symfony/finder",
- "version": "v5.4.43",
+ "version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ae25a9145a900764158d439653d5630191155ca0"
+ "reference": "63741784cd7b9967975eec610b256eed3ede022b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ae25a9145a900764158d439653d5630191155ca0",
- "reference": "ae25a9145a900764158d439653d5630191155ca0",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b",
+ "reference": "63741784cd7b9967975eec610b256eed3ede022b",
"shasum": ""
},
"require": {
@@ -1419,7 +1465,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v5.4.43"
+ "source": "https://github.com/symfony/finder/tree/v5.4.45"
},
"funding": [
{
@@ -1435,7 +1481,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-13T14:03:51+00:00"
+ "time": "2024-09-28T13:32:08+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -1463,8 +1509,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -1542,8 +1588,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -1616,8 +1662,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -1692,8 +1738,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -1772,8 +1818,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -1854,8 +1900,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -1909,16 +1955,16 @@
},
{
"name": "symfony/service-contracts",
- "version": "v2.5.3",
+ "version": "v2.5.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3"
+ "reference": "f37b419f7aea2e9abf10abd261832cace12e3300"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3",
- "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300",
+ "reference": "f37b419f7aea2e9abf10abd261832cace12e3300",
"shasum": ""
},
"require": {
@@ -1972,7 +2018,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.5.3"
+ "source": "https://github.com/symfony/service-contracts/tree/v2.5.4"
},
"funding": [
{
@@ -1988,20 +2034,20 @@
"type": "tidelift"
}
],
- "time": "2023-04-21T15:04:16+00:00"
+ "time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/uid",
- "version": "v5.4.44",
+ "version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "b36c8947ee835916eac8c341e124c3de19ff43ca"
+ "reference": "512de7894f93ad63a7d5e33f590a83e054f571bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/b36c8947ee835916eac8c341e124c3de19ff43ca",
- "reference": "b36c8947ee835916eac8c341e124c3de19ff43ca",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/512de7894f93ad63a7d5e33f590a83e054f571bc",
+ "reference": "512de7894f93ad63a7d5e33f590a83e054f571bc",
"shasum": ""
},
"require": {
@@ -2046,7 +2092,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v5.4.44"
+ "source": "https://github.com/symfony/uid/tree/v5.4.45"
},
"funding": [
{
@@ -2062,20 +2108,20 @@
"type": "tidelift"
}
],
- "time": "2024-09-11T16:39:40+00:00"
+ "time": "2024-09-25T14:11:13+00:00"
},
{
"name": "symfony/var-exporter",
- "version": "v5.4.40",
+ "version": "v5.4.45",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "6a13d37336d512927986e09f19a4bed24178baa6"
+ "reference": "862700068db0ddfd8c5b850671e029a90246ec75"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/6a13d37336d512927986e09f19a4bed24178baa6",
- "reference": "6a13d37336d512927986e09f19a4bed24178baa6",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/862700068db0ddfd8c5b850671e029a90246ec75",
+ "reference": "862700068db0ddfd8c5b850671e029a90246ec75",
"shasum": ""
},
"require": {
@@ -2119,7 +2165,7 @@
"serialize"
],
"support": {
- "source": "https://github.com/symfony/var-exporter/tree/v5.4.40"
+ "source": "https://github.com/symfony/var-exporter/tree/v5.4.45"
},
"funding": [
{
@@ -2135,7 +2181,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:33:22+00:00"
+ "time": "2024-09-25T14:11:13+00:00"
}
],
"packages-dev": [],
diff --git a/crowdsec.php b/crowdsec.php
index 1218c1c8..30d58cc6 100644
--- a/crowdsec.php
+++ b/crowdsec.php
@@ -4,7 +4,7 @@
* Plugin URI: https://github.com/crowdsecurity/cs-wordpress-bouncer
* Description: Safer Together. Protect your WordPress application with CrowdSec.
* Tags: security, captcha, ip-blocker, crowdsec, hacker-protection, appsec
- * Version: 2.7.0
+ * Version: 2.8.0
* Author: CrowdSec
* Author URI: https://www.crowdsec.net/
* Github: https://github.com/crowdsecurity/cs-wordpress-bouncer
@@ -13,7 +13,7 @@
* Requires PHP: 7.2
* Requires at least: 4.9
* Tested up to: 6.7
- * Stable tag: 2.7.0
+ * Stable tag: 2.8.0
* Text Domain: crowdsec-wp
* First release: 2021.
*/
diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md
index bcbc4ee9..987e5e6f 100644
--- a/docs/USER_GUIDE.md
+++ b/docs/USER_GUIDE.md
@@ -214,7 +214,13 @@ With the `Flex mode`, it is impossible to accidentally block access to your site
`Bouncing → Public website only`
-If enabled, the admin view is not bounced.
+If enabled, Admin related requests are not protected.
+
+**Important notes**:
+- Admin is a frequently attacked section, and we recommend not enabling this setting to protect it.
+- In addition, note that WordPress considers certain critical public endpoints to be admin endpoints. As it's
+ preferable to protect them as well, we also recommend not enabling this setting.
+
***
diff --git a/inc/Admin/settings.php b/inc/Admin/settings.php
index 952aa119..2a38c630 100644
--- a/inc/Admin/settings.php
+++ b/inc/Admin/settings.php
@@ -178,5 +178,5 @@ function crowdsec_multi_save_settings()
}, function () {
// Stream mode just deactivated.
unscheduleBlocklistRefresh();
- }, 'If checked, the wp-admin is not bounced, only the public website
Important note: the login page is a common page to both sections. If you want to bounce it, you have to disable "Public website only".
');
+ }, 'If checked, Admin related requests are not protected.
Important notes: We recommend to leave this setting to OFF in order to apply protection to your WordPress admin:
- WordPress admin is a frequent target of cyberattack.
- Also, some critical public endpoints are considered "admin" and would be unprotected If this setting was ON.
');
}
diff --git a/inc/Constants.php b/inc/Constants.php
index faa7795f..4a60d86a 100644
--- a/inc/Constants.php
+++ b/inc/Constants.php
@@ -21,5 +21,5 @@ class Constants extends LibConstants
public const DEFAULT_BASE_FILE_PATH = __DIR__ . '/../../../../wp-content/uploads/crowdsec/';
public const STANDALONE_CONFIG_PATH = __DIR__ . '/standalone-settings.php';
- public const VERSION = 'v2.7.0';
+ public const VERSION = 'v2.8.0';
}
diff --git a/inc/options-config.php b/inc/options-config.php
index 4a97bb58..1bcca3be 100644
--- a/inc/options-config.php
+++ b/inc/options-config.php
@@ -15,7 +15,7 @@ function getCrowdSecOptionsConfig(): array
['name' => 'crowdsec_use_curl', 'default' => '', 'autoInit' => true],
['name' => 'crowdsec_api_timeout', 'default' => Constants::API_TIMEOUT, 'autoInit' => true],
['name' => 'crowdsec_bouncing_level', 'default' => Constants::BOUNCING_LEVEL_DISABLED, 'autoInit' => true],
- ['name' => 'crowdsec_public_website_only', 'default' => 'on', 'autoInit' => true],
+ ['name' => 'crowdsec_public_website_only', 'default' => '', 'autoInit' => true],
['name' => 'crowdsec_stream_mode', 'default' => '', 'autoInit' => true],
['name' => 'crowdsec_stream_mode_refresh_frequency', 'default' => 60, 'autoInit' => true],
['name' => 'crowdsec_cache_system', 'default' => Constants::CACHE_SYSTEM_PHPFS, 'autoInit' => true],
diff --git a/patches/gregwar-captcha-constructor.patch b/patches/gregwar-captcha-constructor.patch
new file mode 100644
index 00000000..49c75621
--- /dev/null
+++ b/patches/gregwar-captcha-constructor.patch
@@ -0,0 +1,13 @@
+diff --git a/src/Gregwar/Captcha/CaptchaBuilder.php b/src/Gregwar/Captcha/CaptchaBuilder.php
+index ab8d93f..67e77cf 100644
+--- a/src/Gregwar/Captcha/CaptchaBuilder.php
++++ b/src/Gregwar/Captcha/CaptchaBuilder.php
+@@ -133,7 +133,7 @@ class CaptchaBuilder implements CaptchaBuilderInterface
+ */
+ public $tempDir = 'temp/';
+
+- public function __construct($phrase = null, PhraseBuilderInterface $builder = null)
++ public function __construct($phrase = null, ?PhraseBuilderInterface $builder = null)
+ {
+ if ($builder === null) {
+ $this->builder = new PhraseBuilder;
diff --git a/readme.txt b/readme.txt
index cb636e68..04cceb98 100644
--- a/readme.txt
+++ b/readme.txt
@@ -4,7 +4,7 @@ Donate link: https://crowdsec.net/
Tags: security, captcha, ip-blocker, crowdsec, hacker-protection
Requires at least: 4.9
Tested up to: 6.7
-Stable tag: 2.7.0
+Stable tag: 2.8.0
Requires PHP: 7.2
License: MIT
License URI: https://opensource.org/licenses/MIT
@@ -44,6 +44,10 @@ This WordPress plugin is a "bouncer", which purpose is to block detected attacks
== Changelog ==
+= 2.8 (2024-12-13) =
+
+- Disable "Public Website only" setting by default
+
= 2.7 (2024-12-12) =
- Add AppSec component support
diff --git a/tests/e2e-ddev/utils/helpers.js b/tests/e2e-ddev/utils/helpers.js
index 5f15714b..31acc3b5 100644
--- a/tests/e2e-ddev/utils/helpers.js
+++ b/tests/e2e-ddev/utils/helpers.js
@@ -253,6 +253,7 @@ const setDefaultConfig = async () => {
await setToggle("crowdsec_use_curl", false);
await setToggle("crowdsec_api_timeout", 120);
await selectByName("crowdsec_bouncing_level", "normal_bouncing");
+ await setToggle("crowdsec_public_website_only", true);
await onAdminSaveSettings(false);
await onAdminGoToAdvancedPage();
diff --git a/vendor/autoload.php b/vendor/autoload.php
index f17ddb5e..bae20dcf 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -22,4 +22,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
-return ComposerAutoloaderInit4b873ba8e7b65775adbfceed536a1658::getLoader();
+return ComposerAutoloaderInit736dd03e0c646515fc0f7d62cc50f074::getLoader();
diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php
index 51e734a7..07b32ed6 100644
--- a/vendor/composer/InstalledVersions.php
+++ b/vendor/composer/InstalledVersions.php
@@ -322,6 +322,7 @@ private static function getInstalled()
}
$installed = array();
+ $copiedLocalDir = false;
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
@@ -330,9 +331,11 @@ private static function getInstalled()
} elseif (is_file($vendorDir.'/composer/installed.php')) {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */
$required = require $vendorDir.'/composer/installed.php';
- $installed[] = self::$installedByVendor[$vendorDir] = $required;
- if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
- self::$installed = $installed[count($installed) - 1];
+ self::$installedByVendor[$vendorDir] = $required;
+ $installed[] = $required;
+ if (strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
+ self::$installed = $required;
+ $copiedLocalDir = true;
}
}
}
@@ -350,7 +353,7 @@ private static function getInstalled()
}
}
- if (self::$installed !== array()) {
+ if (self::$installed !== array() && !$copiedLocalDir) {
$installed[] = self::$installed;
}
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 97eac0f7..ab1c91bb 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -501,4 +501,7 @@
'Symfony\\Polyfill\\Uuid\\Uuid' => $vendorDir . '/symfony/polyfill-uuid/Uuid.php',
'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
+ 'cweagans\\Composer\\PatchEvent' => $vendorDir . '/cweagans/composer-patches/src/PatchEvent.php',
+ 'cweagans\\Composer\\PatchEvents' => $vendorDir . '/cweagans/composer-patches/src/PatchEvents.php',
+ 'cweagans\\Composer\\Patches' => $vendorDir . '/cweagans/composer-patches/src/Patches.php',
);
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index 06ac47d1..91d96de0 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -6,6 +6,7 @@
$baseDir = dirname($vendorDir);
return array(
+ 'cweagans\\Composer\\' => array($vendorDir . '/cweagans/composer-patches/src'),
'Symfony\\Polyfill\\Uuid\\' => array($vendorDir . '/symfony/polyfill-uuid'),
'Symfony\\Polyfill\\Php81\\' => array($vendorDir . '/symfony/polyfill-php81'),
'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index 767a48ea..facdb021 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInit4b873ba8e7b65775adbfceed536a1658
+class ComposerAutoloaderInit736dd03e0c646515fc0f7d62cc50f074
{
private static $loader;
@@ -24,16 +24,16 @@ public static function getLoader()
require __DIR__ . '/platform_check.php';
- spl_autoload_register(array('ComposerAutoloaderInit4b873ba8e7b65775adbfceed536a1658', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInit736dd03e0c646515fc0f7d62cc50f074', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
- spl_autoload_unregister(array('ComposerAutoloaderInit4b873ba8e7b65775adbfceed536a1658', 'loadClassLoader'));
+ spl_autoload_unregister(array('ComposerAutoloaderInit736dd03e0c646515fc0f7d62cc50f074', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
- call_user_func(\Composer\Autoload\ComposerStaticInit4b873ba8e7b65775adbfceed536a1658::getInitializer($loader));
+ call_user_func(\Composer\Autoload\ComposerStaticInit736dd03e0c646515fc0f7d62cc50f074::getInitializer($loader));
$loader->register(true);
- $filesToLoad = \Composer\Autoload\ComposerStaticInit4b873ba8e7b65775adbfceed536a1658::$files;
+ $filesToLoad = \Composer\Autoload\ComposerStaticInit736dd03e0c646515fc0f7d62cc50f074::$files;
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 530ec334..3d106ff7 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -4,7 +4,7 @@
namespace Composer\Autoload;
-class ComposerStaticInit4b873ba8e7b65775adbfceed536a1658
+class ComposerStaticInit736dd03e0c646515fc0f7d62cc50f074
{
public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
@@ -17,6 +17,10 @@ class ComposerStaticInit4b873ba8e7b65775adbfceed536a1658
);
public static $prefixLengthsPsr4 = array (
+ 'c' =>
+ array (
+ 'cweagans\\Composer\\' => 18,
+ ),
'S' =>
array (
'Symfony\\Polyfill\\Uuid\\' => 22,
@@ -69,6 +73,10 @@ class ComposerStaticInit4b873ba8e7b65775adbfceed536a1658
);
public static $prefixDirsPsr4 = array (
+ 'cweagans\\Composer\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/cweagans/composer-patches/src',
+ ),
'Symfony\\Polyfill\\Uuid\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/polyfill-uuid',
@@ -691,14 +699,17 @@ class ComposerStaticInit4b873ba8e7b65775adbfceed536a1658
'Symfony\\Polyfill\\Uuid\\Uuid' => __DIR__ . '/..' . '/symfony/polyfill-uuid/Uuid.php',
'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
+ 'cweagans\\Composer\\PatchEvent' => __DIR__ . '/..' . '/cweagans/composer-patches/src/PatchEvent.php',
+ 'cweagans\\Composer\\PatchEvents' => __DIR__ . '/..' . '/cweagans/composer-patches/src/PatchEvents.php',
+ 'cweagans\\Composer\\Patches' => __DIR__ . '/..' . '/cweagans/composer-patches/src/Patches.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
- $loader->prefixLengthsPsr4 = ComposerStaticInit4b873ba8e7b65775adbfceed536a1658::$prefixLengthsPsr4;
- $loader->prefixDirsPsr4 = ComposerStaticInit4b873ba8e7b65775adbfceed536a1658::$prefixDirsPsr4;
- $loader->classMap = ComposerStaticInit4b873ba8e7b65775adbfceed536a1658::$classMap;
+ $loader->prefixLengthsPsr4 = ComposerStaticInit736dd03e0c646515fc0f7d62cc50f074::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInit736dd03e0c646515fc0f7d62cc50f074::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInit736dd03e0c646515fc0f7d62cc50f074::$classMap;
}, null, ClassLoader::class);
}
diff --git a/vendor/composer/ca-bundle/res/cacert.pem b/vendor/composer/ca-bundle/res/cacert.pem
index f2c24a58..eb11b2fd 100644
--- a/vendor/composer/ca-bundle/res/cacert.pem
+++ b/vendor/composer/ca-bundle/res/cacert.pem
@@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Tue Sep 24 03:12:04 2024 GMT
+## Certificate data from Mozilla as of: Tue Nov 26 13:58:25 2024 GMT
##
## Find updated versions here: https://curl.se/docs/caextract.html
##
@@ -2602,6 +2602,36 @@ vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
CAezNIm8BZ/3Hobui3A=
-----END CERTIFICATE-----
+GLOBALTRUST 2020
+================
+-----BEGIN CERTIFICATE-----
+MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx
+IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT
+VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh
+BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy
+MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi
+D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO
+VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM
+CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm
+fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA
+A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR
+JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG
+DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU
+clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ
+mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud
+IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA
+VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw
+4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9
+iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS
+8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2
+HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS
+vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918
+oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF
+YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl
+gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
+-----END CERTIFICATE-----
+
ANF Secure Server Root CA
=========================
-----BEGIN CERTIFICATE-----
diff --git a/vendor/composer/ca-bundle/src/CaBundle.php b/vendor/composer/ca-bundle/src/CaBundle.php
index f6f2afe8..2d6b48c5 100644
--- a/vendor/composer/ca-bundle/src/CaBundle.php
+++ b/vendor/composer/ca-bundle/src/CaBundle.php
@@ -84,23 +84,19 @@ public static function getSystemCaRootBundlePath(?LoggerInterface $logger = null
'/etc/pki/tls/certs/ca-bundle.crt', // Fedora, RHEL, CentOS (ca-certificates package)
'/etc/ssl/certs/ca-certificates.crt', // Debian, Ubuntu, Gentoo, Arch Linux (ca-certificates package)
'/etc/ssl/ca-bundle.pem', // SUSE, openSUSE (ca-certificates package)
- '/usr/local/share/certs/ca-root-nss.crt', // FreeBSD (ca_root_nss_package)
'/usr/ssl/certs/ca-bundle.crt', // Cygwin
'/opt/local/share/curl/curl-ca-bundle.crt', // OS X macports, curl-ca-bundle package
'/usr/local/share/curl/curl-ca-bundle.crt', // Default cURL CA bunde path (without --with-ca-bundle option)
'/usr/share/ssl/certs/ca-bundle.crt', // Really old RedHat?
'/etc/ssl/cert.pem', // OpenBSD
- '/usr/local/etc/ssl/cert.pem', // FreeBSD 10.x
'/usr/local/etc/openssl/cert.pem', // OS X homebrew, openssl package
'/usr/local/etc/openssl@1.1/cert.pem', // OS X homebrew, openssl@1.1 package
'/opt/homebrew/etc/openssl@3/cert.pem', // macOS silicon homebrew, openssl@3 package
'/opt/homebrew/etc/openssl@1.1/cert.pem', // macOS silicon homebrew, openssl@1.1 package
+ '/etc/pki/tls/certs',
+ '/etc/ssl/certs', // FreeBSD
);
- foreach($otherLocations as $location) {
- $otherLocations[] = dirname($location);
- }
-
$caBundlePaths = array_merge($caBundlePaths, $otherLocations);
foreach ($caBundlePaths as $caBundle) {
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 4d341906..554d041d 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -2,17 +2,17 @@
"packages": [
{
"name": "composer/ca-bundle",
- "version": "1.5.2",
- "version_normalized": "1.5.2.0",
+ "version": "1.5.4",
+ "version_normalized": "1.5.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137"
+ "reference": "bc0593537a463e55cadf45fd938d23b75095b7e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/48a792895a2b7a6ee65dd5442c299d7b835b6137",
- "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/bc0593537a463e55cadf45fd938d23b75095b7e1",
+ "reference": "bc0593537a463e55cadf45fd938d23b75095b7e1",
"shasum": ""
},
"require": {
@@ -26,7 +26,7 @@
"psr/log": "^1.0 || ^2.0 || ^3.0",
"symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
- "time": "2024-09-25T07:49:53+00:00",
+ "time": "2024-11-27T15:35:25+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -61,7 +61,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.5.2"
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.4"
},
"funding": [
{
@@ -446,13 +446,64 @@
},
"install-path": "../crowdsec/remediation-engine"
},
+ {
+ "name": "cweagans/composer-patches",
+ "version": "1.7.3",
+ "version_normalized": "1.7.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cweagans/composer-patches.git",
+ "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e190d4466fe2b103a55467dfa83fc2fecfcaf2db",
+ "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "composer/composer": "~1.0 || ~2.0",
+ "phpunit/phpunit": "~4.6"
+ },
+ "time": "2022-12-20T22:53:13+00:00",
+ "type": "composer-plugin",
+ "extra": {
+ "class": "cweagans\\Composer\\Patches"
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "cweagans\\Composer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Cameron Eagans",
+ "email": "me@cweagans.net"
+ }
+ ],
+ "description": "Provides a way to patch Composer packages.",
+ "support": {
+ "issues": "https://github.com/cweagans/composer-patches/issues",
+ "source": "https://github.com/cweagans/composer-patches/tree/1.7.3"
+ },
+ "install-path": "../cweagans/composer-patches"
+ },
{
"name": "geoip2/geoip2",
"version": "v2.13.0",
"version_normalized": "2.13.0.0",
"source": {
"type": "git",
- "url": "git@github.com:maxmind/GeoIP2-php.git",
+ "url": "https://github.com/maxmind/GeoIP2-php.git",
"reference": "6a41d8fbd6b90052bc34dff3b4252d0f88067b23"
},
"dist": {
@@ -501,6 +552,10 @@
"geolocation",
"maxmind"
],
+ "support": {
+ "issues": "https://github.com/maxmind/GeoIP2-php/issues",
+ "source": "https://github.com/maxmind/GeoIP2-php/tree/v2.13.0"
+ },
"install-path": "../geoip2/geoip2"
},
{
@@ -529,6 +584,11 @@
},
"time": "2023-09-26T13:45:37+00:00",
"type": "library",
+ "extra": {
+ "patches_applied": {
+ "Fix deprecation in CaptchaBuilder constructor": "patches/gregwar-captcha-constructor.patch"
+ }
+ },
"installation-source": "dist",
"autoload": {
"psr-4": {
@@ -565,30 +625,28 @@
},
{
"name": "maxmind-db/reader",
- "version": "v1.11.1",
- "version_normalized": "1.11.1.0",
+ "version": "v1.12.0",
+ "version_normalized": "1.12.0.0",
"source": {
"type": "git",
- "url": "git@github.com:maxmind/MaxMind-DB-Reader-php.git",
- "reference": "1e66f73ffcf25e17c7a910a1317e9720a95497c7"
+ "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
+ "reference": "5b2d7a721dedfaef9dc20822c5fe7d26f9f8eb90"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/1e66f73ffcf25e17c7a910a1317e9720a95497c7",
- "reference": "1e66f73ffcf25e17c7a910a1317e9720a95497c7",
+ "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/5b2d7a721dedfaef9dc20822c5fe7d26f9f8eb90",
+ "reference": "5b2d7a721dedfaef9dc20822c5fe7d26f9f8eb90",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"conflict": {
- "ext-maxminddb": "<1.11.1,>=2.0.0"
+ "ext-maxminddb": "<1.11.1 || >=2.0.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "3.*",
- "php-coveralls/php-coveralls": "^2.1",
"phpstan/phpstan": "*",
- "phpunit/phpcov": ">=6.0.0",
"phpunit/phpunit": ">=8.0.0,<10.0.0",
"squizlabs/php_codesniffer": "3.*"
},
@@ -597,7 +655,7 @@
"ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
},
- "time": "2023-12-02T00:09:23+00:00",
+ "time": "2024-11-14T22:43:47+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -625,6 +683,10 @@
"geolocation",
"maxmind"
],
+ "support": {
+ "issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues",
+ "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.12.0"
+ },
"install-path": "../maxmind-db/reader"
},
{
@@ -683,17 +745,17 @@
},
{
"name": "mlocati/ip-lib",
- "version": "1.18.0",
- "version_normalized": "1.18.0.0",
+ "version": "1.18.1",
+ "version_normalized": "1.18.1.0",
"source": {
"type": "git",
"url": "https://github.com/mlocati/ip-lib.git",
- "reference": "c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2"
+ "reference": "08bb43b4949069c543ebdf099a6b2c322d0172ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mlocati/ip-lib/zipball/c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2",
- "reference": "c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2",
+ "url": "https://api.github.com/repos/mlocati/ip-lib/zipball/08bb43b4949069c543ebdf099a6b2c322d0172ab",
+ "reference": "08bb43b4949069c543ebdf099a6b2c322d0172ab",
"shasum": ""
},
"require": {
@@ -703,7 +765,7 @@
"ext-pdo_sqlite": "*",
"phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.5 || ^9.5"
},
- "time": "2022-01-13T18:05:33+00:00",
+ "time": "2024-10-29T15:44:19+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -741,7 +803,7 @@
],
"support": {
"issues": "https://github.com/mlocati/ip-lib/issues",
- "source": "https://github.com/mlocati/ip-lib/tree/1.18.0"
+ "source": "https://github.com/mlocati/ip-lib/tree/1.18.1"
},
"funding": [
{
@@ -757,17 +819,17 @@
},
{
"name": "monolog/monolog",
- "version": "2.9.3",
- "version_normalized": "2.9.3.0",
+ "version": "2.10.0",
+ "version_normalized": "2.10.0.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215"
+ "reference": "5cf826f2991858b54d5c3809bee745560a1042a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215",
- "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7",
+ "reference": "5cf826f2991858b54d5c3809bee745560a1042a7",
"shasum": ""
},
"require": {
@@ -813,7 +875,7 @@
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server"
},
- "time": "2024-04-12T20:52:51+00:00",
+ "time": "2024-11-12T12:43:37+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -846,7 +908,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/2.9.3"
+ "source": "https://github.com/Seldaek/monolog/tree/2.10.0"
},
"funding": [
{
@@ -1118,17 +1180,17 @@
},
{
"name": "symfony/cache-contracts",
- "version": "v2.5.3",
- "version_normalized": "2.5.3.0",
+ "version": "v2.5.4",
+ "version_normalized": "2.5.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache-contracts.git",
- "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463"
+ "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/fee6db04d913094e2fb55ff8e7db5685a8134463",
- "reference": "fee6db04d913094e2fb55ff8e7db5685a8134463",
+ "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e",
+ "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e",
"shasum": ""
},
"require": {
@@ -1138,7 +1200,7 @@
"suggest": {
"symfony/cache-implementation": ""
},
- "time": "2024-01-23T13:51:25+00:00",
+ "time": "2024-09-25T14:11:13+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -1180,7 +1242,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/cache-contracts/tree/v2.5.3"
+ "source": "https://github.com/symfony/cache-contracts/tree/v2.5.4"
},
"funding": [
{
@@ -1200,17 +1262,17 @@
},
{
"name": "symfony/config",
- "version": "v5.4.40",
- "version_normalized": "5.4.40.0",
+ "version": "v5.4.46",
+ "version_normalized": "5.4.46.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e"
+ "reference": "977c88a02d7d3f16904a81907531b19666a08e78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/d4e1db78421163b98dd9971d247fd0df4a57ee5e",
- "reference": "d4e1db78421163b98dd9971d247fd0df4a57ee5e",
+ "url": "https://api.github.com/repos/symfony/config/zipball/977c88a02d7d3f16904a81907531b19666a08e78",
+ "reference": "977c88a02d7d3f16904a81907531b19666a08e78",
"shasum": ""
},
"require": {
@@ -1234,7 +1296,7 @@
"suggest": {
"symfony/yaml": "To use the yaml reference dumper"
},
- "time": "2024-05-31T14:33:22+00:00",
+ "time": "2024-10-30T07:58:02+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1262,7 +1324,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/config/tree/v5.4.40"
+ "source": "https://github.com/symfony/config/tree/v5.4.46"
},
"funding": [
{
@@ -1282,23 +1344,23 @@
},
{
"name": "symfony/deprecation-contracts",
- "version": "v2.5.3",
- "version_normalized": "2.5.3.0",
+ "version": "v2.5.4",
+ "version_normalized": "2.5.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "80d075412b557d41002320b96a096ca65aa2c98d"
+ "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/80d075412b557d41002320b96a096ca65aa2c98d",
- "reference": "80d075412b557d41002320b96a096ca65aa2c98d",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918",
+ "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
- "time": "2023-01-24T14:02:46+00:00",
+ "time": "2024-09-25T14:11:13+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -1332,7 +1394,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.3"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4"
},
"funding": [
{
@@ -1352,17 +1414,17 @@
},
{
"name": "symfony/filesystem",
- "version": "v5.4.44",
- "version_normalized": "5.4.44.0",
+ "version": "v5.4.45",
+ "version_normalized": "5.4.45.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc"
+ "reference": "57c8294ed37d4a055b77057827c67f9558c95c54"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/76c3818964e9d32be3862c9318ae3ba9aa280ddc",
- "reference": "76c3818964e9d32be3862c9318ae3ba9aa280ddc",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54",
+ "reference": "57c8294ed37d4a055b77057827c67f9558c95c54",
"shasum": ""
},
"require": {
@@ -1374,7 +1436,7 @@
"require-dev": {
"symfony/process": "^5.4|^6.4"
},
- "time": "2024-09-16T14:52:48+00:00",
+ "time": "2024-10-22T13:05:35+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1402,7 +1464,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.4.44"
+ "source": "https://github.com/symfony/filesystem/tree/v5.4.45"
},
"funding": [
{
@@ -1422,17 +1484,17 @@
},
{
"name": "symfony/finder",
- "version": "v5.4.43",
- "version_normalized": "5.4.43.0",
+ "version": "v5.4.45",
+ "version_normalized": "5.4.45.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ae25a9145a900764158d439653d5630191155ca0"
+ "reference": "63741784cd7b9967975eec610b256eed3ede022b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ae25a9145a900764158d439653d5630191155ca0",
- "reference": "ae25a9145a900764158d439653d5630191155ca0",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b",
+ "reference": "63741784cd7b9967975eec610b256eed3ede022b",
"shasum": ""
},
"require": {
@@ -1440,7 +1502,7 @@
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-php80": "^1.16"
},
- "time": "2024-08-13T14:03:51+00:00",
+ "time": "2024-09-28T13:32:08+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1468,7 +1530,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v5.4.43"
+ "source": "https://github.com/symfony/finder/tree/v5.4.45"
},
"funding": [
{
@@ -1514,8 +1576,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"installation-source": "dist",
@@ -1596,8 +1658,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"installation-source": "dist",
@@ -1673,8 +1735,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"installation-source": "dist",
@@ -1752,8 +1814,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"installation-source": "dist",
@@ -1835,8 +1897,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"installation-source": "dist",
@@ -1920,8 +1982,8 @@
"type": "library",
"extra": {
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"installation-source": "dist",
@@ -1976,17 +2038,17 @@
},
{
"name": "symfony/service-contracts",
- "version": "v2.5.3",
- "version_normalized": "2.5.3.0",
+ "version": "v2.5.4",
+ "version_normalized": "2.5.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3"
+ "reference": "f37b419f7aea2e9abf10abd261832cace12e3300"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a2329596ddc8fd568900e3fc76cba42489ecc7f3",
- "reference": "a2329596ddc8fd568900e3fc76cba42489ecc7f3",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300",
+ "reference": "f37b419f7aea2e9abf10abd261832cace12e3300",
"shasum": ""
},
"require": {
@@ -2000,7 +2062,7 @@
"suggest": {
"symfony/service-implementation": ""
},
- "time": "2023-04-21T15:04:16+00:00",
+ "time": "2024-09-25T14:11:13+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -2042,7 +2104,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.5.3"
+ "source": "https://github.com/symfony/service-contracts/tree/v2.5.4"
},
"funding": [
{
@@ -2062,17 +2124,17 @@
},
{
"name": "symfony/uid",
- "version": "v5.4.44",
- "version_normalized": "5.4.44.0",
+ "version": "v5.4.45",
+ "version_normalized": "5.4.45.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "b36c8947ee835916eac8c341e124c3de19ff43ca"
+ "reference": "512de7894f93ad63a7d5e33f590a83e054f571bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/b36c8947ee835916eac8c341e124c3de19ff43ca",
- "reference": "b36c8947ee835916eac8c341e124c3de19ff43ca",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/512de7894f93ad63a7d5e33f590a83e054f571bc",
+ "reference": "512de7894f93ad63a7d5e33f590a83e054f571bc",
"shasum": ""
},
"require": {
@@ -2082,7 +2144,7 @@
"require-dev": {
"symfony/console": "^4.4|^5.0|^6.0"
},
- "time": "2024-09-11T16:39:40+00:00",
+ "time": "2024-09-25T14:11:13+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -2119,7 +2181,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v5.4.44"
+ "source": "https://github.com/symfony/uid/tree/v5.4.45"
},
"funding": [
{
@@ -2139,17 +2201,17 @@
},
{
"name": "symfony/var-exporter",
- "version": "v5.4.40",
- "version_normalized": "5.4.40.0",
+ "version": "v5.4.45",
+ "version_normalized": "5.4.45.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "6a13d37336d512927986e09f19a4bed24178baa6"
+ "reference": "862700068db0ddfd8c5b850671e029a90246ec75"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/6a13d37336d512927986e09f19a4bed24178baa6",
- "reference": "6a13d37336d512927986e09f19a4bed24178baa6",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/862700068db0ddfd8c5b850671e029a90246ec75",
+ "reference": "862700068db0ddfd8c5b850671e029a90246ec75",
"shasum": ""
},
"require": {
@@ -2159,7 +2221,7 @@
"require-dev": {
"symfony/var-dumper": "^4.4.9|^5.0.9|^6.0"
},
- "time": "2024-05-31T14:33:22+00:00",
+ "time": "2024-09-25T14:11:13+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -2195,7 +2257,7 @@
"serialize"
],
"support": {
- "source": "https://github.com/symfony/var-exporter/tree/v5.4.40"
+ "source": "https://github.com/symfony/var-exporter/tree/v5.4.45"
},
"funding": [
{
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index 1db6a6cc..36b01361 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -3,7 +3,7 @@
'name' => 'crowdsec/wordpress-bouncer',
'pretty_version' => 'dev-main',
'version' => 'dev-main',
- 'reference' => 'ed00caa7e30c7b8d1c7017d7cc822ea7201321bb',
+ 'reference' => 'e3507c08812edc1e02c0e4af672299f68cb9ad5a',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -11,9 +11,9 @@
),
'versions' => array(
'composer/ca-bundle' => array(
- 'pretty_version' => '1.5.2',
- 'version' => '1.5.2.0',
- 'reference' => '48a792895a2b7a6ee65dd5442c299d7b835b6137',
+ 'pretty_version' => '1.5.4',
+ 'version' => '1.5.4.0',
+ 'reference' => 'bc0593537a463e55cadf45fd938d23b75095b7e1',
'type' => 'library',
'install_path' => __DIR__ . '/./ca-bundle',
'aliases' => array(),
@@ -67,12 +67,21 @@
'crowdsec/wordpress-bouncer' => array(
'pretty_version' => 'dev-main',
'version' => 'dev-main',
- 'reference' => 'ed00caa7e30c7b8d1c7017d7cc822ea7201321bb',
+ 'reference' => 'e3507c08812edc1e02c0e4af672299f68cb9ad5a',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev_requirement' => false,
),
+ 'cweagans/composer-patches' => array(
+ 'pretty_version' => '1.7.3',
+ 'version' => '1.7.3.0',
+ 'reference' => 'e190d4466fe2b103a55467dfa83fc2fecfcaf2db',
+ 'type' => 'composer-plugin',
+ 'install_path' => __DIR__ . '/../cweagans/composer-patches',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
'geoip2/geoip2' => array(
'pretty_version' => 'v2.13.0',
'version' => '2.13.0.0',
@@ -92,9 +101,9 @@
'dev_requirement' => false,
),
'maxmind-db/reader' => array(
- 'pretty_version' => 'v1.11.1',
- 'version' => '1.11.1.0',
- 'reference' => '1e66f73ffcf25e17c7a910a1317e9720a95497c7',
+ 'pretty_version' => 'v1.12.0',
+ 'version' => '1.12.0.0',
+ 'reference' => '5b2d7a721dedfaef9dc20822c5fe7d26f9f8eb90',
'type' => 'library',
'install_path' => __DIR__ . '/../maxmind-db/reader',
'aliases' => array(),
@@ -110,18 +119,18 @@
'dev_requirement' => false,
),
'mlocati/ip-lib' => array(
- 'pretty_version' => '1.18.0',
- 'version' => '1.18.0.0',
- 'reference' => 'c77bd0b1f3e3956c7e9661e75cb1f54ed67d95d2',
+ 'pretty_version' => '1.18.1',
+ 'version' => '1.18.1.0',
+ 'reference' => '08bb43b4949069c543ebdf099a6b2c322d0172ab',
'type' => 'library',
'install_path' => __DIR__ . '/../mlocati/ip-lib',
'aliases' => array(),
'dev_requirement' => false,
),
'monolog/monolog' => array(
- 'pretty_version' => '2.9.3',
- 'version' => '2.9.3.0',
- 'reference' => 'a30bfe2e142720dfa990d0a7e573997f5d884215',
+ 'pretty_version' => '2.10.0',
+ 'version' => '2.10.0.0',
+ 'reference' => '5cf826f2991858b54d5c3809bee745560a1042a7',
'type' => 'library',
'install_path' => __DIR__ . '/../monolog/monolog',
'aliases' => array(),
@@ -182,9 +191,9 @@
'dev_requirement' => false,
),
'symfony/cache-contracts' => array(
- 'pretty_version' => 'v2.5.3',
- 'version' => '2.5.3.0',
- 'reference' => 'fee6db04d913094e2fb55ff8e7db5685a8134463',
+ 'pretty_version' => 'v2.5.4',
+ 'version' => '2.5.4.0',
+ 'reference' => '517c3a3619dadfa6952c4651767fcadffb4df65e',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/cache-contracts',
'aliases' => array(),
@@ -197,36 +206,36 @@
),
),
'symfony/config' => array(
- 'pretty_version' => 'v5.4.40',
- 'version' => '5.4.40.0',
- 'reference' => 'd4e1db78421163b98dd9971d247fd0df4a57ee5e',
+ 'pretty_version' => 'v5.4.46',
+ 'version' => '5.4.46.0',
+ 'reference' => '977c88a02d7d3f16904a81907531b19666a08e78',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/config',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/deprecation-contracts' => array(
- 'pretty_version' => 'v2.5.3',
- 'version' => '2.5.3.0',
- 'reference' => '80d075412b557d41002320b96a096ca65aa2c98d',
+ 'pretty_version' => 'v2.5.4',
+ 'version' => '2.5.4.0',
+ 'reference' => '605389f2a7e5625f273b53960dc46aeaf9c62918',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/filesystem' => array(
- 'pretty_version' => 'v5.4.44',
- 'version' => '5.4.44.0',
- 'reference' => '76c3818964e9d32be3862c9318ae3ba9aa280ddc',
+ 'pretty_version' => 'v5.4.45',
+ 'version' => '5.4.45.0',
+ 'reference' => '57c8294ed37d4a055b77057827c67f9558c95c54',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/filesystem',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/finder' => array(
- 'pretty_version' => 'v5.4.43',
- 'version' => '5.4.43.0',
- 'reference' => 'ae25a9145a900764158d439653d5630191155ca0',
+ 'pretty_version' => 'v5.4.45',
+ 'version' => '5.4.45.0',
+ 'reference' => '63741784cd7b9967975eec610b256eed3ede022b',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/finder',
'aliases' => array(),
@@ -287,27 +296,27 @@
'dev_requirement' => false,
),
'symfony/service-contracts' => array(
- 'pretty_version' => 'v2.5.3',
- 'version' => '2.5.3.0',
- 'reference' => 'a2329596ddc8fd568900e3fc76cba42489ecc7f3',
+ 'pretty_version' => 'v2.5.4',
+ 'version' => '2.5.4.0',
+ 'reference' => 'f37b419f7aea2e9abf10abd261832cace12e3300',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/service-contracts',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/uid' => array(
- 'pretty_version' => 'v5.4.44',
- 'version' => '5.4.44.0',
- 'reference' => 'b36c8947ee835916eac8c341e124c3de19ff43ca',
+ 'pretty_version' => 'v5.4.45',
+ 'version' => '5.4.45.0',
+ 'reference' => '512de7894f93ad63a7d5e33f590a83e054f571bc',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/uid',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/var-exporter' => array(
- 'pretty_version' => 'v5.4.40',
- 'version' => '5.4.40.0',
- 'reference' => '6a13d37336d512927986e09f19a4bed24178baa6',
+ 'pretty_version' => 'v5.4.45',
+ 'version' => '5.4.45.0',
+ 'reference' => '862700068db0ddfd8c5b850671e029a90246ec75',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/var-exporter',
'aliases' => array(),
diff --git a/vendor/cweagans/composer-patches/.editorconfig b/vendor/cweagans/composer-patches/.editorconfig
new file mode 100644
index 00000000..8e825941
--- /dev/null
+++ b/vendor/cweagans/composer-patches/.editorconfig
@@ -0,0 +1,11 @@
+# This is the top-most .editorconfig file; do not search in parent directories.
+root = true
+
+# All files.
+[*]
+end_of_line = LF
+indent_style = space
+indent_size = 2
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/vendor/cweagans/composer-patches/.gitignore b/vendor/cweagans/composer-patches/.gitignore
new file mode 100644
index 00000000..48b8bf90
--- /dev/null
+++ b/vendor/cweagans/composer-patches/.gitignore
@@ -0,0 +1 @@
+vendor/
diff --git a/vendor/cweagans/composer-patches/LICENSE.md b/vendor/cweagans/composer-patches/LICENSE.md
new file mode 100644
index 00000000..d0dad3df
--- /dev/null
+++ b/vendor/cweagans/composer-patches/LICENSE.md
@@ -0,0 +1,9 @@
+Copyright 2013 Cameron Eagans
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+2. 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.
+3. Neither the name of the copyright holder 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 HOLDER 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/cweagans/composer-patches/README.md b/vendor/cweagans/composer-patches/README.md
new file mode 100644
index 00000000..87f9dc0c
--- /dev/null
+++ b/vendor/cweagans/composer-patches/README.md
@@ -0,0 +1,205 @@
+# composer-patches
+
+Simple patches plugin for Composer. Applies a patch from a local or remote file to any package required with composer.
+
+Note that the 1.x versions of Composer Patches are supported on a best-effort
+basis due to the imminent release of 2.0.0. You may still be interested in
+using 1.x if you need Composer to cooperate with earlier PHP versions. No new
+features will be added to 1.x releases, but any security or bug fixes will
+still be accepted.
+
+## Usage
+
+Example composer.json:
+
+```json
+{
+ "require": {
+ "cweagans/composer-patches": "~1.0",
+ "drupal/drupal": "~8.2"
+ },
+ "config": {
+ "preferred-install": "source"
+ },
+ "extra": {
+ "patches": {
+ "drupal/drupal": {
+ "Add startup configuration for PHP server": "https://www.drupal.org/files/issues/add_a_startup-1543858-30.patch"
+ }
+ }
+ }
+}
+
+```
+
+## Using an external patch file
+
+Instead of a patches key in your root composer.json, use a patches-file key.
+
+```json
+{
+ "require": {
+ "cweagans/composer-patches": "~1.0",
+ "drupal/drupal": "~8.2"
+ },
+ "config": {
+ "preferred-install": "source"
+ },
+ "extra": {
+ "patches-file": "local/path/to/your/composer.patches.json"
+ }
+}
+
+```
+
+Then your `composer.patches.json` should look like this:
+
+```
+{
+ "patches": {
+ "vendor/project": {
+ "Patch title": "http://example.com/url/to/patch.patch"
+ }
+ }
+}
+```
+
+## Allowing patches to be applied from dependencies
+
+If your project doesn't supply any patches of its own, but you still want to accept patches from dependencies, you must have the following in your composer file:
+
+```json
+{
+ "require": {
+ "cweagans/composer-patches": "^1.5.0"
+ },
+ "extra": {
+ "enable-patching": true
+ }
+}
+```
+
+If you do have a `patches` section in your composer file that defines your own set of patches then the `enable-patching` setting will be ignored and patches from dependencies will always be applied.
+
+## Ignoring patches
+
+There may be situations in which you want to ignore a patch supplied by a dependency. For example:
+
+- You use a different more recent version of a dependency, and now a patch isn't applying.
+- You have a more up to date patch than the dependency, and want to use yours instead of theirs.
+- A dependency's patch adds a feature to a project that you don't need.
+- Your patches conflict with a dependency's patches.
+
+```json
+{
+ "require": {
+ "cweagans/composer-patches": "~1.0",
+ "drupal/drupal": "~8.2",
+ "drupal/lightning": "~8.1"
+ },
+ "config": {
+ "preferred-install": "source"
+ },
+ "extra": {
+ "patches": {
+ "drupal/drupal": {
+ "Add startup configuration for PHP server": "https://www.drupal.org/files/issues/add_a_startup-1543858-30.patch"
+ }
+ },
+ "patches-ignore": {
+ "drupal/lightning": {
+ "drupal/panelizer": {
+ "This patch has known conflicts with our Quick Edit integration": "https://www.drupal.org/files/issues/2664682-49.patch"
+ }
+ }
+ }
+ }
+}
+```
+
+## Allowing to force the patch level (-pX)
+
+Some situations require to force the patchLevel used to apply patches on a particular package.
+Its useful for packages like drupal/core which packages only a subdir of the original upstream project on which patches are based.
+
+```json
+{
+ "extra": {
+ "patchLevel": {
+ "drupal/core": "-p2"
+ }
+ }
+}
+```
+
+## Using patches from HTTP URLs
+
+Composer [blocks](https://getcomposer.org/doc/06-config.md#secure-http) you from downloading anything from HTTP URLs, you can disable this for your project by adding a `secure-http` setting in the config section of your `composer.json`. Note that the `config` section should be under the root of your `composer.json`.
+
+```json
+{
+ "config": {
+ "secure-http": false
+ }
+}
+```
+
+However, it's always advised to setup HTTPS to prevent MITM code injection.
+
+## Patches containing modifications to composer.json files
+
+Because patching occurs _after_ Composer calculates dependencies and installs packages, changes to an underlying dependency's `composer.json` file introduced in a patch will have _no effect_ on installed packages.
+
+If you need to modify a dependency's `composer.json` or its underlying dependencies, you cannot use this plugin. Instead, you must do one of the following:
+- Work to get the underlying issue resolved in the upstream package.
+- Fork the package and [specify your fork as the package repository](https://getcomposer.org/doc/05-repositories.md#vcs) in your root `composer.json`
+- Specify compatible package version requirements in your root `composer.json`
+
+## Error handling
+
+If a patch cannot be applied (hunk failed, different line endings, etc.) a message will be shown and the patch will be skipped.
+
+To enforce throwing an error and stopping package installation/update immediately, you have two available options:
+
+1. Add `"composer-exit-on-patch-failure": true` option to the `extra` section of your composer.json file.
+1. Export `COMPOSER_EXIT_ON_PATCH_FAILURE=1`
+
+By default, failed patches are skipped.
+
+## Patches reporting
+
+When a patch is applied, the plugin writes a report-file `PATCHES.txt` to a patching directory (e.g. `./patch-me/PATCHES.txt`),
+which contains a list of applied patches.
+
+If you want to avoid this behavior, add a specific key to the `extra` section:
+```json
+"extra": {
+ "composer-patches-skip-reporting": true
+}
+```
+
+Or provide an environment variable `COMPOSER_PATCHES_SKIP_REPORTING` with a config.
+
+## Patching composer.json in dependencies
+
+This doesn't work like you'd want. By the time you're running `composer install`,
+the metadata from your dependencies' composer.json has already been aggregated by
+packagist (or whatever metadata repo you're using). Unfortunately, this means that
+you cannot e.g. patch a dependency to be compatible with an earlier version of PHP
+or change the framework version that a plugin depends on.
+
+@anotherjames over at @computerminds wrote an article about how to work around
+that particular problem for a Drupal 8 -> Drupal 9 upgrade:
+
+[Apply Drupal 9 compatibility patches with Composer](https://www.computerminds.co.uk/articles/apply-drupal-9-compatibility-patches-composer) ([archive](https://web.archive.org/web/20210124171010/https://www.computerminds.co.uk/articles/apply-drupal-9-compatibility-patches-composer))
+
+## Difference between this and netresearch/composer-patches-plugin
+
+- This plugin is much more simple to use and maintain
+- This plugin doesn't require you to specify which package version you're patching
+- This plugin is easy to use with Drupal modules (which don't use semantic versioning).
+- This plugin will gather patches from all dependencies and apply them as if they were in the root composer.json
+
+## Credits
+
+A ton of this code is adapted or taken straight from https://github.com/jpstacey/composer-patcher, which is abandoned in favor of https://github.com/netresearch/composer-patches-plugin, which is (IMHO) overly complex and difficult to use.
diff --git a/vendor/cweagans/composer-patches/composer.json b/vendor/cweagans/composer-patches/composer.json
new file mode 100644
index 00000000..1565b02f
--- /dev/null
+++ b/vendor/cweagans/composer-patches/composer.json
@@ -0,0 +1,30 @@
+{
+ "name": "cweagans/composer-patches",
+ "description": "Provides a way to patch Composer packages.",
+ "minimum-stability": "dev",
+ "license": "BSD-3-Clause",
+ "type": "composer-plugin",
+ "extra": {
+ "class": "cweagans\\Composer\\Patches"
+ },
+ "authors": [
+ {
+ "name": "Cameron Eagans",
+ "email": "me@cweagans.net"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.0",
+ "composer-plugin-api": "^1.0 || ^2.0"
+ },
+ "require-dev": {
+ "composer/composer": "~1.0 || ~2.0",
+ "phpunit/phpunit": "~4.6"
+ },
+ "autoload": {
+ "psr-4": {"cweagans\\Composer\\": "src"}
+ },
+ "autoload-dev": {
+ "psr-4": {"cweagans\\Composer\\Tests\\": "tests"}
+ }
+}
diff --git a/vendor/cweagans/composer-patches/composer.lock b/vendor/cweagans/composer-patches/composer.lock
new file mode 100644
index 00000000..d5fe1777
--- /dev/null
+++ b/vendor/cweagans/composer-patches/composer.lock
@@ -0,0 +1,2568 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "4a5c841252204815536a37cad51d347b",
+ "packages": [],
+ "packages-dev": [
+ {
+ "name": "composer/ca-bundle",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/ca-bundle.git",
+ "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/95c63ab2117a72f48f5a55da9740a3273d45b7fd",
+ "reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd",
+ "shasum": ""
+ },
+ "require": {
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
+ "psr/log": "^1.0",
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\CaBundle\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+ "keywords": [
+ "cabundle",
+ "cacert",
+ "certificate",
+ "ssl",
+ "tls"
+ ],
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-04-08T08:27:21+00:00"
+ },
+ {
+ "name": "composer/composer",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/composer.git",
+ "reference": "870fdc59dfcffe0bd2d43ca2de4235761d0dec7a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/composer/zipball/870fdc59dfcffe0bd2d43ca2de4235761d0dec7a",
+ "reference": "870fdc59dfcffe0bd2d43ca2de4235761d0dec7a",
+ "shasum": ""
+ },
+ "require": {
+ "composer/ca-bundle": "^1.0",
+ "composer/semver": "^3.0",
+ "composer/spdx-licenses": "^1.2",
+ "composer/xdebug-handler": "^1.1",
+ "justinrainbow/json-schema": "^5.2.10",
+ "php": "^5.3.2 || ^7.0 || ^8.0",
+ "psr/log": "^1.0",
+ "react/promise": "^1.2 || ^2.7",
+ "seld/jsonlint": "^1.4",
+ "seld/phar-utils": "^1.0",
+ "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+ "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+ "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0",
+ "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0"
+ },
+ "require-dev": {
+ "phpspec/prophecy": "^1.10",
+ "symfony/phpunit-bridge": "^4.2 || ^5.0"
+ },
+ "suggest": {
+ "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
+ "ext-zip": "Enabling the zip extension allows you to unzip archives",
+ "ext-zlib": "Allow gzip compression of HTTP requests"
+ },
+ "bin": [
+ "bin/composer"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\": "src/Composer"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "https://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
+ "homepage": "https://getcomposer.org/",
+ "keywords": [
+ "autoload",
+ "dependency",
+ "package"
+ ],
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-15T15:02:16+00:00"
+ },
+ {
+ "name": "composer/semver",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "00915994bb1de62e750ae279669c9c5a57379957"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/00915994bb1de62e750ae279669c9c5a57379957",
+ "reference": "00915994bb1de62e750ae279669c9c5a57379957",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.19",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "keywords": [
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
+ ],
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-05-31T11:44:06+00:00"
+ },
+ {
+ "name": "composer/spdx-licenses",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/spdx-licenses.git",
+ "reference": "6946f785871e2314c60b4524851f3702ea4f2223"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/6946f785871e2314c60b4524851f3702ea4f2223",
+ "reference": "6946f785871e2314c60b4524851f3702ea4f2223",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Spdx\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
+ }
+ ],
+ "description": "SPDX licenses list and validation library.",
+ "keywords": [
+ "license",
+ "spdx",
+ "validator"
+ ],
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-15T15:35:07+00:00"
+ },
+ {
+ "name": "composer/xdebug-handler",
+ "version": "1.4.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51",
+ "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0",
+ "psr/log": "^1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Composer\\XdebugHandler\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
+ }
+ ],
+ "description": "Restarts a process without Xdebug.",
+ "keywords": [
+ "Xdebug",
+ "performance"
+ ],
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-06-04T11:16:35+00:00"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3,<8.0-DEV"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://github.com/doctrine/instantiator",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2015-06-14T21:17:01+00:00"
+ },
+ {
+ "name": "justinrainbow/json-schema",
+ "version": "5.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/justinrainbow/json-schema.git",
+ "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
+ "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
+ "json-schema/json-schema-test-suite": "1.2.0",
+ "phpunit/phpunit": "^4.8.35"
+ },
+ "bin": [
+ "bin/validate-json"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "JsonSchema\\": "src/JsonSchema/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bruno Prieto Reis",
+ "email": "bruno.p.reis@gmail.com"
+ },
+ {
+ "name": "Justin Rainbow",
+ "email": "justin.rainbow@gmail.com"
+ },
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ },
+ {
+ "name": "Robert Schönthal",
+ "email": "seroscho@googlemail.com"
+ }
+ ],
+ "description": "A library to validate a json schema.",
+ "homepage": "https://github.com/justinrainbow/json-schema",
+ "keywords": [
+ "json",
+ "schema"
+ ],
+ "time": "2020-05-27T16:41:55+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "suggest": {
+ "dflydev/markdown": "~1.0",
+ "erusev/parsedown": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "phpDocumentor": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "mike.vanriel@naenius.com"
+ }
+ ],
+ "time": "2015-02-03T12:10:50+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "4f9b1eaf0a7da77c362f8d91cbc68ab1f4718d62"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4f9b1eaf0a7da77c362f8d91cbc68ab1f4718d62",
+ "reference": "4f9b1eaf0a7da77c362f8d91cbc68ab1f4718d62",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "phpdocumentor/reflection-docblock": "~2.0",
+ "sebastian/comparator": "~1.1"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Prophecy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "time": "2015-09-22T14:49:23+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "2.2.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+ "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "phpunit/php-file-iterator": "~1.3",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-token-stream": "~1.3",
+ "sebastian/environment": "^1.3.2",
+ "sebastian/version": "~1.0"
+ },
+ "require-dev": {
+ "ext-xdebug": ">=2.1.4",
+ "phpunit/phpunit": "~4"
+ },
+ "suggest": {
+ "ext-dom": "*",
+ "ext-xdebug": ">=2.2.1",
+ "ext-xmlwriter": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "time": "2015-10-06T15:47:00+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
+ "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "time": "2015-06-21T13:08:43+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2015-06-21T13:50:34+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
+ "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "time": "2015-06-21T08:01:12+00:00"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cab6c6fefee93d7b7c3a01292a0fe0884ea66644",
+ "reference": "cab6c6fefee93d7b7c3a01292a0fe0884ea66644",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "time": "2015-09-23T14:46:55+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "4.8.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "be067d6105286b74272facefc2697038f8807b77"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/264188ddf4d3586c80ea615f8ec8eaea34e652a1",
+ "reference": "be067d6105286b74272facefc2697038f8807b77",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "php": ">=5.3.3",
+ "phpspec/prophecy": "^1.3.1",
+ "phpunit/php-code-coverage": "~2.1",
+ "phpunit/php-file-iterator": "~1.4",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-timer": ">=1.0.6",
+ "phpunit/phpunit-mock-objects": "~2.3",
+ "sebastian/comparator": "~1.1",
+ "sebastian/diff": "~1.2",
+ "sebastian/environment": "~1.3",
+ "sebastian/exporter": "~1.2",
+ "sebastian/global-state": "~1.0",
+ "sebastian/version": "~1.0",
+ "symfony/yaml": "~2.1|~3.0"
+ },
+ "suggest": {
+ "phpunit/php-invoker": "~1.1"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.8.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "time": "2015-10-14T13:49:40+00:00"
+ },
+ {
+ "name": "phpunit/phpunit-mock-objects",
+ "version": "2.3.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+ "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+ "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": ">=5.3.3",
+ "phpunit/php-text-template": "~1.2",
+ "sebastian/exporter": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "suggest": {
+ "ext-soap": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Mock Object library for PHPUnit",
+ "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+ "keywords": [
+ "mock",
+ "xunit"
+ ],
+ "abandoned": true,
+ "time": "2015-10-02T06:51:40+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "fc1bc363ecf887921e3897c7b1dad3587ae154eb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/fc1bc363ecf887921e3897c7b1dad3587ae154eb",
+ "reference": "fc1bc363ecf887921e3897c7b1dad3587ae154eb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "time": "2019-10-04T14:07:35+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2020-03-23T09:12:05+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "2.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ },
+ "files": [
+ "src/functions_include.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "time": "2020-05-12T15:16:56+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
+ "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "sebastian/diff": "~1.2",
+ "sebastian/exporter": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "http://www.github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "time": "2015-07-26T15:48:44+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "6899b3e33bfbd386d88b5eea5f65f563e8793051"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6899b3e33bfbd386d88b5eea5f65f563e8793051",
+ "reference": "6899b3e33bfbd386d88b5eea5f65f563e8793051",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "http://www.github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff"
+ ],
+ "time": "2015-06-22T14:15:55+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
+ "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "time": "2015-08-03T06:14:51+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "f88f8936517d54ae6d589166810877fb2015d0a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f88f8936517d54ae6d589166810877fb2015d0a2",
+ "reference": "f88f8936517d54ae6d589166810877fb2015d0a2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "sebastian/recursion-context": "~1.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "time": "2015-08-09T04:23:41+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "time": "2015-10-12T03:26:01+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "994d4a811bafe801fb06dccbee797863ba2792ba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba",
+ "reference": "994d4a811bafe801fb06dccbee797863ba2792ba",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "time": "2015-06-21T08:04:50+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "1.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "time": "2015-06-21T13:59:46+00:00"
+ },
+ {
+ "name": "seld/jsonlint",
+ "version": "1.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/jsonlint.git",
+ "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1",
+ "reference": "ff2aa5420bfbc296cf6a0bc785fa5b35736de7c1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+ },
+ "bin": [
+ "bin/jsonlint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "JSON Linter",
+ "keywords": [
+ "json",
+ "linter",
+ "parser",
+ "validator"
+ ],
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-04-30T19:05:18+00:00"
+ },
+ {
+ "name": "seld/phar-utils",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/phar-utils.git",
+ "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
+ "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Seld\\PharUtils\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be"
+ }
+ ],
+ "description": "PHAR file format utilities, for when PHP phars you up",
+ "keywords": [
+ "phar"
+ ],
+ "time": "2020-07-07T18:42:57+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "e4a70bd8c5a4382630197b7b87910b3fc0e6b526"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/e4a70bd8c5a4382630197b7b87910b3fc0e6b526",
+ "reference": "e4a70bd8c5a4382630197b7b87910b3fc0e6b526",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.8",
+ "symfony/polyfill-php80": "^1.15",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/string": "^5.1"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<4.4",
+ "symfony/dotenv": "<5.1",
+ "symfony/event-dispatcher": "<4.4",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<4.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "^4.4|^5.0",
+ "symfony/dependency-injection": "^4.4|^5.0",
+ "symfony/event-dispatcher": "^4.4|^5.0",
+ "symfony/lock": "^4.4|^5.0",
+ "symfony/process": "^4.4|^5.0",
+ "symfony/var-dumper": "^4.4|^5.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Console Component",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command line",
+ "console",
+ "terminal"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-06T13:25:45+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "e7550993849f986f01a9161b302d4aed8d4aab0a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/e7550993849f986f01a9161b302d4aed8d4aab0a",
+ "reference": "e7550993849f986f01a9161b302d4aed8d4aab0a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Filesystem Component",
+ "homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-05-30T20:38:10+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "2a63a45741144325f84d28ea1e67bc1b669b1748"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/2a63a45741144325f84d28ea1e67bc1b669b1748",
+ "reference": "2a63a45741144325f84d28ea1e67bc1b669b1748",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Finder Component",
+ "homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-05-20T17:44:07+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
+ "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.18-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-14T12:35:20+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b740103edbdcc39602239ee8860f0f45a8eb9aa5",
+ "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.18-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-14T12:35:20+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
+ "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.18-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-14T12:35:20+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
+ "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.18-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-14T12:35:20+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+ "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.18-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-14T12:35:20+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+ "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.18-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-14T12:35:20+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "d158a452d952049e0e55b7cfe5f360c973edc57c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/d158a452d952049e0e55b7cfe5f360c973edc57c",
+ "reference": "d158a452d952049e0e55b7cfe5f360c973edc57c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.15"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Process Component",
+ "homepage": "https://symfony.com",
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-06T13:25:45+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442",
+ "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/container": "^1.0"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.1-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-06T13:23:11+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "b7914561c03f8d78f83eec3ec4502adbdc343c48"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/b7914561c03f8d78f83eec3ec4502adbdc343c48",
+ "reference": "b7914561c03f8d78f83eec3ec4502adbdc343c48",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "~1.15"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^4.4|^5.0",
+ "symfony/http-client": "^4.4|^5.0",
+ "symfony/translation-contracts": "^1.1|^2",
+ "symfony/var-exporter": "^4.4|^5.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "files": [
+ "Resources/functions.php"
+ ],
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony String component",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2020-07-08T08:28:10+00:00"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "8d32eb597b531eb915b4fee3dc582ade5ae1fe6a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/ab0314f7544d600ea7917f02cdad774358b81113",
+ "reference": "8d32eb597b531eb915b4fee3dc582ade5ae1fe6a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5.9"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Yaml Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-10-13T16:01:35+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "dev",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=5.3.0",
+ "composer-plugin-api": "^1.0 || ^2.0"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "1.1.0"
+}
diff --git a/vendor/cweagans/composer-patches/phpunit.xml.dist b/vendor/cweagans/composer-patches/phpunit.xml.dist
new file mode 100644
index 00000000..62409b3b
--- /dev/null
+++ b/vendor/cweagans/composer-patches/phpunit.xml.dist
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ./tests/
+
+
+
+
+
+ src/
+
+
+ vendor/
+
+
+
diff --git a/vendor/cweagans/composer-patches/src/PatchEvent.php b/vendor/cweagans/composer-patches/src/PatchEvent.php
new file mode 100644
index 00000000..31d36f89
--- /dev/null
+++ b/vendor/cweagans/composer-patches/src/PatchEvent.php
@@ -0,0 +1,70 @@
+package = $package;
+ $this->url = $url;
+ $this->description = $description;
+ }
+
+ /**
+ * Returns the package that is patched.
+ *
+ * @return PackageInterface
+ */
+ public function getPackage() {
+ return $this->package;
+ }
+
+ /**
+ * Returns the url of the patch.
+ *
+ * @return string
+ */
+ public function getUrl() {
+ return $this->url;
+ }
+
+ /**
+ * Returns the description of the patch.
+ *
+ * @return string
+ */
+ public function getDescription() {
+ return $this->description;
+ }
+
+}
diff --git a/vendor/cweagans/composer-patches/src/PatchEvents.php b/vendor/cweagans/composer-patches/src/PatchEvents.php
new file mode 100644
index 00000000..ecee9476
--- /dev/null
+++ b/vendor/cweagans/composer-patches/src/PatchEvents.php
@@ -0,0 +1,30 @@
+composer = $composer;
+ $this->io = $io;
+ $this->eventDispatcher = $composer->getEventDispatcher();
+ $this->executor = new ProcessExecutor($this->io);
+ $this->patches = array();
+ $this->installedPatches = array();
+ }
+
+ /**
+ * Returns an array of event names this subscriber wants to listen to.
+ */
+ public static function getSubscribedEvents() {
+ return array(
+ ScriptEvents::PRE_INSTALL_CMD => array('checkPatches'),
+ ScriptEvents::PRE_UPDATE_CMD => array('checkPatches'),
+ PackageEvents::PRE_PACKAGE_INSTALL => array('gatherPatches'),
+ PackageEvents::PRE_PACKAGE_UPDATE => array('gatherPatches'),
+ // The following is a higher weight for compatibility with
+ // https://github.com/AydinHassan/magento-core-composer-installer and more generally for compatibility with
+ // every Composer plugin which deploys downloaded packages to other locations.
+ // In such cases you want that those plugins deploy patched files so they have to run after
+ // the "composer-patches" plugin.
+ // @see: https://github.com/cweagans/composer-patches/pull/153
+ PackageEvents::POST_PACKAGE_INSTALL => array('postInstall', 10),
+ PackageEvents::POST_PACKAGE_UPDATE => array('postInstall', 10),
+ );
+ }
+
+ /**
+ * Before running composer install,
+ * @param Event $event
+ */
+ public function checkPatches(Event $event) {
+ if (!$this->isPatchingEnabled()) {
+ return;
+ }
+
+ try {
+ $repositoryManager = $this->composer->getRepositoryManager();
+ $localRepository = $repositoryManager->getLocalRepository();
+ $installationManager = $this->composer->getInstallationManager();
+ $packages = $localRepository->getPackages();
+
+ $extra = $this->composer->getPackage()->getExtra();
+ $patches_ignore = isset($extra['patches-ignore']) ? $extra['patches-ignore'] : array();
+
+ $tmp_patches = $this->grabPatches();
+ foreach ($packages as $package) {
+ $extra = $package->getExtra();
+ if (isset($extra['patches'])) {
+ if (isset($patches_ignore[$package->getName()])) {
+ foreach ($patches_ignore[$package->getName()] as $package_name => $patches) {
+ if (isset($extra['patches'][$package_name])) {
+ $extra['patches'][$package_name] = array_diff($extra['patches'][$package_name], $patches);
+ }
+ }
+ }
+ $this->installedPatches[$package->getName()] = $extra['patches'];
+ }
+ $patches = isset($extra['patches']) ? $extra['patches'] : array();
+ $tmp_patches = $this->arrayMergeRecursiveDistinct($tmp_patches, $patches);
+ }
+
+ if ($tmp_patches == FALSE) {
+ $this->io->write('No patches supplied.');
+ return;
+ }
+
+ // Remove packages for which the patch set has changed.
+ $promises = array();
+ foreach ($packages as $package) {
+ if (!($package instanceof AliasPackage)) {
+ $package_name = $package->getName();
+ $extra = $package->getExtra();
+ $has_patches = isset($tmp_patches[$package_name]);
+ $has_applied_patches = isset($extra['patches_applied']) && count($extra['patches_applied']) > 0;
+ if (($has_patches && !$has_applied_patches)
+ || (!$has_patches && $has_applied_patches)
+ || ($has_patches && $has_applied_patches && $tmp_patches[$package_name] !== $extra['patches_applied'])) {
+ $uninstallOperation = new UninstallOperation($package, 'Removing package so it can be re-installed and re-patched.');
+ $this->io->write('Removing package ' . $package_name . ' so that it can be re-installed and re-patched.');
+ $promises[] = $installationManager->uninstall($localRepository, $uninstallOperation);
+ }
+ }
+ }
+ $promises = array_filter($promises);
+ if ($promises) {
+ $this->composer->getLoop()->wait($promises);
+ }
+ }
+ // If the Locker isn't available, then we don't need to do this.
+ // It's the first time packages have been installed.
+ catch (\LogicException $e) {
+ return;
+ }
+ }
+
+ /**
+ * Gather patches from dependencies and store them for later use.
+ *
+ * @param PackageEvent $event
+ */
+ public function gatherPatches(PackageEvent $event) {
+ // If we've already done this, then don't do it again.
+ if (isset($this->patches['_patchesGathered'])) {
+ $this->io->write('Patches already gathered. Skipping', TRUE, IOInterface::VERBOSE);
+ return;
+ }
+ // If patching has been disabled, bail out here.
+ elseif (!$this->isPatchingEnabled()) {
+ $this->io->write('Patching is disabled. Skipping.', TRUE, IOInterface::VERBOSE);
+ return;
+ }
+
+ $this->patches = $this->grabPatches();
+ if (empty($this->patches)) {
+ $this->io->write('No patches supplied.');
+ }
+
+ $extra = $this->composer->getPackage()->getExtra();
+ $patches_ignore = isset($extra['patches-ignore']) ? $extra['patches-ignore'] : array();
+
+ // Now add all the patches from dependencies that will be installed.
+ $operations = $event->getOperations();
+ $this->io->write('Gathering patches for dependencies. This might take a minute.');
+ foreach ($operations as $operation) {
+ if ($operation instanceof InstallOperation || $operation instanceof UpdateOperation) {
+ $package = $this->getPackageFromOperation($operation);
+ $extra = $package->getExtra();
+ if (isset($extra['patches'])) {
+ if (isset($patches_ignore[$package->getName()])) {
+ foreach ($patches_ignore[$package->getName()] as $package_name => $patches) {
+ if (isset($extra['patches'][$package_name])) {
+ $extra['patches'][$package_name] = array_diff($extra['patches'][$package_name], $patches);
+ }
+ }
+ }
+ $this->patches = $this->arrayMergeRecursiveDistinct($this->patches, $extra['patches']);
+ }
+ // Unset installed patches for this package
+ if(isset($this->installedPatches[$package->getName()])) {
+ unset($this->installedPatches[$package->getName()]);
+ }
+ }
+ }
+
+ // Merge installed patches from dependencies that did not receive an update.
+ foreach ($this->installedPatches as $patches) {
+ $this->patches = $this->arrayMergeRecursiveDistinct($this->patches, $patches);
+ }
+
+ // If we're in verbose mode, list the projects we're going to patch.
+ if ($this->io->isVerbose()) {
+ foreach ($this->patches as $package => $patches) {
+ $number = count($patches);
+ $this->io->write('Found ' . $number . ' patches for ' . $package . '.');
+ }
+ }
+
+ // Make sure we don't gather patches again. Extra keys in $this->patches
+ // won't hurt anything, so we'll just stash it there.
+ $this->patches['_patchesGathered'] = TRUE;
+ }
+
+ /**
+ * Get the patches from root composer or external file
+ * @return Patches
+ * @throws \Exception
+ */
+ public function grabPatches() {
+ // First, try to get the patches from the root composer.json.
+ $extra = $this->composer->getPackage()->getExtra();
+ if (isset($extra['patches'])) {
+ $this->io->write('Gathering patches for root package.');
+ $patches = $extra['patches'];
+ return $patches;
+ }
+ // If it's not specified there, look for a patches-file definition.
+ elseif (isset($extra['patches-file'])) {
+ $this->io->write('Gathering patches from patch file.');
+ $patches = file_get_contents($extra['patches-file']);
+ $patches = json_decode($patches, TRUE);
+ $error = json_last_error();
+ if ($error != 0) {
+ switch ($error) {
+ case JSON_ERROR_DEPTH:
+ $msg = ' - Maximum stack depth exceeded';
+ break;
+ case JSON_ERROR_STATE_MISMATCH:
+ $msg = ' - Underflow or the modes mismatch';
+ break;
+ case JSON_ERROR_CTRL_CHAR:
+ $msg = ' - Unexpected control character found';
+ break;
+ case JSON_ERROR_SYNTAX:
+ $msg = ' - Syntax error, malformed JSON';
+ break;
+ case JSON_ERROR_UTF8:
+ $msg = ' - Malformed UTF-8 characters, possibly incorrectly encoded';
+ break;
+ default:
+ $msg = ' - Unknown error';
+ break;
+ }
+ throw new \Exception('There was an error in the supplied patches file:' . $msg);
+ }
+ if (isset($patches['patches'])) {
+ $patches = $patches['patches'];
+ return $patches;
+ }
+ elseif(!$patches) {
+ throw new \Exception('There was an error in the supplied patch file');
+ }
+ }
+ else {
+ return array();
+ }
+ }
+
+ /**
+ * @param PackageEvent $event
+ * @throws \Exception
+ */
+ public function postInstall(PackageEvent $event) {
+
+ // Check if we should exit in failure.
+ $extra = $this->composer->getPackage()->getExtra();
+ $exitOnFailure = getenv('COMPOSER_EXIT_ON_PATCH_FAILURE') || !empty($extra['composer-exit-on-patch-failure']);
+ $skipReporting = getenv('COMPOSER_PATCHES_SKIP_REPORTING') || !empty($extra['composer-patches-skip-reporting']);
+
+ // Get the package object for the current operation.
+ $operation = $event->getOperation();
+ /** @var PackageInterface $package */
+ $package = $this->getPackageFromOperation($operation);
+ $package_name = $package->getName();
+
+ if (!isset($this->patches[$package_name])) {
+ if ($this->io->isVerbose()) {
+ $this->io->write('No patches found for ' . $package_name . '.');
+ }
+ return;
+ }
+ $this->io->write(' - Applying patches for ' . $package_name . '');
+
+ // Get the install path from the package object.
+ $manager = $event->getComposer()->getInstallationManager();
+ $install_path = $manager->getInstaller($package->getType())->getInstallPath($package);
+
+ // Set up a downloader.
+ $downloader = new RemoteFilesystem($this->io, $this->composer->getConfig());
+
+ // Track applied patches in the package info in installed.json
+ $localRepository = $this->composer->getRepositoryManager()->getLocalRepository();
+ $localPackage = $localRepository->findPackage($package_name, $package->getVersion());
+ $extra = $localPackage->getExtra();
+ $extra['patches_applied'] = array();
+
+ foreach ($this->patches[$package_name] as $description => $url) {
+ $this->io->write(' ' . $url . ' (' . $description. ')');
+ try {
+ $this->eventDispatcher->dispatch(NULL, new PatchEvent(PatchEvents::PRE_PATCH_APPLY, $package, $url, $description));
+ $this->getAndApplyPatch($downloader, $install_path, $url, $package);
+ $this->eventDispatcher->dispatch(NULL, new PatchEvent(PatchEvents::POST_PATCH_APPLY, $package, $url, $description));
+ $extra['patches_applied'][$description] = $url;
+ }
+ catch (\Exception $e) {
+ $this->io->write(' Could not apply patch! Skipping. The error was: ' . $e->getMessage() . '');
+ if ($exitOnFailure) {
+ throw new \Exception("Cannot apply patch $description ($url)!");
+ }
+ }
+ }
+ $localPackage->setExtra($extra);
+
+ $this->io->write('');
+
+ if (true !== $skipReporting) {
+ $this->writePatchReport($this->patches[$package_name], $install_path);
+ }
+ }
+
+ /**
+ * Get a Package object from an OperationInterface object.
+ *
+ * @param OperationInterface $operation
+ * @return PackageInterface
+ * @throws \Exception
+ */
+ protected function getPackageFromOperation(OperationInterface $operation) {
+ if ($operation instanceof InstallOperation) {
+ $package = $operation->getPackage();
+ }
+ elseif ($operation instanceof UpdateOperation) {
+ $package = $operation->getTargetPackage();
+ }
+ else {
+ throw new \Exception('Unknown operation: ' . get_class($operation));
+ }
+
+ return $package;
+ }
+
+ /**
+ * Apply a patch on code in the specified directory.
+ *
+ * @param RemoteFilesystem $downloader
+ * @param $install_path
+ * @param $patch_url
+ * @param PackageInterface $package
+ * @throws \Exception
+ */
+ protected function getAndApplyPatch(RemoteFilesystem $downloader, $install_path, $patch_url, PackageInterface $package) {
+
+ // Local patch file.
+ if (file_exists($patch_url)) {
+ $filename = realpath($patch_url);
+ }
+ else {
+ // Generate random (but not cryptographically so) filename.
+ $filename = uniqid(sys_get_temp_dir().'/') . ".patch";
+
+ // Download file from remote filesystem to this location.
+ $hostname = parse_url($patch_url, PHP_URL_HOST);
+
+ try {
+ $downloader->copy($hostname, $patch_url, $filename, false);
+ } catch (\Exception $e) {
+ // In case of an exception, retry once as the download might
+ // have failed due to intermittent network issues.
+ $downloader->copy($hostname, $patch_url, $filename, false);
+ }
+ }
+
+ // The order here is intentional. p1 is most likely to apply with git apply.
+ // p0 is next likely. p2 is extremely unlikely, but for some special cases,
+ // it might be useful. p4 is useful for Magento 2 patches
+ $patch_levels = array('-p1', '-p0', '-p2', '-p4');
+
+ // Check for specified patch level for this package.
+ $extra = $this->composer->getPackage()->getExtra();
+ if (!empty($extra['patchLevel'][$package->getName()])){
+ $patch_levels = array($extra['patchLevel'][$package->getName()]);
+ }
+ // Attempt to apply with git apply.
+ $patched = $this->applyPatchWithGit($install_path, $patch_levels, $filename);
+
+ // In some rare cases, git will fail to apply a patch, fallback to using
+ // the 'patch' command.
+ if (!$patched) {
+ foreach ($patch_levels as $patch_level) {
+ // --no-backup-if-mismatch here is a hack that fixes some
+ // differences between how patch works on windows and unix.
+ if ($patched = $this->executeCommand("patch %s --no-backup-if-mismatch -d %s < %s", $patch_level, $install_path, $filename)) {
+ break;
+ }
+ }
+ }
+
+ // Clean up the temporary patch file.
+ if (isset($hostname)) {
+ unlink($filename);
+ }
+ // If the patch *still* isn't applied, then give up and throw an Exception.
+ // Otherwise, let the user know it worked.
+ if (!$patched) {
+ throw new \Exception("Cannot apply patch $patch_url");
+ }
+ }
+
+ /**
+ * Checks if the root package enables patching.
+ *
+ * @return bool
+ * Whether patching is enabled. Defaults to TRUE.
+ */
+ protected function isPatchingEnabled() {
+ $extra = $this->composer->getPackage()->getExtra();
+
+ if (empty($extra['patches']) && empty($extra['patches-ignore']) && !isset($extra['patches-file'])) {
+ // The root package has no patches of its own, so only allow patching if
+ // it has specifically opted in.
+ return isset($extra['enable-patching']) ? $extra['enable-patching'] : FALSE;
+ }
+ else {
+ return TRUE;
+ }
+ }
+
+ /**
+ * Writes a patch report to the target directory.
+ *
+ * @param array $patches
+ * @param string $directory
+ */
+ protected function writePatchReport($patches, $directory) {
+ $output = "This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches)\n";
+ $output .= "Patches applied to this directory:\n\n";
+ foreach ($patches as $description => $url) {
+ $output .= $description . "\n";
+ $output .= 'Source: ' . $url . "\n\n\n";
+ }
+ file_put_contents($directory . "/PATCHES.txt", $output);
+ }
+
+ /**
+ * Executes a shell command with escaping.
+ *
+ * @param string $cmd
+ * @return bool
+ */
+ protected function executeCommand($cmd) {
+ // Shell-escape all arguments except the command.
+ $args = func_get_args();
+ foreach ($args as $index => $arg) {
+ if ($index !== 0) {
+ $args[$index] = escapeshellarg($arg);
+ }
+ }
+
+ // And replace the arguments.
+ $command = call_user_func_array('sprintf', $args);
+ $output = '';
+ if ($this->io->isVerbose()) {
+ $this->io->write('' . $command . '');
+ $io = $this->io;
+ $output = function ($type, $data) use ($io) {
+ if ($type == Process::ERR) {
+ $io->write('' . $data . '');
+ }
+ else {
+ $io->write('' . $data . '');
+ }
+ };
+ }
+ return ($this->executor->execute($command, $output) == 0);
+ }
+
+ /**
+ * Recursively merge arrays without changing data types of values.
+ *
+ * Does not change the data types of the values in the arrays. Matching keys'
+ * values in the second array overwrite those in the first array, as is the
+ * case with array_merge.
+ *
+ * @param array $array1
+ * The first array.
+ * @param array $array2
+ * The second array.
+ * @return array
+ * The merged array.
+ *
+ * @see http://php.net/manual/en/function.array-merge-recursive.php#92195
+ */
+ protected function arrayMergeRecursiveDistinct(array $array1, array $array2) {
+ $merged = $array1;
+
+ foreach ($array2 as $key => &$value) {
+ if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
+ $merged[$key] = $this->arrayMergeRecursiveDistinct($merged[$key], $value);
+ }
+ else {
+ $merged[$key] = $value;
+ }
+ }
+
+ return $merged;
+ }
+
+ /**
+ * Attempts to apply a patch with git apply.
+ *
+ * @param $install_path
+ * @param $patch_levels
+ * @param $filename
+ *
+ * @return bool
+ * TRUE if patch was applied, FALSE otherwise.
+ */
+ protected function applyPatchWithGit($install_path, $patch_levels, $filename) {
+ // Do not use git apply unless the install path is itself a git repo
+ // @see https://stackoverflow.com/a/27283285
+ if (!is_dir($install_path . '/.git')) {
+ return FALSE;
+ }
+
+ $patched = FALSE;
+ foreach ($patch_levels as $patch_level) {
+ if ($this->io->isVerbose()) {
+ $comment = 'Testing ability to patch with git apply.';
+ $comment .= ' This command may produce errors that can be safely ignored.';
+ $this->io->write('' . $comment . '');
+ }
+ $checked = $this->executeCommand('git -C %s apply --check -v %s %s', $install_path, $patch_level, $filename);
+ $output = $this->executor->getErrorOutput();
+ if (substr($output, 0, 7) == 'Skipped') {
+ // Git will indicate success but silently skip patches in some scenarios.
+ //
+ // @see https://github.com/cweagans/composer-patches/pull/165
+ $checked = FALSE;
+ }
+ if ($checked) {
+ // Apply the first successful style.
+ $patched = $this->executeCommand('git -C %s apply %s %s', $install_path, $patch_level, $filename);
+ break;
+ }
+ }
+ return $patched;
+ }
+
+ /**
+ * Indicates if a package has been patched.
+ *
+ * @param \Composer\Package\PackageInterface $package
+ * The package to check.
+ *
+ * @return bool
+ * TRUE if the package has been patched.
+ */
+ public static function isPackagePatched(PackageInterface $package) {
+ return array_key_exists('patches_applied', $package->getExtra());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function deactivate(Composer $composer, IOInterface $io)
+ {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function uninstall(Composer $composer, IOInterface $io)
+ {
+ }
+
+}
diff --git a/vendor/cweagans/composer-patches/tests/PatchEventTest.php b/vendor/cweagans/composer-patches/tests/PatchEventTest.php
new file mode 100644
index 00000000..0f6adb7a
--- /dev/null
+++ b/vendor/cweagans/composer-patches/tests/PatchEventTest.php
@@ -0,0 +1,39 @@
+assertEquals($event_name, $patch_event->getName());
+ $this->assertEquals($package, $patch_event->getPackage());
+ $this->assertEquals($url, $patch_event->getUrl());
+ $this->assertEquals($description, $patch_event->getDescription());
+ }
+
+ public function patchEventDataProvider() {
+ $prophecy = $this->prophesize('Composer\Package\PackageInterface');
+ $package = $prophecy->reveal();
+
+ return array(
+ array(PatchEvents::PRE_PATCH_APPLY, $package, 'https://www.drupal.org', 'A test patch'),
+ array(PatchEvents::POST_PATCH_APPLY, $package, 'https://www.drupal.org', 'A test patch'),
+ );
+ }
+
+}
diff --git a/vendor/gregwar/captcha/PATCHES.txt b/vendor/gregwar/captcha/PATCHES.txt
new file mode 100644
index 00000000..e3daaa34
--- /dev/null
+++ b/vendor/gregwar/captcha/PATCHES.txt
@@ -0,0 +1,7 @@
+This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches)
+Patches applied to this directory:
+
+Fix deprecation in CaptchaBuilder constructor
+Source: patches/gregwar-captcha-constructor.patch
+
+
diff --git a/vendor/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php b/vendor/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php
index ab8d93f2..67e77cfa 100644
--- a/vendor/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php
+++ b/vendor/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php
@@ -133,7 +133,7 @@ public function setInterpolation($interpolate = true)
*/
public $tempDir = 'temp/';
- public function __construct($phrase = null, PhraseBuilderInterface $builder = null)
+ public function __construct($phrase = null, ?PhraseBuilderInterface $builder = null)
{
if ($builder === null) {
$this->builder = new PhraseBuilder;
diff --git a/vendor/maxmind-db/reader/CHANGELOG.md b/vendor/maxmind-db/reader/CHANGELOG.md
index 15e53617..40d89d42 100644
--- a/vendor/maxmind-db/reader/CHANGELOG.md
+++ b/vendor/maxmind-db/reader/CHANGELOG.md
@@ -1,6 +1,13 @@
CHANGELOG
=========
+1.12.0 (2024-11-14)
+-------------------
+
+* Improve the error handling when the user tries to open a directory
+ with the pure PHP reader.
+* Improve the typehints on arrays in the PHPDocs.
+
1.11.1 (2023-12-01)
-------------------
diff --git a/vendor/maxmind-db/reader/README.md b/vendor/maxmind-db/reader/README.md
index fa5693a2..afefc3fd 100644
--- a/vendor/maxmind-db/reader/README.md
+++ b/vendor/maxmind-db/reader/README.md
@@ -180,6 +180,6 @@ The MaxMind DB Reader PHP API uses [Semantic Versioning](https://semver.org/).
## Copyright and License ##
-This software is Copyright (c) 2014-2023 by MaxMind, Inc.
+This software is Copyright (c) 2014-2024 by MaxMind, Inc.
This is free software, licensed under the Apache License, Version 2.0.
diff --git a/vendor/maxmind-db/reader/autoload.php b/vendor/maxmind-db/reader/autoload.php
index ffaf01b2..fdd2f1cb 100644
--- a/vendor/maxmind-db/reader/autoload.php
+++ b/vendor/maxmind-db/reader/autoload.php
@@ -25,7 +25,7 @@ function mmdb_autoload($class): void
* to extend in the future if (for example) the test classes
* begin to use one another.
*/
- $namespace_map = ['MaxMind\\Db\\' => __DIR__ . '/src/MaxMind/Db/'];
+ $namespace_map = ['MaxMind\Db\\' => __DIR__ . '/src/MaxMind/Db/'];
foreach ($namespace_map as $prefix => $dir) {
// First swap out the namespace prefix with a directory...
diff --git a/vendor/maxmind-db/reader/composer.json b/vendor/maxmind-db/reader/composer.json
index 22ea7975..c9cc524e 100644
--- a/vendor/maxmind-db/reader/composer.json
+++ b/vendor/maxmind-db/reader/composer.json
@@ -21,13 +21,11 @@
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
},
"conflict": {
- "ext-maxminddb": "<1.11.1,>=2.0.0"
+ "ext-maxminddb": "<1.11.1 || >=2.0.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "3.*",
"phpunit/phpunit": ">=8.0.0,<10.0.0",
- "php-coveralls/php-coveralls": "^2.1",
- "phpunit/phpcov": ">=6.0.0",
"squizlabs/php_codesniffer": "3.*",
"phpstan/phpstan": "*"
},
diff --git a/vendor/maxmind-db/reader/ext/php_maxminddb.h b/vendor/maxmind-db/reader/ext/php_maxminddb.h
index 8acb282f..b5261b8d 100644
--- a/vendor/maxmind-db/reader/ext/php_maxminddb.h
+++ b/vendor/maxmind-db/reader/ext/php_maxminddb.h
@@ -15,7 +15,7 @@
#ifndef PHP_MAXMINDDB_H
#define PHP_MAXMINDDB_H 1
-#define PHP_MAXMINDDB_VERSION "1.11.1"
+#define PHP_MAXMINDDB_VERSION "1.12.0"
#define PHP_MAXMINDDB_EXTNAME "maxminddb"
extern zend_module_entry maxminddb_module_entry;
diff --git a/vendor/maxmind-db/reader/package.xml b/vendor/maxmind-db/reader/package.xml
index e7b32773..5fe5cb84 100644
--- a/vendor/maxmind-db/reader/package.xml
+++ b/vendor/maxmind-db/reader/package.xml
@@ -14,19 +14,19 @@
goschwald@maxmind.com
yes
- 2023-12-01
+ 2024-11-14
- 1.11.1
- 1.11.1
+ 1.12.0
+ 1.12.0
stable
stable
Apache License 2.0
- * Resolve warnings when compiling the C extension.
-* Fix various type issues detected by PHPStan level. Pull request by
- LauraTaylorUK. GitHub #160.
+ * Improve the error handling when the user tries to open a directory
+ with the pure PHP reader.
+* Improve the typehints on arrays in the PHPDocs.
diff --git a/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php b/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php
index 1f35e7a4..12c6b095 100644
--- a/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php
+++ b/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php
@@ -64,8 +64,7 @@ class Reader
* Constructs a Reader for the MaxMind DB format. The file passed to it must
* be a valid MaxMind DB file such as a GeoIp2 database file.
*
- * @param string $database
- * the MaxMind DB file to use
+ * @param string $database the MaxMind DB file to use
*
* @throws \InvalidArgumentException for invalid database path or unknown arguments
* @throws InvalidDatabaseException
@@ -76,7 +75,14 @@ public function __construct(string $database)
{
if (\func_num_args() !== 1) {
throw new \ArgumentCountError(
- sprintf('%s() expects exactly 1 parameter, %d given', __METHOD__, \func_num_args())
+ \sprintf('%s() expects exactly 1 parameter, %d given', __METHOD__, \func_num_args())
+ );
+ }
+
+ if (is_dir($database)) {
+ // This matches the error that the C extension throws.
+ throw new InvalidDatabaseException(
+ "Error opening database file ($database). Is this a valid MaxMind DB file?"
);
}
@@ -110,8 +116,7 @@ public function __construct(string $database)
/**
* Retrieves the record for the IP address.
*
- * @param string $ipAddress
- * the IP address to look up
+ * @param string $ipAddress the IP address to look up
*
* @throws \BadMethodCallException if this method is called on a closed database
* @throws \InvalidArgumentException if something other than a single IP address is passed to the method
@@ -125,7 +130,7 @@ public function get(string $ipAddress)
{
if (\func_num_args() !== 1) {
throw new \ArgumentCountError(
- sprintf('%s() expects exactly 1 parameter, %d given', __METHOD__, \func_num_args())
+ \sprintf('%s() expects exactly 1 parameter, %d given', __METHOD__, \func_num_args())
);
}
[$record] = $this->getWithPrefixLen($ipAddress);
@@ -136,8 +141,7 @@ public function get(string $ipAddress)
/**
* Retrieves the record for the IP address and its associated network prefix length.
*
- * @param string $ipAddress
- * the IP address to look up
+ * @param string $ipAddress the IP address to look up
*
* @throws \BadMethodCallException if this method is called on a closed database
* @throws \InvalidArgumentException if something other than a single IP address is passed to the method
@@ -145,14 +149,14 @@ public function get(string $ipAddress)
* if the database is invalid or there is an error reading
* from it
*
- * @return array an array where the first element is the record and the
- * second the network prefix length for the record
+ * @return array{0:mixed, 1:int} an array where the first element is the record and the
+ * second the network prefix length for the record
*/
public function getWithPrefixLen(string $ipAddress): array
{
if (\func_num_args() !== 1) {
throw new \ArgumentCountError(
- sprintf('%s() expects exactly 1 parameter, %d given', __METHOD__, \func_num_args())
+ \sprintf('%s() expects exactly 1 parameter, %d given', __METHOD__, \func_num_args())
);
}
@@ -170,6 +174,9 @@ public function getWithPrefixLen(string $ipAddress): array
return [$this->resolveDataPointer($pointer), $prefixLen];
}
+ /**
+ * @return array{0:int, 1:int}
+ */
private function findAddressInTree(string $ipAddress): array
{
$packedAddr = @inet_pton($ipAddress);
@@ -364,7 +371,7 @@ public function metadata(): Metadata
{
if (\func_num_args()) {
throw new \ArgumentCountError(
- sprintf('%s() expects exactly 0 parameters, %d given', __METHOD__, \func_num_args())
+ \sprintf('%s() expects exactly 0 parameters, %d given', __METHOD__, \func_num_args())
);
}
@@ -389,7 +396,7 @@ public function close(): void
{
if (\func_num_args()) {
throw new \ArgumentCountError(
- sprintf('%s() expects exactly 0 parameters, %d given', __METHOD__, \func_num_args())
+ \sprintf('%s() expects exactly 0 parameters, %d given', __METHOD__, \func_num_args())
);
}
diff --git a/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php b/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php
index 44eee622..1bb67316 100644
--- a/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php
+++ b/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php
@@ -63,6 +63,9 @@ public function __construct(
$this->switchByteOrder = $this->isPlatformLittleEndian();
}
+ /**
+ * @return array
+ */
public function decode(int $offset): array
{
$ctrlByte = \ord(Util::read($this->fileStream, $offset, 1));
@@ -110,6 +113,8 @@ public function decode(int $offset): array
/**
* @param int<0, max> $size
+ *
+ * @return array{0:mixed, 1:int}
*/
private function decodeByType(int $type, int $offset, int $size): array
{
@@ -167,6 +172,9 @@ private function verifySize(int $expected, int $actual): void
}
}
+ /**
+ * @return array{0:array, 1:int}
+ */
private function decodeArray(int $size, int $offset): array
{
$array = [];
@@ -247,6 +255,9 @@ private function decodeInt32(string $bytes, int $size): int
return $int;
}
+ /**
+ * @return array{0:array, 1:int}
+ */
private function decodeMap(int $size, int $offset): array
{
$map = [];
@@ -260,6 +271,9 @@ private function decodeMap(int $size, int $offset): array
return [$map, $offset];
}
+ /**
+ * @return array{0:int, 1:int}
+ */
private function decodePointer(int $ctrlByte, int $offset): array
{
$pointerSize = (($ctrlByte >> 3) & 0x3) + 1;
@@ -378,6 +392,9 @@ private function decodeUint(string $bytes, int $byteLength)
return $integerAsString;
}
+ /**
+ * @return array{0:int, 1:int}
+ */
private function sizeFromCtrlByte(int $ctrlByte, int $offset): array
{
$size = $ctrlByte & 0x1F;
diff --git a/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php b/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php
index 97ef4882..9cade222 100644
--- a/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php
+++ b/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php
@@ -48,7 +48,7 @@ class Metadata
* in that language as a UTF-8 string. May be undefined for some
* databases.
*
- * @var array
+ * @var array
*/
public $description;
@@ -65,7 +65,7 @@ class Metadata
* may contain data items that have been localized to some or all of
* these languages. This may be undefined.
*
- * @var array
+ * @var array
*/
public $languages;
@@ -95,11 +95,14 @@ class Metadata
*/
public $searchTreeSize;
+ /**
+ * @param array $metadata
+ */
public function __construct(array $metadata)
{
if (\func_num_args() !== 1) {
throw new \ArgumentCountError(
- sprintf('%s() expects exactly 1 parameter, %d given', __METHOD__, \func_num_args())
+ \sprintf('%s() expects exactly 1 parameter, %d given', __METHOD__, \func_num_args())
);
}
diff --git a/vendor/maxmind/web-service-common/dev-bin/release.sh b/vendor/maxmind/web-service-common/dev-bin/release.sh
old mode 100644
new mode 100755
diff --git a/vendor/mlocati/ip-lib/README.md b/vendor/mlocati/ip-lib/README.md
index 762f0c3d..aa75ce47 100644
--- a/vendor/mlocati/ip-lib/README.md
+++ b/vendor/mlocati/ip-lib/README.md
@@ -2,6 +2,7 @@
[](https://coveralls.io/github/mlocati/ip-lib?branch=master)
[](https://scrutinizer-ci.com/g/mlocati/ip-lib/?branch=master)

+[](https://gitpod.io/#https://github.com/mlocati/ip-lib)
# IPLib - Handle IPv4, IPv6 and IP ranges
@@ -150,7 +151,7 @@ $range = \IPLib\Range\Pattern::parseString('127.0.0.*');
$range = \IPLib\Range\Pattern::parseString('::*');
```
-To parse an andress as a range:
+To parse an address as a range:
```php
$range = \IPLib\Range\Single::parseString('127.0.0.1');
@@ -340,10 +341,10 @@ echo (string) $ipv6;
echo $ipv6->toIPv4();
// IPv4-mapped notation
-$ipv6 = $ipv4->toIPv6IPv4Mapped();
+$ipv6_6to4 = $ipv4->toIPv6IPv4Mapped();
// This will print ::ffff:1.2.3.4
-echo (string) $ipv6;
+echo (string) $ipv6_6to4;
// This will print 1.2.3.4
echo $ipv6_6to4->toIPv4();
@@ -423,7 +424,7 @@ $ipv6 = \IPLib\Factory::parseAddressString('e.b.a.b.e.f.a.c.0.0.0.0.0.0.0.0.0.0.
echo $ipv4->toString();
// This will print 1234:abcd::cafe:babe
-echo (string) $ipv6->toString();
+echo $ipv6->toString();
```
You can also use `getReverseDNSLookupName()` for IP ranges.
@@ -643,6 +644,25 @@ var_export((string) Factory::parseAddressString('127.0.0.0xff:80', ParseStringFl
var_export((string) Factory::parseAddressString('[::%11]:80', ParseStringFlag::MAY_INCLUDE_PORT | ParseStringFlag::MAY_INCLUDE_ZONEID));
```
+## Gitpod Environment Variables
+
+The following features can be enabled through environment variables that have been set in your [Gitpod preferences](https://gitpod.io/variables).:
+
+\* _Please note that storing sensitive data in environment variables is not ultimately secure but should be OK for most development situations._
+- ### Sign Git commits with a GPG key
+ - `GPG_KEY_ID` (required)
+ - The ID of the GPG key you want to use to sign your git commits
+ - `GPG_KEY` (required)
+ - Base64 encoded private GPG key that corresponds to your `GPG_KEY_ID`
+ - `GPG_MATCH_GIT_TO_EMAIL` (optional)
+ - Sets your git user.email in `~/.gitconfig` to the value provided
+ - `GPG_AUTO_ULTIMATE_TRUST` (optional)
+ - If the value is set to `yes` or `YES` then your `GPG_KEY` will be automatically ultimately trusted
+- ### Activate an Intelliphense License Key
+ - `INTELEPHENSE_LICENSEKEY`
+ - Creates `~/intelephense/licence.txt` and will contain the value provided
+ - This will activate [Intelliphense](https://intelephense.com/) for you each time the workspace is created or restarted
+
## Do you really want to say thank you?
You can offer me a [monthly coffee](https://github.com/sponsors/mlocati) or a [one-time coffee](https://paypal.me/mlocati) :wink:
diff --git a/vendor/mlocati/ip-lib/src/Factory.php b/vendor/mlocati/ip-lib/src/Factory.php
index 31b21d41..9338a2d6 100644
--- a/vendor/mlocati/ip-lib/src/Factory.php
+++ b/vendor/mlocati/ip-lib/src/Factory.php
@@ -84,17 +84,17 @@ public static function addressFromBytes(array $bytes)
* For upgrading:
* - if $supportNonDecimalIPv4 is true, use the ParseStringFlag::IPV4_MAYBE_NON_DECIMAL flag
*
- * @param string|mixed $address
+ * @param string|mixed $range
* @param bool $supportNonDecimalIPv4
*
- * @return \IPLib\Address\AddressInterface|null
+ * @return \IPLib\Range\RangeInterface|null
*
* @see \IPLib\Factory::parseRangeString()
* @since 1.10.0 added the $supportNonDecimalIPv4 argument
*/
- public static function rangeFromString($address, $supportNonDecimalIPv4 = false)
+ public static function rangeFromString($range, $supportNonDecimalIPv4 = false)
{
- return static::parseRangeString($address, $supportNonDecimalIPv4 ? ParseStringFlag::IPV4_MAYBE_NON_DECIMAL : 0);
+ return static::parseRangeString($range, $supportNonDecimalIPv4 ? ParseStringFlag::IPV4_MAYBE_NON_DECIMAL : 0);
}
/**
@@ -215,20 +215,20 @@ public static function getRangesFromBoundaries($from, $to, $flags = 0)
}
/**
- * @param \IPLib\Address\AddressInterface $from
- * @param \IPLib\Address\AddressInterface $to
+ * @param \IPLib\Address\AddressInterface|null $from
+ * @param \IPLib\Address\AddressInterface|null $to
*
* @return \IPLib\Range\RangeInterface|null
*
* @since 1.2.0
*/
- protected static function rangeFromBoundaryAddresses(AddressInterface $from = null, AddressInterface $to = null)
+ protected static function rangeFromBoundaryAddresses($from = null, $to = null)
{
- if ($from === null && $to === null) {
+ if (!$from instanceof AddressInterface && !$to instanceof AddressInterface) {
$result = null;
- } elseif ($to === null) {
+ } elseif (!$to instanceof AddressInterface) {
$result = Range\Single::fromAddress($from);
- } elseif ($from === null) {
+ } elseif (!$from instanceof AddressInterface) {
$result = Range\Single::fromAddress($to);
} else {
$result = null;
diff --git a/vendor/monolog/monolog/CHANGELOG.md b/vendor/monolog/monolog/CHANGELOG.md
index a9a31e71..122d85cd 100644
--- a/vendor/monolog/monolog/CHANGELOG.md
+++ b/vendor/monolog/monolog/CHANGELOG.md
@@ -1,3 +1,11 @@
+### 2.10.0 (2024-11-12)
+
+ * Added `$fileOpenMode` to `StreamHandler` to define a custom fopen mode to open the log file (#1913)
+ * Fixed `StreamHandler` handling of write failures so that it now closes/reopens the stream and retries the write once before failing (#1882)
+ * Fixed `StreamHandler` error handler causing issues if a stream handler triggers an error (#1866)
+ * Fixed `JsonFormatter` handling of incomplete classes (#1834)
+ * Fixed `RotatingFileHandler` bug where rotation could sometimes not happen correctly (#1905)
+
### 2.9.3 (2024-04-12)
* Fixed PHP 8.4 deprecation warnings (#1874)
diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php
index b737d82e..753e6852 100644
--- a/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php
+++ b/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php
@@ -192,6 +192,10 @@ protected function normalize($data, int $depth = 0)
return $data;
}
+ if (\get_class($data) === '__PHP_Incomplete_Class') {
+ return new \ArrayObject($data);
+ }
+
if (method_exists($data, '__toString')) {
return $data->__toString();
}
diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php
index e88375c0..264b380d 100644
--- a/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php
+++ b/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php
@@ -187,6 +187,7 @@ protected function bulkSend(array $records): void
*/
protected function createExceptionFromResponses($responses): Throwable
{
+ // @phpstan-ignore offsetAccess.nonOffsetAccessible
foreach ($responses['items'] ?? [] as $item) {
if (isset($item['index']['error'])) {
return $this->createExceptionFromError($item['index']['error']);
diff --git a/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php
index 17745d22..2d0c1a72 100644
--- a/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php
+++ b/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php
@@ -112,17 +112,22 @@ public function setFilenameFormat(string $filenameFormat, string $dateFormat): s
*/
protected function write(array $record): void
{
- // on the first record written, if the log is new, we should rotate (once per day)
+ // on the first record written, if the log is new, we rotate (once per day) after the log has been written so that the new file exists
if (null === $this->mustRotate) {
$this->mustRotate = null === $this->url || !file_exists($this->url);
}
+ // if the next rotation is expired, then we rotate immediately
if ($this->nextRotation <= $record['datetime']) {
$this->mustRotate = true;
- $this->close();
+ $this->close(); // triggers rotation
}
parent::write($record);
+
+ if ($this->mustRotate) {
+ $this->close(); // triggers rotation
+ }
}
/**
@@ -134,6 +139,8 @@ protected function rotate(): void
$this->url = $this->getTimedFilename();
$this->nextRotation = new \DateTimeImmutable('tomorrow');
+ $this->mustRotate = false;
+
// skip GC of old logs if files are unlimited
if (0 === $this->maxFiles) {
return;
@@ -166,8 +173,6 @@ protected function rotate(): void
restore_error_handler();
}
}
-
- $this->mustRotate = false;
}
protected function getTimedFilename(): string
diff --git a/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php
index 82c048e1..218d4384 100644
--- a/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php
+++ b/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php
@@ -41,17 +41,22 @@ class StreamHandler extends AbstractProcessingHandler
protected $filePermission;
/** @var bool */
protected $useLocking;
+ /** @var string */
+ protected $fileOpenMode;
/** @var true|null */
private $dirCreated = null;
+ /** @var bool */
+ private $retrying = false;
/**
* @param resource|string $stream If a missing path can't be created, an UnexpectedValueException will be thrown on first write
* @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write)
* @param bool $useLocking Try to lock log file before doing any writes
+ * @param string $fileOpenMode The fopen() mode used when opening a file, if $stream is a file path
*
* @throws \InvalidArgumentException If stream is not a resource or string
*/
- public function __construct($stream, $level = Logger::DEBUG, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false)
+ public function __construct($stream, $level = Logger::DEBUG, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false, $fileOpenMode = 'a')
{
parent::__construct($level, $bubble);
@@ -78,6 +83,7 @@ public function __construct($stream, $level = Logger::DEBUG, bool $bubble = true
throw new \InvalidArgumentException('A stream must either be a resource or a string.');
}
+ $this->fileOpenMode = $fileOpenMode;
$this->filePermission = $filePermission;
$this->useLocking = $useLocking;
}
@@ -134,9 +140,11 @@ protected function write(array $record): void
}
$this->createDir($url);
$this->errorMessage = null;
- set_error_handler([$this, 'customErrorHandler']);
+ set_error_handler(function (...$args) {
+ return $this->customErrorHandler(...$args);
+ });
try {
- $stream = fopen($url, 'a');
+ $stream = fopen($url, $this->fileOpenMode);
if ($this->filePermission !== null) {
@chmod($url, $this->filePermission);
}
@@ -162,8 +170,30 @@ protected function write(array $record): void
flock($stream, LOCK_EX);
}
- $this->streamWrite($stream, $record);
+ $this->errorMessage = null;
+ set_error_handler(function (...$args) {
+ return $this->customErrorHandler(...$args);
+ });
+ try {
+ $this->streamWrite($stream, $record);
+ } finally {
+ restore_error_handler();
+ }
+ if ($this->errorMessage !== null) {
+ $error = $this->errorMessage;
+ // close the resource if possible to reopen it, and retry the failed write
+ if (!$this->retrying && $this->url !== null && $this->url !== 'php://memory') {
+ $this->retrying = true;
+ $this->close();
+ $this->write($record);
+
+ return;
+ }
+
+ throw new \UnexpectedValueException('Writing to the log file failed: '.$error . Utils::getRecordMessageForException($record));
+ }
+ $this->retrying = false;
if ($this->useLocking) {
flock($stream, LOCK_UN);
}
@@ -183,7 +213,7 @@ protected function streamWrite($stream, array $record): void
private function customErrorHandler(int $code, string $msg): bool
{
- $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg);
+ $this->errorMessage = preg_replace('{^(fopen|mkdir|fwrite)\(.*?\): }', '', $msg);
return true;
}
@@ -212,7 +242,9 @@ private function createDir(string $url): void
$dir = $this->getDirFromStream($url);
if (null !== $dir && !is_dir($dir)) {
$this->errorMessage = null;
- set_error_handler([$this, 'customErrorHandler']);
+ set_error_handler(function (...$args) {
+ return $this->customErrorHandler(...$args);
+ });
$status = mkdir($dir, 0777, true);
restore_error_handler();
if (false === $status && !is_dir($dir) && strpos((string) $this->errorMessage, 'File exists') === false) {
diff --git a/vendor/monolog/monolog/src/Monolog/Logger.php b/vendor/monolog/monolog/src/Monolog/Logger.php
index 3c588a70..bf65d3c5 100644
--- a/vendor/monolog/monolog/src/Monolog/Logger.php
+++ b/vendor/monolog/monolog/src/Monolog/Logger.php
@@ -169,7 +169,7 @@ class Logger implements LoggerInterface, ResettableInterface
private $logDepth = 0;
/**
- * @var \WeakMap<\Fiber, int>|null Keeps track of depth inside fibers to prevent infinite logging loops
+ * @var \WeakMap<\Fiber, int> Keeps track of depth inside fibers to prevent infinite logging loops
*/
private $fiberLogDepth;
@@ -197,7 +197,7 @@ public function __construct(string $name, array $handlers = [], array $processor
if (\PHP_VERSION_ID >= 80100) {
// Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412
- /** @var \WeakMap<\Fiber, int> $fiberLogDepth */
+ /** @var \WeakMap<\Fiber, int> $fiberLogDepth */
$fiberLogDepth = new \WeakMap();
$this->fiberLogDepth = $fiberLogDepth;
}
@@ -345,6 +345,7 @@ public function addRecord(int $level, string $message, array $context = [], ?Dat
if ($this->detectCycles) {
if (\PHP_VERSION_ID >= 80100 && $fiber = \Fiber::getCurrent()) {
+ // @phpstan-ignore offsetAssign.dimType
$this->fiberLogDepth[$fiber] = $this->fiberLogDepth[$fiber] ?? 0;
$logDepth = ++$this->fiberLogDepth[$fiber];
} else {
@@ -753,7 +754,7 @@ public function __unserialize(array $data): void
if (\PHP_VERSION_ID >= 80100) {
// Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412
- /** @var \WeakMap<\Fiber, int> $fiberLogDepth */
+ /** @var \WeakMap<\Fiber, int> $fiberLogDepth */
$fiberLogDepth = new \WeakMap();
$this->fiberLogDepth = $fiberLogDepth;
}
diff --git a/vendor/monolog/monolog/src/Monolog/Utils.php b/vendor/monolog/monolog/src/Monolog/Utils.php
index 360c4219..d4ff4c04 100644
--- a/vendor/monolog/monolog/src/Monolog/Utils.php
+++ b/vendor/monolog/monolog/src/Monolog/Utils.php
@@ -249,7 +249,7 @@ public static function expandIniShorthandBytes($val)
}
$val = (int) $match['val'];
- switch (strtolower($match['unit'] ?? '')) {
+ switch (strtolower($match['unit'])) {
case 'g':
$val *= 1024;
case 'm':
diff --git a/vendor/symfony/cache-contracts/.gitignore b/vendor/symfony/cache-contracts/.gitignore
deleted file mode 100644
index c49a5d8d..00000000
--- a/vendor/symfony/cache-contracts/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/cache/Traits/RedisTrait.php b/vendor/symfony/cache/Traits/RedisTrait.php
index c767330a..518a5630 100644
--- a/vendor/symfony/cache/Traits/RedisTrait.php
+++ b/vendor/symfony/cache/Traits/RedisTrait.php
@@ -105,13 +105,9 @@ public static function createConnection(string $dsn, array $options = [])
throw new CacheException('Cannot find the "redis" extension nor the "predis/predis" package.');
}
- $params = preg_replace_callback('#^'.$scheme.':(//)?(?:(?:(?[^:@]*+):)?(?[^@]*+)@)?#', function ($m) use (&$auth) {
- if (isset($m['password'])) {
- if (\in_array($m['user'], ['', 'default'], true)) {
- $auth = $m['password'];
- } else {
- $auth = [$m['user'], $m['password']];
- }
+ $params = preg_replace_callback('#^'.$scheme.':(//)?(?:(?:[^:@]*+:)?([^@]*+)@)?#', function ($m) use (&$auth) {
+ if (isset($m[2])) {
+ $auth = rawurldecode($m[2]);
if ('' === $auth) {
$auth = null;
@@ -380,13 +376,7 @@ public static function createConnection(string $dsn, array $options = [])
$params['parameters']['database'] = $params['dbindex'];
}
if (null !== $auth) {
- if (\is_array($auth)) {
- // ACL
- $params['parameters']['username'] = $auth[0];
- $params['parameters']['password'] = $auth[1];
- } else {
- $params['parameters']['password'] = $auth;
- }
+ $params['parameters']['password'] = $auth;
}
if (isset($params['ssl'])) {
diff --git a/vendor/symfony/config/FileLocator.php b/vendor/symfony/config/FileLocator.php
index e5032485..80268737 100644
--- a/vendor/symfony/config/FileLocator.php
+++ b/vendor/symfony/config/FileLocator.php
@@ -84,7 +84,8 @@ private function isAbsolutePath(string $file): bool
&& ':' === $file[1]
&& ('\\' === $file[2] || '/' === $file[2])
)
- || null !== parse_url($file, \PHP_URL_SCHEME)
+ || parse_url($file, \PHP_URL_SCHEME)
+ || str_starts_with($file, 'phar:///') // "parse_url()" doesn't handle absolute phar path, despite being valid
) {
return true;
}
diff --git a/vendor/symfony/deprecation-contracts/.gitignore b/vendor/symfony/deprecation-contracts/.gitignore
deleted file mode 100644
index c49a5d8d..00000000
--- a/vendor/symfony/deprecation-contracts/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/vendor/symfony/filesystem/Filesystem.php b/vendor/symfony/filesystem/Filesystem.php
index 9f6ed46f..358a74b3 100644
--- a/vendor/symfony/filesystem/Filesystem.php
+++ b/vendor/symfony/filesystem/Filesystem.php
@@ -44,7 +44,7 @@ public function copy(string $originFile, string $targetFile, bool $overwriteNewe
$this->mkdir(\dirname($targetFile));
$doCopy = true;
- if (!$overwriteNewerFiles && null === parse_url($originFile, \PHP_URL_HOST) && is_file($targetFile)) {
+ if (!$overwriteNewerFiles && !parse_url($originFile, \PHP_URL_HOST) && is_file($targetFile)) {
$doCopy = filemtime($originFile) > filemtime($targetFile);
}
@@ -234,6 +234,7 @@ public function chmod($files, int $mode, int $umask = 0000, bool $recursive = fa
* Change the owner of an array of files or directories.
*
* This method always throws on Windows, as the underlying PHP function is not supported.
+ *
* @see https://www.php.net/chown
*
* @param string|iterable $files A filename, an array of files, or a \Traversable instance to change owner
@@ -264,6 +265,7 @@ public function chown($files, $user, bool $recursive = false)
* Change the group of an array of files or directories.
*
* This method always throws on Windows, as the underlying PHP function is not supported.
+ *
* @see https://www.php.net/chgrp
*
* @param string|iterable $files A filename, an array of files, or a \Traversable instance to change group
diff --git a/vendor/symfony/service-contracts/.gitignore b/vendor/symfony/service-contracts/.gitignore
deleted file mode 100644
index c49a5d8d..00000000
--- a/vendor/symfony/service-contracts/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml