From 2faf001b7a50c394198f08c5c857e5cf21006c66 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 10:48:25 +0200 Subject: [PATCH 01/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 37 ++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/apache.yml diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml new file mode 100644 index 0000000..58ab0f0 --- /dev/null +++ b/.github/workflows/apache.yml @@ -0,0 +1,37 @@ +name: Apache tests +on: [push] +jobs: + tests: + runs-on: 'ubuntu-latest' + services: + mysql: + image: mariadb + env: + MYSQL_DATABASE: testdb + MYSQL_USER: testuser + MYSQL_PASSWORD: testpassword + MYSQL_ROOT_PASSWORD: rootpassword + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + wordpress: + image: wordpress + env: + WORDPRESS_DB_HOST: 127.0.0.1 + WORDPRESS_DB_USER: testuser + WORDPRESS_DB_PASSWORD: testpassword + WORDPRESS_DB_NAME: testdb + volumes: + - $HOME/wordpress:/var/www/html + steps: + - uses: actions/checkout@v2 + - name: Install dependencies + run: | + composer install + + - name: Execute one secure command + run: wp secure add-security-headers --file-path=$HOME/wordpress + + - name: Debug + run: cat $HOME/wordpress/.htaccess + From 29b62cb2c69b75bce7351884d1b98536492f81a6 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 10:51:38 +0200 Subject: [PATCH 02/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 58ab0f0..399ce22 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -22,7 +22,7 @@ jobs: WORDPRESS_DB_PASSWORD: testpassword WORDPRESS_DB_NAME: testdb volumes: - - $HOME/wordpress:/var/www/html + - /wordpress:/var/www/html steps: - uses: actions/checkout@v2 - name: Install dependencies @@ -30,8 +30,8 @@ jobs: composer install - name: Execute one secure command - run: wp secure add-security-headers --file-path=$HOME/wordpress + run: wp secure add-security-headers --file-path=/wordpress - name: Debug - run: cat $HOME/wordpress/.htaccess + run: cat /wordpress/.htaccess From 9ec1d4f93104b58354707f514d66b77e8c9d83cd Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 10:53:43 +0200 Subject: [PATCH 03/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 399ce22..acd2e2f 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -30,8 +30,11 @@ jobs: composer install - name: Execute one secure command - run: wp secure add-security-headers --file-path=/wordpress + run: vendor/bin/wp secure add-security-headers --file-path=/wordpress - name: Debug - run: cat /wordpress/.htaccess + run: | + cat /wordpress/.htaccess + pwd + docker ps From 4680ca4c894ade9d44aa43beb87979e3ea2c3791 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 10:55:39 +0200 Subject: [PATCH 04/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index acd2e2f..edc18bc 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -30,11 +30,12 @@ jobs: composer install - name: Execute one secure command - run: vendor/bin/wp secure add-security-headers --file-path=/wordpress + run: vendor/bin/wp secure add-security-headers - name: Debug run: | - cat /wordpress/.htaccess + cat .htaccess + ls -la /wordpress pwd docker ps From 4894486f6c51bcc69222eec3e7ea2980a752ceb1 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 10:57:44 +0200 Subject: [PATCH 05/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index edc18bc..f2a28a2 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -34,8 +34,5 @@ jobs: - name: Debug run: | - cat .htaccess - ls -la /wordpress - pwd - docker ps + curl -I http://localhost From 2c375802e7ed8b3a5797ca523976cea48b091efb Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 11:01:18 +0200 Subject: [PATCH 06/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index f2a28a2..39c9f4e 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -34,5 +34,5 @@ jobs: - name: Debug run: | - curl -I http://localhost + curl -I http://127.0.0.1 From c95e60554388a0017a49134899258da217485c24 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 11:06:38 +0200 Subject: [PATCH 07/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 39c9f4e..62c3a85 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -23,6 +23,8 @@ jobs: WORDPRESS_DB_NAME: testdb volumes: - /wordpress:/var/www/html + ports: + - 8080:80 steps: - uses: actions/checkout@v2 - name: Install dependencies @@ -34,5 +36,5 @@ jobs: - name: Debug run: | - curl -I http://127.0.0.1 + curl -I 127.0.0.1:8080 From ed4d7dc39875f247401927fa9e765a9c3d4dc3c8 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 11:08:56 +0200 Subject: [PATCH 08/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 62c3a85..a26ab43 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -36,5 +36,7 @@ jobs: - name: Debug run: | - curl -I 127.0.0.1:8080 + curl -I http://localhost:8080/readme.html + curl -I http://localhost:8080/wp-admin + From d0fe1985a43be682d60848d7155c14ef332ceeef Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 11:10:25 +0200 Subject: [PATCH 09/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index a26ab43..651612e 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -36,7 +36,5 @@ jobs: - name: Debug run: | - curl -I http://localhost:8080/readme.html - curl -I http://localhost:8080/wp-admin - + curl -I http://localhost:8080/ From 1a410bc511ac27e8bd4d88cea0a02c058b1e0da3 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 11:13:06 +0200 Subject: [PATCH 10/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 651612e..05176df 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -25,6 +25,8 @@ jobs: - /wordpress:/var/www/html ports: - 8080:80 + options: + --name wordpress steps: - uses: actions/checkout@v2 - name: Install dependencies @@ -37,4 +39,5 @@ jobs: - name: Debug run: | curl -I http://localhost:8080/ + docker ps From ad3bb78096b4f70d42f3ff42c5961bb6ea577fad Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 11:16:20 +0200 Subject: [PATCH 11/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 05176df..67a380f 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -38,6 +38,7 @@ jobs: - name: Debug run: | + cat /wordpress/wp-config.php curl -I http://localhost:8080/ - docker ps + docker logs wordpress From fbaeb0d2a215ed44b04e0f14c5cb412b43104530 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 11:19:59 +0200 Subject: [PATCH 12/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 67a380f..93be9ea 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -38,7 +38,5 @@ jobs: - name: Debug run: | - cat /wordpress/wp-config.php - curl -I http://localhost:8080/ - docker logs wordpress + vendor/bin/wp plugin list --path=/wordpress From a235766560d0f6896bcec81c9206f8217dd14fbb Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 11:21:37 +0200 Subject: [PATCH 13/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 93be9ea..34d669d 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -17,7 +17,7 @@ jobs: wordpress: image: wordpress env: - WORDPRESS_DB_HOST: 127.0.0.1 + WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: testuser WORDPRESS_DB_PASSWORD: testpassword WORDPRESS_DB_NAME: testdb From a3e0a944c104c142d625f5f92a64d39e66e3fda5 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:05:08 +0200 Subject: [PATCH 14/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 34d669d..407597f 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -4,30 +4,32 @@ jobs: tests: runs-on: 'ubuntu-latest' services: - mysql: - image: mariadb - env: - MYSQL_DATABASE: testdb - MYSQL_USER: testuser - MYSQL_PASSWORD: testpassword - MYSQL_ROOT_PASSWORD: rootpassword - ports: - - 3306:3306 - options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 wordpress: image: wordpress env: - WORDPRESS_DB_HOST: mysql - WORDPRESS_DB_USER: testuser + WORDPRESS_DB_HOST: localhost + WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: testpassword - WORDPRESS_DB_NAME: testdb + WORDPRESS_DB_NAME: root volumes: - /wordpress:/var/www/html ports: - 8080:80 options: --name wordpress + env: + DB_DATABASE: testdb + DB_USER: root + DB_PASSWORD: root steps: + - name: Start MYSQL + run: | + sudo systemctl start mysql.service + mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} + + - name: Resrtart WordPress container + run: docker restart wordpress + - uses: actions/checkout@v2 - name: Install dependencies run: | From f7119ac0ca19d80a14e20d364caec3928b92a4c4 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:07:10 +0200 Subject: [PATCH 15/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 407597f..2c8fd8d 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -9,8 +9,8 @@ jobs: env: WORDPRESS_DB_HOST: localhost WORDPRESS_DB_USER: root - WORDPRESS_DB_PASSWORD: testpassword - WORDPRESS_DB_NAME: root + WORDPRESS_DB_PASSWORD: root + WORDPRESS_DB_NAME: testdb volumes: - /wordpress:/var/www/html ports: From 3cbc05d2834d762572371c4f5f7159bb647fb52c Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:13:36 +0200 Subject: [PATCH 16/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 2c8fd8d..0a8be0d 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -40,5 +40,5 @@ jobs: - name: Debug run: | - vendor/bin/wp plugin list --path=/wordpress + mysql -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} testdb <<< 'SHOW TABLES' From 71627cb296d5da2a74fe274edca561385b0c2b9e Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:18:39 +0200 Subject: [PATCH 17/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 0a8be0d..61a3148 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -27,18 +27,26 @@ jobs: sudo systemctl start mysql.service mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} - - name: Resrtart WordPress container - run: docker restart wordpress - - uses: actions/checkout@v2 - name: Install dependencies run: | composer install + - name: Setup WordPress configuration + run: | + vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force + + - name: Restart WordPress container + run: docker restart wordpress + + - name: Install WordPress + run: | + vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email + - name: Execute one secure command run: vendor/bin/wp secure add-security-headers - name: Debug run: | - mysql -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} testdb <<< 'SHOW TABLES' + vendor/bin/wp plugin list From aa2de6369620f4b2aad06c63e547f31faf355047 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:20:14 +0200 Subject: [PATCH 18/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 61a3148..29b7415 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -34,14 +34,14 @@ jobs: - name: Setup WordPress configuration run: | - vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force + vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force --path=/wordpress - name: Restart WordPress container run: docker restart wordpress - name: Install WordPress run: | - vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email + vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=/wordpress - name: Execute one secure command run: vendor/bin/wp secure add-security-headers From e2320228392e8883448ec2522dae3bef05e681b8 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:21:28 +0200 Subject: [PATCH 19/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 29b7415..720545d 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -12,7 +12,7 @@ jobs: WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb volumes: - - /wordpress:/var/www/html + - ./wordpress:/var/www/html ports: - 8080:80 options: @@ -34,14 +34,14 @@ jobs: - name: Setup WordPress configuration run: | - vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force --path=/wordpress + vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force --path=wordpress - name: Restart WordPress container run: docker restart wordpress - name: Install WordPress run: | - vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=/wordpress + vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=wordpress - name: Execute one secure command run: vendor/bin/wp secure add-security-headers From aa241e1de4849903cc0d2acf8605be2d791186a8 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:22:38 +0200 Subject: [PATCH 20/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 720545d..859b287 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -12,7 +12,7 @@ jobs: WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb volumes: - - ./wordpress:/var/www/html + - wordpress:/var/www/html ports: - 8080:80 options: From 19235cec2c869353d2cc91794c3c9a6bf6ebe35c Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:25:14 +0200 Subject: [PATCH 21/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 859b287..b15422d 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -7,7 +7,7 @@ jobs: wordpress: image: wordpress env: - WORDPRESS_DB_HOST: localhost + WORDPRESS_DB_HOST: host.docker.internal WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb @@ -32,16 +32,16 @@ jobs: run: | composer install - - name: Setup WordPress configuration - run: | - vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force --path=wordpress +# - name: Setup WordPress configuration +# run: | +# vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force --path=wordpress - name: Restart WordPress container run: docker restart wordpress - - name: Install WordPress - run: | - vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=wordpress +# - name: Install WordPress +# run: | +# vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=wordpress - name: Execute one secure command run: vendor/bin/wp secure add-security-headers From 149a12754465986b2e066eb47a8540024d758373 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:26:14 +0200 Subject: [PATCH 22/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index b15422d..303749d 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -48,5 +48,5 @@ jobs: - name: Debug run: | - vendor/bin/wp plugin list + vendor/bin/wp plugin list --path=wordpress From 648974736f2527c64a745050ea8b3916382fa5f6 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:29:40 +0200 Subject: [PATCH 23/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 303749d..997005e 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -12,7 +12,7 @@ jobs: WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb volumes: - - wordpress:/var/www/html + - ${{ env.GITHUB_ACTION_PATH }}/wordpress:/var/www/html ports: - 8080:80 options: @@ -48,5 +48,5 @@ jobs: - name: Debug run: | - vendor/bin/wp plugin list --path=wordpress + vendor/bin/wp plugin list --path=${{ env.GITHUB_ACTION_PATH }}/wordpress From 6eafc15a7ed888eb841c579cbf5fddefa37185a7 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:30:20 +0200 Subject: [PATCH 24/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 997005e..f1ac350 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -12,7 +12,7 @@ jobs: WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb volumes: - - ${{ env.GITHUB_ACTION_PATH }}/wordpress:/var/www/html + - ${{ GITHUB_ACTION_PATH }}/wordpress:/var/www/html ports: - 8080:80 options: @@ -48,5 +48,5 @@ jobs: - name: Debug run: | - vendor/bin/wp plugin list --path=${{ env.GITHUB_ACTION_PATH }}/wordpress + vendor/bin/wp plugin list --path=${{ GITHUB_ACTION_PATH }}/wordpress From 1288bbed487098d71879a31737bfb6ff9591f52c Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:32:28 +0200 Subject: [PATCH 25/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index f1ac350..4576a7e 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -12,7 +12,7 @@ jobs: WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb volumes: - - ${{ GITHUB_ACTION_PATH }}/wordpress:/var/www/html + - $GITHUB_WORKSPACE/wordpress:/var/www/html ports: - 8080:80 options: @@ -48,5 +48,5 @@ jobs: - name: Debug run: | - vendor/bin/wp plugin list --path=${{ GITHUB_ACTION_PATH }}/wordpress + vendor/bin/wp plugin list --path=$GITHUB_WORKSPACE/wordpress From 2d41f1f2601f204ea289133539f7c81f84ca8355 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:34:19 +0200 Subject: [PATCH 26/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 4576a7e..bd6ccee 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -12,7 +12,7 @@ jobs: WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb volumes: - - $GITHUB_WORKSPACE/wordpress:/var/www/html + - ${{ GITHUB_WORKSPACE }}/wordpress:/var/www/html ports: - 8080:80 options: @@ -48,5 +48,5 @@ jobs: - name: Debug run: | - vendor/bin/wp plugin list --path=$GITHUB_WORKSPACE/wordpress + ls -la $HOME From d5bfa924b6fa2b3000556afedf000b037894baee Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:34:43 +0200 Subject: [PATCH 27/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index bd6ccee..c8e35d4 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -12,7 +12,7 @@ jobs: WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb volumes: - - ${{ GITHUB_WORKSPACE }}/wordpress:/var/www/html + - ./wordpress:/var/www/html ports: - 8080:80 options: From 9a709527df6d6085d9fc15cf3385a10d66c28ceb Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:36:41 +0200 Subject: [PATCH 28/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index c8e35d4..ebad1f2 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -12,7 +12,7 @@ jobs: WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb volumes: - - ./wordpress:/var/www/html + - wordpress:/var/www/html ports: - 8080:80 options: From b571a85bbcc26a82d3a294c55c8be338068be337 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:38:27 +0200 Subject: [PATCH 29/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index ebad1f2..98b8633 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -11,12 +11,12 @@ jobs: WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb - volumes: - - wordpress:/var/www/html +# volumes: +# - wordpress:/var/www/html ports: - 8080:80 options: - --name wordpress + --name wordpress -v ${{ GITHUB_WORKSPACE }}/wordpress:/var/www/html env: DB_DATABASE: testdb DB_USER: root From 85dd6ee3a90714758531b1cf2e204c77175e2a67 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:39:14 +0200 Subject: [PATCH 30/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 98b8633..08ed7df 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -16,7 +16,7 @@ jobs: ports: - 8080:80 options: - --name wordpress -v ${{ GITHUB_WORKSPACE }}/wordpress:/var/www/html + --name wordpress -v ${{ github.workspace }}/wordpress:/var/www/html env: DB_DATABASE: testdb DB_USER: root From 4e111e68a1daaf4bb98dc5320eaa8092540f21c2 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:44:29 +0200 Subject: [PATCH 31/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 08ed7df..16fc074 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -28,9 +28,11 @@ jobs: mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} - uses: actions/checkout@v2 + with: + path: 'codebase' - name: Install dependencies run: | - composer install + codebase/composer install # - name: Setup WordPress configuration # run: | @@ -44,7 +46,7 @@ jobs: # vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=wordpress - name: Execute one secure command - run: vendor/bin/wp secure add-security-headers + run: codebase/vendor/bin/wp secure add-security-headers - name: Debug run: | From c0d0802be819961c82711765568b915fbdde50b3 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:45:45 +0200 Subject: [PATCH 32/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 16fc074..c9b8364 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -30,23 +30,23 @@ jobs: - uses: actions/checkout@v2 with: path: 'codebase' - - name: Install dependencies - run: | - codebase/composer install +# - name: Install dependencies +# run: | +# codebase/composer install # - name: Setup WordPress configuration # run: | # vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force --path=wordpress - - name: Restart WordPress container - run: docker restart wordpress +# - name: Restart WordPress container +# run: docker restart wordpress # - name: Install WordPress # run: | # vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=wordpress - - name: Execute one secure command - run: codebase/vendor/bin/wp secure add-security-headers +# - name: Execute one secure command +# run: codebase/vendor/bin/wp secure add-security-headers - name: Debug run: | From 6341fdba3251a95220819ca3fbcdf35c7777658d Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:47:02 +0200 Subject: [PATCH 33/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index c9b8364..07efede 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -22,10 +22,10 @@ jobs: DB_USER: root DB_PASSWORD: root steps: - - name: Start MYSQL - run: | - sudo systemctl start mysql.service - mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} +# - name: Start MYSQL +# run: | +# sudo systemctl start mysql.service +# mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} - uses: actions/checkout@v2 with: @@ -50,5 +50,5 @@ jobs: - name: Debug run: | - ls -la $HOME + ls -la ${{ github.workspace }} From 0028e470f5d23eb85624ab2774e6974681f361e9 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:48:32 +0200 Subject: [PATCH 34/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 07efede..87bc566 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -22,24 +22,24 @@ jobs: DB_USER: root DB_PASSWORD: root steps: -# - name: Start MYSQL -# run: | -# sudo systemctl start mysql.service -# mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} + - name: Start MYSQL + run: | + sudo systemctl start mysql.service + mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} - uses: actions/checkout@v2 with: path: 'codebase' -# - name: Install dependencies -# run: | -# codebase/composer install + - name: Install dependencies + run: | + codebase/composer install # - name: Setup WordPress configuration # run: | # vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force --path=wordpress -# - name: Restart WordPress container -# run: docker restart wordpress + - name: Restart WordPress container + run: docker restart wordpress # - name: Install WordPress # run: | @@ -50,5 +50,5 @@ jobs: - name: Debug run: | - ls -la ${{ github.workspace }} + ${{ github.workspace }}/codebase/vendor/bin/wp plugin list --path=${{ github.workspace }}/wordpress From 344f5c20d26bd877db594d0b953b8538820108fd Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:49:49 +0200 Subject: [PATCH 35/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 87bc566..8bd51a8 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -32,7 +32,7 @@ jobs: path: 'codebase' - name: Install dependencies run: | - codebase/composer install + ${{ github.workspace }}/codebase/composer install # - name: Setup WordPress configuration # run: | From a28be14aca3a04986d9ccae8387a98c5f3da885d Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:50:53 +0200 Subject: [PATCH 36/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 8bd51a8..ede5050 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -32,7 +32,7 @@ jobs: path: 'codebase' - name: Install dependencies run: | - ${{ github.workspace }}/codebase/composer install + cd ${{ github.workspace }}/codebase && composer install # - name: Setup WordPress configuration # run: | From 119cf6760f5f2abf1474353d1af56139233d3be1 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:53:21 +0200 Subject: [PATCH 37/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index ede5050..93e091c 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -11,8 +11,6 @@ jobs: WORDPRESS_DB_USER: root WORDPRESS_DB_PASSWORD: root WORDPRESS_DB_NAME: testdb -# volumes: -# - wordpress:/var/www/html ports: - 8080:80 options: @@ -34,16 +32,16 @@ jobs: run: | cd ${{ github.workspace }}/codebase && composer install -# - name: Setup WordPress configuration -# run: | -# vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=localhost --force --path=wordpress + - name: Setup WordPress configuration + run: | + ${{ github.workspace }}/codebase/vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=host.docker.internal --force --path=${{ github.workspace }}/wordpress - name: Restart WordPress container run: docker restart wordpress -# - name: Install WordPress -# run: | -# vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=wordpress + - name: Install WordPress + run: | + ${{ github.workspace }}/codebase/vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=${{ github.workspace }}/wordpress # - name: Execute one secure command # run: codebase/vendor/bin/wp secure add-security-headers From 6c4a6231fada8cbbf316f65540a6b2599a712d70 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 12:56:35 +0200 Subject: [PATCH 38/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 93e091c..30b6d14 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -34,7 +34,7 @@ jobs: - name: Setup WordPress configuration run: | - ${{ github.workspace }}/codebase/vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=host.docker.internal --force --path=${{ github.workspace }}/wordpress + ${{ github.workspace }}/codebase/vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=mysql --force --path=${{ github.workspace }}/wordpress - name: Restart WordPress container run: docker restart wordpress From bc536b51340a43c04bb0b23e6764da219f916261 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 13:29:27 +0200 Subject: [PATCH 39/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 59 ++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 30b6d14..a51f951 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -4,26 +4,41 @@ jobs: tests: runs-on: 'ubuntu-latest' services: + mysql: + image: mysql:5.7 + env: + MYSQL_ROOT_PASSWORD: "rootpass" + MYSQL_USER: "wordpress" + MYSQL_PASSWORD: "wordpress" + MYSQL_DATABASE: "wordpress" + ports: + - 3306:3306 + options: >- + --mount type=tmpfs,destination=/var/lib/mysql + --health-cmd "mysqladmin ping" + --health-interval 10s + --health-timeout 5s + --health-retries 3 wordpress: image: wordpress env: - WORDPRESS_DB_HOST: host.docker.internal - WORDPRESS_DB_USER: root - WORDPRESS_DB_PASSWORD: root - WORDPRESS_DB_NAME: testdb + WORDPRESS_DB_HOST: mysql + WORDPRESS_DB_USER: wordpress + WORDPRESS_DB_PASSWORD: wordpress + WORDPRESS_DB_NAME: wordpress ports: - 8080:80 options: --name wordpress -v ${{ github.workspace }}/wordpress:/var/www/html - env: - DB_DATABASE: testdb - DB_USER: root - DB_PASSWORD: root +# env: +# DB_DATABASE: testdb +# DB_USER: root +# DB_PASSWORD: root steps: - - name: Start MYSQL - run: | - sudo systemctl start mysql.service - mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} +# - name: Start MYSQL +# run: | +# sudo systemctl start mysql.service +# mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} - uses: actions/checkout@v2 with: @@ -32,16 +47,16 @@ jobs: run: | cd ${{ github.workspace }}/codebase && composer install - - name: Setup WordPress configuration - run: | - ${{ github.workspace }}/codebase/vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=mysql --force --path=${{ github.workspace }}/wordpress - - - name: Restart WordPress container - run: docker restart wordpress - - - name: Install WordPress - run: | - ${{ github.workspace }}/codebase/vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=${{ github.workspace }}/wordpress +# - name: Setup WordPress configuration +# run: | +# ${{ github.workspace }}/codebase/vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=mysql --force --path=${{ github.workspace }}/wordpress +# +# - name: Restart WordPress container +# run: docker restart wordpress +# +# - name: Install WordPress +# run: | +# ${{ github.workspace }}/codebase/vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=${{ github.workspace }}/wordpress # - name: Execute one secure command # run: codebase/vendor/bin/wp secure add-security-headers From fe40a805c64e7fd10adfa972ca6f539eb711095a Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 13:32:09 +0200 Subject: [PATCH 40/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index a51f951..aeb4af2 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -63,5 +63,5 @@ jobs: - name: Debug run: | - ${{ github.workspace }}/codebase/vendor/bin/wp plugin list --path=${{ github.workspace }}/wordpress + curl http://localhost From 661fe33dc63b03cfb105b5245a5582dce426add3 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 13:33:08 +0200 Subject: [PATCH 41/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index aeb4af2..8998fdb 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -63,5 +63,5 @@ jobs: - name: Debug run: | - curl http://localhost + curl http://localhost:8080/ From d8830ce2f1639d6b9748a5e2653b4f11c479521d Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 14:06:36 +0200 Subject: [PATCH 42/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 8998fdb..9935a3f 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -64,4 +64,5 @@ jobs: - name: Debug run: | curl http://localhost:8080/ + cat ${{ github.workspace }}/wordpress/.htaccess From cf492daa249738561983017904ac6a9acd7d0fc0 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 14:11:01 +0200 Subject: [PATCH 43/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 9935a3f..0b81e10 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -63,6 +63,5 @@ jobs: - name: Debug run: | - curl http://localhost:8080/ - cat ${{ github.workspace }}/wordpress/.htaccess + curl http://localhost:8080/hello-world From f7f03dd5ab01b6831c683a552628ff2c0f7e185b Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 14:12:12 +0200 Subject: [PATCH 44/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 0b81e10..006c02f 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -63,5 +63,5 @@ jobs: - name: Debug run: | - curl http://localhost:8080/hello-world + curl -I http://localhost:8080/hello-world From bfaa7bd614f7237c276b5ce7d56229a9f3b21a0e Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 14:16:28 +0200 Subject: [PATCH 45/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 006c02f..318835b 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -30,16 +30,7 @@ jobs: - 8080:80 options: --name wordpress -v ${{ github.workspace }}/wordpress:/var/www/html -# env: -# DB_DATABASE: testdb -# DB_USER: root -# DB_PASSWORD: root steps: -# - name: Start MYSQL -# run: | -# sudo systemctl start mysql.service -# mysql -e 'CREATE DATABASE ${{ env.DB_DATABASE }};' -u${{ env.DB_USER }} -p${{ env.DB_PASSWORD }} - - uses: actions/checkout@v2 with: path: 'codebase' @@ -47,21 +38,10 @@ jobs: run: | cd ${{ github.workspace }}/codebase && composer install -# - name: Setup WordPress configuration -# run: | -# ${{ github.workspace }}/codebase/vendor/bin/wp config create --dbname=${{ env.DB_DATABASE }} --dbuser=${{ env.DB_USER }} --dbpass=${{ env.DB_PASSWORD }} --dbhost=mysql --force --path=${{ github.workspace }}/wordpress -# -# - name: Restart WordPress container -# run: docker restart wordpress -# -# - name: Install WordPress -# run: | -# ${{ github.workspace }}/codebase/vendor/bin/wp core install --url=http://localhost --title="WordPress" --admin_user=admin --admin_email=admin@example.com --admin_password=pass --skip-email --path=${{ github.workspace }}/wordpress - -# - name: Execute one secure command -# run: codebase/vendor/bin/wp secure add-security-headers + - name: Execute one secure command + run: codebase/vendor/bin/wp secure block-access sensitive-files --file/path=${{ github.workspace }}/wordpress/.htaccess - name: Debug run: | - curl -I http://localhost:8080/hello-world + curl -I http://localhost:8080/readme.html From d7492c0e2160c1a50ac33ec97562437a8c200bf2 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 14:17:39 +0200 Subject: [PATCH 46/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 318835b..d60b4d6 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -39,7 +39,7 @@ jobs: cd ${{ github.workspace }}/codebase && composer install - name: Execute one secure command - run: codebase/vendor/bin/wp secure block-access sensitive-files --file/path=${{ github.workspace }}/wordpress/.htaccess + run: codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess - name: Debug run: | From 7e65131dba86b1a38f4006cdcc1916e6cd4f79ad Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:04:14 +0200 Subject: [PATCH 47/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index d60b4d6..c19dd56 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -38,6 +38,11 @@ jobs: run: | cd ${{ github.workspace }}/codebase && composer install + - name: Debug + run: | + stat ${{ github.workspace }}/wordpress/.htaccess + whoami + - name: Execute one secure command run: codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess From 4f0c2a1f1fa00f3209c50415303e58339ab358d6 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:05:47 +0200 Subject: [PATCH 48/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index c19dd56..1f03ac3 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -38,10 +38,9 @@ jobs: run: | cd ${{ github.workspace }}/codebase && composer install - - name: Debug + - name: Make .htaccess writebable run: | - stat ${{ github.workspace }}/wordpress/.htaccess - whoami + chown 666 ${{ github.workspace }}/wordpress/.htaccess - name: Execute one secure command run: codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess From 9c2aec4d1a6e584ca169ead67d52e82de6dff14c Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:06:53 +0200 Subject: [PATCH 49/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 1f03ac3..c9e660e 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -40,7 +40,7 @@ jobs: - name: Make .htaccess writebable run: | - chown 666 ${{ github.workspace }}/wordpress/.htaccess + sudo chown 666 ${{ github.workspace }}/wordpress/.htaccess - name: Execute one secure command run: codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess From 22c8245e6052b338dd6ab9f6c16d9c4f91d77e6e Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:07:56 +0200 Subject: [PATCH 50/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index c9e660e..9d30956 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -40,7 +40,7 @@ jobs: - name: Make .htaccess writebable run: | - sudo chown 666 ${{ github.workspace }}/wordpress/.htaccess + sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess - name: Execute one secure command run: codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess From 6ba326e6feb0d5bb37ca72afd1ff510b1738d7d7 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:21:25 +0200 Subject: [PATCH 51/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 9d30956..d83a4ef 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -43,7 +43,7 @@ jobs: sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess - name: Execute one secure command - run: codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess + run: sudo codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess - name: Debug run: | From e753b8a4941bf46aed7579aeae1bd6a6fbef9a8c Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:22:35 +0200 Subject: [PATCH 52/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index d83a4ef..d879e85 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -43,7 +43,7 @@ jobs: sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess - name: Execute one secure command - run: sudo codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess + run: sudo codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess --allow-root - name: Debug run: | From 73ce25b9a6ce4ab76775201fa9624a86deae5248 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:24:07 +0200 Subject: [PATCH 53/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index d879e85..3088c61 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -47,5 +47,5 @@ jobs: - name: Debug run: | - curl -I http://localhost:8080/readme.html + curl -I http://localhost:8080/hello-world From fecb3368ea222a43679a6c75227dc8bb9a32dce2 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:25:25 +0200 Subject: [PATCH 54/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 3088c61..a521a3c 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -42,8 +42,8 @@ jobs: run: | sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess - - name: Execute one secure command - run: sudo codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess --allow-root +# - name: Execute one secure command +# run: sudo codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess --allow-root - name: Debug run: | From 9725240eac447aeed8105530d684d4862eb7a2f2 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:28:21 +0200 Subject: [PATCH 55/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index a521a3c..9da3b91 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -42,8 +42,8 @@ jobs: run: | sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess -# - name: Execute one secure command -# run: sudo codebase/vendor/bin/wp secure block-access sensitive-files --file-path=${{ github.workspace }}/wordpress/.htaccess --allow-root + - name: Execute one secure command + run: sudo codebase/vendor/bin/wp secure block-php-execution all --file-path=${{ github.workspace }}/wordpress/.htaccess --allow-root - name: Debug run: | From a857f4c3de92a43ff8d247119b6638d5ab54dce0 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Fri, 8 Apr 2022 15:29:37 +0200 Subject: [PATCH 56/97] feat: Automated testing for Apache --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 9da3b91..e61207a 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -47,5 +47,5 @@ jobs: - name: Debug run: | - curl -I http://localhost:8080/hello-world + curl -I http://localhost:8080/wp-content/plugins/index.php From eb2348c57ad892a519b8280b9e4c124e2d1f908d Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 09:22:35 +0200 Subject: [PATCH 57/97] fix: Fixed an issue that caused duplication of rules --- .../BlockAccessToSensitiveFiles.php | 31 ------------------- 1 file changed, 31 deletions(-) diff --git a/src/SubCommands/BlockAccessToSensitiveFiles.php b/src/SubCommands/BlockAccessToSensitiveFiles.php index aa11f41..f812370 100644 --- a/src/SubCommands/BlockAccessToSensitiveFiles.php +++ b/src/SubCommands/BlockAccessToSensitiveFiles.php @@ -8,35 +8,4 @@ class BlockAccessToSensitiveFiles extends SubCommand public string $ruleName = 'BLOCK ACCESS TO SENSITIVE FILES'; public string $successMessage = 'Block Access to Sensitive Files rule has been deployed.'; public string $removalMessage = 'Block Access to Sensitive Files rule has been removed.'; - - /** - * @var string List of files that we are protecting by default - */ - private string $protectedFiles = 'readme.html,readme.txt,wp-config.php,nginx.conf,/wp-admin/install.php,/wp-admin/upgrade.php'; - - public function getTemplateVars(): array - { - $files = $this->commandArguments['files'] ?? $this->protectedFiles; - if (! empty($files)) { - $files = explode(',', $files); - $files = array_map('trim', $files); - $files_array = []; - - foreach ($files as $key => $value) { - if (preg_match('/.+\/.+/', $value)) { - $file_with_directory = $this->setRuleContent(false, 'block_access_to_sensitive_files_with_directories'); - if (isset($this->commandArguments['server']) && $this->commandArguments['server'] === 'nginx') { - $file = $value; - } else { - $file = preg_quote(ltrim($value, '/')); - } - $files_array[] = [ $file => $file_with_directory ]; - } else { - $files_array[] = [ 'file' => isset($this->commandArguments['server']) && $this->commandArguments['server'] === 'nginx' ? preg_quote($value) : $value ]; - } - } - return $files_array; - } - return []; - } } From 29b6377f2d03a52524f8ace38c67e6151429e6cd Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 09:23:00 +0200 Subject: [PATCH 58/97] feat: Custom files and default sensitive files are now split --- src/SecureCommand.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/SecureCommand.php b/src/SecureCommand.php index e0c442e..446411b 100644 --- a/src/SecureCommand.php +++ b/src/SecureCommand.php @@ -240,7 +240,11 @@ public function blockAccess(array $args, array $assoc_args): void if (in_array($blockPart, ['all', 'sensitive-files'])) { WP_CLI::debug('Blocking access to the sensitive files.', 'secure'); - (new BlockAccessToSensitiveFiles($assoc_args))->output(); + if(isset($assoc_args['files'])) { + (new BlockAccessToCustomSensitiveFiles($assoc_args))->output(); + } else { + (new BlockAccessToSensitiveFiles($assoc_args))->output(); + } } if (in_array($blockPart, ['all', 'sensitive-directories'])) { From 95f534c46695e24903313a7bf7dbf27441e478a5 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 11:40:48 +0200 Subject: [PATCH 59/97] feat: Reorg of web server related tests --- tests/Feature/AddSecurityHeadersTest.php | 38 ------------ tests/Feature/BlockAccessToHtaccessTest.php | 30 ---------- .../BlockAccessToSensitiveDirectoriesTest.php | 51 ---------------- .../BlockAccessToSensitiveFilesTest.php | 60 ------------------- tests/Feature/BlockAccessToXmlRpcTest.php | 30 ---------- tests/Feature/BlockAuthorScanningTest.php | 22 ------- .../BlockPhpExecutionInPluginsTest.php | 30 ---------- .../Feature/BlockPhpExecutionInThemesTest.php | 30 ---------- .../BlockPhpExecutionInUploadsTest.php | 30 ---------- .../BlockPhpExecutionInWpIncludesTest.php | 50 ---------------- 10 files changed, 371 deletions(-) delete mode 100644 tests/Feature/AddSecurityHeadersTest.php delete mode 100644 tests/Feature/BlockAccessToHtaccessTest.php delete mode 100644 tests/Feature/BlockAccessToSensitiveDirectoriesTest.php delete mode 100644 tests/Feature/BlockAccessToSensitiveFilesTest.php delete mode 100644 tests/Feature/BlockAccessToXmlRpcTest.php delete mode 100644 tests/Feature/BlockAuthorScanningTest.php delete mode 100644 tests/Feature/BlockPhpExecutionInPluginsTest.php delete mode 100644 tests/Feature/BlockPhpExecutionInThemesTest.php delete mode 100644 tests/Feature/BlockPhpExecutionInUploadsTest.php delete mode 100644 tests/Feature/BlockPhpExecutionInWpIncludesTest.php diff --git a/tests/Feature/AddSecurityHeadersTest.php b/tests/Feature/AddSecurityHeadersTest.php deleted file mode 100644 index 28cad33..0000000 --- a/tests/Feature/AddSecurityHeadersTest.php +++ /dev/null @@ -1,38 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new AddSecurityHeaders($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillContainAllHeadersOnNginx() : void { - $response = $this->nginxHttpClient->get('', ['http_errors' => false]); - - $this->assertNotEmpty($response->getHeaderLine( 'Strict-Transport-Security' )); - $this->assertNotEmpty($response->getHeaderLine( 'Referrer-Policy' )); - $this->assertNotEmpty($response->getHeaderLine( 'x-content-type-options' )); - $this->assertNotEmpty($response->getHeaderLine( 'X-Frame-Options' )); - } - - public function testItWillContainAllHeadersOnApache() : void { - $response = $this->apacheHttpClient->get('', ['http_errors' => false]); - - $this->assertNotEmpty($response->getHeaderLine( 'Strict-Transport-Security' )); - $this->assertNotEmpty($response->getHeaderLine( 'Referrer-Policy' )); - $this->assertNotEmpty($response->getHeaderLine( 'x-content-type-options' )); - $this->assertNotEmpty($response->getHeaderLine( 'X-Frame-Options' )); - } -} \ No newline at end of file diff --git a/tests/Feature/BlockAccessToHtaccessTest.php b/tests/Feature/BlockAccessToHtaccessTest.php deleted file mode 100644 index 0a5be8a..0000000 --- a/tests/Feature/BlockAccessToHtaccessTest.php +++ /dev/null @@ -1,30 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockAccessToHtaccess($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingNginxConfigFile() : void { - $response = $this->nginxHttpClient->get('nginx.conf', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingApacheConfigFile() : void { - $response = $this->apacheHttpClient->get('.htaccess', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/BlockAccessToSensitiveDirectoriesTest.php b/tests/Feature/BlockAccessToSensitiveDirectoriesTest.php deleted file mode 100644 index 1189a18..0000000 --- a/tests/Feature/BlockAccessToSensitiveDirectoriesTest.php +++ /dev/null @@ -1,51 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockAccessToSensitiveDirectories($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingGitDirectory() : void { - $response = $this->nginxHttpClient->get('.git', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingSvnDirectory() : void { - $response = $this->nginxHttpClient->get('svn', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingCacheDirectory() : void { - $response = $this->nginxHttpClient->get('cache', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingGitDirectory() : void { - $response = $this->apacheHttpClient->get('.git', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingSvnDirectory() : void { - $response = $this->apacheHttpClient->get('svn', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingCacheDirectory() : void { - $response = $this->apacheHttpClient->get('cache', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - -} \ No newline at end of file diff --git a/tests/Feature/BlockAccessToSensitiveFilesTest.php b/tests/Feature/BlockAccessToSensitiveFilesTest.php deleted file mode 100644 index 246f6dc..0000000 --- a/tests/Feature/BlockAccessToSensitiveFilesTest.php +++ /dev/null @@ -1,60 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockAccessToSensitiveFiles($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingReadmeFiles() : void { - $response = $this->nginxHttpClient->get('readme.html', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingWpConfigFile() : void { - $response = $this->nginxHttpClient->get('wp-config.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingWpInstallFile() : void { - $response = $this->nginxHttpClient->get('wp-admin/install.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingWpUpgradeFile() : void { - $response = $this->nginxHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingReadmeFiles() : void { - $response = $this->apacheHttpClient->get('readme.html', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingWpConfigFile() : void { - $response = $this->apacheHttpClient->get('wp-config.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingWpInstallFile() : void { - $response = $this->apacheHttpClient->get('wp-admin/install.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingWpUpgradeFile() : void { - $response = $this->apacheHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/BlockAccessToXmlRpcTest.php b/tests/Feature/BlockAccessToXmlRpcTest.php deleted file mode 100644 index a102e4a..0000000 --- a/tests/Feature/BlockAccessToXmlRpcTest.php +++ /dev/null @@ -1,30 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockAccessToXmlRpc($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingXmlRpcFile() : void { - $response = $this->nginxHttpClient->get('xmlrpc.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingXmlRpcFile() : void { - $response = $this->apacheHttpClient->get('xmlrpc.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/BlockAuthorScanningTest.php b/tests/Feature/BlockAuthorScanningTest.php deleted file mode 100644 index c9cedb0..0000000 --- a/tests/Feature/BlockAuthorScanningTest.php +++ /dev/null @@ -1,22 +0,0 @@ -apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { - $response = $this->apacheHttpClient->get('/?author=12', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/BlockPhpExecutionInPluginsTest.php b/tests/Feature/BlockPhpExecutionInPluginsTest.php deleted file mode 100644 index 5cea692..0000000 --- a/tests/Feature/BlockPhpExecutionInPluginsTest.php +++ /dev/null @@ -1,30 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockPhpExecutionInPlugins($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInPlugins() : void { - $response = $this->nginxHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInPlugins() : void { - $response = $this->apacheHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/BlockPhpExecutionInThemesTest.php b/tests/Feature/BlockPhpExecutionInThemesTest.php deleted file mode 100644 index c6ba7dc..0000000 --- a/tests/Feature/BlockPhpExecutionInThemesTest.php +++ /dev/null @@ -1,30 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockPhpExecutionInThemes($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInThemesDirectory() : void { - $response = $this->nginxHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInThemesDirectory() : void { - $response = $this->apacheHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/BlockPhpExecutionInUploadsTest.php b/tests/Feature/BlockPhpExecutionInUploadsTest.php deleted file mode 100644 index db99cde..0000000 --- a/tests/Feature/BlockPhpExecutionInUploadsTest.php +++ /dev/null @@ -1,30 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockPhpExecutionInUploads($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInUploadsDirectory() : void { - $response = $this->nginxHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInUploadsDirectory() : void { - $response = $this->apacheHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/BlockPhpExecutionInWpIncludesTest.php b/tests/Feature/BlockPhpExecutionInWpIncludesTest.php deleted file mode 100644 index 20ce4c5..0000000 --- a/tests/Feature/BlockPhpExecutionInWpIncludesTest.php +++ /dev/null @@ -1,50 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockPhpExecutionInWpIncludes($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpIncludesDirectory() : void { - $response = $this->nginxHttpClient->get('wp-includes', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { - $response = $this->nginxHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { - $response = $this->nginxHttpClient->get('wp-admin/includes', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { - $response = $this->apacheHttpClient->get('wp-includes', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { - $response = $this->apacheHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { - $response = $this->apacheHttpClient->get('wp-admin/includes', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file From d657cb4c3fa5089a2a8a178143e23df49b85833e Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 11:40:58 +0200 Subject: [PATCH 60/97] feat: Reorg of web server related tests --- .../Feature/Apache/AddSecurityHeadersTest.php | 24 ++++++++ .../Apache/BlockAccessToHtaccessTest.php | 20 +++++++ .../BlockAccessToSensitiveDirectoriesTest.php | 51 ++++++++++++++++ .../BlockAccessToSensitiveFilesTest.php | 60 +++++++++++++++++++ .../Apache/BlockAccessToXmlRpcTest.php | 30 ++++++++++ .../Apache/BlockAuthorScanningTest.php | 22 +++++++ .../Apache/BlockPhpExecutionInPluginsTest.php | 30 ++++++++++ .../Apache/BlockPhpExecutionInThemesTest.php | 30 ++++++++++ .../Apache/BlockPhpExecutionInUploadsTest.php | 30 ++++++++++ .../BlockPhpExecutionInWpIncludesTest.php | 50 ++++++++++++++++ .../Feature/Nginx/AddSecurityHeadersTest.php | 38 ++++++++++++ .../Nginx/BlockAccessToHtaccessTest.php | 30 ++++++++++ .../BlockAccessToSensitiveDirectoriesTest.php | 51 ++++++++++++++++ .../Nginx/BlockAccessToSensitiveFilesTest.php | 60 +++++++++++++++++++ .../Feature/Nginx/BlockAccessToXmlRpcTest.php | 30 ++++++++++ .../Feature/Nginx/BlockAuthorScanningTest.php | 22 +++++++ .../Nginx/BlockPhpExecutionInPluginsTest.php | 30 ++++++++++ .../Nginx/BlockPhpExecutionInThemesTest.php | 30 ++++++++++ .../Nginx/BlockPhpExecutionInUploadsTest.php | 30 ++++++++++ .../BlockPhpExecutionInWpIncludesTest.php | 50 ++++++++++++++++ 20 files changed, 718 insertions(+) create mode 100644 tests/Feature/Apache/AddSecurityHeadersTest.php create mode 100644 tests/Feature/Apache/BlockAccessToHtaccessTest.php create mode 100644 tests/Feature/Apache/BlockAccessToSensitiveDirectoriesTest.php create mode 100644 tests/Feature/Apache/BlockAccessToSensitiveFilesTest.php create mode 100644 tests/Feature/Apache/BlockAccessToXmlRpcTest.php create mode 100644 tests/Feature/Apache/BlockAuthorScanningTest.php create mode 100644 tests/Feature/Apache/BlockPhpExecutionInPluginsTest.php create mode 100644 tests/Feature/Apache/BlockPhpExecutionInThemesTest.php create mode 100644 tests/Feature/Apache/BlockPhpExecutionInUploadsTest.php create mode 100644 tests/Feature/Apache/BlockPhpExecutionInWpIncludesTest.php create mode 100644 tests/Feature/Nginx/AddSecurityHeadersTest.php create mode 100644 tests/Feature/Nginx/BlockAccessToHtaccessTest.php create mode 100644 tests/Feature/Nginx/BlockAccessToSensitiveDirectoriesTest.php create mode 100644 tests/Feature/Nginx/BlockAccessToSensitiveFilesTest.php create mode 100644 tests/Feature/Nginx/BlockAccessToXmlRpcTest.php create mode 100644 tests/Feature/Nginx/BlockAuthorScanningTest.php create mode 100644 tests/Feature/Nginx/BlockPhpExecutionInPluginsTest.php create mode 100644 tests/Feature/Nginx/BlockPhpExecutionInThemesTest.php create mode 100644 tests/Feature/Nginx/BlockPhpExecutionInUploadsTest.php create mode 100644 tests/Feature/Nginx/BlockPhpExecutionInWpIncludesTest.php diff --git a/tests/Feature/Apache/AddSecurityHeadersTest.php b/tests/Feature/Apache/AddSecurityHeadersTest.php new file mode 100644 index 0000000..a3538e7 --- /dev/null +++ b/tests/Feature/Apache/AddSecurityHeadersTest.php @@ -0,0 +1,24 @@ +apacheAssocArgs); + $command->output(); + } + + public function testItWillContainAllHeadersOnApache() : void { + $response = $this->apacheHttpClient->get('', ['http_errors' => false]); + + $this->assertNotEmpty($response->getHeaderLine( 'Strict-Transport-Security' )); + $this->assertNotEmpty($response->getHeaderLine( 'Referrer-Policy' )); + $this->assertNotEmpty($response->getHeaderLine( 'x-content-type-options' )); + $this->assertNotEmpty($response->getHeaderLine( 'X-Frame-Options' )); + } +} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAccessToHtaccessTest.php b/tests/Feature/Apache/BlockAccessToHtaccessTest.php new file mode 100644 index 0000000..1c0fa40 --- /dev/null +++ b/tests/Feature/Apache/BlockAccessToHtaccessTest.php @@ -0,0 +1,20 @@ +apacheAssocArgs); + $command->output(); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingApacheConfigFile() : void { + $response = $this->apacheHttpClient->get('.htaccess', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAccessToSensitiveDirectoriesTest.php b/tests/Feature/Apache/BlockAccessToSensitiveDirectoriesTest.php new file mode 100644 index 0000000..1189a18 --- /dev/null +++ b/tests/Feature/Apache/BlockAccessToSensitiveDirectoriesTest.php @@ -0,0 +1,51 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockAccessToSensitiveDirectories($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingGitDirectory() : void { + $response = $this->nginxHttpClient->get('.git', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingSvnDirectory() : void { + $response = $this->nginxHttpClient->get('svn', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingCacheDirectory() : void { + $response = $this->nginxHttpClient->get('cache', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingGitDirectory() : void { + $response = $this->apacheHttpClient->get('.git', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingSvnDirectory() : void { + $response = $this->apacheHttpClient->get('svn', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingCacheDirectory() : void { + $response = $this->apacheHttpClient->get('cache', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + +} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAccessToSensitiveFilesTest.php b/tests/Feature/Apache/BlockAccessToSensitiveFilesTest.php new file mode 100644 index 0000000..246f6dc --- /dev/null +++ b/tests/Feature/Apache/BlockAccessToSensitiveFilesTest.php @@ -0,0 +1,60 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockAccessToSensitiveFiles($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingReadmeFiles() : void { + $response = $this->nginxHttpClient->get('readme.html', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingWpConfigFile() : void { + $response = $this->nginxHttpClient->get('wp-config.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingWpInstallFile() : void { + $response = $this->nginxHttpClient->get('wp-admin/install.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingWpUpgradeFile() : void { + $response = $this->nginxHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingReadmeFiles() : void { + $response = $this->apacheHttpClient->get('readme.html', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingWpConfigFile() : void { + $response = $this->apacheHttpClient->get('wp-config.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingWpInstallFile() : void { + $response = $this->apacheHttpClient->get('wp-admin/install.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingWpUpgradeFile() : void { + $response = $this->apacheHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAccessToXmlRpcTest.php b/tests/Feature/Apache/BlockAccessToXmlRpcTest.php new file mode 100644 index 0000000..a102e4a --- /dev/null +++ b/tests/Feature/Apache/BlockAccessToXmlRpcTest.php @@ -0,0 +1,30 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockAccessToXmlRpc($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingXmlRpcFile() : void { + $response = $this->nginxHttpClient->get('xmlrpc.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingXmlRpcFile() : void { + $response = $this->apacheHttpClient->get('xmlrpc.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAuthorScanningTest.php b/tests/Feature/Apache/BlockAuthorScanningTest.php new file mode 100644 index 0000000..c9cedb0 --- /dev/null +++ b/tests/Feature/Apache/BlockAuthorScanningTest.php @@ -0,0 +1,22 @@ +apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { + $response = $this->apacheHttpClient->get('/?author=12', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockPhpExecutionInPluginsTest.php b/tests/Feature/Apache/BlockPhpExecutionInPluginsTest.php new file mode 100644 index 0000000..5cea692 --- /dev/null +++ b/tests/Feature/Apache/BlockPhpExecutionInPluginsTest.php @@ -0,0 +1,30 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInPlugins($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInPlugins() : void { + $response = $this->nginxHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInPlugins() : void { + $response = $this->apacheHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockPhpExecutionInThemesTest.php b/tests/Feature/Apache/BlockPhpExecutionInThemesTest.php new file mode 100644 index 0000000..c6ba7dc --- /dev/null +++ b/tests/Feature/Apache/BlockPhpExecutionInThemesTest.php @@ -0,0 +1,30 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInThemes($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInThemesDirectory() : void { + $response = $this->nginxHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInThemesDirectory() : void { + $response = $this->apacheHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockPhpExecutionInUploadsTest.php b/tests/Feature/Apache/BlockPhpExecutionInUploadsTest.php new file mode 100644 index 0000000..db99cde --- /dev/null +++ b/tests/Feature/Apache/BlockPhpExecutionInUploadsTest.php @@ -0,0 +1,30 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInUploads($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInUploadsDirectory() : void { + $response = $this->nginxHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInUploadsDirectory() : void { + $response = $this->apacheHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockPhpExecutionInWpIncludesTest.php b/tests/Feature/Apache/BlockPhpExecutionInWpIncludesTest.php new file mode 100644 index 0000000..20ce4c5 --- /dev/null +++ b/tests/Feature/Apache/BlockPhpExecutionInWpIncludesTest.php @@ -0,0 +1,50 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInWpIncludes($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpIncludesDirectory() : void { + $response = $this->nginxHttpClient->get('wp-includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { + $response = $this->nginxHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { + $response = $this->nginxHttpClient->get('wp-admin/includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { + $response = $this->apacheHttpClient->get('wp-includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { + $response = $this->apacheHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { + $response = $this->apacheHttpClient->get('wp-admin/includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Nginx/AddSecurityHeadersTest.php b/tests/Feature/Nginx/AddSecurityHeadersTest.php new file mode 100644 index 0000000..28cad33 --- /dev/null +++ b/tests/Feature/Nginx/AddSecurityHeadersTest.php @@ -0,0 +1,38 @@ +nginxAssocArgs); + $command->output(); + + $command = new AddSecurityHeaders($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillContainAllHeadersOnNginx() : void { + $response = $this->nginxHttpClient->get('', ['http_errors' => false]); + + $this->assertNotEmpty($response->getHeaderLine( 'Strict-Transport-Security' )); + $this->assertNotEmpty($response->getHeaderLine( 'Referrer-Policy' )); + $this->assertNotEmpty($response->getHeaderLine( 'x-content-type-options' )); + $this->assertNotEmpty($response->getHeaderLine( 'X-Frame-Options' )); + } + + public function testItWillContainAllHeadersOnApache() : void { + $response = $this->apacheHttpClient->get('', ['http_errors' => false]); + + $this->assertNotEmpty($response->getHeaderLine( 'Strict-Transport-Security' )); + $this->assertNotEmpty($response->getHeaderLine( 'Referrer-Policy' )); + $this->assertNotEmpty($response->getHeaderLine( 'x-content-type-options' )); + $this->assertNotEmpty($response->getHeaderLine( 'X-Frame-Options' )); + } +} \ No newline at end of file diff --git a/tests/Feature/Nginx/BlockAccessToHtaccessTest.php b/tests/Feature/Nginx/BlockAccessToHtaccessTest.php new file mode 100644 index 0000000..0a5be8a --- /dev/null +++ b/tests/Feature/Nginx/BlockAccessToHtaccessTest.php @@ -0,0 +1,30 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockAccessToHtaccess($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingNginxConfigFile() : void { + $response = $this->nginxHttpClient->get('nginx.conf', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingApacheConfigFile() : void { + $response = $this->apacheHttpClient->get('.htaccess', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Nginx/BlockAccessToSensitiveDirectoriesTest.php b/tests/Feature/Nginx/BlockAccessToSensitiveDirectoriesTest.php new file mode 100644 index 0000000..1189a18 --- /dev/null +++ b/tests/Feature/Nginx/BlockAccessToSensitiveDirectoriesTest.php @@ -0,0 +1,51 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockAccessToSensitiveDirectories($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingGitDirectory() : void { + $response = $this->nginxHttpClient->get('.git', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingSvnDirectory() : void { + $response = $this->nginxHttpClient->get('svn', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingCacheDirectory() : void { + $response = $this->nginxHttpClient->get('cache', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingGitDirectory() : void { + $response = $this->apacheHttpClient->get('.git', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingSvnDirectory() : void { + $response = $this->apacheHttpClient->get('svn', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingCacheDirectory() : void { + $response = $this->apacheHttpClient->get('cache', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + +} \ No newline at end of file diff --git a/tests/Feature/Nginx/BlockAccessToSensitiveFilesTest.php b/tests/Feature/Nginx/BlockAccessToSensitiveFilesTest.php new file mode 100644 index 0000000..246f6dc --- /dev/null +++ b/tests/Feature/Nginx/BlockAccessToSensitiveFilesTest.php @@ -0,0 +1,60 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockAccessToSensitiveFiles($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingReadmeFiles() : void { + $response = $this->nginxHttpClient->get('readme.html', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingWpConfigFile() : void { + $response = $this->nginxHttpClient->get('wp-config.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingWpInstallFile() : void { + $response = $this->nginxHttpClient->get('wp-admin/install.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingWpUpgradeFile() : void { + $response = $this->nginxHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingReadmeFiles() : void { + $response = $this->apacheHttpClient->get('readme.html', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingWpConfigFile() : void { + $response = $this->apacheHttpClient->get('wp-config.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingWpInstallFile() : void { + $response = $this->apacheHttpClient->get('wp-admin/install.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingWpUpgradeFile() : void { + $response = $this->apacheHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Nginx/BlockAccessToXmlRpcTest.php b/tests/Feature/Nginx/BlockAccessToXmlRpcTest.php new file mode 100644 index 0000000..a102e4a --- /dev/null +++ b/tests/Feature/Nginx/BlockAccessToXmlRpcTest.php @@ -0,0 +1,30 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockAccessToXmlRpc($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingXmlRpcFile() : void { + $response = $this->nginxHttpClient->get('xmlrpc.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingXmlRpcFile() : void { + $response = $this->apacheHttpClient->get('xmlrpc.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Nginx/BlockAuthorScanningTest.php b/tests/Feature/Nginx/BlockAuthorScanningTest.php new file mode 100644 index 0000000..c9cedb0 --- /dev/null +++ b/tests/Feature/Nginx/BlockAuthorScanningTest.php @@ -0,0 +1,22 @@ +apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { + $response = $this->apacheHttpClient->get('/?author=12', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Nginx/BlockPhpExecutionInPluginsTest.php b/tests/Feature/Nginx/BlockPhpExecutionInPluginsTest.php new file mode 100644 index 0000000..5cea692 --- /dev/null +++ b/tests/Feature/Nginx/BlockPhpExecutionInPluginsTest.php @@ -0,0 +1,30 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInPlugins($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInPlugins() : void { + $response = $this->nginxHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInPlugins() : void { + $response = $this->apacheHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Nginx/BlockPhpExecutionInThemesTest.php b/tests/Feature/Nginx/BlockPhpExecutionInThemesTest.php new file mode 100644 index 0000000..c6ba7dc --- /dev/null +++ b/tests/Feature/Nginx/BlockPhpExecutionInThemesTest.php @@ -0,0 +1,30 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInThemes($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInThemesDirectory() : void { + $response = $this->nginxHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInThemesDirectory() : void { + $response = $this->apacheHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Nginx/BlockPhpExecutionInUploadsTest.php b/tests/Feature/Nginx/BlockPhpExecutionInUploadsTest.php new file mode 100644 index 0000000..db99cde --- /dev/null +++ b/tests/Feature/Nginx/BlockPhpExecutionInUploadsTest.php @@ -0,0 +1,30 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInUploads($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInUploadsDirectory() : void { + $response = $this->nginxHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInUploadsDirectory() : void { + $response = $this->apacheHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file diff --git a/tests/Feature/Nginx/BlockPhpExecutionInWpIncludesTest.php b/tests/Feature/Nginx/BlockPhpExecutionInWpIncludesTest.php new file mode 100644 index 0000000..20ce4c5 --- /dev/null +++ b/tests/Feature/Nginx/BlockPhpExecutionInWpIncludesTest.php @@ -0,0 +1,50 @@ +nginxAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInWpIncludes($this->apacheAssocArgs); + $command->output(); + + exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpIncludesDirectory() : void { + $response = $this->nginxHttpClient->get('wp-includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { + $response = $this->nginxHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { + $response = $this->nginxHttpClient->get('wp-admin/includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { + $response = $this->apacheHttpClient->get('wp-includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { + $response = $this->apacheHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { + $response = $this->apacheHttpClient->get('wp-admin/includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file From a14e4b6e55f89f7c3496ae31751bd1b3804d85ce Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:06:37 +0200 Subject: [PATCH 61/97] feat: Reorg of web server related tests --- .../Feature/Apache/AddSecurityHeadersTest.php | 24 -------- .../Apache/BlockAccessToHtaccessTest.php | 20 ------- .../BlockAccessToSensitiveDirectoriesTest.php | 51 ---------------- .../BlockAccessToSensitiveFilesTest.php | 60 ------------------- .../Apache/BlockAccessToXmlRpcTest.php | 30 ---------- .../Apache/BlockAuthorScanningTest.php | 22 ------- .../Apache/BlockPhpExecutionInPluginsTest.php | 30 ---------- .../Apache/BlockPhpExecutionInThemesTest.php | 30 ---------- .../Apache/BlockPhpExecutionInUploadsTest.php | 30 ---------- .../BlockPhpExecutionInWpIncludesTest.php | 50 ---------------- 10 files changed, 347 deletions(-) delete mode 100644 tests/Feature/Apache/AddSecurityHeadersTest.php delete mode 100644 tests/Feature/Apache/BlockAccessToHtaccessTest.php delete mode 100644 tests/Feature/Apache/BlockAccessToSensitiveDirectoriesTest.php delete mode 100644 tests/Feature/Apache/BlockAccessToSensitiveFilesTest.php delete mode 100644 tests/Feature/Apache/BlockAccessToXmlRpcTest.php delete mode 100644 tests/Feature/Apache/BlockAuthorScanningTest.php delete mode 100644 tests/Feature/Apache/BlockPhpExecutionInPluginsTest.php delete mode 100644 tests/Feature/Apache/BlockPhpExecutionInThemesTest.php delete mode 100644 tests/Feature/Apache/BlockPhpExecutionInUploadsTest.php delete mode 100644 tests/Feature/Apache/BlockPhpExecutionInWpIncludesTest.php diff --git a/tests/Feature/Apache/AddSecurityHeadersTest.php b/tests/Feature/Apache/AddSecurityHeadersTest.php deleted file mode 100644 index a3538e7..0000000 --- a/tests/Feature/Apache/AddSecurityHeadersTest.php +++ /dev/null @@ -1,24 +0,0 @@ -apacheAssocArgs); - $command->output(); - } - - public function testItWillContainAllHeadersOnApache() : void { - $response = $this->apacheHttpClient->get('', ['http_errors' => false]); - - $this->assertNotEmpty($response->getHeaderLine( 'Strict-Transport-Security' )); - $this->assertNotEmpty($response->getHeaderLine( 'Referrer-Policy' )); - $this->assertNotEmpty($response->getHeaderLine( 'x-content-type-options' )); - $this->assertNotEmpty($response->getHeaderLine( 'X-Frame-Options' )); - } -} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAccessToHtaccessTest.php b/tests/Feature/Apache/BlockAccessToHtaccessTest.php deleted file mode 100644 index 1c0fa40..0000000 --- a/tests/Feature/Apache/BlockAccessToHtaccessTest.php +++ /dev/null @@ -1,20 +0,0 @@ -apacheAssocArgs); - $command->output(); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingApacheConfigFile() : void { - $response = $this->apacheHttpClient->get('.htaccess', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAccessToSensitiveDirectoriesTest.php b/tests/Feature/Apache/BlockAccessToSensitiveDirectoriesTest.php deleted file mode 100644 index 1189a18..0000000 --- a/tests/Feature/Apache/BlockAccessToSensitiveDirectoriesTest.php +++ /dev/null @@ -1,51 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockAccessToSensitiveDirectories($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingGitDirectory() : void { - $response = $this->nginxHttpClient->get('.git', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingSvnDirectory() : void { - $response = $this->nginxHttpClient->get('svn', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingCacheDirectory() : void { - $response = $this->nginxHttpClient->get('cache', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingGitDirectory() : void { - $response = $this->apacheHttpClient->get('.git', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingSvnDirectory() : void { - $response = $this->apacheHttpClient->get('svn', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingCacheDirectory() : void { - $response = $this->apacheHttpClient->get('cache', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - -} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAccessToSensitiveFilesTest.php b/tests/Feature/Apache/BlockAccessToSensitiveFilesTest.php deleted file mode 100644 index 246f6dc..0000000 --- a/tests/Feature/Apache/BlockAccessToSensitiveFilesTest.php +++ /dev/null @@ -1,60 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockAccessToSensitiveFiles($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingReadmeFiles() : void { - $response = $this->nginxHttpClient->get('readme.html', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingWpConfigFile() : void { - $response = $this->nginxHttpClient->get('wp-config.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingWpInstallFile() : void { - $response = $this->nginxHttpClient->get('wp-admin/install.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingWpUpgradeFile() : void { - $response = $this->nginxHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingReadmeFiles() : void { - $response = $this->apacheHttpClient->get('readme.html', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingWpConfigFile() : void { - $response = $this->apacheHttpClient->get('wp-config.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingWpInstallFile() : void { - $response = $this->apacheHttpClient->get('wp-admin/install.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingWpUpgradeFile() : void { - $response = $this->apacheHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAccessToXmlRpcTest.php b/tests/Feature/Apache/BlockAccessToXmlRpcTest.php deleted file mode 100644 index a102e4a..0000000 --- a/tests/Feature/Apache/BlockAccessToXmlRpcTest.php +++ /dev/null @@ -1,30 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockAccessToXmlRpc($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingXmlRpcFile() : void { - $response = $this->nginxHttpClient->get('xmlrpc.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingXmlRpcFile() : void { - $response = $this->apacheHttpClient->get('xmlrpc.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockAuthorScanningTest.php b/tests/Feature/Apache/BlockAuthorScanningTest.php deleted file mode 100644 index c9cedb0..0000000 --- a/tests/Feature/Apache/BlockAuthorScanningTest.php +++ /dev/null @@ -1,22 +0,0 @@ -apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { - $response = $this->apacheHttpClient->get('/?author=12', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockPhpExecutionInPluginsTest.php b/tests/Feature/Apache/BlockPhpExecutionInPluginsTest.php deleted file mode 100644 index 5cea692..0000000 --- a/tests/Feature/Apache/BlockPhpExecutionInPluginsTest.php +++ /dev/null @@ -1,30 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockPhpExecutionInPlugins($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInPlugins() : void { - $response = $this->nginxHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInPlugins() : void { - $response = $this->apacheHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockPhpExecutionInThemesTest.php b/tests/Feature/Apache/BlockPhpExecutionInThemesTest.php deleted file mode 100644 index c6ba7dc..0000000 --- a/tests/Feature/Apache/BlockPhpExecutionInThemesTest.php +++ /dev/null @@ -1,30 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockPhpExecutionInThemes($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInThemesDirectory() : void { - $response = $this->nginxHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInThemesDirectory() : void { - $response = $this->apacheHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockPhpExecutionInUploadsTest.php b/tests/Feature/Apache/BlockPhpExecutionInUploadsTest.php deleted file mode 100644 index db99cde..0000000 --- a/tests/Feature/Apache/BlockPhpExecutionInUploadsTest.php +++ /dev/null @@ -1,30 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockPhpExecutionInUploads($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInUploadsDirectory() : void { - $response = $this->nginxHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInUploadsDirectory() : void { - $response = $this->apacheHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file diff --git a/tests/Feature/Apache/BlockPhpExecutionInWpIncludesTest.php b/tests/Feature/Apache/BlockPhpExecutionInWpIncludesTest.php deleted file mode 100644 index 20ce4c5..0000000 --- a/tests/Feature/Apache/BlockPhpExecutionInWpIncludesTest.php +++ /dev/null @@ -1,50 +0,0 @@ -nginxAssocArgs); - $command->output(); - - $command = new BlockPhpExecutionInWpIncludes($this->apacheAssocArgs); - $command->output(); - - exec('cd ' . getcwd() . DIRECTORY_SEPARATOR . $_ENV['WORDPRESS_NGINX_PATH'] . '&& ddev exec nginx -s reload'); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpIncludesDirectory() : void { - $response = $this->nginxHttpClient->get('wp-includes', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { - $response = $this->nginxHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnNginxWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { - $response = $this->nginxHttpClient->get('wp-admin/includes', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { - $response = $this->apacheHttpClient->get('wp-includes', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { - $response = $this->apacheHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } - - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { - $response = $this->apacheHttpClient->get('wp-admin/includes', ['http_errors' => false]); - $this->assertEquals(403, $response->getStatusCode()); - } -} \ No newline at end of file From b4bdd60e0f752c609f3553c310effa918f8f0dca Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:06:57 +0200 Subject: [PATCH 62/97] feat: Migrated all Apache related tests into single test file --- tests/Feature/SecurityRulesApacheTest.php | 185 ++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 tests/Feature/SecurityRulesApacheTest.php diff --git a/tests/Feature/SecurityRulesApacheTest.php b/tests/Feature/SecurityRulesApacheTest.php new file mode 100644 index 0000000..4f0831c --- /dev/null +++ b/tests/Feature/SecurityRulesApacheTest.php @@ -0,0 +1,185 @@ +apacheAssocArgs); + $command->output(); + + $command = new BlockAccessToHtaccess($this->apacheAssocArgs); + $command->output(); + + $command = new BlockAccessToSensitiveDirectories($this->apacheAssocArgs); + $command->output(); + + $command = new BlockAccessToSensitiveFiles($this->apacheAssocArgs); + $command->output(); + + $command = new BlockAccessToXmlRpc($this->apacheAssocArgs); + $command->output(); + + $command = new BlockAuthorScanning($this->apacheAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInPlugins($this->apacheAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInThemes($this->apacheAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInUploads($this->apacheAssocArgs); + $command->output(); + + $command = new BlockPhpExecutionInWpIncludes($this->apacheAssocArgs); + $command->output(); + } + + /** + * @group SecurityHeaders + */ + public function testItWillContainAllHeadersOnApache() : void { + $response = $this->apacheHttpClient->get('', ['http_errors' => false]); + + $this->assertNotEmpty($response->getHeaderLine('Strict-Transport-Security')); + $this->assertNotEmpty($response->getHeaderLine('Referrer-Policy')); + $this->assertNotEmpty($response->getHeaderLine('x-content-type-options')); + $this->assertNotEmpty($response->getHeaderLine('X-Frame-Options')); + } + + /** + * @group Htaccess + */ + public function testItWillReturnHttp403OnApacheWhenAccessingApacheConfigFile() : void { + $response = $this->apacheHttpClient->get('.htaccess', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group SensitiveDirectories + */ + public function testItWillReturnHttp403OnApacheWhenAccessingGitDirectory() : void { + $response = $this->apacheHttpClient->get('.git', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group SensitiveDirectories + */ + public function testItWillReturnHttp403OnApacheWhenAccessingSvnDirectory() : void { + $response = $this->apacheHttpClient->get('svn', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group SensitiveDirectories + */ + public function testItWillReturnHttp403OnApacheWhenAccessingCacheDirectory() : void { + $response = $this->apacheHttpClient->get('cache', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group SensitiveFiles + */ + public function testItWillReturnHttp403OnApacheWhenAccessingReadmeFiles() : void { + $response = $this->apacheHttpClient->get('readme.html', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group SensitiveFiles + */ + public function testItWillReturnHttp403OnApacheWhenAccessingWpConfigFile() : void { + $response = $this->apacheHttpClient->get('wp-config.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group SensitiveFiles + */ + public function testItWillReturnHttp403OnApacheWhenAccessingWpInstallFile() : void { + $response = $this->apacheHttpClient->get('wp-admin/install.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group SensitiveFiles + */ + public function testItWillReturnHttp403OnApacheWhenAccessingWpUpgradeFile() : void { + $response = $this->apacheHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group XmlRpc + */ + public function testItWillReturnHttp403OnApacheWhenAccessingXmlRpcFile() : void { + $response = $this->apacheHttpClient->get('xmlrpc.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group BlockAuthorScanning + */ + public function testItWillReturn403WhenTryingToScanForAuthors() : void { + $response = $this->apacheHttpClient->get('/?author=12', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group PhpInPlugins + */ + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInPlugins() : void { + $response = $this->apacheHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group PhpInThemes + */ + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInThemesDirectory() : void { + $response = $this->apacheHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group PhpInUploads + */ + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInUploadsDirectory() : void { + $response = $this->apacheHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + /** + * @group PhpInWpIncludes + */ + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { + $response = $this->apacheHttpClient->get('wp-includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { + $response = $this->apacheHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } + + public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { + $response = $this->apacheHttpClient->get('wp-admin/includes', ['http_errors' => false]); + $this->assertEquals(403, $response->getStatusCode()); + } +} \ No newline at end of file From 7222a2afb80a4704bb5bf41bef1fbeab7995e2e3 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:47:52 +0200 Subject: [PATCH 63/97] feat: Finished Apache testing pipeline --- .github/workflows/apache.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index e61207a..32c55eb 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -34,18 +34,19 @@ jobs: - uses: actions/checkout@v2 with: path: 'codebase' + - name: Install dependencies run: | cd ${{ github.workspace }}/codebase && composer install + - name: Copy .env files + run: | + cp .env.ci .env + - name: Make .htaccess writebable run: | sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess - - name: Execute one secure command - run: sudo codebase/vendor/bin/wp secure block-php-execution all --file-path=${{ github.workspace }}/wordpress/.htaccess --allow-root - - - name: Debug + - name: Run PHPUnit tests run: | - curl -I http://localhost:8080/wp-content/plugins/index.php - + vendor/bin/phpunit -d memory_limit=1024M --testdox \ No newline at end of file From a08e0d5f878d7def1aef9062b1b8d7a492ddf3a7 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:48:17 +0200 Subject: [PATCH 64/97] feat: Streamlined test method names --- tests/Feature/SecurityRulesApacheTest.php | 30 +++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/Feature/SecurityRulesApacheTest.php b/tests/Feature/SecurityRulesApacheTest.php index 4f0831c..a452f3b 100644 --- a/tests/Feature/SecurityRulesApacheTest.php +++ b/tests/Feature/SecurityRulesApacheTest.php @@ -64,7 +64,7 @@ public function testItWillContainAllHeadersOnApache() : void { /** * @group Htaccess */ - public function testItWillReturnHttp403OnApacheWhenAccessingApacheConfigFile() : void { + public function testItWillReturnHttp403WhenAccessingApacheConfigFile() : void { $response = $this->apacheHttpClient->get('.htaccess', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -72,7 +72,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingApacheConfigFile() : /** * @group SensitiveDirectories */ - public function testItWillReturnHttp403OnApacheWhenAccessingGitDirectory() : void { + public function testItWillReturnHttp403WhenAccessingGitDirectory() : void { $response = $this->apacheHttpClient->get('.git', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -80,7 +80,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingGitDirectory() : voi /** * @group SensitiveDirectories */ - public function testItWillReturnHttp403OnApacheWhenAccessingSvnDirectory() : void { + public function testItWillReturnHttp403WhenAccessingSvnDirectory() : void { $response = $this->apacheHttpClient->get('svn', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -88,7 +88,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingSvnDirectory() : voi /** * @group SensitiveDirectories */ - public function testItWillReturnHttp403OnApacheWhenAccessingCacheDirectory() : void { + public function testItWillReturnHttp403WhenAccessingCacheDirectory() : void { $response = $this->apacheHttpClient->get('cache', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -96,7 +96,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingCacheDirectory() : v /** * @group SensitiveFiles */ - public function testItWillReturnHttp403OnApacheWhenAccessingReadmeFiles() : void { + public function testItWillReturnHttp403WhenAccessingReadmeFiles() : void { $response = $this->apacheHttpClient->get('readme.html', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -104,7 +104,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingReadmeFiles() : void /** * @group SensitiveFiles */ - public function testItWillReturnHttp403OnApacheWhenAccessingWpConfigFile() : void { + public function testItWillReturnHttp403WhenAccessingWpConfigFile() : void { $response = $this->apacheHttpClient->get('wp-config.php', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -112,7 +112,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingWpConfigFile() : voi /** * @group SensitiveFiles */ - public function testItWillReturnHttp403OnApacheWhenAccessingWpInstallFile() : void { + public function testItWillReturnHttp403WhenAccessingWpInstallFile() : void { $response = $this->apacheHttpClient->get('wp-admin/install.php', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -120,7 +120,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingWpInstallFile() : vo /** * @group SensitiveFiles */ - public function testItWillReturnHttp403OnApacheWhenAccessingWpUpgradeFile() : void { + public function testItWillReturnHttp403WhenAccessingWpUpgradeFile() : void { $response = $this->apacheHttpClient->get('wp-admin/upgrade.php', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -128,7 +128,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingWpUpgradeFile() : vo /** * @group XmlRpc */ - public function testItWillReturnHttp403OnApacheWhenAccessingXmlRpcFile() : void { + public function testItWillReturnHttp403WhenAccessingXmlRpcFile() : void { $response = $this->apacheHttpClient->get('xmlrpc.php', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -144,7 +144,7 @@ public function testItWillReturn403WhenTryingToScanForAuthors() : void { /** * @group PhpInPlugins */ - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInPlugins() : void { + public function testItWillReturnHttp403WhenAccessingPhpFilesInPlugins() : void { $response = $this->apacheHttpClient->get('wp-content/plugins/hello.php', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -152,7 +152,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInPlugins() /** * @group PhpInThemes */ - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInThemesDirectory() : void { + public function testItWillReturnHttp403WhenAccessingPhpFilesInThemesDirectory() : void { $response = $this->apacheHttpClient->get('wp-content/themes/index.php', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -160,7 +160,7 @@ public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInThemesDire /** * @group PhpInUploads */ - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInUploadsDirectory() : void { + public function testItWillReturnHttp403WhenAccessingPhpFilesInUploadsDirectory() : void { $response = $this->apacheHttpClient->get('wp-content/uploads/index.php', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } @@ -168,17 +168,17 @@ public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInUploadsDir /** * @group PhpInWpIncludes */ - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesDirectory() : void { + public function testItWillReturnHttp403WhenAccessingPhpFilesInWpIncludesDirectory() : void { $response = $this->apacheHttpClient->get('wp-includes', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { + public function testItWillReturnHttp403WhenAccessingPhpFilesInWpIncludesThemeCompatDirectory() : void { $response = $this->apacheHttpClient->get('wp-includes/theme-compat', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } - public function testItWillReturnHttp403OnApacheWhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { + public function testItWillReturnHttp403WhenAccessingPhpFilesInWpAdminIncludesDirectory() : void { $response = $this->apacheHttpClient->get('wp-admin/includes', ['http_errors' => false]); $this->assertEquals(403, $response->getStatusCode()); } From e89ac55967c87eceb0296110cecfe01b47e61863 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:48:39 +0200 Subject: [PATCH 65/97] feat: Added env file for GHA testing --- .env.ci | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .env.ci diff --git a/.env.ci b/.env.ci new file mode 100644 index 0000000..9d1677a --- /dev/null +++ b/.env.ci @@ -0,0 +1,4 @@ +WORDPRESS_NGINX_PATH=wordpress +WORDPRESS_NGINX_URL=http://localhost:8080 +WORDPRESS_APACHE_PATH=wordpress +WORDPRESS_APACHE_URL=http://localhost:8080 \ No newline at end of file From 80ac695dd1cddf90978112acba9a1b41700dfe09 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:51:00 +0200 Subject: [PATCH 66/97] feat: Fixed incorrect file path --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 32c55eb..4d31304 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -41,7 +41,7 @@ jobs: - name: Copy .env files run: | - cp .env.ci .env + cp ${{ github.workspace }}/codebase/.env.ci ${{ github.workspace }}/codebase/.env - name: Make .htaccess writebable run: | From 5ebb07b94797ad28ab83e7191479b2af33933479 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:52:09 +0200 Subject: [PATCH 67/97] feat: Fixed incorrect file path --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 4d31304..c13a364 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -49,4 +49,4 @@ jobs: - name: Run PHPUnit tests run: | - vendor/bin/phpunit -d memory_limit=1024M --testdox \ No newline at end of file + ${{ github.workspace }}/codebase/vendor/bin/phpunit -d memory_limit=1024M --testdox \ No newline at end of file From b1cfe0b7aaba78cd279a46db91c890ed5900cdfa Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:53:59 +0200 Subject: [PATCH 68/97] feat: Fixed incorrect PHPUnit command --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index c13a364..38f4a40 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -49,4 +49,4 @@ jobs: - name: Run PHPUnit tests run: | - ${{ github.workspace }}/codebase/vendor/bin/phpunit -d memory_limit=1024M --testdox \ No newline at end of file + ${{ github.workspace }}/codebase/vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file From 414e3b535361ed0aa20964c96f5f6110e0068b55 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:55:21 +0200 Subject: [PATCH 69/97] feat: Fixed incorrect PHPUnit command --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 38f4a40..fd2248c 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -49,4 +49,4 @@ jobs: - name: Run PHPUnit tests run: | - ${{ github.workspace }}/codebase/vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file + ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file From 136e09cbf11a5cdbefe6e5213baf771e16de7a0a Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 12:56:43 +0200 Subject: [PATCH 70/97] feat: Fixed incorrect PHPUnit command --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index fd2248c..099af32 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -49,4 +49,4 @@ jobs: - name: Run PHPUnit tests run: | - ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file + cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file From 25d7c76c303541a760aa57348c561433a5098c56 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 13:00:16 +0200 Subject: [PATCH 71/97] fix: Fixed an issue that caused tests to fail --- .github/workflows/apache.yml | 4 ++-- tests/BaseTestCase.php | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 099af32..9bb608b 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -37,11 +37,11 @@ jobs: - name: Install dependencies run: | - cd ${{ github.workspace }}/codebase && composer install + cd ${{ github.workspace }}/codebase && composer install && composer dump-autoload - name: Copy .env files run: | - cp ${{ github.workspace }}/codebase/.env.ci ${{ github.workspace }}/codebase/.env + cp -rf ${{ github.workspace }}/codebase/.env.ci ${{ github.workspace }}/codebase/.env - name: Make .htaccess writebable run: | diff --git a/tests/BaseTestCase.php b/tests/BaseTestCase.php index ed78cf3..3a7bd5a 100644 --- a/tests/BaseTestCase.php +++ b/tests/BaseTestCase.php @@ -2,6 +2,7 @@ namespace Tests; +use Dotenv\Dotenv; use GuzzleHttp\Client; use org\bovigo\vfs\vfsStream; use org\bovigo\vfs\vfsStreamDirectory; @@ -77,7 +78,7 @@ public function setUp(): void { /** * Configuration for nginx and apache testing */ - $this->env = \Dotenv\Dotenv::createImmutable(dirname(__DIR__)); + $this->env = Dotenv::createImmutable(dirname(__DIR__)); $this->env->load(); $this->setupEnvironmentForApacheTests(); From 0d5e55d715ca664fea6d3f48430ead482b567376 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 13:02:59 +0200 Subject: [PATCH 72/97] feat: Removed lock file --- composer.lock | 5188 ------------------------------------------------- 1 file changed, 5188 deletions(-) delete mode 100644 composer.lock diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 7f1ae24..0000000 --- a/composer.lock +++ /dev/null @@ -1,5188 +0,0 @@ -{ - "_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": "47051828cac6df1d36457ba81835b340", - "packages": [ - { - "name": "mustache/mustache", - "version": "v2.14.1", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/mustache.php.git", - "reference": "579ffa5c96e1d292c060b3dd62811ff01ad8c24e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/579ffa5c96e1d292c060b3dd62811ff01ad8c24e", - "reference": "579ffa5c96e1d292c060b3dd62811ff01ad8c24e", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~1.11", - "phpunit/phpunit": "~3.7|~4.0|~5.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Mustache": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "A Mustache implementation in PHP.", - "homepage": "https://github.com/bobthecow/mustache.php", - "keywords": [ - "mustache", - "templating" - ], - "support": { - "issues": "https://github.com/bobthecow/mustache.php/issues", - "source": "https://github.com/bobthecow/mustache.php/tree/v2.14.1" - }, - "time": "2022-01-21T06:08:36+00:00" - }, - { - "name": "rmccue/requests", - "version": "v1.8.1", - "source": { - "type": "git", - "url": "https://github.com/WordPress/Requests.git", - "reference": "82e6936366eac3af4d836c18b9d8c31028fe4cd5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/WordPress/Requests/zipball/82e6936366eac3af4d836c18b9d8c31028fe4cd5", - "reference": "82e6936366eac3af4d836c18b9d8c31028fe4cd5", - "shasum": "" - }, - "require": { - "php": ">=5.2" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7", - "php-parallel-lint/php-console-highlighter": "^0.5.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcompatibility/php-compatibility": "^9.0", - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5", - "requests/test-server": "dev-master", - "squizlabs/php_codesniffer": "^3.5", - "wp-coding-standards/wpcs": "^2.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Requests": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Ryan McCue", - "homepage": "http://ryanmccue.info" - } - ], - "description": "A HTTP library written in PHP, for human beings.", - "homepage": "http://github.com/WordPress/Requests", - "keywords": [ - "curl", - "fsockopen", - "http", - "idna", - "ipv6", - "iri", - "sockets" - ], - "support": { - "issues": "https://github.com/WordPress/Requests/issues", - "source": "https://github.com/WordPress/Requests/tree/v1.8.1" - }, - "time": "2021-06-04T09:56:25+00:00" - }, - { - "name": "symfony/finder", - "version": "v6.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8661b74dbabc23223f38c9b99d3f8ade71170430", - "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430", - "shasum": "" - }, - "require": { - "php": ">=8.0.2" - }, - "type": "library", - "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": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v6.0.3" - }, - "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": "2022-01-26T17:23:29+00:00" - }, - { - "name": "wp-cli/mustangostang-spyc", - "version": "0.6.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/spyc.git", - "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/spyc/zipball/6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7", - "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7", - "shasum": "" - }, - "require": { - "php": ">=5.3.1" - }, - "require-dev": { - "phpunit/phpunit": "4.3.*@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.5.x-dev" - } - }, - "autoload": { - "files": [ - "includes/functions.php" - ], - "psr-4": { - "Mustangostang\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "mustangostang", - "email": "vlad.andersen@gmail.com" - } - ], - "description": "A simple YAML loader/dumper class for PHP (WP-CLI fork)", - "homepage": "https://github.com/mustangostang/spyc/", - "support": { - "source": "https://github.com/wp-cli/spyc/tree/autoload" - }, - "time": "2017-04-25T11:26:20+00:00" - }, - { - "name": "wp-cli/php-cli-tools", - "version": "v0.11.13", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/php-cli-tools.git", - "reference": "a2866855ac1abc53005c102e901553ad5772dc04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/a2866855ac1abc53005c102e901553ad5772dc04", - "reference": "a2866855ac1abc53005c102e901553ad5772dc04", - "shasum": "" - }, - "require": { - "php": ">= 5.3.0" - }, - "type": "library", - "autoload": { - "files": [ - "lib/cli/cli.php" - ], - "psr-0": { - "cli": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@handbuilt.co", - "role": "Maintainer" - }, - { - "name": "James Logsdon", - "email": "jlogsdon@php.net", - "role": "Developer" - } - ], - "description": "Console utilities for PHP", - "homepage": "http://github.com/wp-cli/php-cli-tools", - "keywords": [ - "cli", - "console" - ], - "support": { - "issues": "https://github.com/wp-cli/php-cli-tools/issues", - "source": "https://github.com/wp-cli/php-cli-tools/tree/v0.11.13" - }, - "time": "2021-07-01T15:08:16+00:00" - }, - { - "name": "wp-cli/wp-cli", - "version": "v2.6.0", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/wp-cli.git", - "reference": "dee13c2baf6bf972484a63f8b8dab48f7220f095" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/dee13c2baf6bf972484a63f8b8dab48f7220f095", - "reference": "dee13c2baf6bf972484a63f8b8dab48f7220f095", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "mustache/mustache": "^2.14.1", - "php": "^5.6 || ^7.0 || ^8.0", - "rmccue/requests": "^1.8", - "symfony/finder": ">2.7", - "wp-cli/mustangostang-spyc": "^0.6.3", - "wp-cli/php-cli-tools": "~0.11.2" - }, - "require-dev": { - "roave/security-advisories": "dev-latest", - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/entity-command": "^1.2 || ^2", - "wp-cli/extension-command": "^1.1 || ^2", - "wp-cli/package-command": "^1 || ^2", - "wp-cli/wp-cli-tests": "^3.1.3" - }, - "suggest": { - "ext-readline": "Include for a better --prompt implementation", - "ext-zip": "Needed to support extraction of ZIP archives when doing downloads or updates" - }, - "bin": [ - "bin/wp", - "bin/wp.bat" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "WP_CLI\\": "php/" - }, - "classmap": [ - "php/class-wp-cli.php", - "php/class-wp-cli-command.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "WP-CLI framework", - "homepage": "https://wp-cli.org", - "keywords": [ - "cli", - "wordpress" - ], - "support": { - "docs": "https://make.wordpress.org/cli/handbook/", - "issues": "https://github.com/wp-cli/wp-cli/issues", - "source": "https://github.com/wp-cli/wp-cli" - }, - "time": "2022-01-25T16:31:27+00:00" - } - ], - "packages-dev": [ - { - "name": "behat/behat", - "version": "v3.10.0", - "source": { - "type": "git", - "url": "https://github.com/Behat/Behat.git", - "reference": "a55661154079cf881ef643b303bfaf67bae3a09f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/a55661154079cf881ef643b303bfaf67bae3a09f", - "reference": "a55661154079cf881ef643b303bfaf67bae3a09f", - "shasum": "" - }, - "require": { - "behat/gherkin": "^4.9.0", - "behat/transliterator": "^1.2", - "ext-mbstring": "*", - "php": "^7.2 || ^8.0", - "psr/container": "^1.0", - "symfony/config": "^4.4 || ^5.0 || ^6.0", - "symfony/console": "^4.4 || ^5.0 || ^6.0", - "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", - "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", - "symfony/translation": "^4.4 || ^5.0 || ^6.0", - "symfony/yaml": "^4.4 || ^5.0 || ^6.0" - }, - "require-dev": { - "container-interop/container-interop": "^1.2", - "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "^8.5 || ^9.0", - "symfony/process": "^4.4 || ^5.0 || ^6.0", - "vimeo/psalm": "^4.8" - }, - "suggest": { - "ext-dom": "Needed to output test results in JUnit format." - }, - "bin": [ - "bin/behat" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Behat\\Hook\\": "src/Behat/Hook/", - "Behat\\Step\\": "src/Behat/Step/", - "Behat\\Behat\\": "src/Behat/Behat/", - "Behat\\Testwork\\": "src/Behat/Testwork/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Scenario-oriented BDD framework for PHP", - "homepage": "http://behat.org/", - "keywords": [ - "Agile", - "BDD", - "ScenarioBDD", - "Scrum", - "StoryBDD", - "User story", - "business", - "development", - "documentation", - "examples", - "symfony", - "testing" - ], - "support": { - "issues": "https://github.com/Behat/Behat/issues", - "source": "https://github.com/Behat/Behat/tree/v3.10.0" - }, - "time": "2021-11-02T20:09:40+00:00" - }, - { - "name": "behat/gherkin", - "version": "v4.9.0", - "source": { - "type": "git", - "url": "https://github.com/Behat/Gherkin.git", - "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", - "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", - "shasum": "" - }, - "require": { - "php": "~7.2|~8.0" - }, - "require-dev": { - "cucumber/cucumber": "dev-gherkin-22.0.0", - "phpunit/phpunit": "~8|~9", - "symfony/yaml": "~3|~4|~5" - }, - "suggest": { - "symfony/yaml": "If you want to parse features, represented in YAML files" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - } - ], - "description": "Gherkin DSL parser for PHP", - "homepage": "http://behat.org/", - "keywords": [ - "BDD", - "Behat", - "Cucumber", - "DSL", - "gherkin", - "parser" - ], - "support": { - "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" - }, - "time": "2021-10-12T13:05:09+00:00" - }, - { - "name": "behat/transliterator", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/Behat/Transliterator.git", - "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Transliterator/zipball/3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", - "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "chuyskywalker/rolling-curl": "^3.1", - "php-yaoi/php-yaoi": "^1.0", - "phpunit/phpunit": "^4.8.36|^6.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Behat\\Transliterator\\": "src/Behat/Transliterator" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Artistic-1.0" - ], - "description": "String transliterator", - "keywords": [ - "i18n", - "slug", - "transliterator" - ], - "support": { - "issues": "https://github.com/Behat/Transliterator/issues", - "source": "https://github.com/Behat/Transliterator/tree/v1.3.0" - }, - "time": "2020-01-14T16:39:13+00:00" - }, - { - "name": "composer/semver", - "version": "3.2.9", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/a951f614bd64dcd26137bc9b7b2637ddcfc57649", - "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "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" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.9" - }, - "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": "2022-02-04T13:58:43+00:00" - }, - { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.2", - "source": { - "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" - }, - "require-dev": { - "composer/composer": "*", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" - }, - "autoload": { - "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" - }, - { - "name": "Contributors", - "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", - "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcbf", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" - ], - "support": { - "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" - }, - "time": "2022-02-04T12:51:07+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" - }, - "type": "library", - "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": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-03-03T08:28:38+00:00" - }, - { - "name": "mikey179/vfsstream", - "version": "v1.6.10", - "source": { - "type": "git", - "url": "https://github.com/bovigo/vfsStream.git", - "reference": "250c0825537d501e327df879fb3d4cd751933b85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/250c0825537d501e327df879fb3d4cd751933b85", - "reference": "250c0825537d501e327df879fb3d4cd751933b85", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "org\\bovigo\\vfs\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" - } - ], - "description": "Virtual file system to mock the real file system in unit tests.", - "homepage": "http://vfs.bovigo.org/", - "support": { - "issues": "https://github.com/bovigo/vfsStream/issues", - "source": "https://github.com/bovigo/vfsStream/tree/master", - "wiki": "https://github.com/bovigo/vfsStream/wiki" - }, - "time": "2021-09-25T08:05:01+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2022-03-03T13:19:32+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.13.2", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" - }, - "time": "2021-11-30T19:35:32+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "php-parallel-lint/php-console-color", - "version": "v0.3", - "source": { - "type": "git", - "url": "https://github.com/php-parallel-lint/PHP-Console-Color.git", - "reference": "b6af326b2088f1ad3b264696c9fd590ec395b49e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-parallel-lint/PHP-Console-Color/zipball/b6af326b2088f1ad3b264696c9fd590ec395b49e", - "reference": "b6af326b2088f1ad3b264696c9fd590ec395b49e", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "replace": { - "jakub-onderka/php-console-color": "*" - }, - "require-dev": { - "php-parallel-lint/php-code-style": "1.0", - "php-parallel-lint/php-parallel-lint": "1.0", - "php-parallel-lint/php-var-dump-check": "0.*", - "phpunit/phpunit": "~4.3", - "squizlabs/php_codesniffer": "1.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleColor\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com" - } - ], - "support": { - "issues": "https://github.com/php-parallel-lint/PHP-Console-Color/issues", - "source": "https://github.com/php-parallel-lint/PHP-Console-Color/tree/master" - }, - "time": "2020-05-14T05:47:14+00:00" - }, - { - "name": "php-parallel-lint/php-console-highlighter", - "version": "v0.5", - "source": { - "type": "git", - "url": "https://github.com/php-parallel-lint/PHP-Console-Highlighter.git", - "reference": "21bf002f077b177f056d8cb455c5ed573adfdbb8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-parallel-lint/PHP-Console-Highlighter/zipball/21bf002f077b177f056d8cb455c5ed573adfdbb8", - "reference": "21bf002f077b177f056d8cb455c5ed573adfdbb8", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.4.0", - "php-parallel-lint/php-console-color": "~0.2" - }, - "replace": { - "jakub-onderka/php-console-highlighter": "*" - }, - "require-dev": { - "php-parallel-lint/php-code-style": "~1.0", - "php-parallel-lint/php-parallel-lint": "~1.0", - "php-parallel-lint/php-var-dump-check": "~0.1", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleHighlighter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "acci@acci.cz", - "homepage": "http://www.acci.cz/" - } - ], - "description": "Highlight PHP code in terminal", - "support": { - "issues": "https://github.com/php-parallel-lint/PHP-Console-Highlighter/issues", - "source": "https://github.com/php-parallel-lint/PHP-Console-Highlighter/tree/master" - }, - "time": "2020-05-13T07:37:49+00:00" - }, - { - "name": "php-parallel-lint/php-parallel-lint", - "version": "v1.3.2", - "source": { - "type": "git", - "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6483c9832e71973ed29cf71bd6b3f4fde438a9de", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=5.3.0" - }, - "replace": { - "grogy/php-parallel-lint": "*", - "jakub-onderka/php-parallel-lint": "*" - }, - "require-dev": { - "nette/tester": "^1.3 || ^2.0", - "php-parallel-lint/php-console-highlighter": "0.* || ^1.0", - "squizlabs/php_codesniffer": "^3.6" - }, - "suggest": { - "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet" - }, - "bin": [ - "parallel-lint" - ], - "type": "library", - "autoload": { - "classmap": [ - "./src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "ahoj@jakubonderka.cz" - } - ], - "description": "This tool check syntax of PHP files about 20x faster than serial check.", - "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", - "support": { - "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", - "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.2" - }, - "time": "2022-02-21T12:50:22+00:00" - }, - { - "name": "phpcompatibility/php-compatibility", - "version": "9.3.5", - "source": { - "type": "git", - "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", - "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" - }, - "conflict": { - "squizlabs/php_codesniffer": "2.6.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" - }, - "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", - "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." - }, - "type": "phpcodesniffer-standard", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Wim Godden", - "homepage": "https://github.com/wimg", - "role": "lead" - }, - { - "name": "Juliette Reinders Folmer", - "homepage": "https://github.com/jrfnl", - "role": "lead" - }, - { - "name": "Contributors", - "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" - } - ], - "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", - "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", - "keywords": [ - "compatibility", - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", - "source": "https://github.com/PHPCompatibility/PHPCompatibility" - }, - "time": "2019-12-27T09:44:58+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" - }, - "time": "2022-01-04T19:58:01+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "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" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.15", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-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": "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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-03-07T09:28:20+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-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": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-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": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-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": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-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": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.18", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "1b5856028273bfd855e60a887278857d872ec67a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1b5856028273bfd855e60a887278857d872ec67a", - "reference": "1b5856028273bfd855e60a887278857d872ec67a", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.18" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-03-08T06:52:28+00:00" - }, - { - "name": "psr/container", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://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" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" - }, - "time": "2021-11-05T16:50:12+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-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": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-11-11T14:18:36+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-02-14T08:28:10+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-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": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-15T12:49:02+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-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": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.6.2", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", - "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2021-12-12T21:44:58+00:00" - }, - { - "name": "symfony/config", - "version": "v6.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "c14f32ae4cd2a3c29d8825c5093463ac08ade7d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/c14f32ae4cd2a3c29d8825c5093463ac08ade7d8", - "reference": "c14f32ae4cd2a3c29d8825c5093463ac08ade7d8", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/filesystem": "^5.4|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php81": "^1.22" - }, - "conflict": { - "symfony/finder": "<4.4" - }, - "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/messenger": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "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": "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/v6.0.3" - }, - "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": "2022-01-03T09:53:43+00:00" - }, - { - "name": "symfony/console", - "version": "v6.0.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "3bebf4108b9e07492a2a4057d207aa5a77d146b1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3bebf4108b9e07492a2a4057d207aa5a77d146b1", - "reference": "3bebf4108b9e07492a2a4057d207aa5a77d146b1", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "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": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v6.0.5" - }, - "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": "2022-02-25T10:48:52+00:00" - }, - { - "name": "symfony/dependency-injection", - "version": "v6.0.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "a296611f599d0b28e7af88798f830f9cb4d1e8e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/a296611f599d0b28e7af88798f830f9cb4d1e8e6", - "reference": "a296611f599d0b28e7af88798f830f9cb4d1e8e6", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php81": "^1.22", - "symfony/service-contracts": "^1.1.6|^2.0|^3.0" - }, - "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<5.4", - "symfony/finder": "<5.4", - "symfony/proxy-manager-bridge": "<5.4", - "symfony/yaml": "<5.4" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "symfony/service-implementation": "1.1|2.0|3.0" - }, - "require-dev": { - "symfony/config": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "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": "Allows you to standardize and centralize the way objects are constructed in your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.0.6" - }, - "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": "2022-03-02T12:58:14+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.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": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" - }, - "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": "2021-07-12T14:48:14+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v6.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934", - "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/event-dispatcher-contracts": "^2|^3" - }, - "conflict": { - "symfony/dependency-injection": "<5.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "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": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.3" - }, - "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": "2022-01-02T09:55:41+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "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 dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0" - }, - "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": "2021-07-15T12:33:35+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v6.0.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "52b888523545b0b4049ab9ce48766802484d7046" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/52b888523545b0b4049ab9ce48766802484d7046", - "reference": "52b888523545b0b4049ab9ce48766802484d7046", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "type": "library", - "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": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.6" - }, - "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": "2022-03-02T12:58:14+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.25.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "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" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" - }, - "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": "2021-10-20T20:35:02+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.25.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "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" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" - }, - "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": "2021-11-23T21:10:46+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.25.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "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" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" - }, - "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": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "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" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" - }, - "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": "2021-11-30T18:21:41+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.25.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "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 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" - }, - "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": "2021-09-13T13:58:11+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-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" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" - }, - "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": "2021-11-04T16:48:04+00:00" - }, - { - "name": "symfony/string", - "version": "v6.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", - "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.0" - }, - "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v6.0.3" - }, - "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": "2022-01-02T09:55:41+00:00" - }, - { - "name": "symfony/translation", - "version": "v6.0.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "f6639cb9b5e0c57fe31e3263b900a77eedb0c908" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f6639cb9b5e0c57fe31e3263b900a77eedb0c908", - "reference": "f6639cb9b5e0c57fe31e3263b900a77eedb0c908", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" - }, - "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "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": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.6" - }, - "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": "2022-03-02T12:58:14+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", - "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", - "shasum": "" - }, - "require": { - "php": ">=8.0.2" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - } - }, - "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 translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0" - }, - "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": "2021-09-07T12:43:40+00:00" - }, - { - "name": "symfony/yaml", - "version": "v6.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "e77f3ea0b21141d771d4a5655faa54f692b34af5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e77f3ea0b21141d771d4a5655faa54f692b34af5", - "reference": "e77f3ea0b21141d771d4a5655faa54f692b34af5", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "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": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v6.0.3" - }, - "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": "2022-01-26T17:23:29+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" - }, - { - "name": "wp-cli/config-command", - "version": "v2.1.3", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/config-command.git", - "reference": "cdabbc47dae464a93b10361b9a18e84cf4e72fe2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/config-command/zipball/cdabbc47dae464a93b10361b9a18e84cf4e72fe2", - "reference": "cdabbc47dae464a93b10361b9a18e84cf4e72fe2", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2.5", - "wp-cli/wp-config-transformer": "^1.2.1" - }, - "require-dev": { - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/wp-cli-tests": "^3.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - }, - "bundled": true, - "commands": [ - "config", - "config edit", - "config delete", - "config create", - "config get", - "config has", - "config list", - "config path", - "config set", - "config shuffle-salts" - ] - }, - "autoload": { - "files": [ - "config-command.php" - ], - "psr-4": { - "": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - }, - { - "name": "Alain Schlesser", - "email": "alain.schlesser@gmail.com", - "homepage": "https://www.alainschlesser.com" - } - ], - "description": "Generates and reads the wp-config.php file.", - "homepage": "https://github.com/wp-cli/config-command", - "support": { - "issues": "https://github.com/wp-cli/config-command/issues", - "source": "https://github.com/wp-cli/config-command/tree/v2.1.3" - }, - "time": "2022-01-13T01:09:44+00:00" - }, - { - "name": "wp-cli/core-command", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/core-command.git", - "reference": "a75d052ea000b4f0ec14106c110836b376e95a4f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/core-command/zipball/a75d052ea000b4f0ec14106c110836b376e95a4f", - "reference": "a75d052ea000b4f0ec14106c110836b376e95a4f", - "shasum": "" - }, - "require": { - "composer/semver": "^1.4 || ^2 || ^3", - "wp-cli/wp-cli": "^2.5.1" - }, - "require-dev": { - "wp-cli/checksum-command": "^1 || ^2", - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/entity-command": "^1.3 || ^2", - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/wp-cli-tests": "^3.1.4" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "core", - "core check-update", - "core download", - "core install", - "core is-installed", - "core multisite-convert", - "core multisite-install", - "core update", - "core update-db", - "core version" - ] - }, - "autoload": { - "files": [ - "core-command.php" - ], - "psr-4": { - "": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Downloads, installs, updates, and manages a WordPress installation.", - "homepage": "https://github.com/wp-cli/core-command", - "support": { - "issues": "https://github.com/wp-cli/core-command/issues", - "source": "https://github.com/wp-cli/core-command/tree/v2.1.1" - }, - "time": "2022-01-21T21:29:11+00:00" - }, - { - "name": "wp-cli/entity-command", - "version": "v2.2.1", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/entity-command.git", - "reference": "d7d08b05c67651abde5d570851e46498a164cb34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/entity-command/zipball/d7d08b05c67651abde5d570851e46498a164cb34", - "reference": "d7d08b05c67651abde5d570851e46498a164cb34", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2.5" - }, - "require-dev": { - "wp-cli/cache-command": "^1 || ^2", - "wp-cli/db-command": "^1.3 || ^2", - "wp-cli/extension-command": "^1.2 || ^2", - "wp-cli/media-command": "^1.1 || ^2", - "wp-cli/super-admin-command": "^1 || ^2", - "wp-cli/wp-cli-tests": "^3.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "bundled": true, - "commands": [ - "comment", - "comment approve", - "comment count", - "comment create", - "comment delete", - "comment exists", - "comment generate", - "comment get", - "comment list", - "comment meta", - "comment meta add", - "comment meta delete", - "comment meta get", - "comment meta list", - "comment meta patch", - "comment meta pluck", - "comment meta update", - "comment recount", - "comment spam", - "comment status", - "comment trash", - "comment unapprove", - "comment unspam", - "comment untrash", - "comment update", - "menu", - "menu create", - "menu delete", - "menu item", - "menu item add-custom", - "menu item add-post", - "menu item add-term", - "menu item delete", - "menu item list", - "menu item update", - "menu list", - "menu location", - "menu location assign", - "menu location list", - "menu location remove", - "network meta", - "network meta add", - "network meta delete", - "network meta get", - "network meta list", - "network meta patch", - "network meta pluck", - "network meta update", - "option", - "option add", - "option delete", - "option get", - "option list", - "option patch", - "option pluck", - "option update", - "post", - "post create", - "post delete", - "post edit", - "post exists", - "post generate", - "post get", - "post list", - "post meta", - "post meta add", - "post meta delete", - "post meta get", - "post meta list", - "post meta patch", - "post meta pluck", - "post meta update", - "post term", - "post term add", - "post term list", - "post term remove", - "post term set", - "post update", - "post-type", - "post-type get", - "post-type list", - "site", - "site activate", - "site archive", - "site create", - "site deactivate", - "site delete", - "site empty", - "site list", - "site mature", - "site option", - "site private", - "site public", - "site spam", - "site unarchive", - "site unmature", - "site unspam", - "taxonomy", - "taxonomy get", - "taxonomy list", - "term", - "term create", - "term delete", - "term generate", - "term get", - "term list", - "term meta", - "term meta add", - "term meta delete", - "term meta get", - "term meta list", - "term meta patch", - "term meta pluck", - "term meta update", - "term recount", - "term update", - "user", - "user add-cap", - "user add-role", - "user create", - "user delete", - "user generate", - "user get", - "user import-csv", - "user list", - "user list-caps", - "user meta", - "user meta add", - "user meta delete", - "user meta get", - "user meta list", - "user meta patch", - "user meta pluck", - "user meta update", - "user remove-cap", - "user remove-role", - "user reset-password", - "user session", - "user session destroy", - "user session list", - "user set-role", - "user spam", - "user term", - "user term add", - "user term list", - "user term remove", - "user term set", - "user unspam", - "user update" - ] - }, - "autoload": { - "files": [ - "entity-command.php" - ], - "psr-4": { - "": "src/", - "WP_CLI\\": "src/WP_CLI" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Manage WordPress comments, menus, options, posts, sites, terms, and users.", - "homepage": "https://github.com/wp-cli/entity-command", - "support": { - "issues": "https://github.com/wp-cli/entity-command/issues", - "source": "https://github.com/wp-cli/entity-command/tree/v2.2.1" - }, - "time": "2022-01-24T20:49:29+00:00" - }, - { - "name": "wp-cli/eval-command", - "version": "v2.1.2", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/eval-command.git", - "reference": "5213040ec2167b2748f2689ff6fe24b92a064a90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/5213040ec2167b2748f2689ff6fe24b92a064a90", - "reference": "5213040ec2167b2748f2689ff6fe24b92a064a90", - "shasum": "" - }, - "require": { - "wp-cli/wp-cli": "^2.5" - }, - "require-dev": { - "wp-cli/wp-cli-tests": "^3.1" - }, - "type": "wp-cli-package", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - }, - "bundled": true, - "commands": [ - "eval", - "eval-file" - ] - }, - "autoload": { - "files": [ - "eval-command.php" - ], - "psr-4": { - "": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Bachhuber", - "email": "daniel@runcommand.io", - "homepage": "https://runcommand.io" - } - ], - "description": "Executes arbitrary PHP code or files.", - "homepage": "https://github.com/wp-cli/eval-command", - "support": { - "issues": "https://github.com/wp-cli/eval-command/issues", - "source": "https://github.com/wp-cli/eval-command/tree/v2.1.2" - }, - "time": "2022-01-13T01:19:34+00:00" - }, - { - "name": "wp-cli/wp-cli-tests", - "version": "v3.1.4", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/wp-cli-tests.git", - "reference": "38d858d2da258b140f56e391f7dbf6f90b50a8cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/wp-cli-tests/zipball/38d858d2da258b140f56e391f7dbf6f90b50a8cd", - "reference": "38d858d2da258b140f56e391f7dbf6f90b50a8cd", - "shasum": "" - }, - "require": { - "behat/behat": "^3.7", - "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3 || ^0.5 || ^0.6.2 || ^0.7.1", - "php": ">=5.6", - "php-parallel-lint/php-console-highlighter": "^0.5", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.3.5", - "wp-cli/config-command": "^1 || ^2", - "wp-cli/core-command": "^1 || ^2", - "wp-cli/eval-command": "^1 || ^2", - "wp-cli/wp-cli": "^2.5.1", - "wp-coding-standards/wpcs": "^2.3.0", - "yoast/phpunit-polyfills": "^1.0.3" - }, - "require-dev": { - "roave/security-advisories": "dev-latest" - }, - "bin": [ - "bin/install-package-tests", - "bin/rerun-behat-tests", - "bin/run-behat-tests", - "bin/run-linter-tests", - "bin/run-php-unit-tests", - "bin/run-phpcs-tests" - ], - "type": "phpcodesniffer-standard", - "extra": { - "branch-alias": { - "dev-main": "3.0.x-dev" - }, - "readme": { - "sections": [ - "Using", - "Contributing", - "Support" - ], - "using": { - "body": ".readme-partials/USING.md" - }, - "show_powered_by": false - } - }, - "autoload": { - "psr-4": { - "WP_CLI\\Tests\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "WP-CLI testing framework", - "homepage": "https://wp-cli.org", - "keywords": [ - "cli", - "wordpress" - ], - "support": { - "docs": "https://make.wordpress.org/cli/handbook/", - "issues": "https://github.com/wp-cli/wp-cli-tests/issues", - "source": "https://github.com/wp-cli/wp-cli-tests" - }, - "time": "2022-01-12T00:39:03+00:00" - }, - { - "name": "wp-cli/wp-config-transformer", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/wp-cli/wp-config-transformer.git", - "reference": "2e90eefc6b8f5166f53aa5414fd8f1a572164ef1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-cli/wp-config-transformer/zipball/2e90eefc6b8f5166f53aa5414fd8f1a572164ef1", - "reference": "2e90eefc6b8f5166f53aa5414fd8f1a572164ef1", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "wp-cli/wp-cli-tests": "^3.1" - }, - "type": "library", - "autoload": { - "files": [ - "src/WPConfigTransformer.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frankie Jarrett", - "email": "fjarrett@gmail.com" - } - ], - "description": "Programmatically edit a wp-config.php file.", - "homepage": "https://github.com/wp-cli/wp-config-transformer", - "support": { - "issues": "https://github.com/wp-cli/wp-config-transformer/issues", - "source": "https://github.com/wp-cli/wp-config-transformer/tree/v1.3.0" - }, - "time": "2022-01-10T18:37:52+00:00" - }, - { - "name": "wp-coding-standards/wpcs", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", - "reference": "7da1894633f168fe244afc6de00d141f27517b62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", - "reference": "7da1894633f168fe244afc6de00d141f27517b62", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "squizlabs/php_codesniffer": "^3.3.1" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", - "phpcompatibility/php-compatibility": "^9.0", - "phpcsstandards/phpcsdevtools": "^1.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." - }, - "type": "phpcodesniffer-standard", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Contributors", - "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", - "keywords": [ - "phpcs", - "standards", - "wordpress" - ], - "support": { - "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues", - "source": "https://github.com/WordPress/WordPress-Coding-Standards", - "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" - }, - "time": "2020-05-13T23:57:56+00:00" - }, - { - "name": "yoast/phpunit-polyfills", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "5ea3536428944955f969bc764bbe09738e151ada" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/5ea3536428944955f969bc764bbe09738e151ada", - "reference": "5ea3536428944955f969bc764bbe09738e151ada", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "require-dev": { - "yoast/yoastcs": "^2.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev", - "dev-develop": "1.x-dev" - } - }, - "autoload": { - "files": [ - "phpunitpolyfills-autoload.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Team Yoast", - "email": "support@yoast.com", - "homepage": "https://yoast.com" - }, - { - "name": "Contributors", - "homepage": "https://github.com/Yoast/PHPUnit-Polyfills/graphs/contributors" - } - ], - "description": "Set of polyfills for changed PHPUnit functionality to allow for creating PHPUnit cross-version compatible tests", - "homepage": "https://github.com/Yoast/PHPUnit-Polyfills", - "keywords": [ - "phpunit", - "polyfill", - "testing" - ], - "support": { - "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", - "source": "https://github.com/Yoast/PHPUnit-Polyfills" - }, - "time": "2021-11-23T01:37:03+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "2.1.0" -} From 3c6bc0920d039fc9e077e71c3878b2ed605ff53a Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 13:07:19 +0200 Subject: [PATCH 73/97] feat: Updated env variables --- .env.ci | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.ci b/.env.ci index 9d1677a..711c35c 100644 --- a/.env.ci +++ b/.env.ci @@ -1,4 +1,4 @@ -WORDPRESS_NGINX_PATH=wordpress +WORDPRESS_NGINX_PATH="${{ github.workspace }}/wordpress" WORDPRESS_NGINX_URL=http://localhost:8080 -WORDPRESS_APACHE_PATH=wordpress +WORDPRESS_APACHE_PATH="${{ github.workspace }}/wordpress" WORDPRESS_APACHE_URL=http://localhost:8080 \ No newline at end of file From 03f559f12f77c45c6a85e39e167cc6f35dc20e72 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 13:08:32 +0200 Subject: [PATCH 74/97] feat: Updated env variables --- .env.ci | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.ci b/.env.ci index 711c35c..ca12804 100644 --- a/.env.ci +++ b/.env.ci @@ -1,4 +1,4 @@ -WORDPRESS_NGINX_PATH="${{ github.workspace }}/wordpress" +WORDPRESS_NGINX_PATH=/home/runner/work/wp-cli-secure-command/wp-cli-secure-command/wordpress WORDPRESS_NGINX_URL=http://localhost:8080 -WORDPRESS_APACHE_PATH="${{ github.workspace }}/wordpress" +WORDPRESS_APACHE_PATH=/home/runner/work/wp-cli-secure-command/wp-cli-secure-command/wordpress WORDPRESS_APACHE_URL=http://localhost:8080 \ No newline at end of file From cabc9897023e00e14dc737ec19a65799e8545db6 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 13:13:04 +0200 Subject: [PATCH 75/97] feat: Updated env variables --- .env.ci | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.ci b/.env.ci index ca12804..a363396 100644 --- a/.env.ci +++ b/.env.ci @@ -1,4 +1,4 @@ -WORDPRESS_NGINX_PATH=/home/runner/work/wp-cli-secure-command/wp-cli-secure-command/wordpress +WORDPRESS_NGINX_PATH=../wordpress WORDPRESS_NGINX_URL=http://localhost:8080 -WORDPRESS_APACHE_PATH=/home/runner/work/wp-cli-secure-command/wp-cli-secure-command/wordpress +WORDPRESS_APACHE_PATH=../wordpress WORDPRESS_APACHE_URL=http://localhost:8080 \ No newline at end of file From fe70ee8f5fb7109a4dc52ce93fb66b2df7d322d0 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 13:15:56 +0200 Subject: [PATCH 76/97] feat: Added nginx.conf file --- .github/workflows/apache.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 9bb608b..4e3facf 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -43,9 +43,11 @@ jobs: run: | cp -rf ${{ github.workspace }}/codebase/.env.ci ${{ github.workspace }}/codebase/.env - - name: Make .htaccess writebable + - name: Make .htaccess and nginx.conf writebable run: | sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess + sudo touch ${{ github.workspace }}/wordpress/nginx.conf + sudo chmod 666 ${{ github.workspace }}/wordpress/nginx.conf - name: Run PHPUnit tests run: | From 32c978a66f643e62325896c4a16fc5aa69c8a836 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 13:19:01 +0200 Subject: [PATCH 77/97] fix: Permission issues --- .github/workflows/apache.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 4e3facf..fe08606 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -45,9 +45,8 @@ jobs: - name: Make .htaccess and nginx.conf writebable run: | + sudo chmod 775 ${{ github.workspace }}/wordpress sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess - sudo touch ${{ github.workspace }}/wordpress/nginx.conf - sudo chmod 666 ${{ github.workspace }}/wordpress/nginx.conf - name: Run PHPUnit tests run: | From 82498f5d8772dd0dbc5769acecd6ed5ffffc5734 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 13:21:01 +0200 Subject: [PATCH 78/97] fix: Permission issues --- .github/workflows/apache.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index fe08606..a7618a8 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -45,9 +45,12 @@ jobs: - name: Make .htaccess and nginx.conf writebable run: | - sudo chmod 775 ${{ github.workspace }}/wordpress + sudo chmod 777 ${{ github.workspace }}/wordpress sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess + stat ${{ github.workspace }}/wordpress + ls -la ${{ github.workspace }}/wordpress + whoami - - name: Run PHPUnit tests - run: | - cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file +# - name: Run PHPUnit tests +# run: | +# cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file From db50869f890e8b027848e6632639284a4c90f968 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 14:24:04 +0200 Subject: [PATCH 79/97] feat: Switcher Docker container for WP --- .github/workflows/apache.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index a7618a8..25c467c 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -20,7 +20,7 @@ jobs: --health-timeout 5s --health-retries 3 wordpress: - image: wordpress + image: ghcr.io/igorhrcek/wordpress-docker-apache/wordpress-docker-apache:latest env: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: wordpress @@ -45,8 +45,8 @@ jobs: - name: Make .htaccess and nginx.conf writebable run: | - sudo chmod 777 ${{ github.workspace }}/wordpress - sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess +# sudo chmod 777 ${{ github.workspace }}/wordpress +# sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess stat ${{ github.workspace }}/wordpress ls -la ${{ github.workspace }}/wordpress whoami From 8a7aacea971a9137cb651222430910ac4754f0e9 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 14:26:30 +0200 Subject: [PATCH 80/97] feat: Switcher Docker container for WP --- .github/workflows/apache.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 25c467c..4f3c2df 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -45,8 +45,6 @@ jobs: - name: Make .htaccess and nginx.conf writebable run: | -# sudo chmod 777 ${{ github.workspace }}/wordpress -# sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess stat ${{ github.workspace }}/wordpress ls -la ${{ github.workspace }}/wordpress whoami From 1ecb11353ee9882a0a7cbaf7d6f31ae4e27fcca6 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 14:26:30 +0200 Subject: [PATCH 81/97] feat: Switched Docker container for WP --- .github/workflows/apache.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 25c467c..78aad05 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -20,7 +20,7 @@ jobs: --health-timeout 5s --health-retries 3 wordpress: - image: ghcr.io/igorhrcek/wordpress-docker-apache/wordpress-docker-apache:latest + image: wordpress:latest env: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: wordpress @@ -45,8 +45,7 @@ jobs: - name: Make .htaccess and nginx.conf writebable run: | -# sudo chmod 777 ${{ github.workspace }}/wordpress -# sudo chmod 666 ${{ github.workspace }}/wordpress/.htaccess + sudo chown -R $USER:$USER ${{ github.workspace }}/wordpress stat ${{ github.workspace }}/wordpress ls -la ${{ github.workspace }}/wordpress whoami From c6f78f2dedeaefa250b6c23c3a7401d2ec81e7aa Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 14:57:24 +0200 Subject: [PATCH 82/97] feat: Run tests --- .github/workflows/apache.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 78aad05..0390357 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -46,10 +46,7 @@ jobs: - name: Make .htaccess and nginx.conf writebable run: | sudo chown -R $USER:$USER ${{ github.workspace }}/wordpress - stat ${{ github.workspace }}/wordpress - ls -la ${{ github.workspace }}/wordpress - whoami -# - name: Run PHPUnit tests -# run: | -# cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file + - name: Run PHPUnit tests + run: | + cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file From 958251782b1a0bcc1121e3b17607a62fb31e709b Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 15:11:33 +0200 Subject: [PATCH 83/97] feat: Run tests --- .github/workflows/apache.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 0390357..7f524ab 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -47,6 +47,10 @@ jobs: run: | sudo chown -R $USER:$USER ${{ github.workspace }}/wordpress - - name: Run PHPUnit tests + - name: Run debug run: | - cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file + curl -I http://localhost:8080 + +# - name: Run PHPUnit tests +# run: | +# cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file From 85aa6724f58c35df3aca4ae91f80e0eee2d58b4c Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 15:13:58 +0200 Subject: [PATCH 84/97] feat: Run tests --- .github/workflows/apache.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 7f524ab..1d76242 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -47,10 +47,11 @@ jobs: run: | sudo chown -R $USER:$USER ${{ github.workspace }}/wordpress + - name: Run PHPUnit tests + continue-on-error: true + run: | + cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest + - name: Run debug run: | curl -I http://localhost:8080 - -# - name: Run PHPUnit tests -# run: | -# cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest \ No newline at end of file From 1b33f8e2f4799417505a70cc37b70655da512a64 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 15:25:32 +0200 Subject: [PATCH 85/97] feat: Run tests --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 1d76242..ff2bc1b 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -54,4 +54,4 @@ jobs: - name: Run debug run: | - curl -I http://localhost:8080 + cat ${{ github.workspace }}/wordpress/.htaccess From 11e80fc95e6a4251e64dded3a72cac400a425aa3 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 15:30:11 +0200 Subject: [PATCH 86/97] feat: Run tests --- .github/workflows/apache.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index ff2bc1b..ee67114 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -54,4 +54,5 @@ jobs: - name: Run debug run: | + docker logs wordpress cat ${{ github.workspace }}/wordpress/.htaccess From 5d2acccdf04281700aac16ec0e426fe1fe17a06a Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Mon, 11 Apr 2022 15:34:07 +0200 Subject: [PATCH 87/97] feat: Debug --- tests/BaseTestCase.php | 4 ++-- tests/Feature/SecurityRulesApacheTest.php | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/BaseTestCase.php b/tests/BaseTestCase.php index 3a7bd5a..d7a0e8f 100644 --- a/tests/BaseTestCase.php +++ b/tests/BaseTestCase.php @@ -93,11 +93,11 @@ public function tearDown(): void { //Remove all secure rules from the configuration if(isset($this->nginxAssocArgs['file-path'])) { $fileManager = new FileManager($this->nginxAssocArgs['file-path']); - $fileManager->clear(); + //$fileManager->clear(); } if(isset($this->apacheAssocArgs['file-path'])) { $fileManager = new FileManager($this->apacheAssocArgs['file-path']); - $fileManager->clear(); + //$fileManager->clear(); } } diff --git a/tests/Feature/SecurityRulesApacheTest.php b/tests/Feature/SecurityRulesApacheTest.php index a452f3b..2fc563f 100644 --- a/tests/Feature/SecurityRulesApacheTest.php +++ b/tests/Feature/SecurityRulesApacheTest.php @@ -18,8 +18,8 @@ class SecurityRulesApacheTest extends BaseTestCase { public function setUp(): void { parent::setUp(); - $command = new AddSecurityHeaders($this->apacheAssocArgs); - $command->output(); +// $command = new AddSecurityHeaders($this->apacheAssocArgs); +// $command->output(); $command = new BlockAccessToHtaccess($this->apacheAssocArgs); $command->output(); @@ -52,14 +52,14 @@ public function setUp(): void { /** * @group SecurityHeaders */ - public function testItWillContainAllHeadersOnApache() : void { - $response = $this->apacheHttpClient->get('', ['http_errors' => false]); - - $this->assertNotEmpty($response->getHeaderLine('Strict-Transport-Security')); - $this->assertNotEmpty($response->getHeaderLine('Referrer-Policy')); - $this->assertNotEmpty($response->getHeaderLine('x-content-type-options')); - $this->assertNotEmpty($response->getHeaderLine('X-Frame-Options')); - } +// public function testItWillContainAllHeadersOnApache() : void { +// $response = $this->apacheHttpClient->get('', ['http_errors' => false]); +// +// $this->assertNotEmpty($response->getHeaderLine('Strict-Transport-Security')); +// $this->assertNotEmpty($response->getHeaderLine('Referrer-Policy')); +// $this->assertNotEmpty($response->getHeaderLine('x-content-type-options')); +// $this->assertNotEmpty($response->getHeaderLine('X-Frame-Options')); +// } /** * @group Htaccess From 2093294447a24d78ef26a21d4ef57d71a1dfdea5 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 13:16:37 +0200 Subject: [PATCH 88/97] feat: Switched to Apache container that supports headers --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index ee67114..82cf626 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -20,7 +20,7 @@ jobs: --health-timeout 5s --health-retries 3 wordpress: - image: wordpress:latest + image: ghcr.io/igorhrcek/wordpress-docker-apache/wordpress-docker-apache:latest env: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: wordpress From bad34fd0fd66a76fd7b617a27992b7279627235b Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 13:16:48 +0200 Subject: [PATCH 89/97] feat: Headers tests --- tests/Feature/SecurityRulesApacheTest.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/Feature/SecurityRulesApacheTest.php b/tests/Feature/SecurityRulesApacheTest.php index 2fc563f..a452f3b 100644 --- a/tests/Feature/SecurityRulesApacheTest.php +++ b/tests/Feature/SecurityRulesApacheTest.php @@ -18,8 +18,8 @@ class SecurityRulesApacheTest extends BaseTestCase { public function setUp(): void { parent::setUp(); -// $command = new AddSecurityHeaders($this->apacheAssocArgs); -// $command->output(); + $command = new AddSecurityHeaders($this->apacheAssocArgs); + $command->output(); $command = new BlockAccessToHtaccess($this->apacheAssocArgs); $command->output(); @@ -52,14 +52,14 @@ public function setUp(): void { /** * @group SecurityHeaders */ -// public function testItWillContainAllHeadersOnApache() : void { -// $response = $this->apacheHttpClient->get('', ['http_errors' => false]); -// -// $this->assertNotEmpty($response->getHeaderLine('Strict-Transport-Security')); -// $this->assertNotEmpty($response->getHeaderLine('Referrer-Policy')); -// $this->assertNotEmpty($response->getHeaderLine('x-content-type-options')); -// $this->assertNotEmpty($response->getHeaderLine('X-Frame-Options')); -// } + public function testItWillContainAllHeadersOnApache() : void { + $response = $this->apacheHttpClient->get('', ['http_errors' => false]); + + $this->assertNotEmpty($response->getHeaderLine('Strict-Transport-Security')); + $this->assertNotEmpty($response->getHeaderLine('Referrer-Policy')); + $this->assertNotEmpty($response->getHeaderLine('x-content-type-options')); + $this->assertNotEmpty($response->getHeaderLine('X-Frame-Options')); + } /** * @group Htaccess From 7e81ca348abc2273920cc4da6a4571ed2de9e9f2 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 13:29:16 +0200 Subject: [PATCH 90/97] fix: Debug --- .github/workflows/apache.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 82cf626..31fbbd8 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -56,3 +56,4 @@ jobs: run: | docker logs wordpress cat ${{ github.workspace }}/wordpress/.htaccess + ls -la ${{ github.workspace }}/wordpress From 8d228faaacd82d063e0ebb49d3734d61257ca7e2 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 13:29:35 +0200 Subject: [PATCH 91/97] fix: Debug --- .github/workflows/apache.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 31fbbd8..87b6009 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -57,3 +57,4 @@ jobs: docker logs wordpress cat ${{ github.workspace }}/wordpress/.htaccess ls -la ${{ github.workspace }}/wordpress + ls -la ${{ github.workspace }}/wordpress/wp-includes From 4d309fb441653c71d59e23568981fbe80f9d93a5 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 13:46:12 +0200 Subject: [PATCH 92/97] fix: Debug --- .github/workflows/apache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 87b6009..8b2f46b 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -29,7 +29,7 @@ jobs: ports: - 8080:80 options: - --name wordpress -v ${{ github.workspace }}/wordpress:/var/www/html + --name wordpress -v ${{ github.workspace }}/wordpress:/usr/src/wordpress steps: - uses: actions/checkout@v2 with: From a396289d8d2d4df19f2fa6ca0ddc062161ab1ca5 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 14:01:32 +0200 Subject: [PATCH 93/97] feat: Debug --- .github/workflows/apache.yml | 42 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 8b2f46b..8e93b88 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -29,28 +29,28 @@ jobs: ports: - 8080:80 options: - --name wordpress -v ${{ github.workspace }}/wordpress:/usr/src/wordpress + --name wordpress -v ${{ github.workspace }}/wordpress:/var/www/html steps: - - uses: actions/checkout@v2 - with: - path: 'codebase' - - - name: Install dependencies - run: | - cd ${{ github.workspace }}/codebase && composer install && composer dump-autoload - - - name: Copy .env files - run: | - cp -rf ${{ github.workspace }}/codebase/.env.ci ${{ github.workspace }}/codebase/.env - - - name: Make .htaccess and nginx.conf writebable - run: | - sudo chown -R $USER:$USER ${{ github.workspace }}/wordpress - - - name: Run PHPUnit tests - continue-on-error: true - run: | - cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest +# - uses: actions/checkout@v2 +# with: +# path: 'codebase' +# +# - name: Install dependencies +# run: | +# cd ${{ github.workspace }}/codebase && composer install && composer dump-autoload +# +# - name: Copy .env files +# run: | +# cp -rf ${{ github.workspace }}/codebase/.env.ci ${{ github.workspace }}/codebase/.env +# +# - name: Make .htaccess and nginx.conf writebable +# run: | +# sudo chown -R $USER:$USER ${{ github.workspace }}/wordpress +# +# - name: Run PHPUnit tests +# continue-on-error: true +# run: | +# cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest - name: Run debug run: | From 51512bdb99727932be77b7c43fc9a75fd6ba9771 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 14:02:59 +0200 Subject: [PATCH 94/97] feat: Debug --- .github/workflows/apache.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 8e93b88..13a6107 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -54,7 +54,5 @@ jobs: - name: Run debug run: | - docker logs wordpress - cat ${{ github.workspace }}/wordpress/.htaccess ls -la ${{ github.workspace }}/wordpress ls -la ${{ github.workspace }}/wordpress/wp-includes From 8f651cb4f9bc2a6263b063a68405b18351d0dce1 Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 16:07:50 +0200 Subject: [PATCH 95/97] feat: Debug test --- .github/workflows/apache.yml | 41 ++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 13a6107..28fd2e0 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -31,28 +31,27 @@ jobs: options: --name wordpress -v ${{ github.workspace }}/wordpress:/var/www/html steps: -# - uses: actions/checkout@v2 -# with: -# path: 'codebase' -# -# - name: Install dependencies -# run: | -# cd ${{ github.workspace }}/codebase && composer install && composer dump-autoload -# -# - name: Copy .env files -# run: | -# cp -rf ${{ github.workspace }}/codebase/.env.ci ${{ github.workspace }}/codebase/.env -# -# - name: Make .htaccess and nginx.conf writebable -# run: | -# sudo chown -R $USER:$USER ${{ github.workspace }}/wordpress -# -# - name: Run PHPUnit tests -# continue-on-error: true -# run: | -# cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest + - uses: actions/checkout@v2 + with: + path: 'codebase' + + - name: Install dependencies + run: | + cd ${{ github.workspace }}/codebase && composer install && composer dump-autoload + + - name: Copy .env files + run: | + cp -rf ${{ github.workspace }}/codebase/.env.ci ${{ github.workspace }}/codebase/.env + + - name: Make .htaccess and nginx.conf writebable + run: | + sudo chown -R $USER:$USER ${{ github.workspace }}/wordpress + + - name: Run PHPUnit tests + continue-on-error: true + run: | + cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest - name: Run debug run: | ls -la ${{ github.workspace }}/wordpress - ls -la ${{ github.workspace }}/wordpress/wp-includes From ee7a2a246ef204ff110ce8f0af692ac7fa950ddf Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 16:21:43 +0200 Subject: [PATCH 96/97] feat: Completed automated testing on Apache --- .github/workflows/apache.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/apache.yml b/.github/workflows/apache.yml index 28fd2e0..72d5d98 100644 --- a/.github/workflows/apache.yml +++ b/.github/workflows/apache.yml @@ -1,5 +1,8 @@ name: Apache tests -on: [push] +on: + pull_request: + branches: + - master jobs: tests: runs-on: 'ubuntu-latest' @@ -48,10 +51,5 @@ jobs: sudo chown -R $USER:$USER ${{ github.workspace }}/wordpress - name: Run PHPUnit tests - continue-on-error: true run: | cd ${{ github.workspace }}/codebase && vendor/bin/phpunit --testdox --filter SecurityRulesApacheTest - - - name: Run debug - run: | - ls -la ${{ github.workspace }}/wordpress From 808b561902c013161f1b22cabc9bc3008643c45a Mon Sep 17 00:00:00 2001 From: Igor Hrcek Date: Tue, 12 Apr 2022 16:22:02 +0200 Subject: [PATCH 97/97] feat: Added support for linting --- .github/workflows/lint.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..03e08d0 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,27 @@ +name: Lint +on: + pull_request: + branches: + - master +jobs: + lint: + runs-on: 'ubuntu-latest' + strategy: + matrix: + php-versions: ['7.4', '8.0', '8.1'] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-versions }} + tools: composer,phpstan, phpcs + - name: Install composer packages + run: | + composer update + composer install + - name: Lint and run checks with phpstan + run: phpstan analyse src --level=5 + - name: Check codestyle with phpcs + run: phpcs src \ No newline at end of file