From ca851171a84c070c97e276e0faa1a44148ab5c25 Mon Sep 17 00:00:00 2001 From: Todd Wright <4177859+t-wright@users.noreply.github.com> Date: Thu, 5 Sep 2024 02:06:37 +1000 Subject: [PATCH 01/21] Remove VaultPress (#5767) --- .dockerignore | 1 - .sonarcloud.properties | 2 +- bin/upgrade-plugin.sh | 2 +- cron/cron.php | 9 +- phpcs.xml.dist | 1 - phpunit.xml | 1 - renovate.json | 1 - vaultpress.php | 82 - vaultpress/.phpcs.dir.xml | 24 - vaultpress/CHANGELOG.md | 304 -- vaultpress/LICENSE.txt | 357 -- vaultpress/README.md | 19 - vaultpress/SECURITY.md | 38 - vaultpress/class-jetpack-logo.php | 29 - vaultpress/class.vaultpress-cli.php | 31 - vaultpress/class.vaultpress-database.php | 384 -- vaultpress/class.vaultpress-filesystem.php | 320 -- vaultpress/class.vaultpress-hotfixes.php | 466 --- .../class.vaultpress-ixr-ssl-client.php | 144 - vaultpress/composer.json | 46 - vaultpress/cron-tasks.php | 162 - vaultpress/fonts/vaultpress-regular.eot | Bin 1186 -> 0 bytes vaultpress/fonts/vaultpress-regular.svg | 12 - vaultpress/fonts/vaultpress-regular.ttf | Bin 1888 -> 0 bytes vaultpress/fonts/vaultpress-regular.woff | Bin 1308 -> 0 bytes vaultpress/images/automattic.svg | 7 - .../images/dashboard-icon-sprite-2x.png | Bin 39553 -> 0 bytes vaultpress/images/dashboard-icon-sprite.png | Bin 19289 -> 0 bytes vaultpress/images/logo_plugin-notice.png | Bin 947 -> 0 bytes vaultpress/images/security.svg | 1 - vaultpress/images/vaultpress.svg | 1 - vaultpress/images/vp-icon-sprite-2x.png | Bin 8061 -> 0 bytes vaultpress/images/vp-icon-sprite.png | Bin 2596 -> 0 bytes .../images/vp-toolbar-icon-trans-2x.png | Bin 1452 -> 0 bytes vaultpress/images/vp-toolbar-icon-trans.png | Bin 934 -> 0 bytes vaultpress/nav-styles.css | 220 -- vaultpress/readme.txt | 59 - vaultpress/styles.css | 1014 ------ vaultpress/uninstall.php | 13 - vaultpress/vaultpress.php | 3105 ----------------- vaultpress/vendor/autoload.php | 7 - vaultpress/vendor/autoload_packages.php | 13 - .../automattic/jetpack-logo/CHANGELOG.md | 138 - .../automattic/jetpack-logo/LICENSE.txt | 357 -- .../vendor/automattic/jetpack-logo/README.md | 31 - .../automattic/jetpack-logo/SECURITY.md | 38 - .../automattic/jetpack-logo/composer.json | 40 - .../jetpack-logo/src/class-logo.php | 91 - vaultpress/vendor/composer/ClassLoader.php | 572 --- .../vendor/composer/InstalledVersions.php | 350 -- vaultpress/vendor/composer/LICENSE | 21 - .../vendor/composer/autoload_classmap.php | 16 - .../vendor/composer/autoload_namespaces.php | 9 - vaultpress/vendor/composer/autoload_psr4.php | 10 - vaultpress/vendor/composer/autoload_real.php | 46 - .../vendor/composer/autoload_static.php | 42 - vaultpress/vendor/composer/installed.json | 107 - vaultpress/vendor/composer/installed.php | 41 - .../composer/jetpack_autoload_classmap.php | 33 - .../class-autoloader-handler.php | 147 - .../class-autoloader-locator.php | 90 - .../jetpack-autoloader/class-autoloader.php | 90 - .../jetpack-autoloader/class-container.php | 150 - .../jetpack-autoloader/class-hook-manager.php | 76 - .../class-latest-autoloader-guard.php | 86 - .../class-manifest-reader.php | 99 - .../class-path-processor.php | 194 - .../class-php-autoloader.php | 93 - .../class-plugin-locator.php | 153 - .../class-plugins-handler.php | 164 - .../class-shutdown-handler.php | 92 - .../class-version-loader.php | 164 - .../class-version-selector.php | 69 - vaultpress/vp-scanner.php | 353 -- .../class-jetpack-connection-cli.php | 29 +- .../class-jetpack-connection-controls.php | 34 - .../class-jetpack-connection-pilot.php | 9 - 77 files changed, 6 insertions(+), 10903 deletions(-) delete mode 100644 vaultpress.php delete mode 100644 vaultpress/.phpcs.dir.xml delete mode 100644 vaultpress/CHANGELOG.md delete mode 100644 vaultpress/LICENSE.txt delete mode 100644 vaultpress/README.md delete mode 100644 vaultpress/SECURITY.md delete mode 100644 vaultpress/class-jetpack-logo.php delete mode 100644 vaultpress/class.vaultpress-cli.php delete mode 100644 vaultpress/class.vaultpress-database.php delete mode 100644 vaultpress/class.vaultpress-filesystem.php delete mode 100644 vaultpress/class.vaultpress-hotfixes.php delete mode 100644 vaultpress/class.vaultpress-ixr-ssl-client.php delete mode 100644 vaultpress/composer.json delete mode 100644 vaultpress/cron-tasks.php delete mode 100755 vaultpress/fonts/vaultpress-regular.eot delete mode 100755 vaultpress/fonts/vaultpress-regular.svg delete mode 100755 vaultpress/fonts/vaultpress-regular.ttf delete mode 100755 vaultpress/fonts/vaultpress-regular.woff delete mode 100644 vaultpress/images/automattic.svg delete mode 100644 vaultpress/images/dashboard-icon-sprite-2x.png delete mode 100644 vaultpress/images/dashboard-icon-sprite.png delete mode 100644 vaultpress/images/logo_plugin-notice.png delete mode 100644 vaultpress/images/security.svg delete mode 100644 vaultpress/images/vaultpress.svg delete mode 100644 vaultpress/images/vp-icon-sprite-2x.png delete mode 100644 vaultpress/images/vp-icon-sprite.png delete mode 100644 vaultpress/images/vp-toolbar-icon-trans-2x.png delete mode 100644 vaultpress/images/vp-toolbar-icon-trans.png delete mode 100644 vaultpress/nav-styles.css delete mode 100644 vaultpress/readme.txt delete mode 100644 vaultpress/styles.css delete mode 100644 vaultpress/uninstall.php delete mode 100644 vaultpress/vaultpress.php delete mode 100644 vaultpress/vendor/autoload.php delete mode 100644 vaultpress/vendor/autoload_packages.php delete mode 100644 vaultpress/vendor/automattic/jetpack-logo/CHANGELOG.md delete mode 100644 vaultpress/vendor/automattic/jetpack-logo/LICENSE.txt delete mode 100644 vaultpress/vendor/automattic/jetpack-logo/README.md delete mode 100644 vaultpress/vendor/automattic/jetpack-logo/SECURITY.md delete mode 100644 vaultpress/vendor/automattic/jetpack-logo/composer.json delete mode 100644 vaultpress/vendor/automattic/jetpack-logo/src/class-logo.php delete mode 100644 vaultpress/vendor/composer/ClassLoader.php delete mode 100644 vaultpress/vendor/composer/InstalledVersions.php delete mode 100644 vaultpress/vendor/composer/LICENSE delete mode 100644 vaultpress/vendor/composer/autoload_classmap.php delete mode 100644 vaultpress/vendor/composer/autoload_namespaces.php delete mode 100644 vaultpress/vendor/composer/autoload_psr4.php delete mode 100644 vaultpress/vendor/composer/autoload_real.php delete mode 100644 vaultpress/vendor/composer/autoload_static.php delete mode 100644 vaultpress/vendor/composer/installed.json delete mode 100644 vaultpress/vendor/composer/installed.php delete mode 100644 vaultpress/vendor/composer/jetpack_autoload_classmap.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-autoloader-handler.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-autoloader-locator.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-autoloader.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-container.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-hook-manager.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-latest-autoloader-guard.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-manifest-reader.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-path-processor.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-php-autoloader.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-plugin-locator.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-plugins-handler.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-shutdown-handler.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-version-loader.php delete mode 100644 vaultpress/vendor/jetpack-autoloader/class-version-selector.php delete mode 100644 vaultpress/vp-scanner.php diff --git a/.dockerignore b/.dockerignore index 60be9b92af..43dbd19590 100644 --- a/.dockerignore +++ b/.dockerignore @@ -99,7 +99,6 @@ wpcom-helper.php /shared-plugins/two-factor/dev-lib/ /shared-plugins/two-factor/tests/ **/tests/ -/vaultpress/changelog.txt /vip-support/.circleci /vip-support/bin/ /vip-support/features/ diff --git a/.sonarcloud.properties b/.sonarcloud.properties index 17e1d92dd1..1a9a3d4ccb 100644 --- a/.sonarcloud.properties +++ b/.sonarcloud.properties @@ -1,4 +1,4 @@ sonar.sources=. -sonar.exclusions=advanced-post-cache/**,akismet/**,bin/**,ci/**,cron-control/**,debug-bar-cron/**,debug-bar/**,drop-ins/**,http-concat/**,jetpack*/**,lightweight-term-count-update/**,query-monitor/**,rewrite-rules-inspector/**,search/elasticpress/**,search/debug-bar-elasticpress/**,search/es-wp-query/**,shared-plugins/**,vaultpress/**,wordpress-importer/**,wp-parsely*/**,tests/**,__tests__/** +sonar.exclusions=advanced-post-cache/**,akismet/**,bin/**,ci/**,cron-control/**,debug-bar-cron/**,debug-bar/**,drop-ins/**,http-concat/**,jetpack*/**,lightweight-term-count-update/**,query-monitor/**,rewrite-rules-inspector/**,search/elasticpress/**,search/debug-bar-elasticpress/**,search/es-wp-query/**,shared-plugins/**,wordpress-importer/**,wp-parsely*/**,tests/**,__tests__/** sonar.tests=tests,__tests__ sonar.cpd.exclusions=errors/** diff --git a/bin/upgrade-plugin.sh b/bin/upgrade-plugin.sh index 2cb436bdba..208cd12e84 100755 --- a/bin/upgrade-plugin.sh +++ b/bin/upgrade-plugin.sh @@ -27,7 +27,7 @@ update_wporg_plugin() { } case $PLUGIN_SLUG in - vaultpress | akismet | debug-bar | query-monitor) + akismet | debug-bar | query-monitor) update_wporg_plugin ;; diff --git a/cron/cron.php b/cron/cron.php index 147796cf4a..9706c6dc8f 100644 --- a/cron/cron.php +++ b/cron/cron.php @@ -15,10 +15,9 @@ // Unregister Jetpack-related cron events when disabled. add_action( 'cli_init', function () { - $jetpack_is_disabled = defined( 'VIP_JETPACK_SKIP_LOAD' ) && true === VIP_JETPACK_SKIP_LOAD; - $vaultpress_is_disabled = $jetpack_is_disabled || ( defined( 'VIP_VAULTPRESS_ALLOWED' ) && false === VIP_VAULTPRESS_ALLOWED ) || ( defined( 'VIP_VAULTPRESS_SKIP_LOAD' ) && true === VIP_VAULTPRESS_SKIP_LOAD ); - + $jetpack_is_disabled = defined( 'VIP_JETPACK_SKIP_LOAD' ) && true === VIP_JETPACK_SKIP_LOAD; $events_to_unregister = []; + if ( $jetpack_is_disabled ) { $events_to_unregister = array_merge( $events_to_unregister, [ 'jetpack_sync_cron', @@ -29,10 +28,6 @@ ] ); } - if ( $vaultpress_is_disabled ) { - $events_to_unregister = array_merge( $events_to_unregister, [ 'vp_scan_site', 'vp_scan_next_batch' ] ); - } - // When/if the cron event hook runs, unschedule the event so it runs no more. foreach ( $events_to_unregister as $event_hook ) { add_action( $event_hook, fn() => wp_unschedule_hook( $event_hook ) ); diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 64be53578d..ade03a054e 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -34,7 +34,6 @@ /search/elasticpress/* /search/es-wp-query/* /shared-plugins/* - /vaultpress/* /vendor/* /wordpress-importer/* /wp-parsely/* diff --git a/phpunit.xml b/phpunit.xml index ed0ed5db4e..ca879ac991 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -39,7 +39,6 @@ search/es-wp-query shared-plugins rewrite-rules-inspector - vaultpress wordpress-importer tests diff --git a/renovate.json b/renovate.json index 8f5e5cd681..3762d24f33 100644 --- a/renovate.json +++ b/renovate.json @@ -37,7 +37,6 @@ "ignorePaths": [ "akismet/**", "jetpack*/**", - "vaultpress/**", "wp-parsely-*/**" ] } diff --git a/vaultpress.php b/vaultpress.php deleted file mode 100644 index a419eae9ee..0000000000 --- a/vaultpress.php +++ /dev/null @@ -1,82 +0,0 @@ -realtime backup and automated security scanning from VaultPress. Activate, enter your registration key, and never worry again. Need some help? - * Version: 2.2.1 - * Author: Automattic - * Author URI: http://vaultpress.com/?utm_source=author-uri&utm_medium=plugin-description&utm_campaign=1.0 - * License: GPL2+ - * Text Domain: vaultpress - * Domain Path: /languages/ - * - * @package automattic/vaultpress - */ - -// Do not load VaultPress unless explicitly enabled via the VIP_VAULTPRESS_SKIP_LOAD constant -// Please see this post for more information: https://lobby.vip.wordpress.com/2023/02/28/upcoming-vaultpress-deprecation/ -if ( ! defined( 'VIP_VAULTPRESS_SKIP_LOAD' ) ) { - define( 'VIP_VAULTPRESS_SKIP_LOAD', true ); -} - -// Avoid loading VaultPress altogether if VIP_VAULTPRESS_ALLOWED is set to false -if ( defined( 'VIP_VAULTPRESS_ALLOWED' ) && false === VIP_VAULTPRESS_ALLOWED ) { - return; -} - -// Avoid loading VaultPress altogether if VIP_JETPACK_SKIP_LOAD is set to true (Jetpack is required for VP to work in VIP) -if ( defined( 'VIP_JETPACK_SKIP_LOAD' ) && true === VIP_JETPACK_SKIP_LOAD ) { - return; -} - -// Avoid loading VaultPress altogether if VIP_VAULTPRESS_SKIP_LOAD is set to true -if ( defined( 'VIP_VAULTPRESS_SKIP_LOAD' ) && true === VIP_VAULTPRESS_SKIP_LOAD ) { - return; -} - -define( 'VIP_VAULTPRESS_SKIP_FILES', [ - // The following EP files are large and complex and consistently trigger 100% CPU usage on scan. - '/elasticpress/dist/js/ordering-script.min.js', - '/elasticpress/dist/js/related-posts-block-script.min.js', - '/elasticpress/dist/js/stats-script.min.js', -] ); - -// VaultPress uses a default timeout of 60s, which can be bad in the rare cases where its API is slow to respond. -// Drop it down to something a bit more reasonable. -if ( ! defined( 'VAULTPRESS_TIMEOUT' ) ) { - define( 'VAULTPRESS_TIMEOUT', 10 ); -} - -add_filter( 'pre_scan_file', function ( $should_skip_file, $file ) { - foreach ( VIP_VAULTPRESS_SKIP_FILES as $vp_skip_file ) { - if ( str_ends_with( $file, $vp_skip_file ) ) { - return true; - } - } - - return $should_skip_file; -}, 10, 2 ); - -if ( ! defined( 'WP_INSTALLING' ) ) { - require_once __DIR__ . '/vaultpress/vaultpress.php'; -} - -add_filter( 'in_admin_header', 'vip_remove_vaultpress_connect_notice' ); - -function vip_remove_vaultpress_connect_notice() { - // Not actually initializing VP, just getting the instance - $vaultpress = VaultPress::init(); - remove_action( 'user_admin_notices', [ $vaultpress, 'connect_notice' ] ); - remove_action( 'vaultpress_notices', [ $vaultpress, 'connect_notice' ] ); - remove_action( 'admin_notices', [ $vaultpress, 'connect_notice' ] ); - return null; -} - -add_action( 'admin_menu', 'vip_remove_vaultpress_admin_menu', 999 ); - -function vip_remove_vaultpress_admin_menu() { - $vaultpress = VaultPress::init(); - if ( ! $vaultpress->is_registered() ) { - remove_submenu_page( 'jetpack', 'vaultpress' ); - } -} diff --git a/vaultpress/.phpcs.dir.xml b/vaultpress/.phpcs.dir.xml deleted file mode 100644 index d8fb867d2f..0000000000 --- a/vaultpress/.phpcs.dir.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vaultpress/CHANGELOG.md b/vaultpress/CHANGELOG.md deleted file mode 100644 index f53b263240..0000000000 --- a/vaultpress/CHANGELOG.md +++ /dev/null @@ -1,304 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -## 2.2.1 - 2022-02-01 -### Changed -- Colors: update colors to match the latest iterations of our brand. -- General: update WordPress tested up to version, since the plugin works with WordPress 5.9. -- Set `convertDeprecationsToExceptions` true in PHPUnit config. -- Switch to pcov for code coverage. -- Updated package dependencies. - - -## 2.2.0 - 2021-10-11 -### Changed -- Tests: update PHPUnit polyfills dependency (yoast/phpunit-polyfills). -- Updated package dependencies. - -### Security -- VaultPress: Remove obsolete hotfixes - -### Fixed -- General: avoid PHP notices when using recent versions of PHP. - -## 2.1.4 - 2020-08-07 -### Bug fixes -- General: Revert autoloader version to prior 1.7.0 version, to resolve an intermittent issue during the upgrade process for some users. - -## 2.1.3 - 2020-08-06 -### Compatibility -- General: Handle new user meta actions. -- General: Implement the spread operator for our IXR class methods to match WordPress Core behavior in 5.5. -- General: Update some miscellaneous dependencies. - -## 2.1.0 - 2019-12-10 -### Compatibility -- General: the VaultPress plugin now requires PHP 5.6, just like WordPress. -- General: avoid using PHP short array syntax to load plugin files. - -## 2.1.0 - 2019-12-09 -### Compatibility -- General: avoid PHP deprecation notices when using a newer version of the Jetpack plugin. -- Admin Page: do not display a dashboard link if not registered. -- Admin Page: update reset settings card wording. -- Connect button: update link to current VaultPress page. -- Notices: only display notices in specific locations. -- Notices: update wording for the VaultPress connection notice - -## 2.0.1 - 2019-07-12 -### Bug fixes -- Security Scanner: ensure the Security Scanner can be triggered at all times. - -## 2.0 - 2019-07-09 -### Enhancements -- Dashboard: redesign the main VaultPress dashboard. - -### Compatibility -- General: VaultPress now requires PHP 5.3.2, and will display a notice if your site uses an older version of PHP. - -## 1.9.10 - 2019-04-04 -### Bug fixes -- Fix a PHP fatal error caused by passing an object to the current() function. - -## 1.9.9 - 2019-03-28 - -- PHP 7.2.0 compatibility fix. -- Adding button to delete all VaultPress settings - -## 1.9.8 - 2019-02-07 - -- Limit the size of _vp_ai_ping_% entries when a site gets disconnected from VaultPress.com - -## 1.9.7 - 2018-12-11 - -- Update firewall IP detection rules to autodetect various reverse proxy setups - -## 1.9.6 - 2018-08-17 - -- Limit _vp_ai_ping_% entries to improve stability when a site gets disconnected from VaultPress.com - -## 1.9.5 - 2018-02-02 - -- Removing activation notice - -## 1.9.4 - 2017-11-15 - -- Error handling improvements in the scanner - -## 1.9.3 - 2017-11-09 - -- Compatibility update -- Send a better user-agent string to VaultPress servers - -## 1.9.2 - 2017-07-06 - -- Compatibility update - -## 1.9.1 - 2017-06-29 - -- Security improvement: use hash_equals to compare signatures - -## 1.9.0 - 2017-06-05 - -- Bugfix: Check return value from openssl_verify() - -## 1.8.9 - 2017-05-08 - -- Remove outdated free trial link - -## 1.8.7 - 2017-03-06 - -- Security fix for https://wpvulndb.com/vulnerabilities/8745 - -## 1.8.6 - 2016-01-26 - -- Compatibility updates -- Security hotfixes -- Improved performance for security scanner -- Misc small bugfixes - -## 1.8.5 - 2016-08-07 - -- Delete plugin option when plugin is deleted via admin area. -- Fix horizontal scroll bar on the fresh installation settings page at high resolutions. - -## 1.8.4 - 2016-07-21 - -- Compatibility updates for Jetpack 4.1 - -## 1.8.3 - 2016-05-26 - -- Security: Hotfix for certain versions of Jetpack - -## 1.8.2 - 2016-05-11 - -- Workaround for some versions of mod_security. - -## 1.8.1 - 2016-03-29 - -- Improved support for WooCommerce live backups. -- Bugfix: Avoid cloning the 'vaultpress' option between Multisite instances. - -## 1.8.0 - 2016-03-07 - -- Add support for an upcoming ability to have the Jetpack plugin manage registering the VaultPress plugin and entering the required API key. Gone will be the days of needing to copy/paste it! - -## 1.7.9 - 2016-02-24 - -- PHP 7 support. Drop support for PHP 4 and versions of WordPress older than 3.2. -- Silence PHP errors when attempting to change the execution time limit when PHP is running in safe mode. -- Prevent database update pings from being stored when not connected to a paid VaultPress account. - -## 1.7.8 - 2015-10-15 - -- Security: Hotfix for Akismet < 3.1.5. - -## 1.7.7 - 2015-09-15 - -- Security: Add a new security hotfix. - -## 1.7.6 - 2015-08-14 - -- Improved support for multisite installs with custom domains -- Improved live-backup support for WooCommerce -- Tested against WordPress 4.3 - -## 1.7.5 - 2015-06-11 - -- Security: Add a new security hotfix. - -## 1.7.4 - 2015-04-28 - -- Bugfix: Don't allow openssl signing unless the public key exists. - -## 1.7.3 - 2015-04-27 - -- Security: Add a new security hotfix. - -## 1.7.2 - 2015-04-20 - -- Hotfix: Protect against a core security issue. -- Bugfix: Don't allow direct access to plugin files -- Bugfix: Ensure that the firewall rule option is not autoloaded. -- Bugfix: More careful path tidy-up when inspecting directory contents. Fixes an edge case where some sites were having backup problems. - -## 1.7.1 - 2015-03-25 - -- Added support for openssl signing. - -## 1.7.0 - 2015-01-09 - -- Added an option to disable calls to php_uname, as some hosts don't allow them. - -## 1.6.9 - 2014-12-24 - -- Tested against WordPress 4.1 - -## 1.6.8 - 2014-12-12 - -- Bugfix: Fall back on HTTP when updating firewall via HTTPS fails. Still warn the user about the security implications. - -## 1.6.7 - 2014-12-01 - -- Security: More efficient format for internal firewall IPs. - -## 1.6.6 - 2014-11-14 - -- Security: Fetch service IP updates via HTTPS. -- Feature: Don't send backup notifications while mass-deleting spam. - -## 1.6.5 - 2014-09-04 - -- Security: Hotfix for the Slider Revolution plugin. - -## 1.6.4 - 2014-09-03 - -- Bumping the "Tested up to" tag to 4.0 - -## 1.6.3 - 2014-07-30 - -- Bugfix: Make sure existing empty key and secret options are always strings. This fixes an error when run with HHVM. -- Bugfix: Detect if the plugin has been installed on localhost and show an error. -- CSS Fix: Stop the "Register" button from bouncing around when clicked. - -## 1.6.2 - 2014-07-10 - -- Feature: Instantly register for a VaultPress trial via Jetpack. -- Bugfix: Make sure the key and secret options are always strings. This fixes an error when run with HHVM. - -## 1.6.1 - 2014-07-01 - -- Security: Add a new security hotfix. - -## 1.6 - 2014-06-27 - -- Bugfix: Better handling for Multisite table prefixes. -- Bugfix: Do not use the deprecated wpdb::escape() method. - -## 1.5.9 - 2014-06-16 - -- Feature: If available, use command line md5sum and sha1sum to get checksums for large files. - -## 1.5.8 - 2014-06-03 - -- Security: Add a new security hotfix. - -## 1.5.7 - 2014-04-11 - -- Bugfix: Avoid PHP 5.4 warnings due to invalid constructor names. -- Security: Add a new security hotfix. - -## 1.5.6 - 2014-04-01 - -- Bugfix: Avoid PHP 5.4 warnings. -- Bugfix: Some servers with restrictive security filters make database restores fail. -- Feature: Add a new restore method to VaultPress_Database. - -## 1.5.2 - 2013-12-26 - -- Bugfix: Adding less greedy patterns for cache directories. - -## 1.5.1 - 2013-12-16 - -- Feature: Adding file exclusion patterns to avoid backing up cache and backup directories. - -## 1.5 - 2013-12-11 - -- Bugfix: Don't show admin notices on the about page. - -## 1.4.9 - 2013-10-10 - -- Bugfix: Clean up PHP5 strict warnings. - -## 1.4.8 - 2013-07-15 - -- Feature: Include styles and images with the plugin instead of loading them externally. - -## 1.4.7 - 2013-07-02 - -- Bugfix: Some servers have SSL configuration problems, which breaks the plugin when SSL verification is enforced. - -## 1.4.6 - 2013-06-26 - -- Bugfix: PHP 5.4 notices -- Feature: Add the possibility to ignore frequent updates on some postmeta keys. - -## 1.3.9 - 2013-06-26 - -- Feature: Request decoding (base64/rot13) -- Feature: Response encoding (base64/rot13) - -## 1.3.8 - 2013-06-26 - -- Bugfix: Validate IPv4-mapped IPv6 addresses in the internal firewall. -- Bugfix: Fix hooks not being properly added under certain circumstances. - -## 1.3.7 - 2013-06-26 - -- Bugfix: Protect against infinite loop due to a PHP bug. -- Bugfix: Encode remote ping requests. - -## 1.0 - 2013-06-25 - -- First public release! diff --git a/vaultpress/LICENSE.txt b/vaultpress/LICENSE.txt deleted file mode 100644 index e82774c1bd..0000000000 --- a/vaultpress/LICENSE.txt +++ /dev/null @@ -1,357 +0,0 @@ -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -=================================== - - -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - - Preamble - -The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - -We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - -Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and -modification follow. - -GNU GENERAL PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - -a) You must cause the modified files to carry prominent notices -stating that you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in -whole or in part contains or is derived from the Program or any -part thereof, to be licensed as a whole at no charge to all third -parties under the terms of this License. - -c) If the modified program normally reads commands interactively -when run, you must cause it, when started running for such -interactive use in the most ordinary way, to print or display an -announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this -License. (Exception: if the Program itself is interactive but -does not normally print such an announcement, your work based on -the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of Sections -1 and 2 above on a medium customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three -years, to give any third party, for a charge no more than your -cost of physically performing source distribution, a complete -machine-readable copy of the corresponding source code, to be -distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer -to distribute corresponding source code. (This alternative is -allowed only for noncommercial distribution and only if you -received the program in object code or executable form with such -an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - -5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - -Copyright (C) - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. -This is free software, and you are welcome to redistribute it -under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in the program -`Gnomovision' (which makes passes at compilers) written by James Hacker. - -, 1 April 1989 -Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/vaultpress/README.md b/vaultpress/README.md deleted file mode 100644 index c6a2f98619..0000000000 --- a/vaultpress/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# VaultPress - -VaultPress is a subscription service offering real-time backup, automated security scanning, and support from WordPress experts. - -## How to install VaultPress - -### Installation From Git Repo - -## Contribute - -## Get Help - -## Security - -Need to report a security vulnerability? Go to [https://automattic.com/security/](https://automattic.com/security/) or directly to our security bug bounty site [https://hackerone.com/automattic](https://hackerone.com/automattic). - -## License - -VaultPress is licensed under [GNU General Public License v2 (or later)](./LICENSE.txt) diff --git a/vaultpress/SECURITY.md b/vaultpress/SECURITY.md deleted file mode 100644 index b4b46c0ee2..0000000000 --- a/vaultpress/SECURITY.md +++ /dev/null @@ -1,38 +0,0 @@ -# Security Policy - -Full details of the Automattic Security Policy can be found on [automattic.com](https://automattic.com/security/). - -## Supported Versions - -Generally, only the latest version of Jetpack has continued support. If a critical vulnerability is found in the current version of Jetpack, we may opt to backport any patches to previous versions. - -## Reporting a Vulnerability - -[Jetpack](https://jetpack.com/) is an open-source plugin for WordPress. Our HackerOne program covers the plugin software, as well as a variety of related projects and infrastructure. - -**For responsible disclosure of security issues and to be eligible for our bug bounty program, please submit your report via the [HackerOne](https://hackerone.com/automattic) portal.** - -Our most critical targets are: - -* Jetpack and the Jetpack composer packages (all within this repo) -* Jetpack.com -- the primary marketing site. -* cloud.jetpack.com -- a management site. -* wordpress.com -- the shared management site for both Jetpack and WordPress.com sites. - -For more targets, see the `In Scope` section on [HackerOne](https://hackerone.com/automattic). - -_Please note that the **WordPress software is a separate entity** from Automattic. Please report vulnerabilities for WordPress through [the WordPress Foundation's HackerOne page](https://hackerone.com/wordpress)._ - -## Guidelines - -We're committed to working with security researchers to resolve the vulnerabilities they discover. You can help us by following these guidelines: - -* Follow [HackerOne's disclosure guidelines](https://www.hackerone.com/disclosure-guidelines). -* Pen-testing Production: - * Please **setup a local environment** instead whenever possible. Most of our code is open source (see above). - * If that's not possible, **limit any data access/modification** to the bare minimum necessary to reproduce a PoC. - * **_Don't_ automate form submissions!** That's very annoying for us, because it adds extra work for the volunteers who manage those systems, and reduces the signal/noise ratio in our communication channels. - * To be eligible for a bounty, all of these guidelines must be followed. -* Be Patient - Give us a reasonable time to correct the issue before you disclose the vulnerability. - -We also expect you to comply with all applicable laws. You're responsible to pay any taxes associated with your bounties. diff --git a/vaultpress/class-jetpack-logo.php b/vaultpress/class-jetpack-logo.php deleted file mode 100644 index f043f1fb29..0000000000 --- a/vaultpress/class-jetpack-logo.php +++ /dev/null @@ -1,29 +0,0 @@ -render(); - } -} diff --git a/vaultpress/class.vaultpress-cli.php b/vaultpress/class.vaultpress-cli.php deleted file mode 100644 index 88553821de..0000000000 --- a/vaultpress/class.vaultpress-cli.php +++ /dev/null @@ -1,31 +0,0 @@ -register_via_jetpack( true ); - if ( is_wp_error( $result ) ) { - WP_CLI::error( 'Failed to register VaultPress: ' . $result->get_error_message() ); - } else { - WP_CLI::line( 'Successfully registered VaultPress via Jetpack.' ); - } - } -} diff --git a/vaultpress/class.vaultpress-database.php b/vaultpress/class.vaultpress-database.php deleted file mode 100644 index dc55cccf23..0000000000 --- a/vaultpress/class.vaultpress-database.php +++ /dev/null @@ -1,384 +0,0 @@ -table=$table; - if ( $parse_create_table ) { - $this->structure = $this->parse_create_table( $this->show_create() ); - } - } - - function get_tables( $filter=null ) { - global $wpdb; - $rval = $wpdb->get_col( 'SHOW TABLES' ); - if ( $filter ) - $rval = preg_grep( $filter, $rval ); - return $rval; - } - - function show_create() { - global $wpdb; - if ( !$this->table ) - return false; - $table = esc_sql( $this->table ); - $results = $wpdb->get_row( "SHOW CREATE TABLE `$table`" ); - $want = 'Create Table'; - if ( $results ) { - if ( isset( $results->$want ) ) { - $results = $results->$want; - } else { - $results = false; - } - } - return $results; - } - - function explain() { - global $wpdb; - if ( !$this->table ) - return false; - $table = esc_sql( $this->table ); - return $wpdb->get_results( "EXPLAIN `$table`" ); - } - - function diff( $signatures ) { - global $wpdb; - if ( !is_array( $signatures ) || !count( $signatures ) ) - return false; - if ( !$this->table ) - return false; - $table = esc_sql( $this->table ); - $diff = array(); - foreach ( $signatures as $where => $signature ) { - $pksig = md5( $where ); - unset( $wpdb->queries ); - $row = $wpdb->get_row( "SELECT * FROM `$table` WHERE $where" ); - if ( !$row ) { - $diff[$pksig] = array ( 'change' => 'deleted', 'where' => $where ); - continue; - } - $row = serialize( $row ); - $hash = md5( $row ); - if ( $hash != $signature ) - $diff[$pksig] = array( 'change' => 'modified', 'where' => $where, 'signature' => $hash, 'row' => $row ); - } - return $diff; - } - - function count( $columns ) { - global $wpdb; - if ( !is_array( $columns ) || !count( $columns ) ) - return false; - if ( !$this->table ) - return false; - $table = esc_sql( $this->table ); - $column = esc_sql( array_shift( $columns ) ); - return $wpdb->get_var( "SELECT COUNT( $column ) FROM `$table`" ); - } - - function wpdb( $query, $function='get_results' ) { - global $wpdb; - - if ( !is_callable( array( $wpdb, $function ) ) ) - return false; - - $res = $wpdb->$function( $query ); - if ( !$res ) - return $res; - switch ( $function ) { - case 'get_results': - foreach ( $res as $idx => $row ) { - if ( isset( $row->option_name ) && $row->option_name == 'cron' ) - $res[$idx]->option_value = serialize( array() ); - } - break; - case 'get_row': - if ( isset( $res->option_name ) && $res->option_name == 'cron' ) - $res->option_value = serialize( array() ); - break; - } - return $res; - } - - function get_cols( $columns, $limit=false, $offset=false, $where=false ) { - global $wpdb; - if ( !is_array( $columns ) || !count( $columns ) ) - return false; - if ( !$this->table ) - return false; - $table = esc_sql( $this->table ); - $limitsql = ''; - $offsetsql = ''; - $wheresql = ''; - if ( $limit ) - $limitsql = ' LIMIT ' . intval( $limit ); - if ( $offset ) - $offsetsql = ' OFFSET ' . intval( $offset ); - if ( $where ) - $wheresql = ' WHERE ' . base64_decode($where); - $rval = array(); - foreach ( $wpdb->get_results( "SELECT * FROM `$this->table` $wheresql $limitsql $offsetsql" ) as $row ) { - // We don't need to actually record a real cron option value, just an empty array - if ( isset( $row->option_name ) && $row->option_name == 'cron' ) - $row->option_value = serialize( array() ); - if ( !empty( $this->structure ) ) { - $hash = md5( $this->convert_to_sql_string( $row, $this->structure->columns ) ); - foreach ( get_object_vars( $row ) as $i => $v ) { - if ( !in_array( $i, $columns ) ) - unset( $row->$i ); - } - - $row->hash = $hash; - } else { - $keys = array(); - $vals = array(); - foreach ( get_object_vars( $row ) as $i => $v ) { - $keys[] = sprintf( "`%s`", esc_sql( $i ) ); - $vals[] = sprintf( "'%s'", esc_sql( $v ) ); - if ( !in_array( $i, $columns ) ) - unset( $row->$i ); - } - $row->hash = md5( sprintf( "(%s) VALUES(%s)", implode( ',',$keys ), implode( ',',$vals ) ) ); - } - $rval[]=$row; - } - return $rval; - } - - /** - * Convert a PHP object to a mysqldump compatible string, using the provided data type information. - **/ - function convert_to_sql_string( $data, $datatypes ) { - global $wpdb; - if ( !is_object( $data ) || !is_object( $datatypes ) ) - return false; - - foreach ( array_keys( (array)$data ) as $key ) - $keys[] = sprintf( "`%s`", esc_sql( $key ) ); - foreach ( (array)$data as $key => $val ) { - if ( null === $val ) { - $vals[] = 'NULL'; - continue; - } - $type = 'text'; - if ( isset( $datatypes->$key->type ) ) - $type= strtolower( $datatypes->$key->type ); - if ( preg_match( '/int|double|float|decimal|bool/i', $type ) ) - $type = 'number'; - - if ( 'number' === $type ) { - // do not add quotes to numeric types. - $vals[] = $val; - } else { - $val = esc_sql( $val ); - // Escape characters that aren't escaped by esc_sql(): \n, \r, etc. - $val = str_replace( array( "\x0a", "\x0d", "\x1a" ), array( '\n', '\r', '\Z' ), $val ); - $vals[] = sprintf( "'%s'", $val ); - } - } - if ( !count($keys) ) - return false; - // format the row as a mysqldump line: (`column1`, `column2`) VALUES (numeric_value1,'text value 2') - return sprintf( "(%s) VALUES (%s)", implode( ', ',$keys ), implode( ',',$vals ) ); - } - - - - function parse_create_table( $sql ) { - $table = new stdClass(); - - $table->raw = $sql; - $table->columns = new stdClass(); - $table->primary = null; - $table->uniques = new stdClass(); - $table->keys = new stdClass(); - $sql = explode( "\n", trim( $sql ) ); - $table->engine = preg_replace( '/^.+ ENGINE=(\S+) .+$/i', "$1", $sql[(count($sql)-1)] ); - $table->charset = preg_replace( '/^.+ DEFAULT CHARSET=(\S+)( .+)?$/i', "$1", $sql[(count($sql)-1)] ); - $table->single_int_paging_column = null; - - foreach ( $sql as $idx => $val ) - $sql[$idx] = trim($val); - $columns = preg_grep( '/^\s*`[^`]+`\s*\S*/', $sql ); - if ( !$columns ) - return false; - - $table->name = preg_replace( '/(^[^`]+`|`[^`]+$)/', '', array_shift( preg_grep( '/^CREATE\s+TABLE\s+/', $sql ) ) ); - - foreach ( $columns as $line ) { - preg_match( '/^`([^`]+)`\s+([a-z]+)(\(\d+\))?\s*/', $line, $m ); - $name = $m[1]; - $table->columns->$name = new stdClass(); - $table->columns->$name->null = (bool)stripos( $line, ' NOT NULL ' ); - $table->columns->$name->type = $m[2]; - if ( isset($m[3]) ) { - if ( substr( $m[3], 0, 1 ) == '(' ) - $table->columns->$name->length = substr( $m[3], 1, -1 ); - else - $table->columns->$name->length = $m[3]; - } else { - $table->columns->$name->length = null; - } - if ( preg_match( '/ character set (\S+)/i', $line, $m ) ) { - $table->columns->$name->charset = $m[1]; - } else { - $table->columns->$name->charset = ''; - } - if ( preg_match( '/ collate (\S+)/i', $line, $m ) ) { - $table->columns->$name->collate = $m[1]; - } else { - $table->columns->$name->collate = ''; - } - if ( preg_match( '/ DEFAULT (.+),$/i', $line, $m ) ) { - if ( substr( $m[1], 0, 1 ) == "'" ) - $table->columns->$name->default = substr( $m[1], 1, -1 ); - else - $table->columns->$name->default = $m[1]; - } else { - $table->columns->$name->default = null; - } - $table->columns->$name->line = $line; - } - $pk = preg_grep( '/^PRIMARY\s+KEY\s+/i', $sql ); - if ( count( $pk ) ) { - $pk = array_pop( $pk ); - $pk = preg_replace( '/(^[^\(]+\(`|`\),?$)/', '', $pk ); - $pk = preg_replace( '/\([0-9]+\)/', '', $pk ); - $pk = explode( '`,`', $pk ); - $table->primary = $pk; - } - if ( is_array( $table->primary ) && count( $table->primary ) == 1 ) { - $pk_column_name = $table->primary[0]; - switch( strtolower( $table->columns->$pk_column_name->type ) ) { - // Integers, exact value - case 'tinyint': - case 'smallint': - case 'int': - case 'integer': - case 'bigint': - // Fixed point, exact value - case 'decimal': - case 'numeric': - // Floating point, approximate value - case 'float': - case 'double': - case 'real': - // Date and Time - case 'date': - case 'datetime': - case 'timestamp': - $table->single_int_paging_column = $pk_column_name; - break; - } - } - $keys = preg_grep( '/^((?:UNIQUE )?INDEX|(?:UNIQUE )?KEY)\s+/i', $sql ); - if ( !count( $keys ) ) - return $table; - foreach ( $keys as $idx => $key ) { - if ( 0 === strpos( $key, 'UNIQUE' ) ) - $is_unique = false; - else - $is_unique = true; - - // for KEY `refresh` (`ip`,`time_last`) USING BTREE, - $key = preg_replace( '/ USING \S+ ?(,?)$/', '$1', $key ); - - // for KEY `id` USING BTREE (`id`), - $key = preg_replace( '/` USING \S+ \(/i', '` (', $key ); - - $key = preg_replace( '/^((?:UNIQUE )?INDEX|(?:UNIQUE )?KEY)\s+/i', '', $key ); - $key = preg_replace( '/\([0-9]+\)/', '', $key ); - preg_match( '/^`([^`]+)`\s+\(`(.+)`\),?$/', $key, $m ); - $key = $m[1]; //preg_replace( '/\([^)]+\)/', '', $m[1]); - if ( !$key ) - continue; - if ( $is_unique ) - $table->keys->$key = explode( '`,`', $m[2] ); - else - $table->uniques->$key = explode( '`,`', $m[2] ); - } - - $uniques = get_object_vars( $table->uniques ); - foreach( $uniques as $idx => $val ) { - if ( is_array( $val ) && count( $val ) == 1 ) { - $pk_column_name = $val[0]; - switch( strtolower( $table->columns->$pk_column_name->type ) ) { - // Integers, exact value - case 'tinyint': - case 'smallint': - case 'int': - case 'integer': - case 'bigint': - // Fixed point, exact value - case 'decimal': - case 'numeric': - // Floating point, approximate value - case 'float': - case 'double': - case 'real': - // Date and Time - case 'date': - case 'datetime': - case 'timestamp': - $table->single_int_paging_column = $pk_column_name; - break; - } - } - } - - if ( empty( $table->primary ) ) { - if ( !empty( $uniques ) ) - $table->primary = array_shift( $uniques ); - } - - return $table; - } - - function restore( $data_file, $md5_sum, $delete = true ) { - global $wpdb; - if ( !file_exists( $data_file ) || !is_readable( $data_file ) || !filesize( $data_file ) ) - return array( 'last_error' => 'File does not exist', 'data_file' => $data_file ); - if ( $md5_sum && md5_file( $data_file ) !== $md5_sum ) - return array( 'last_error' => 'Checksum mistmatch', 'data_file' => $data_file ); - if ( function_exists( 'exec' ) && ( $mysql = exec( 'which mysql' ) ) ) { - $details = explode( ':', DB_HOST, 2 ); - $params = array( defined( 'DB_CHARSET' ) && DB_CHARSET ? DB_CHARSET : 'utf8', DB_USER, DB_PASSWORD, $details[0], isset( $details[1] ) ? $details[1] : 3306, DB_NAME, $data_file ); - exec( sprintf( '%s %s', escapeshellcmd( $mysql ), vsprintf( '-A --default-character-set=%s -u%s -p%s -h%s -P%s %s < %s', array_map( 'escapeshellarg', $params ) ) ), $output, $r ); - if ( 0 === $r ) { - if ( $delete ) - @unlink( $data_file ); - return array( 'affected_rows' => 1, 'data_file' => $data_file, 'mysql_cli' => true ); - } - } - $size = filesize( $data_file ); - $fh = fopen( $data_file, 'r' ); - $last_error = false; - $affected_rows = 0; - if ( $size == 0 || !is_resource( $fh ) ) { - if ( $delete ) - @unlink( $data_file ); - return array( 'last_error' => 'Empty file or not readable', 'data_file' => $data_file ); - } else { - while( !feof( $fh ) ) { - $query = trim( stream_get_line( $fh, $size, ";\n" ) ); - if ( !empty( $query ) ) { - $affected_rows += $wpdb->query( $query ); - $last_error = $wpdb->last_error; - } - } - fclose( $fh ); - } - if ( $delete ) - @unlink( $data_file ); - return array( 'affected_rows' => $affected_rows, 'last_error' => $last_error, 'data_file' => $data_file ); - } -} diff --git a/vaultpress/class.vaultpress-filesystem.php b/vaultpress/class.vaultpress-filesystem.php deleted file mode 100644 index f6de5a4a3b..0000000000 --- a/vaultpress/class.vaultpress-filesystem.php +++ /dev/null @@ -1,320 +0,0 @@ -dir = realpath( $vp->resolve_content_dir() . 'plugins' ); - $this->type = 'p'; - return true; - } - if ( $type == 'themes' ) { - $this->dir = realpath( $vp->resolve_content_dir() . 'themes' ); - $this->type = 't'; - return true; - } - if ( $type == 'uploads' ) { - $this->dir = realpath( $vp->resolve_upload_path() ); - $this->type = 'u'; - return true; - } - if ( $type == 'content' ) { - $this->dir = realpath( $vp->resolve_content_dir() ); - $this->type = 'c'; - return true; - } - if ( $type == 'root' ) { - $this->dir = realpath( ABSPATH ); - $this->type = 'r'; - return true; - } - die( 'naughty naughty' ); - } - - function fdump( $file ) { - header("Content-Type: application/octet-stream;"); - header("Content-Transfer-Encoding: binary"); - @ob_end_clean(); - if ( !file_exists( $file ) || !is_readable( $file ) ) { - $file_name = basename( $file ); - if ( 'wp-config.php' == $file_name ) { - $dir = dirname( $file ); - $dir = explode( DIRECTORY_SEPARATOR, $dir ); - array_pop( $dir ); - $dir = implode( DIRECTORY_SEPARATOR, $dir ); - $file = trailingslashit( $dir ) . $file_name; - if ( !file_exists( $file ) || !is_readable( $file ) ) - die( "no such file" ); - } else { - die( "no such file" ); - } - } - if ( !is_file( $file ) && !is_link( $file ) ) - die( "can only dump files" ); - $fp = @fopen( $file, 'rb' ); - if ( !$fp ) - die( "could not open file" ); - while ( !feof( $fp ) ) - echo @fread( $fp, 8192 ); - @fclose( $fp ); - die(); - } - - function exec_checksum( $file, $method ) { - if ( !function_exists( 'exec' ) ) - return false; - $out = array(); - if ( 'md5' == $method ) - $method_bin = 'md5sum'; - if ( 'sha1' == $method ) - $method_bin = 'sha1sum'; - $checksum = ''; - exec( sprintf( '%s %s', escapeshellcmd( $method_bin ), escapeshellarg( $file ) ), $out ); - if ( !empty( $out ) ) - $checksum = trim( array_shift( explode( ' ', array_pop( $out ) ) ) ); - if ( !empty( $checksum ) ) - return $checksum; - return false; - } - - function checksum_file( $file, $method ) { - $use_exec = false; - if ( filesize( $file ) >= 104857600 ) - $use_exec = true; - switch( $method ) { - case 'md5': - if ( $use_exec ) { - $checksum = $this->exec_checksum( $file, $method ); - if ( !empty( $checksum ) ) - return $checksum; - } - return md5_file( $file ); - break; - case 'sha1': - if ( $use_exec ) { - $checksum = $this->exec_checksum( $file, $method ); - if ( !empty( $checksum ) ) - return $checksum; - } - return sha1_file( $file ); - break; - default: - return false; - break; - } - } - - function stat( $file, $md5=true, $sha1=true ) { - if ( ! file_exists( $file ) ) - return false; - - $rval = array(); - foreach ( stat( $file ) as $i => $v ) { - if ( is_numeric( $i ) ) - continue; - $rval[$i] = $v; - } - $rval['type'] = filetype( $file ); - if ( $rval['type'] == 'file' ) { - if ( $md5 ) - $rval['md5'] = $this->checksum_file( $file, 'md5' ); - if ( $sha1 ) - $rval['sha1'] = $this->checksum_file( $file, 'sha1' ); - } - $dir = $this->dir; - if ( 0 !== strpos( $file, $dir ) && 'wp-config.php' == basename( $file ) ) { - $dir = explode( DIRECTORY_SEPARATOR, $dir ); - array_pop( $dir ); - $dir = implode( DIRECTORY_SEPARATOR, $dir ); - } - $rval['full_path'] = realpath( $file ); - - // Avoid rebuilding path tidy-up regex when fetching multiple entries - static $last_dir = null; - static $dir_regex = null; - if ( $last_dir !== $dir ) { - $dir_regex = '#' . preg_quote( $dir ) . '#'; - $last_dir = $dir; - } - - $rval['path'] = preg_replace( $dir_regex, '', $file, 1 ); - return $rval; - } - - function ls( $what, $md5=false, $sha1=false, $limit=null, $offset=null, $full_list=false ) { - clearstatcache(); - $path = realpath($this->dir . $what); - $dir = $this->dir; - if ( !$path && '/wp-config.php' == $what ) { - $dir = explode( DIRECTORY_SEPARATOR, $dir ); - array_pop( $dir ); - $dir = implode( DIRECTORY_SEPARATOR, $dir ); - $path = realpath( $dir . $what ); - } - if ( is_file($path) ) - return $this->stat( $path, $md5, $sha1 ); - if ( is_dir($path) ) { - $entries = array(); - $current = 0; - $offset = (int)$offset; - $orig_limit = (int)$limit; - $limit = $offset + (int)$limit; - foreach ( (array)$this->scan_dir( $path ) as $i ) { - if ( !$full_list && !$this->should_backup_file( $i ) ) - continue; - $current++; - if ( $offset >= $current ) - continue; - if ( $limit && $limit < $current ) - break; - - // don't sha1 files over 100MB if we are batching due to memory consumption - if ( $sha1 && $orig_limit > 1 && is_file( $i ) && (int)@filesize( $i ) > 104857600 ) - $sha1 = false; - - $entries[] = $this->stat( $i, $md5, $sha1 ); - } - return $entries; - } - } - - function should_backup_file( $filepath ) { - $vp = VaultPress::init(); - if ( is_dir( $filepath ) ) - $filepath = trailingslashit( $filepath ); - $regex_patterns = $vp->get_should_ignore_files(); - foreach ( $regex_patterns as $pattern ) { - $matches = array(); - if ( preg_match( $pattern, $filepath, $matches ) ) { - return false; - } - } - return true; - } - - function validate( $file ) { - $rpath = realpath( $this->dir.$file ); - $dir = $this->dir; - if ( !$rpath && '/wp-config.php' == $file ) { - $dir = explode( DIRECTORY_SEPARATOR, $dir ); - array_pop( $dir ); - $dir = implode( DIRECTORY_SEPARATOR, $dir ); - $rpath = realpath( $dir . $file ); - } - if ( !$rpath ) - die( serialize( array( 'type' => 'null', 'path' => $file ) ) ); - if ( is_dir( $rpath ) ) - $rpath = "$rpath/"; - if ( strpos( $rpath, $dir ) !== 0 ) - return false; - return true; - } - - function dir_examine( $subdir='', $recursive=true, $origin=false ) { - $res = array(); - if ( !$subdir ) - $subdir='/'; - $dir = $this->dir . $subdir; - if ( $origin === false ) - $origin = $this->dir . $subdir; - if ( is_file($dir) ) { - if ( $origin == $dir ) - $name = str_replace( $this->dir, '/', $subdir ); - else - $name = str_replace( $origin, '/', $dir ); - $res[$name] = $this->stat( $dir.$entry ); - return $res; - } - $d = dir( $dir ); - if ( !$d ) - return $res; - while ( false !== ( $entry = $d->read() ) ) { - $rpath = realpath( $dir.$entry ); - $bname = basename( $rpath ); - if ( is_link( $dir.$entry ) ) - continue; - if ( $entry == '.' || $entry == '..' || $entry == '...' ) - continue; - if ( !$this->validate( $subdir.$entry ) ) - continue; - $name = str_replace( $origin, '/', $dir.$entry ); - $res[$name] = $this->stat( $dir.$entry ); - if ( $recursive && is_dir( $this->dir.$subdir.'/'.$entry ) ) { - $res = array_merge( $res, $this->dir_examine( $subdir.$entry.'/', $recursive, $origin ) ); - } - } - return $res; - } - - function dir_checksum( $base, &$list, $recursive=true ) { - if ( $list == null ) - $list = array(); - - if ( 0 !== strpos( $base, $this->dir ) ) - $base = $this->dir . rtrim( $base, '/' ); - - $shortbase = substr( $base, strlen( $this->dir ) ); - if ( !$shortbase ) - $shortbase = '/'; - $stat = stat( $base ); - $directories = array(); - $files = (array)$this->scan_dir( $base ); - array_push( $files, $base ); - foreach ( $files as $file ) { - if ( $file !== $base && @is_dir( $file ) ) { - $directories[] = $file; - continue; - } - $stat = @stat( $file ); - if ( !$stat ) - continue; - $shortstat = array(); - foreach( $this->keys as $key ) { - if ( isset( $stat[$key] ) ) - $shortstat[$key] = $stat[$key]; - } - $list[$shortbase][basename( $file )] = $shortstat; - } - $list[$shortbase] = md5( serialize( $list[$shortbase] ) ); - if ( !$recursive ) - return $list; - foreach ( $directories as $dir ) { - $this->dir_checksum( $dir, $list, $recursive ); - } - return $list; - } - - function scan_dir( $path ) { - $files = array(); - - if ( false === is_readable( $path ) ) { - return array(); - } - - $dh = opendir( $path ); - - if ( false === $dh ) { - return array(); - } - - while ( false !== ( $file = readdir( $dh ) ) ) { - if ( $file == '.' || $file == '..' ) continue; - $files[] = "$path/$file"; - } - - closedir( $dh ); - sort( $files ); - return $files; - } -} diff --git a/vaultpress/class.vaultpress-hotfixes.php b/vaultpress/class.vaultpress-hotfixes.php deleted file mode 100644 index dc900aa987..0000000000 --- a/vaultpress/class.vaultpress-hotfixes.php +++ /dev/null @@ -1,466 +0,0 @@ - 2.3.10 - add_action( 'init', array( $this , 'protect_woocommerce_paypal_object_injection' ), 1 ); - - if ( version_compare( $wp_version, '4.7.1', '<=' ) ) { - // Protect WordPress 4.4 - 4.7.1 against WP REST type abuse - if ( version_compare( $wp_version, '4.4', '>=' ) ) { - add_filter( 'rest_pre_dispatch', array( $this, 'protect_rest_type_juggling' ), 10, 3 ); - } - - // Protect WordPress 4.0 - 4.7.1 against faulty youtube embeds - if ( version_compare( $wp_version, '4.0', '>=' ) ) { - $this->protect_youtube_embeds(); - } - } - - } - - function protect_rest_type_juggling( $replace, $server, $request ) { - if ( isset( $request['id'] ) ) { - $request['id'] = intval( $request['id'] ); - } - - return $replace; - } - - function protect_youtube_embeds() { - if ( ! apply_filters( 'load_default_embeds', true ) ) { - return; - } - - wp_embed_unregister_handler( 'youtube_embed_url' ); - wp_embed_register_handler( 'youtube_embed_url', '#https?://(www.)?youtube\.com/(?:v|embed)/([^/]+)#i', array( $this, 'safe_embed_handler_youtube' ), 9, 4 ); - } - - function safe_embed_handler_youtube( $matches, $attr, $url, $rawattr ) { - $matches[2] = urlencode( $matches[2] ); - return( wp_embed_handler_youtube( $matches, $attr, $url, $rawattr ) ); - } - - function disable_jetpack_oembed( $enabled ) { - return false; - } - - function get_pagenum_link( $url ) { - return esc_url_raw( $url ); - } - - function r20493_make_url_clickable_cb($matches) { - $url = $matches[2]; - - if ( ')' == $matches[3] && strpos( $url, '(' ) ) { - // If the trailing character is a closing parethesis, and the URL has an opening parenthesis in it, add the closing parenthesis to the URL. - // Then we can let the parenthesis balancer do its thing below. - $url .= $matches[3]; - $suffix = ''; - } else { - $suffix = $matches[3]; - } - - // Include parentheses in the URL only if paired - while ( substr_count( $url, '(' ) < substr_count( $url, ')' ) ) { - $suffix = strrchr( $url, ')' ) . $suffix; - $url = substr( $url, 0, strrpos( $url, ')' ) ); - } - - $url = esc_url($url); - if ( empty($url) ) - return $matches[0]; - - return $matches[1] . "$url" . $suffix; - } - - function r20493_split_str_by_whitespace( $string, $goal ) { - $chunks = array(); - - $string_nullspace = strtr( $string, "\r\n\t\v\f ", "\000\000\000\000\000\000" ); - - while ( $goal < strlen( $string_nullspace ) ) { - $pos = strrpos( substr( $string_nullspace, 0, $goal + 1 ), "\000" ); - - if ( false === $pos ) { - $pos = strpos( $string_nullspace, "\000", $goal + 1 ); - if ( false === $pos ) { - break; - } - } - - $chunks[] = substr( $string, 0, $pos + 1 ); - $string = substr( $string, $pos + 1 ); - $string_nullspace = substr( $string_nullspace, $pos + 1 ); - } - - if ( $string ) { - $chunks[] = $string; - } - - return $chunks; - } - - function r18346_sanitize_admin_email( $value ) { - return sanitize_email( $value ); // Is it enough ? - } - - function r18346_sanitize_lang( $value ) { - $allowed = apply_filters( 'available_languages', get_available_languages() ); // add a filter to unit test - if ( !empty( $value ) && !in_array( $value, $allowed ) ) - return false; - else - return $value; - } - - // Protect All-in-one SEO AJAX calls from script injection and changes without privileges. Affects versions <= 2.1.5 - function protect_aioseo_ajax() { - if ( defined( 'AIOSEOP_VERSION' ) && version_compare( AIOSEOP_VERSION, '2.1.5', '>' ) ) - return; - - if ( ! isset( $_POST['post_id'] ) || ! isset( $_POST['target_meta'] ) ) - die(); - - // Ensure the current user has permission to write to the post. - if ( ! current_user_can( 'edit_post', intval( $_POST['post_id'] ) ) ) - die(); - - // Limit the fields that can be written to - if ( ! in_array( $_POST['target_meta'], array( 'title', 'description', 'keywords' ) ) ) - die(); - - // Strip tags from the metadata value. - $_POST['new_meta'] = strip_tags( $_POST['new_meta'] ); - } - - // Protect WooCommerce 2.0.20 - 2.3.10 from PayPal IPN object injection attack. - function protect_woocommerce_paypal_object_injection() { - global $woocommerce; - if ( ! isset( $woocommerce ) ) - return; - - $wc_version = $woocommerce->version; - if ( version_compare( $wc_version, '2.0.20', '<' ) || version_compare( $wc_version, '2.3.11', '>=' ) ) - return; - - if ( isset( $_REQUEST['paypalListener'] ) ) { - $check_fields = array( 'custom', 'cm' ); - foreach ( $check_fields as $field ) { - if ( isset( $_REQUEST[ $field ] ) && preg_match( '/[CO]:\+?[0-9]+:/', $_REQUEST[ $field ] ) ) { - die(); - } - } - } - } -} - -class VaultPress_kses { - static function wp_kses($string, $allowed_html, $allowed_protocols = array ()) { - $string = wp_kses_no_null($string); - $string = wp_kses_js_entities($string); - $string = wp_kses_normalize_entities($string); - return VaultPress_kses::wp_kses_split($string, $allowed_html, $allowed_protocols); - } - - static function wp_kses_split($string, $allowed_html, $allowed_protocols) { - global $pass_allowed_html, $pass_allowed_protocols; - $pass_allowed_html = $allowed_html; - $pass_allowed_protocols = $allowed_protocols; - return preg_replace_callback( '%(|$))|(<[^>]*(>|$)|>)%', 'VaultPress_kses::_vp_kses_split_callback', $string ); - } - - static function _vp_kses_split_callback( $match ) { - global $pass_allowed_html, $pass_allowed_protocols; - return VaultPress_kses::wp_kses_split2( $match[0], $pass_allowed_html, $pass_allowed_protocols ); - } - - static function wp_kses_split2($string, $allowed_html, $allowed_protocols) { - $string = wp_kses_stripslashes($string); - - if (substr($string, 0, 1) != '<') - return '>'; - # It matched a ">" character - - if ( ''), '', $string ); - while ( $string != ($newstring = VaultPress_kses::wp_kses($string, $allowed_html, $allowed_protocols)) ) - $string = $newstring; - if ( $string == '' ) - return ''; - // prevent multiple dashes in comments - $string = preg_replace('/--+/', '-', $string); - // prevent three dashes closing a comment - $string = preg_replace('/-$/', '', $string); - return ""; - } - # Allow HTML comments - - if (!preg_match('%^<\s*(/\s*)?([a-zA-Z0-9]+)([^>]*)>?$%', $string, $matches)) - return ''; - # It's seriously malformed - - $slash = trim($matches[1]); - $elem = $matches[2]; - $attrlist = $matches[3]; - - if ( ! isset($allowed_html[strtolower($elem)]) ) - return ''; - # They are using a not allowed HTML element - - if ($slash != '') - return ""; - # No attributes are allowed for closing elements - - return VaultPress_kses::wp_kses_attr( $elem, $attrlist, $allowed_html, $allowed_protocols ); - } - - static function wp_kses_attr($element, $attr, $allowed_html, $allowed_protocols) { - # Is there a closing XHTML slash at the end of the attributes? - - $xhtml_slash = ''; - if (preg_match('%\s*/\s*$%', $attr)) - $xhtml_slash = ' /'; - - # Are any attributes allowed at all for this element? - if ( ! isset($allowed_html[strtolower($element)]) || count($allowed_html[strtolower($element)]) == 0 ) - return "<$element$xhtml_slash>"; - - # Split it - $attrarr = VaultPress_kses::wp_kses_hair($attr, $allowed_protocols); - - # Go through $attrarr, and save the allowed attributes for this element - # in $attr2 - $attr2 = ''; - - $allowed_attr = $allowed_html[strtolower($element)]; - foreach ($attrarr as $arreach) { - if ( ! isset( $allowed_attr[strtolower($arreach['name'])] ) ) - continue; # the attribute is not allowed - - $current = $allowed_attr[strtolower($arreach['name'])]; - if ( $current == '' ) - continue; # the attribute is not allowed - - if ( strtolower( $arreach['name'] ) == 'style' ) { - $orig_value = $arreach['value']; - $value = safecss_filter_attr( $orig_value ); - - if ( empty( $value ) ) - continue; - - $arreach['value'] = $value; - $arreach['whole'] = str_replace( $orig_value, $value, $arreach['whole'] ); - } - - if ( ! is_array($current) ) { - $attr2 .= ' '.$arreach['whole']; - # there are no checks - - } else { - # there are some checks - $ok = true; - foreach ($current as $currkey => $currval) { - if ( ! wp_kses_check_attr_val($arreach['value'], $arreach['vless'], $currkey, $currval) ) { - $ok = false; - break; - } - } - - if ( $ok ) - $attr2 .= ' '.$arreach['whole']; # it passed them - } # if !is_array($current) - } # foreach - - # Remove any "<" or ">" characters - $attr2 = preg_replace('/[<>]/', '', $attr2); - - return "<$element$attr2$xhtml_slash>"; - } - - static function wp_kses_hair($attr, $allowed_protocols) { - $attrarr = array (); - $mode = 0; - $attrname = ''; - $uris = array('xmlns', 'profile', 'href', 'src', 'cite', 'classid', 'codebase', 'data', 'usemap', 'longdesc', 'action'); - - # Loop through the whole attribute list - - while (strlen($attr) != 0) { - $working = 0; # Was the last operation successful? - - switch ($mode) { - case 0 : # attribute name, href for instance - - if (preg_match('/^([-a-zA-Z]+)/', $attr, $match)) { - $attrname = $match[1]; - $working = $mode = 1; - $attr = preg_replace('/^[-a-zA-Z]+/', '', $attr); - } - - break; - - case 1 : # equals sign or valueless ("selected") - - if (preg_match('/^\s*=\s*/', $attr)) # equals sign - { - $working = 1; - $mode = 2; - $attr = preg_replace('/^\s*=\s*/', '', $attr); - break; - } - - if (preg_match('/^\s+/', $attr)) # valueless - { - $working = 1; - $mode = 0; - if(false === array_key_exists($attrname, $attrarr)) { - $attrarr[$attrname] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); - } - $attr = preg_replace('/^\s+/', '', $attr); - } - - break; - - case 2 : # attribute value, a URL after href= for instance - - if (preg_match('%^"([^"]*)"(\s+|/?$)%', $attr, $match)) - # "value" - { - $thisval = $match[1]; - if ( in_array(strtolower($attrname), $uris) ) - $thisval = VaultPress_kses::wp_kses_bad_protocol($thisval, $allowed_protocols); - - if(false === array_key_exists($attrname, $attrarr)) { - $attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); - } - $working = 1; - $mode = 0; - $attr = preg_replace('/^"[^"]*"(\s+|$)/', '', $attr); - break; - } - - if (preg_match("%^'([^']*)'(\s+|/?$)%", $attr, $match)) - # 'value' - { - $thisval = $match[1]; - if ( in_array(strtolower($attrname), $uris) ) - $thisval = VaultPress_kses::wp_kses_bad_protocol($thisval, $allowed_protocols); - - if(false === array_key_exists($attrname, $attrarr)) { - $attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname='$thisval'", 'vless' => 'n'); - } - $working = 1; - $mode = 0; - $attr = preg_replace("/^'[^']*'(\s+|$)/", '', $attr); - break; - } - - if (preg_match("%^([^\s\"']+)(\s+|/?$)%", $attr, $match)) - # value - { - $thisval = $match[1]; - if ( in_array(strtolower($attrname), $uris) ) - $thisval = VaultPress_kses::wp_kses_bad_protocol($thisval, $allowed_protocols); - - if(false === array_key_exists($attrname, $attrarr)) { - $attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname=\"$thisval\"", 'vless' => 'n'); - } - # We add quotes to conform to W3C's HTML spec. - $working = 1; - $mode = 0; - $attr = preg_replace("%^[^\s\"']+(\s+|$)%", '', $attr); - } - - break; - } # switch - - if ($working == 0) # not well formed, remove and try again - { - $attr = wp_kses_html_error($attr); - $mode = 0; - } - } # while - - if ($mode == 1 && false === array_key_exists($attrname, $attrarr)) - # special case, for when the attribute list ends with a valueless - # attribute like "selected" - $attrarr[$attrname] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y'); - - return $attrarr; - } - - static function wp_kses_bad_protocol($string, $allowed_protocols) { - $string = wp_kses_no_null($string); - $iterations = 0; - - do { - $original_string = $string; - $string = VaultPress_kses::wp_kses_bad_protocol_once($string, $allowed_protocols); - } while ( $original_string != $string && ++$iterations < 6 ); - - if ( $original_string != $string ) - return ''; - - return $string; - } - - static function wp_kses_bad_protocol_once($string, $allowed_protocols, $count = 1) { - $string2 = preg_split( '/:|�*58;|�*3a;/i', $string, 2 ); - if ( isset($string2[1]) && ! preg_match('%/\?%', $string2[0]) ) { - $string = trim( $string2[1] ); - $protocol = VaultPress_kses::wp_kses_bad_protocol_once2( $string2[0], $allowed_protocols ); - if ( 'feed:' == $protocol ) { - if ( $count > 2 ) - return ''; - $string = VaultPress_kses::wp_kses_bad_protocol_once( $string, $allowed_protocols, ++$count ); - if ( empty( $string ) ) - return $string; - } - $string = $protocol . $string; - } - - return $string; - } - - static function wp_kses_bad_protocol_once2( $string, $allowed_protocols ) { - $string2 = wp_kses_decode_entities($string); - $string2 = preg_replace('/\s/', '', $string2); - $string2 = wp_kses_no_null($string2); - $string2 = strtolower($string2); - - $allowed = false; - foreach ( (array) $allowed_protocols as $one_protocol ) { - if ( strtolower( $one_protocol ) == $string2 ) { - $allowed = true; - break; - } - } - - if ($allowed) - return "$string2:"; - else - return ''; - } - -} - -if ( !function_exists( 'get_available_languages' ) ) { - function get_available_languages( $dir = null ) { - $languages = array(); - foreach( glob( ( is_null( $dir) ? WP_LANG_DIR : $dir ) . '/*.mo' ) as $lang_file ) - if ( false === strpos( $lang_file, 'continents-cities' ) ) - $languages[] = basename($lang_file, '.mo'); - return $languages; - } -} diff --git a/vaultpress/class.vaultpress-ixr-ssl-client.php b/vaultpress/class.vaultpress-ixr-ssl-client.php deleted file mode 100644 index 3588483605..0000000000 --- a/vaultpress/class.vaultpress-ixr-ssl-client.php +++ /dev/null @@ -1,144 +0,0 @@ -useragent = $useragent; - } - } - function ssl( $port=443 ) { - if ( !extension_loaded( 'openssl' ) ) - return; - - $this->ssl = true; - if ( $port ) - $this->port = $port; - } - /** - * Perform the IXR request. - * - * @param string[] ...$args IXR args. - * - * @return bool True if request succeeded, false otherwise. - */ - function query( ...$args ) { - $method = array_shift($args); - $request = new IXR_Request($method, $args); - $length = $request->getLength(); - $xml = $request->getXml(); - $r = "\r\n"; - $request = "POST {$this->path} HTTP/1.0$r"; - - $this->headers['Host'] = preg_replace( '#^ssl://#', '', $this->server ); - $this->headers['Content-Type'] = 'text/xml'; - $this->headers['User-Agent'] = $this->useragent; - $this->headers['Content-Length'] = $length; - - $sslverify = true; - if ( defined( 'VAULTPRESS_NO_SSL' ) && VAULTPRESS_NO_SSL ) { - $sslverify = false; - } - if ( class_exists( 'WP_Http' ) ) { - $args = array( - 'method' => 'POST', - 'body' => $xml, - 'headers' => $this->headers, - 'sslverify' => $sslverify, - ); - if ( $this->timeout ) - $args['timeout'] = $this->timeout; - - $http = new WP_Http(); - if ( $this->ssl ) - $url = sprintf( 'https://%s%s', $this->server, $this->path ); - else - $url = sprintf( 'http://%s%s', $this->server, $this->path ); - - $result = $http->request( $url, $args ); - if ( is_wp_error( $result ) ) { - foreach( $result->errors as $type => $messages ) { - $this->error = new IXR_Error( - -32702, - sprintf( 'WP_Http error: %s, %s', $type, $messages[0] ) - ); - break; - } - return false; - } else if ( $result['response']['code'] > 299 || $result['response']['code'] < 200 ) { - $this->error = new IXR_Error( - -32701, - sprintf( 'Server rejected request (HTTP response: %s %s)', $result['response']['code'], $result['response']['message']) - ); - return false; - } - // Now parse what we've got back - $this->message = new IXR_Message( $result['body'] ); - } else { - foreach( $this->headers as $header => $value ) { - $request .= "{$header}: {$value}{$r}"; - } - $request .= $r; - - $request .= $xml; - // Now send the request - if ( $this->ssl ) - $host = 'ssl://'.$this->server; - else - $host = $this->server; - if ($this->timeout) { - $fp = @fsockopen( $host, $this->port, $errno, $errstr, $this->timeout ); - } else { - $fp = @fsockopen( $host, $this->port, $errno, $errstr ); - } - if (!$fp) { - $this->error = new IXR_Error( -32300, "Transport error - could not open socket: $errno $errstr" ); - return false; - } - fputs( $fp, $request ); - - $contents = ''; - $gotFirstLine = false; - $gettingHeaders = true; - - while ( !feof($fp) ) { - $line = fgets( $fp, 4096 ); - if ( !$gotFirstLine ) { - // Check line for '200' - if ( strstr($line, '200') === false ) { - $this->error = new IXR_Error( -32301, 'transport error - HTTP status code was not 200' ); - return false; - } - $gotFirstLine = true; - } - if ( trim($line) == '' ) { - $gettingHeaders = false; - } - if ( !$gettingHeaders ) { - $contents .= trim( $line ); - } - } - // Now parse what we've got back - $this->message = new IXR_Message( $contents ); - } - if ( !$this->message->parse() ) { - // XML error - $this->error = new IXR_Error( -32700, 'parse error. not well formed' ); - return false; - } - // Is the message a fault? - if ( $this->message->messageType == 'fault' ) { - $this->error = new IXR_Error( $this->message->faultCode, $this->message->faultString ); - return false; - } - // Message must be OK - return true; - } -} diff --git a/vaultpress/composer.json b/vaultpress/composer.json deleted file mode 100644 index dbab17bbb0..0000000000 --- a/vaultpress/composer.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "automattic/vaultpress", - "description": "VaultPress is a subscription service offering real-time backup, automated security scanning, and support from WordPress experts.", - "homepage": "https://vaultpress.com/", - "type": "wordpress-plugin", - "license": "GPL-2.0-or-later", - "support": { - "issues": "https://github.com/Automattic/jetpack/issues" - }, - "require": { - "automattic/jetpack-logo": "^1.5", - "automattic/jetpack-autoloader": "^2.10" - }, - "require-dev": { - "yoast/phpunit-polyfills": "1.0.3", - "automattic/jetpack-changelogger": "^3.0" - }, - "scripts": { - "phpunit": [ - "./vendor/phpunit/phpunit/phpunit --colors=always" - ], - "test-coverage": [ - "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-clover \"$COVERAGE_DIR/clover.xml\"" - ], - "test-php": [ - "@composer phpunit" - ] - }, - "repositories": [], - "minimum-stability": "dev", - "prefer-stable": true, - "config": { - "autoloader-suffix": "9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_1", - "allow-plugins": { - "automattic/jetpack-autoloader": true - } - }, - "extra": { - "mirror-repo": "Automattic/vaultpress", - "release-branch-prefix": "vaultpress", - "version-constants": { - "VAULTPRESS__VERSION": "vaultpress.php" - }, - "wp-plugin-slug": "vaultpress" - } -} diff --git a/vaultpress/cron-tasks.php b/vaultpress/cron-tasks.php deleted file mode 100644 index 63ac2bd074..0000000000 --- a/vaultpress/cron-tasks.php +++ /dev/null @@ -1,162 +0,0 @@ - 300, - 'display' => __( 'Once every five minutes' , 'vaultpress'), - ); - return $schedules; - } - - function _scan_site() { - if ( !get_option( '_vp_current_scan' ) ) { - $ignore_symlinks = get_option( '_vp_ignore_symlinks', false ); - $paths = array( 'root' => new VP_FileScan( ABSPATH, $ignore_symlinks ) ); - - // Is WP_CONTENT_DIR inside ABSPATH? - if ( is_dir( WP_CONTENT_DIR ) && strpos( realpath( WP_CONTENT_DIR ), realpath( ABSPATH ) . DIRECTORY_SEPARATOR ) !== 0 ) - $paths['content'] = new VP_FileScan( WP_CONTENT_DIR, $ignore_symlinks ); - - // Is WP_PLUGIN_DIR inside ABSPATH or WP_CONTENT_DIR? - if ( is_dir( WP_PLUGIN_DIR ) && strpos( realpath( WP_PLUGIN_DIR ), realpath( WP_CONTENT_DIR ) . DIRECTORY_SEPARATOR ) !== 0 && strpos( realpath( WP_PLUGIN_DIR ), realpath( ABSPATH ) . DIRECTORY_SEPARATOR ) !== 0 ) - $paths['plugins'] = new VP_FileScan( WP_PLUGIN_DIR, $ignore_symlinks ); - - // Is WPMU_PLUGIN_DIR inside ABSPATH or WP_CONTENT_DIR? - if ( is_dir( WPMU_PLUGIN_DIR ) && strpos( realpath( WPMU_PLUGIN_DIR ), realpath( WP_CONTENT_DIR ) . DIRECTORY_SEPARATOR ) !== 0 && strpos( realpath( WPMU_PLUGIN_DIR ), realpath( ABSPATH ) . DIRECTORY_SEPARATOR ) !== 0 ) - $paths['mu-plugins'] = new VP_FileScan( WPMU_PLUGIN_DIR, $ignore_symlinks ); - - update_option( '_vp_current_scan', $paths ); - } - } - - function _scan_clean_up( &$paths, $type = null ) { - if( is_array( $paths ) ) - unset( $paths[$type] ); - if ( empty( $paths ) || !is_array( $paths ) ) { - delete_option( '_vp_current_scan' ); - return true; - } - return false; - } - - function _scan_batch() { - $paths = get_option( '_vp_current_scan' ); - if ( empty( $paths ) || $this->_scan_clean_up( $paths ) ) - return false; - - if ( ! is_array( $paths ) ) { - return false; - } - - reset( $paths ); - - $type = null; - $current = false; - foreach ( $paths as $type => $current ) { - break; - } - - if ( !is_object( $current ) || empty( $current->last_dir ) ) - return $this->_scan_clean_up( $paths, $type ); - - $default_batch_limit = 400; - if ( ! function_exists( 'set_time_limit' ) || ! @set_time_limit( 0 ) ) { - $default_batch_limit = 100; // avoid timeouts - } - - $GLOBALS['vp_signatures'] = get_option( '_vp_signatures' ); - if ( empty( $GLOBALS['vp_signatures'] ) ) - return false; - - $limit = get_option( '_vp_batch_file_size', $default_batch_limit ); - $files = $current->get_files( $limit ); - - // No more files to scan. - if ( !$current->last_dir || count( $files ) < $limit ) - unset( $paths[$type] ); - - update_option( '_vp_current_scan', $paths ); - $results = array(); - foreach ( $files as $file ) { - $verdict = vp_scan_file( $file ); - if ( !empty( $verdict ) ) - $results[$file] = array( 'hash' => @md5_file( $file ), 'verdict' => $verdict ); - } - - if ( !empty( $results ) ) { - $vaultpress = VaultPress::init(); - $vaultpress->add_ping( 'security', array( 'suspicious_v2' => $results ) ); - } - } - - static function &init() { - static $instance = false; - if ( !$instance ) - $instance = new VP_Site_Scanner(); - return $instance; - } -} -VP_Site_Scanner::init(); diff --git a/vaultpress/fonts/vaultpress-regular.eot b/vaultpress/fonts/vaultpress-regular.eot deleted file mode 100755 index 816d6e190fe529c73e70e9c633031a0e2e387c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1186 zcmZ3)!oZNj%)r0|gg_<`u!2bj21bSnj0`|Ap8%);oB|4i!LI(PSKxwhh6qC#Ln1>d zLk>d;LjXe&Ln=ct5Hc|EF$4kG>0p^epg03V1yE%wkX6i($&k;G$DqJq$e_ny0EX5; zy}>{c5D!^21E{iuAsMW`46Z|u!5pa0njsfxb2iXSkeW20Svf$HlNgMEEK@MHU@!*q zEP-~bV0EPeh8r0eoPymkLV%e;S%iT(g@HMPfw_z0Nb}}%I`ev-I3L`y(0T{Ixy>Zz zOG4Gb)=r5Hl1HV)Jd4WI^_I?ykDYhe!^v}_aoC~TBCB=QF!JARo3UNqQs@Q$*Xu1Y z&QpIcai96&(p#p3G7kJg&P^-z%^o(&a5Oecz4XgwYF@atGGfsoos>(t1+%gmbuzQ3 z6@O+vnj!o1gyVrVCdYXmA33olb)&KDkGwEs`DiCgCDZ#3s!tNy_nrm9I_mqM7^am{tf-89$ zl~1zWU+69S_;)}^LGhWG-;Y;HF8%&to(Io|o^{+0f+D_t%Q_+@DWJmGk|jO;+mQg} zruLmF>bY!8ahDH9m{zBqQfdCt`uN+2Ue`74YG)>IynH?~@NNIC%58jKE`9G)oW;6c zZMti`zRtgwxvOS8R$WyaYUI}xmhYo>uGjzIioSdw@q2rJ?!El-AaBN}YuV0*U!xb? zdpFPe)fxGjtj*o!E4uq-yFO)zp@$ zmIo(hY!aIA#LjYZZsKh5wd}v7JTHh`_fYC#kFdJ(siJ45*{Yq2{?)m>i(gr3iW)q> z*maY!Nv}uF_qMcAQrEu9?_&(U8`<;nVPr|0qv=9CEe+-{EEbiaz zc2axtp52ePeR$or?!+PXIi=QoyYHvnlZaaTv{8HSNv3Vhw{w~u)LWPvBQ!jgU3?L} z<}7dP8`-b--{c*vVLg8Ev5xB0I&aIB(&3v6g**dl1+R)sQrgs#yElKm{j=-aJ?Cvd za8f|<-=^&+U%b!YdgLK9t(P_Muw@+E47XAb=QHjulX$P)4!AtmF;pshM{Ux{Y>%sI z-Div39)vX?~DGp?7)i1DHA)t zpHQ1>rnSdE$@Ead`N*8CrJ8!IQ#4+!K6~rjNyd~vOS2~yIb50Z++DRaWiGrt0RYC0 B#%TZm diff --git a/vaultpress/fonts/vaultpress-regular.svg b/vaultpress/fonts/vaultpress-regular.svg deleted file mode 100755 index 7cf2d86537..0000000000 --- a/vaultpress/fonts/vaultpress-regular.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/vaultpress/fonts/vaultpress-regular.ttf b/vaultpress/fonts/vaultpress-regular.ttf deleted file mode 100755 index fffa6c74f873d7b3b87225c41369a5a41b6516b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1888 zcmds1Urd`-6#w1ZuPrTIM+**RXxhmbF3M=T6$WTJht+H_7e>Vx|4>+=L`oZ5W?4++ zVNBu@-AGLEWr^--xMYdR9yE&&#s^HWCIX30AI&t;2csC1ZG822Zwo`mgU^09=R4O(bFc6LQ^^E>><$G#=CDlLO^;8r=7=WlC_C0%IU-05rgPp`p!~;XA zc;>SsFI^;_AsrcsXEW4S0dkqVVq|P`_|5)vFBAVjdsQ+KKWRih`2et}{NW@Op3{a6 zFdB#(lBrzYJ&QBM&k)y)rHA6^19KTK61!6IdnEOC=i^a!3{95tC^3rL|SHc&x#Z7d-(m)amcCJVv zmTcS-=V66m4H=8X@0Yk-L{MXzwtiwq`;Q^A`_AtVIB|zAPMuQkw;tfr$U>;7zHI9v zQuWp|po!e3>yau`u?Up-4g0oV?&cEgQMX8Up{iE2`B^t^*8Trvo*gH&y>ujERbJ;L zZE(Ov9ReP|$5QRDuJs6irSMdX)m!uCm4$ip9nm+xFfXsKb%}E*n#)CDuC1Ub9yKM3 z8)Mbe3aH8Qp4#*FDeOWRaEKjtw?*2d-CgnUu04&iQ8vpxjp0_S-y!_fq2NQ}J`obF z`=1aU!eUyUj6G=cMtY{_zMB*tYn9#Ybh~T~hbC{#P4`5+HrFE|>s#hE^Ea+*nL2l^ zQ#7rL-4~x-WqaqJsI1W46js8sN?7N*D}KKlw}&yMyIb#lNvI8~ZOj&keub3;#3)mq(FUwz|MSP3HNF#$u zyoOPXaPJ&^xJ(M71p&T&7^KyQLzti~jTGYKIeHJFS?k9zMt(Owt5E`3B&a>b_epv_ z$G8c4=5U-^WzC|Od_-&G)CK6(qE`oEIEsE8L&uhJkNqohtK7bOd{i}A)}6*UE8M)> zah#w=?Y&u>q-Ty@D*sa(5zRc+7S^Ta@G9$9KEtehjF|^HuVx(3)P@kz!T(hMRkmC})+n7;x+Rpm+Q&T$U5N}}l l?^!HRx7DM5`2tc%VX;q)j|LA!4=WxG1`a~>UOnpt{suF27VH23 diff --git a/vaultpress/fonts/vaultpress-regular.woff b/vaultpress/fonts/vaultpress-regular.woff deleted file mode 100755 index 207fd9282b7890e17cbe2dec30cf3b90515f74cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1308 zcmY+DeKb^Q9LJw)#xbzGehSXFG~nvjtt9G zScy8=5sPZG>a^u$V;b2#nA#R8ilHXjIKAm?iR^RbpMCE6p5OEP-0$;pe)o4X!+AV_ z0626l0G)_>*vFih|9|j!kzoKJL6BMyIyiS>a%a#E9%R@CV*__U4&SrY9kN`=0-&&Z zHO`5X#HK*j19QS3d_DNP`uNy1$aKh%Q8vVgPdqG!j0!ylP>g&*SxkZ`RtNxz1wAfM zo@8#PA^}3kcENlzl$~)l8BLI+XF-+#^G$^4mEdS%avb3!?gICOiUgyQ*erN1sRZW4 zS~ds;zDcnX5oE3KOn-QOrT5vW$0^Ba=>U-Dp~ne|Q{u!g$`s-7e!9f|C?Od$q8-Nd z3J&`>-iC8dL7q zO8}TX2CM70N7mMWQPxD5vLjga%_i_yPV(}r)2s&jHZ;N{;!8e5!HZI``4*Gv4}}jc z7Vj!&*(Gtk*1q}=mytT(eVdm^zJ@3{BxzyZhm9djb1CY}!juNwoAg9A?ZE8;OkeWp zkJB{`f4Bu`M4aOXt70_%!j)?4mgnU&2vb<_B3!pXW6GWS)3WL(15DEuY5vrXpVu8p zcWnB~sd(%(g-U%epI|uddSl|HdkOSzA0?nDy#+-Gxr^`nC@9O@%{gOAaIAjy!Eo zlO%g~zf$4RG|urU3b^93s|>8y7JfG{>%8ZE=FQiWxgyOI3`o-iYJ2OE1(O9Dx3o~I z-%kSEG6VQiZ1^?!TUB3QpAzUSm{8@^)&djYcn~>Blz55g2-sQYKF%os9EGX<`tt=S z+2|8YwJ8;ZBuq>61G%y4C8-s^?p31;qiBVTYWcrOvtI z&RyAl1CMs(94olA`$Tn*Wj9q@c1_{Rak_Y%jZ29^jnRpW4cKf-xkxF3Zk4&HZAXwdhndb7(vuVMV)3qbX(LXB=xQvyL znzbCV?ArFPRuY{tQqLEKE}w6^{${DcdD_qv?_9569EO9!wK52c}Zl6bOeaDsvU0L@55yX+GH{sRSA*^dAK diff --git a/vaultpress/images/automattic.svg b/vaultpress/images/automattic.svg deleted file mode 100644 index 312799fc8a..0000000000 --- a/vaultpress/images/automattic.svg +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/vaultpress/images/dashboard-icon-sprite-2x.png b/vaultpress/images/dashboard-icon-sprite-2x.png deleted file mode 100644 index de1d7c3bf7be191de891aa787f75d860970c4058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39553 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 a(Exc@$)67|zs?4nA?GY?PBYCs?*1Fllv1St diff --git a/vaultpress/images/dashboard-icon-sprite.png b/vaultpress/images/dashboard-icon-sprite.png deleted file mode 100644 index e8a65b30143555a5e810d5f8bdbb80512c3a4fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19289 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
    ag^qvows#dXB~Wn9*cNe3XKS_0 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 WMs=O0QD9^i2Hi~s-w4M{{n zR7i=fl}(72WfX?5Gl5o$Q%TJ*;ZHe&nKLeO;bxT42+E{^NlDSA8_i8SV^+FpQ)qz; z*NMa=IiMqiGL0~bib)75Y3hhGVCK&(><8()T72iL2m2;Jtpg7{?>YCm@AI7ZJnst) znA)cHsg+!PYFi_@@h_y!KsWFvuo$=o3}pBnU^eg_a2Obhh>3;-)NWu6upIa;Ne=;c zfVUDh2s{g{O0g$_VW2-EhW;U-J`a2VtOTY4N0MYLtM3Jt0WFz#12_ik&r`gZ;;#e0 z14n^RBI0JK%Yfa$CEzpQC!h`3kV((gZ{lBeJB#@o7zbVewgTxM5%}&1v=Hc>Z|JRg6w|LcQdw7y{#^8 zSRh5VM3>GBas7CDwR-&)laQ{9mfmuajPS{OFdSpR3`nmKkO8(>S#_$ zhk7qpXZl9f*2f|*L^{-)>L&HIT$|F@@t?>GkxunePF7#;JO3B*LS$(%MN1pa`xEq7 Vn)+!6m$d)@002ovPDHLkV1j$et)~D0 diff --git a/vaultpress/images/security.svg b/vaultpress/images/security.svg deleted file mode 100644 index a790c60737..0000000000 --- a/vaultpress/images/security.svg +++ /dev/null @@ -1 +0,0 @@ -security & backups image diff --git a/vaultpress/images/vaultpress.svg b/vaultpress/images/vaultpress.svg deleted file mode 100644 index cb72276adb..0000000000 --- a/vaultpress/images/vaultpress.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/vaultpress/images/vp-icon-sprite-2x.png b/vaultpress/images/vp-icon-sprite-2x.png deleted file mode 100644 index 36846c21b018379041e42851ec7d77174a426317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8061 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 Lf-0iqP2c?&4HhYD diff --git a/vaultpress/images/vp-icon-sprite.png b/vaultpress/images/vp-icon-sprite.png deleted file mode 100644 index e525eaecb8b7607ebf5b79647eaa7f9ee7b52221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2596 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 diff --git a/vaultpress/images/vp-toolbar-icon-trans-2x.png b/vaultpress/images/vp-toolbar-icon-trans-2x.png deleted file mode 100644 index 0cb57e6156b82ba200bcfa51ee34d114203a3d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1452 zcmV;d1ylNoP)kdg000GZNklq-F>&nCgFB^oA_ed+`XH85(Mk4#(i~ceUN+LjXfc5 z=Od~Prg*(o-F~rA>mrJXDf79u=8KR0&Iq~82?Mrp{_pXr$mf@^vZz$w;QLLVgu5*L z<~!VYNB&h}TCTu;>yhJy^CjQ!iJN)B2JlgxSTJH7j;+o;(blG>)au)Xd-s7aIDz1_)J-BMECGvbcO09(r1WU$HB~bh z000LJ%yc-(Fp?A(NCalmU}i9_0_K>>j^3gS0VP@`I^8-5S(X5UqqkQ<(t8mAfH~qy zjP8pB1F!+?C=Or@k|fLqjAKPontp4RwcS!@ia1{p@!HB|bU?U5t8x{>GgOqL>vj&G zfe1<=3o8X+A&dkgVPZH4`IBszoFPq*5@|^zmnk%mdX<{~SS+*pYS$mY1B*=ergmgu zM$P2{F2E&^OmTK;L{5D_qEYBlZBlktacWx9nSst_>*zsBr0VYQy{63u3z59xxSswE z4l}|708|XX2a(HUXCBbXdo)TO#>ScyGiUb8Ys=|5s3xn*Ni5PIo$C&IgJjdv*S>H)&^}T$d@XMwfe-e98*PL- zgP9b#+p__n+gR3N>|s)rl}7D}^PDPV(?=%ph_ER(>BrBz`T>OA?=Khi zsm#Jj&b9ysD0$e_Xgx?#9IHpYE9YueE!BU$m_*pSLW9KnVFXi}f{+2V{0yAPpQJhx zA=Iirdm|++Gdne>xFqbbs_Ui%;iFC?QQ!Gz&{kl{F@cEMq^Z3-L!!%c2mSI0HWC;vwtm$b7aPkgb%X4)F0Hs;+1SfDN1LLyF zJA(te9yOQi(8yt;?Vr^(RG$hXSY^>BgiuM#Z*9mz)^#c`BP+Y`N@04|jtBxJM@g|U z3&rMMRle7|)?UM<@o9@(jEm(=5mJ~}~#Q5KaeqMt&a@=#-*M8NEQRb!kol08Pc@e>#_u~ zXrE4VtH@^(z`q5+|9G;*L3HIqpou*sVu`dsnk|_slHb0s{J|Gs!hjJQJQ{12+TF{+ zB6`Z@xPpfK9O1^goIVs63XJ~>pq=%7)Tw%~Wd^{Bsd<_CWiBB_i5ip}?#}{vg#bDt zxP$0#3VOZNF*|zEuKajCl1A-fzxv$>i3RDQx+&=;XIE}0KKIUw(3)c{5$6mr9t7j_ z!wxNfP@~an)GC$avx`iijoZS+HhafL=11?`=*gM*djA_)zO^u?)3Z+i0000dbVG7wVRUJ4ZXi@?ZDjy6FETSP zF*3L3lr#VU0338hSaefwW^{L9a%BKPWN%_+AVz6&Wp{6KYjYq&Q#En5<2C>Q0{=-w zK~y-6eN$aXS^*UP?oF51$(`A{*R+3{L@y1OBglagmW*B^dJ6^{qhJKVh&3VDql<#Q z410+Yy(}nUdst&c7VI+0sGuLz+nr&UT3xSF=5kK=QXpH~2L}$E^L?CO;BOEBiUDW< z=xsLJolC#?GIlKrNtMIH!UjL{Rlt_08$1(?sPg^1_lP+ zEiEm592prI7X;y?wzf8Gu~?1`216L*5FYoT|cCjq0ZEtUXBLhIt zG+oN`{Oa7?T)^#iPs(I6IGxTH@p$}GDwUE8f>7Pl(__qLvzVHi+EuI7$0SLX03b*J z8HdBMU0Pbo1_FWD{{B8s5CqI-bJxMafi4=2QZ!B15d?vwqobcnrSgcTX=-+M)&n3z z0>~v2i4*`BjYev0Y-}?Zx z0y#;N@|~TX_o}L@^nSlTqSNWBo0^*H7>1F1z1|=Bd_JPpYT5Ji^LSrh-#CEd!U_N& z+~40n)!f{CU#V28mY0`z34$OR4<=lz3&gRcRc6rOM)iU3$QH#f(&x3>@1*4Bb{yWOJE zXlRCEZnU .vp-notice.notice { - display: none; -} -#wpbody-content > .wrap > .vp-notice.notice { - display: flex; -} - -/* Fix layout when the notice is shown in regular WP core screens */ -.wrap > .vp-notice.notice { - border-left: none; - padding: 0; -} diff --git a/vaultpress/readme.txt b/vaultpress/readme.txt deleted file mode 100644 index 4596f88073..0000000000 --- a/vaultpress/readme.txt +++ /dev/null @@ -1,59 +0,0 @@ -=== VaultPress === -Contributors: automattic, annezazu, apokalyptik, bjorsch, briancolinger, dsmart, georgestephanis, jeherve, josephscott, miguelxavierpenha, rachelsquirrel, rdcoll, sdixon194, shaunandrews, thingalon, viper007bond, williamvianas, xknown -Tags: security, malware, virus, archive, back up, back ups, backup, backups, scanning, restore, wordpress backup, site backup, website backup -Requires at least: 5.2 -Tested up to: 5.9 -Stable tag: 2.2.1 -Requires PHP: 5.6 -License: GPLv2 - -VaultPress is a subscription service offering real-time backup, automated security scanning, and support from WordPress experts. - -== Description == - -[VaultPress](http://vaultpress.com/plans) is a real-time backup and security scanning service designed and built by [Automattic](http://automattic.com/), the same company that operates (and backs up!) millions of sites on WordPress.com. - -VaultPress is now powered by Jetpack and effortlessly backs up every post, comment, media file, revision, and dashboard setting on your site to our servers. With VaultPress you're protected against hackers, malware, accidental damage, and host outages. - -To subscribe visit [VaultPress.com](http://vaultpress.com/plans). - -== Installation == - -1. [Visit our plans page](http://vaultpress.com/plans) and choose the subscription best suited to your needs. -2. Follow the on-screen instructions to check-out and pay. -3. We will automatically install and configure VaultPress for you. - -If you run into any difficulties please [contact us](https://vaultpress.com/contact/) - -== Frequently Asked Questions == - -View our full list of FAQs at [http://help.vaultpress.com/faq/](http://help.vaultpress.com/faq/?utm_source=plugin-readme&utm_medium=faq&utm_campaign=1.0) - -= What’s included in each plan? = - -All plans include automated daily backups (unlimited storage space) of your entire site, 1-click restores, stats, priority support, brute force attack protection, uptime monitoring, spam protection, site migration, and an activity log. - -The Personal and Premium plans are limited to a 30-day backup archive while Professional is unlimited. - -The Premium and Professional plans also offer automated security scanning against malware and infiltrations with the Professional plan also offering automated threat resolution. - -[Visit our site](https://vaultpress.com/contact/) for more detail and up-to-date information. - -= How many sites can I protect with VaultPress? = - -A VaultPress subscription is for a single WordPress site. You can purchase additional subscriptions for each of your WordPress sites, and manage them all with in one place. - -= Does VaultPress work with WordPress 3.0 Multisite installs? = - -Yes, VaultPress supports Multisite installs. Each site will require its own subscription. - -== Changelog == -### 2.2.1 - 2022-02-01 -#### Changed -- Colors: update colors to match the latest iterations of our brand. -- General: update WordPress tested up to version, since the plugin works with WordPress 5.9. - - --------- - -[See the previous changelogs here](https://github.com/Automattic/jetpack/blob/master/projects/plugins/vaultpress/CHANGELOG.md#changelog) diff --git a/vaultpress/styles.css b/vaultpress/styles.css deleted file mode 100644 index e5d11a6b3a..0000000000 --- a/vaultpress/styles.css +++ /dev/null @@ -1,1014 +0,0 @@ -/* ========================================================================== -Mini normalize -========================================================================== */ -#vp-notice, -#vp-wrap, -#vp-wrap *, -#vp-wrap *:before, -#vp-wrap *:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-font-smoothing: antialiased; -} - -#jp-plugin-container #vp-head, -#jp-plugin-container hr { - display: none; -} -#jp-plugin-container #vp-wrap { - margin-bottom: 24px; -} - -.notice { - display: none; -} - -/** - * Layout - */ -.wp-admin.jetpack_page_vaultpress { - background-color: #f6f6f6; - line-height: 1.4; - height: auto; -} - -.jetpack_page_vaultpress #wpcontent, -.toplevel_page_vaultpress #wpcontent { - padding-left: 0; -} - -#jp-plugin-container { - min-height: 100vh; - margin: 0; -} - -#jp-plugin-container a { - text-decoration: none; -} - -.jp-masthead { - background-color: #fff; - text-align: center; - box-shadow: 0 1px 0 rgba(213, 213, 213, 0.5), 0 1px 2px #eee; - margin-bottom: 24px; -} - -@media (max-width: 48.875rem) { - .jp-masthead { - padding: 0 1.5rem - } - - .jetpack-masterbar .jp-masthead { - padding-left: 4rem - } -} - -.jp-masthead__inside-container { - display: flex; - flex-wrap: wrap; - margin: 0 auto; - width: 100%; - max-width: 65rem; - padding-bottom: .375rem -} - -@media (max-width: 1250px) { - .jp-masthead__inside-container { - max-width: 95% - } -} - -.jp-masthead__logo-container { - flex-grow: 0; - flex-shrink: 0; - padding: .6875rem 0 0 -} - -@media (max-width: 480px) { - .jp-masthead__logo-container { - margin-right: 1rem - } -} - -.jp-masthead__logo-link { - display: inline-block; - outline: none; - vertical-align: middle -} - -.jp-masthead__logo-link:focus { - line-height: 0; - box-shadow: 0 0 0 2px #78dcfa -} - -.jp-masthead__logo-link img { - height: 32px; -} - -.jp-masthead__nav { - display: flex; - flex-wrap: nowrap; - flex-grow: 1; - flex-shrink: 0; - text-align: right; - margin-top: .375rem; - padding: .25rem 0 -} - -@media (max-width: 480px) { - .jp-masthead__nav { - text-align: left - } -} - -.jp-dash-section-header { - display: flex; - flex-wrap: wrap; - margin: 2.5rem 0 .5rem; -} - -.jp-dash-section-header__name { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - font-size: 1.25rem; - font-weight: 400; - white-space: nowrap; -} - -.vp-wrap { - margin: 0 auto; - text-align: left; - max-width: 65rem; - padding: 1.5rem; -} - -@media only screen and (min-width: 660px) { - .vp-row { - display: flex; - } - - .vp-row .vp-col { - flex-basis: 50%; - } - - .vp-row .vp-col:first-child { - margin-right: 1rem; - } - - .vp-notice__wide img { - float: left; - margin-right: 2.5em; - } -} - -@media only screen and (max-width: 660px) { - .vp-notice__wide { - text-align: center; - } - - .vp-notice__wide img, - .vp-notice__wide p { - margin-bottom: 2em; - } -} - -.vp-notice__wide .dops-card { - padding-top: 2.5em; - padding-bottom: 2.5em; -} - -.vp-notice__wide img { - width: 200px; -} - -.vp-notice__wide h2 { - margin-top: 0; -} - -/* Form */ - -.dops-button { - background: white; - border: solid #d5d5d5; - border-width: 1px 1px 2px; - color: #414141; - cursor: pointer; - display: inline-block; - margin: 0; - outline: 0; - overflow: hidden; - font-size: 14px; - font-weight: 500; - line-height: 21px; - text-overflow: ellipsis; - text-decoration: none; - vertical-align: top; - box-sizing: border-box; - border-radius: 4px; - padding: 7px 14px 9px; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -.dops-button:hover { - border-color: #bbb; - color: #414141; -} - -.dops-button:active { - border-width: 2px 1px 1px; -} - -.dops-button[disabled], .dops-button:disabled { - color: #eee; - background: white; - border-color: #eee; - cursor: default; -} - -.dops-button[disabled]:active, .dops-button:disabled:active { - border-width: 1px 1px 2px; -} - -.dops-button:focus { - outline: 0; - border-color: #00aadc; - box-shadow: 0 0 0 2px #78dcfa; -} - -.dops-button.is-compact { - padding: 7px; - color: #888; - font-size: 11px; - line-height: 1; - text-transform: uppercase; -} - -.dops-button.is-compact:disabled { - color: #eee; -} - -.dops-button.is-primary { - background: #00aadc; - border-color: #0087be; - color: white; -} - -.dops-button.is-primary:hover, .dops-button.is-primary:focus { - border-color: #005082; - color: white; -} - -.dops-button.is-primary[disabled], .dops-button.is-primary:disabled { - background: #bceefd; - border-color: #8cc9e2; - color: white; -} - -.dops-button.is-primary.is-compact { - color: white; - white-space: nowrap; -} - -.dops-button.is-scary { - color: #d94f4f; -} - -.dops-button.is-scary:hover, .dops-button.is-scary:focus { - border-color: #d94f4f; -} - -.dops-button.is-scary:focus { - box-shadow: 0 0 0 2px #eba3a3; -} - -.dops-button.is-scary[disabled], .dops-button.is-scary:disabled { - color: #f4cdcd; - border-color: #eee; -} - -.dops-button-group { - flex-grow: 1; - align-self: center; - font-size: 0; -} - -.dops-textarea { - box-sizing: border-box; - margin: 0; - padding: 0.4375rem 0.875rem; - min-height: 5.75rem; - width: 100%; - color: #414141; - font-size: 1rem; - line-height: 1.5; - border: 1px solid #d5d5d5; - background-color: #fff; - transition: all .15s ease-in-out; - box-shadow: none; -} - -.dops-textarea:-ms-input-placeholder { - color: #a2a2a2; -} - -.dops-textarea::-ms-input-placeholder { - color: #a2a2a2; -} - -.dops-textarea::placeholder { - color: #a2a2a2; -} - -.dops-textarea:hover { - border-color: #bbb; -} - -.dops-textarea:focus { - border-color: #0087be; - outline: none; - box-shadow: 0 0 0 2px #78dcfa; -} - -.dops-textarea:focus::-ms-clear { - display: none; -} - -.dops-textarea:disabled { - background: #f6f6f6; - border-color: #eee; - color: #bbb; - -webkit-text-fill-color: #bbb; -} - -.dops-textarea:disabled:hover { - cursor: default; -} - -.dops-textarea:disabled:-ms-input-placeholder { - color: #bbb; -} - -.dops-textarea:disabled::-ms-input-placeholder { - color: #bbb; -} - -.dops-textarea:disabled::placeholder { - color: #bbb; -} - -/* Card */ - -.dops-card { - display: block; - position: relative; - margin: 0 auto 10px auto; - padding: 16px; - box-sizing: border-box; - background: white; - box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eee; -} - -.dops-card:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} - -@media (min-width: 481px) { - .dops-card { - margin-bottom: 16px; - padding: 24px; - } -} - -.dops-card.is-compact { - margin-bottom: 1px; -} - -@media (min-width: 481px) { - .dops-card.is-compact { - margin-bottom: 1px; - padding: 16px 24px; - } -} - -/** - * Footer - */ -.jp-footer { - text-align: center; - margin: 1rem 0 2rem -} - -@media (max-width: 1040px) { - .jp-footer { - margin: 2rem 0 1.5rem - } -} - -@media (max-width: 660px) { - .jp-footer { - margin: 1.5rem 0 1rem - } -} - -.jp-footer__a8c-attr-container { - margin-bottom: .5rem -} - -.jp-footer__a8c-attr { - width: 11.25rem -} - -.jp-footer__a8c-attr path { - fill: #888 -} - -.jp-footer__links { - border-top: 1px #e1e1e1 solid; - border-bottom: 1px #e1e1e1 solid; - margin-top: 0; - margin-bottom: 1rem -} - -@media (max-width: 660px) { - .jp-footer__links { - border-bottom: none - } -} - -.jp-footer__link-item { - display: inline-block; - margin-bottom: 0 -} - -@media (min-width: 661px) { - .jp-footer__link-item { - display: inline-block - } -} - -@media (max-width: 660px) { - .jp-footer__link-item { - display: block; - border-bottom: 1px #e1e1e1 solid - } -} - -.jp-footer__link { - padding: 1rem .5rem; - color: #888; - display: inline-block; - cursor: pointer -} - -.jp-footer__link:visited { - color: #888 -} - -.jp-footer__link:hover, .jp-footer__link:active { - color: #272727 -} - -@media (max-width: 660px) { - .jp-footer__link { - display: block; - padding: .5rem 0; - border-bottom: 1px #e1e1e1 solid - } - - .jp-footer__link:last-of-type { - border-bottom: none - } -} - -/* ========================================================================== -Helpers -========================================================================== */ - -/* Clearfix */ -.clearfix, -.clrfix { - zoom:1; -} - -.clearfix:after, -.clrfix:after { - content:"."; - display:block; - height:0; - width:0; - line-height:0; - clear:both; - visibility:hidden; -} - -/* --- Trial period notice --- */ -.trial-notice { - clear: both; - background: #FBFBDF; - padding: 1px 25px; - margin: 0 20px 20px 0; - border-radius: 4px; - -webkit-background-clip: padding-box; -} - -.trial-expiring { - background: #fff; -} - -.trial-expiring p { - font-size: 18px; -} - -@media only screen and (-moz-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3, '/', 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) { - .trial-expiring p { - font-size: 16px; - } -} - -/* --- Remote Access Notice --- */ -#no-access-credentials { - position: relative; - clear: both; - margin: 0 20px 20px 0; - padding: 0 25px 0 68px; - border-radius: 4px; - background: #FBFBDF; - -webkit-background-clip: padding-box; - overflow: hidden; -} - -#no-access-credentials:before { - content: ''; - position: absolute; - top: 15px; - left: 20px; - width: 34px; - height: 32px; - background: url(images/dashboard-icon-sprite.png) no-repeat -270px -391px; - background-size: 300px 420px; -} - -#vp-wrap #no-access-credentials p { - margin: 20px 0; - color: #333; - font-size: 14px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); - text-align: left; - line-height: 1.4; - background: none; -} - -@media only screen and (-moz-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3, '/', 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) { - #no-access-credentials:before { - background-image: url(images/dashboard-icon-sprite-2x.png) no-repeat; - } -} - -/* --- Toolbar --- */ -#wpadminbar #wp-admin-bar-vp-notice a { - position: relative; - display: block; - margin-top: 3px; - padding: 1px 7px 0 26px; - height: 25px; - background-color: #ff9a00; - color: #fff; - color: rgba(255,255,255,0.9); - font-size: 12px; - line-height: 24px; - text-shadow: none; - border-radius: 2px; - overflow: hidden; -} - -#wpadminbar #wp-admin-bar-vp-notice a:active { - position: relative; - top: 1px; -} - -#wpadminbar #wp-admin-bar-vp-notice.error a { - background-color: #ac0300; -} - -#wpadminbar #wp-admin-bar-vp-notice .ab-icon { - position: static; -} - -#wpadminbar #wp-admin-bar-vp-notice .ab-icon:before { - content: ''; - position: absolute; - top: 4px; - left: 8px; - width: 16px; - height: 21px; - background: transparent url(images/vp-toolbar-icon-trans.png) no-repeat 0 2px; - background-size: 16px; -} - -@media only screen and (-moz-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3, '/', 2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) { - #wpadminbar #wp-admin-bar-vp-notice .ab-icon:before { - background: url(images/vp-toolbar-icon-trans-2x.png) no-repeat; - background-size: 16px; - } -} - - -/* ========================================================================== -Status Ticker -========================================================================== */ - -#vp-ticker { - position: relative; /* WAT */ - top: 0; - margin: 0 20px 20px 0; - padding: 9px 13px; - border-radius: 4px; - background: #333; - color: #ddd; -} - -#vp-ticker h3 { - display: inline; - margin: 0; - padding: 0 5px 0 0; - border-radius: 4px; - color: #ddd; - font-size: 13px; - font-weight: 700; - line-height: 1; -} - -#vp-ticker p { - display: inline; - margin: 0; - padding: 0; - font-size: 13px; - line-height: 1; -} - - -/* ========================================================================== -Tabs -========================================================================== */ - -#vp-tabs { /* WAT */ - /* IE 7 specific */ - *position: relative; - *z-index: 1; - overflow: hidden; -} - -.menu-tabs { - float: left; - height: 28px; - line-height: 28px; - margin: 0 5px 0 0; - padding: 0 8px; - font-size: 13px; - color: #818181; - background-color: #fff; - text-decoration: none; - text-transform: uppercase; - font-family: "Lucida Grande", Lucida, Helvetica, Verdana, Arial, sans-serif; -} - -.menu-tab-inactive { - background-color: #ddd; - color: #888; -} - -.menu-tab-inactive:hover { - text-decoration: underline; -} - -#vp-tab-content { - margin-right: 20px; - padding: 20px; - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; - border-bottom-left-radius: 6px; - background-color: #fff; - overflow: auto; -} - -#vp-tab-content .label { - padding-left: 8px; -} - -#vp-totals td { - border-top: #ececec 1px solid; - padding: 3px 0; - white-space: nowrap; -} - -#vp-totals .b { - padding-right: 6px; - text-align: right; - font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif; - font-size: 18px; -} - -#vp-totals .t { - font-size: 12px; - padding-right: 12px; - padding-top: 6px; - color: #777; -} - -#vp-totals .first, -#vp-totals .last { - width: 1%; -} - -#vp-totals p, -#vp-activity p { - margin-top: 0; - color: #333; - font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif; - font-size: 16px; -} - -#vp-totals em { - color: #666; - font-size: 13px; - font-style: italic; -} - -.col1, -.col2 { - float: left; -} - -.col2, -.col3 { - width: 25%; -} - -.col1 { - width: 45%; - margin-right: 1em; -} - -.col3 { - float: right; -} - -@media (max-width: 700px) { - .col1, - .col2, - .col3 { - float: none; - width: 100%; - } -} - -#vp-totals p { - clear: both; - width: 100%; -} - -#vp-activity td { - padding: 12px 8px; - color: #666; - font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif; - font-size: 13px; - vertical-align: middle; -} - -#vp-activity .ago { - color: #000; - font-size: 1.2em; -} - -#vp-activity .date { - width: 1%; - padding-right: 15px; - white-space: nowrap; -} - - -/* ========================================================================== -Progress Bars -========================================================================== */ - -#vp_progress:after { - /* clearfix */ - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} - -.vp_graphs { - background: #333; - color: #FFF; - float: left; - width: 380px; - padding: 0; - border-radius: 6px; -} - -@media (max-width: 767px) { - .vp_graphs { - float: none; - margin-bottom: 20px; - width: 100%; - } -} - -.vp_graphs:after { - /* clearfix */ - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} - -.vp_graphs h1 { - color: #FFF; - text-shadow: 0 -1px 0 rgba(0,0,0,0.4); - padding: 20px 30px 20px 30px; - margin: 0; - border-bottom: 1px solid rgba(255,255,255,0.05); - font-size: 24px; - font-weight: 400; - line-height: 1.4; -} - -@media (max-width: 767px) { - .vp_graphs h1 { - font-size: 18px; - } -} - -.vp_graphs ul { - padding: 0 0 5px 0; - float: left; - width: 100%; - background: rgba(0,0,0,0.1); -} - -.vp_graphs li { - float: left; - clear: both; - margin: 0; - padding: 15px 30px; - width: 100%; - line-height: 100%; - border-top: 1px solid rgba(0,0,0,0.3); - border-bottom: 1px solid rgba(255,255,255,0.05); -} - -.vp_graphs .completed .bar span { - background: rgb(41,154,11); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(41,154,11,1)), color-stop(100%,rgba(41,154,11,1))); - background: -webkit-linear-gradient(top, rgba(41,154,11,1) 0%,rgba(41,154,11,1) 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#299a0b', endColorstr='#299a0b',GradientType=0 ); - background: linear-gradient(top, rgba(41,154,11,1) 0%,rgba(41,154,11,1) 100%); -} - -#vp-wrap #vp_progress .vp_graphs ul li { - width: 100%; -} - -#vp_progress .completed .percentage, -#vp_progress .completed .title { - color: #fff; -} - -#vp_progress .bar { - float: left; - width: 215px; - padding: 4px; - background: #252525; - margin: 0 5px 0 0; - border: 1px solid rgba(255,255,255,0.1); - border-radius: 20px; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,0.6); -} - -@media (max-width: 767px) { - #vp_progress .bar { - width: 76%; - } -} - -@media (max-width: 500px) { - #vp_progress .bar { - width: 58%; - } -} - -#vp_progress .bar span { - float: left; - height: 22px; - background: #63b6db; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#63b6db), color-stop(100%,#309dcf)); - background: -webkit-linear-gradient(top, #63b6db 0%,#309dcf 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#63b6db', endColorstr='#309dcf',GradientType=0 ); - background: linear-gradient(top, #63b6db 0%,#309dcf 100%); - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2); - box-shadow: inset 0 1px 0 rgba(255,255,255,0.2); - border-radius: 20px; -} - -#vp_progress .percentage { - float: right; - position: relative; - top: 10px; - margin: 0; - width: 30px; - text-align: right; - font-size: 11px; - font-weight: bold; - color: #999; -} - -#vp_progress .title { - float: left; - width: 60px; - position: relative; - top: 10px; - font-size: 12px; - color: #CCC; -} - -.vp_progress-description { - margin: 0 0 0 400px; - padding: 30px; - border-radius: 5px; - background: #fff; -} - -@media (max-width: 767px) { - .vp_progress-description { - margin: 0; - } -} - -.vp_progress-description h3 { - margin-top: 0; - font-size: 12px; - color: #aaa; -} - -.vp_progress-description ul { - margin: 0 0 20px 0; -} - -.vp_progress-description li { - list-style: square; - color: #777; - margin: 0 0 15px 0; - font-size: 12px; - line-height: 160%; -} - -.vp_progress-description strong { - color: #555; -} - -.vp_progress-description p { - font-size: 12px; - color: #999; - font-style: italic; - line-height: 160%; - margin: 0 0 30px 0; -} - -.vp_progress-description p:last-child { - margin-bottom: 0; -} - -/** - * Jetpack logo - */ -.jp-power { - display: flex; - justify-content: center; - align-items: center; -} -.jp-power__text { - color: #888; - margin-right: 10px; -} - -.jetpack-logo { - vertical-align: middle; -} - -.jetpack-logo__icon-circle, -.jetpack-logo__text { - fill: #636d75; -} diff --git a/vaultpress/uninstall.php b/vaultpress/uninstall.php deleted file mode 100644 index dbb601ed86..0000000000 --- a/vaultpress/uninstall.php +++ /dev/null @@ -1,13 +0,0 @@ -realtime backup and automated security scanning from VaultPress. Activate, enter your registration key, and never worry again. Need some help? - * Version: 2.2.1 - * Author: Automattic - * Author URI: http://vaultpress.com/?utm_source=author-uri&utm_medium=plugin-description&utm_campaign=1.0 - * License: GPL2+ - * Text Domain: vaultpress - * Domain Path: /languages/ - * - * @package automattic/vaultpress - */ - -// don't call the file directly. -defined( 'ABSPATH' ) || die(); - -define( 'VAULTPRESS__MINIMUM_PHP_VERSION', '5.6' ); -define( 'VAULTPRESS__VERSION', '2.2.1' ); -define( 'VAULTPRESS__PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); - -/** - * First, we check for our supported version of PHP. If it fails, - * we "pause" VaultPress by ending the loading process and displaying an admin_notice to inform the site owner. - */ -if ( version_compare( phpversion(), VAULTPRESS__MINIMUM_PHP_VERSION, '<' ) ) { - if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { - error_log( - sprintf( - /* translators: Placeholders are numbers, versions of PHP in use on the site, and required by VaultPress. */ - esc_html__( 'Your version of PHP (%1$s) is lower than the version required by VaultPress (%2$s). Please update PHP to continue enjoying VaultPress.', 'vaultpress' ), - esc_html( phpversion() ), - VAULTPRESS__MINIMUM_PHP_VERSION - ) - ); - } - - /** - * Outputs an admin notice for folks running an outdated version of PHP. - * - * @todo: Remove once WP 5.2 is the minimum version. - * - * @since 2.0.0 - */ - function vaultpress_admin_unsupported_php_notice() { - $update_php_url = ( function_exists( 'wp_get_update_php_url' ) ? wp_get_update_php_url() : 'https://wordpress.org/support/update-php/' ); - - ?> -
    -

    - -

    -

    - %2$s %3$s', - esc_url( $update_php_url ), - __( 'Learn more about updating PHP' ), - /* translators: accessibility text */ - __( '(opens in a new tab)' ) - ); - ?> -

    -
    - composer install.', 'vaultpress' ), - array( 'code' => true ) - ) - ); - } - /** - * Outputs an admin notice for folks running VaultPress without having run `composer install`. - */ - function vaultpress_admin_missing_autoloader() { - ?> -
    -

    - composer install.', 'vaultpress' ), - array( 'code' => true ) - ); - ?> -

    -
    - options_blog_id = get_current_blog_id(); - $options = get_option( $this->option_name ); - if ( !is_array( $options ) ) - $options = array(); - - $defaults = array( - 'db_version' => 0, - 'key' => '', - 'secret' => '', - 'connection' => false, - 'service_ips_cidr' => false - ); - - $this->options = wp_parse_args( $options, $defaults ); - $this->reset_pings(); - - $this->upgrade(); - - $this->add_global_actions_and_filters(); - - if ( is_admin() ) { - $this->add_admin_actions_and_filters(); - } - - if ( $this->is_registered() ) { - $do_not_backup = $this->get_option( 'do_not_backup' ) || $this->get_option( 'do_not_send_backup_pings' ); - if ( $do_not_backup ) - $this->add_vp_required_filters(); - else - $this->add_listener_actions_and_filters(); - } - } - - static function &init() { - static $instance = false; - - if ( !$instance ) { - $instance = new VaultPress(); - } - - return $instance; - } - - static function register( $registration_key ) { - $vp = self::init(); - - $nonce = wp_create_nonce( 'vp_register_' . $registration_key ); - $args = array( 'registration_key' => $registration_key, 'nonce' => $nonce ); - $response = $vp->contact_service( 'register', $args ); - - // Check for an error - if ( ! empty( $response['faultCode'] ) ) - return new WP_Error( $response['faultCode'], $response['faultString'] ); - - // Validate result - if ( empty( $response['key'] ) || empty( $response['secret'] ) || empty( $response['nonce'] ) || $nonce != $response['nonce'] ) - return new WP_Error( 1, __( 'There was a problem trying to register your VaultPress subscription.' ) ); - - // Store the result, force a connection test. - $vp->update_option( 'key', $response['key'] ); - $vp->update_option( 'secret', $response['secret'] ); - $vp->check_connection( true ); - - return true; - } - - function activate( $network_wide ) { - $type = $network_wide ? 'network' : 'single'; - $this->update_option( 'activated', $type ); - - // force a connection check after an activation - $this->clear_connection(); - - if ( get_option( 'vaultpress_auto_connect' ) ) { - $this->register_via_jetpack( true ); - } - } - - function deactivate() { - if ( $this->is_registered() ) - $this->contact_service( 'plugin_status', array( 'vp_plugin_status' => 'deactivated' ) ); - } - - function upgrade() { - $current_db_version = $this->get_option( 'db_version' ); - - if ( $current_db_version < 1 ) { - $this->options['connection'] = get_option( 'vaultpress_connection' ); - $this->options['key'] = get_option( 'vaultpress_key' ); - $this->options['secret'] = get_option( 'vaultpress_secret' ); - $this->options['service_ips'] = get_option( 'vaultpress_service_ips' ); - - // remove old options - $old_options = array( - 'vaultpress_connection', - 'vaultpress_hostname', - 'vaultpress_key', - 'vaultpress_secret', - 'vaultpress_service_ips', - 'vaultpress_timeout', - 'vp_allow_remote_execution', - 'vp_debug_request_signing', - 'vp_disable_firewall', - ); - - foreach ( $old_options as $option ) - delete_option( $option ); - - $this->options['db_version'] = $this->db_version; - $this->update_options(); - } - - if ( $current_db_version < 2 ) { - $this->delete_option( 'timeout' ); - $this->delete_option( 'disable_firewall' ); - $this->update_option( 'db_version', $this->db_version ); - $this->clear_connection(); - } - - if ( $current_db_version < 3 ) { - $this->update_firewall(); - $this->update_option( 'db_version', $this->db_version ); - $this->clear_connection(); - } - - if ( $current_db_version < 4 ) { - $this->update_firewall(); - $this->update_option( 'db_version', $this->db_version ); - $this->clear_connection(); - } - } - - function get_option( $key ) { - if ( 'hostname' == $key ) { - if ( defined( 'VAULTPRESS_HOSTNAME' ) ) - return VAULTPRESS_HOSTNAME; - else - return 'vaultpress.com'; - } - - if ( 'timeout' == $key ) { - if ( defined( 'VAULTPRESS_TIMEOUT' ) ) - return VAULTPRESS_TIMEOUT; - else - return 60; - } - - if ( 'disable_firewall' == $key ) { - if ( defined( 'VAULTPRESS_DISABLE_FIREWALL' ) ) - return VAULTPRESS_DISABLE_FIREWALL; - else - return false; - } - - if ( ( 'key' == $key || 'secret' == $key ) && empty( $this->options[$key] ) ) { - return ''; - } - - // allow_forwarded_for can be overrided by config, or stored in or out of the vp option - if ( 'allow_forwarded_for' === $key ) { - if ( defined( 'ALLOW_FORWARDED_FOR' ) ) { - return ALLOW_FORWARDED_FOR; - } - - $standalone_option = get_option( 'vaultpress_allow_forwarded_for' ); - if ( ! empty( $standalone_option ) ) { - return $standalone_option; - } - } - - if ( isset( $this->options[$key] ) ) - return $this->options[$key]; - - return false; - } - - function update_option( $key, $value ) { - if ( 'allow_forwarded_for' === $key ) { - update_option( 'vaultpress_allow_forwarded_for', $value ); - - if ( isset( $this->options[ $key ] ) ) { - unset( $this->options[ $key ] ); - $this->update_options(); - } - return; - } - - $this->options[$key] = $value; - $this->update_options(); - } - - function delete_option( $key ) { - if ( 'allow_forwarded_for' === $key ) { - delete_option( 'vaultpress_allow_forwarded_for' ); - } - - unset( $this->options[$key] ); - $this->update_options(); - } - - function update_options() { - // Avoid overwriting the VaultPress option if current blog_id has changed since reading it - if ( get_current_blog_id() !== $this->options_blog_id ) { - return; - } - - update_option( $this->option_name, $this->options ); - } - - function admin_init() { - if ( !current_user_can( 'manage_options' ) ) - return; - - load_plugin_textdomain( 'vaultpress', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); - } - - function admin_head() { - if ( ! current_user_can( 'manage_options' ) ) { - return; - } - - // Array of hooks where we want to hook our notices. - $notice_hooks = array( 'user_admin_notices' ); - - /* - * In the VaultPress dashboard, move the notices. - */ - $screen = get_current_screen(); - if ( - ! is_null( $screen ) - && in_array( - $screen->id, - array( 'jetpack_page_vaultpress', 'toplevel_page_vaultpress' ), - true - ) - ) { - $notice_hooks[] = 'vaultpress_notices'; - } else { - $notice_hooks[] = 'admin_notices'; - } - - if ( $activated = $this->get_option( 'activated' ) ) { - if ( 'network' == $activated ) { - add_action( 'network_admin_notices', array( $this, 'activated_notice' ) ); - } else { - foreach ( $notice_hooks as $filter ) { - add_action( $filter, array( $this, 'activated_notice' ) ); - } - } - } - - // ask the user to connect their site w/ VP - if ( !$this->is_registered() ) { - foreach ( $notice_hooks as $filter ) { - add_action( $filter, array( $this, 'connect_notice' ) ); - } - - // if we have an error make sure to let the user know about it - } else { - $error_code = $this->get_option( 'connection_error_code' ); - if ( ! empty( $error_code ) ) { - foreach ( $notice_hooks as $filter ) { - add_action( $filter, array( $this, 'error_notice' ) ); - } - } - } - } - - function admin_menu() { - // if Jetpack is loaded then we need to wait for that menu to be added - if ( class_exists( 'Jetpack' ) ) - add_action( 'jetpack_admin_menu', array( $this, 'load_menu' ) ); - else - $this->load_menu(); - } - - function load_menu() { - if ( class_exists( 'Jetpack' ) ) { - $hook = add_submenu_page( 'jetpack', 'VaultPress', 'VaultPress', 'manage_options', 'vaultpress', array( $this, 'ui' ) ); - } else { - $hook = add_menu_page( 'VaultPress', 'VaultPress', 'manage_options', 'vaultpress', array( $this, 'ui' ), 'div' ); - } - - add_action( "load-$hook", array( $this, 'ui_load' ) ); - add_action( 'admin_print_styles', array( $this, 'styles' ) ); - } - - function styles() { - if ( !current_user_can( 'manage_options' ) || !is_admin() ) - return; - - wp_enqueue_style( 'vaultpress-nav', plugins_url( '/nav-styles.css', __FILE__ ), false, date( 'Ymd' ) ); - - if ( isset( $_GET['page'] ) && 'vaultpress' == $_GET['page'] ) - wp_enqueue_style( 'vaultpress', plugins_url( '/styles.css', __FILE__ ), false, date( 'Ymd' ) ); - } - - // display a security threat notice if one exists - function toolbar( $wp_admin_bar ) { - global $wp_version; - - // these new toolbar functions were introduced in 3.3 - // http://codex.wordpress.org/Function_Reference/add_node - if ( version_compare( $wp_version, '3.3', '<') ) - return; - - if ( !current_user_can( 'manage_options' ) ) - return; - - $messages = $this->get_messages(); - if ( !empty( $messages['security_notice_count'] ) ) { - $count = (int)$messages['security_notice_count']; - if ( $count > 0 ) { - $count = number_format( $count, 0 ); - $wp_admin_bar->add_node( array( - 'id' => 'vp-notice', - 'title' => '' . - sprintf( _n( '%s Security Threat', '%s Security Threats', $count , 'vaultpress'), $count ), - 'parent' => 'top-secondary', - 'href' => sprintf( 'https://dashboard.vaultpress.com/%d/security/', $messages['site_id'] ), - 'meta' => array( - 'title' => __( 'Visit VaultPress Security' , 'vaultpress'), - 'onclick' => 'window.open( this.href ); return false;', - 'class' => 'error' - ), - ) ); - } - } - } - - // get any messages from the VP servers - function get_messages( $force_reload = false ) { - $last_contact = $this->get_option( 'messages_last_contact' ); - - // only run the messages check every 30 minutes - if ( ( time() - (int)$last_contact ) > 1800 || $force_reload ) { - $messages = base64_decode( $this->contact_service( 'messages', array() ) ); - $messages = unserialize( $messages ); - $this->update_option( 'messages_last_contact', time() ); - $this->update_option( 'messages', $messages ); - } else { - $messages = $this->get_option( 'messages' ); - } - - return $messages; - } - - function server_url() { - if ( !isset( $this->_server_url ) ) { - $scheme = is_ssl() ? 'https' : 'http'; - $this->_server_url = sprintf( '%s://%s/', $scheme, $this->get_option( 'hostname' ) ); - } - - return $this->_server_url; - } - - /** - * Show message if plugin is activated but not connected to VaultPress. - */ - function connect_notice() { - $screen = get_current_screen(); - - /** - * Do not display any error message if we don't have any info about the page. - */ - if ( is_null( $screen ) ) { - return; - } - - /** - * Only display errors on specific pages: - * - the main dashboard. - * - the Jetpack dashboard. - * - the plugins screen. - */ - - if ( - in_array( - $screen->id, - array( - 'dashboard', - 'toplevel_page_jetpack', - 'plugins', - ), - true - ) - ) { - $message = sprintf( - wp_kses( - /* translators: URLs to VaultPress' dashboard page. */ - __( 'To back up and secure your site, enter your registration key. Register VaultPress or purchase a plan.', 'vaultpress' ), - array( - 'a' => array( - 'href' => array(), - ), - ) - ), - admin_url( 'admin.php?page=vaultpress' ) - ); - $this->ui_message( $message, 'notice', __( 'VaultPress needs your attention!', 'vaultpress' ) ); - } - } - - // show message after activation - function activated_notice() { - if ( 'network' == $this->get_option( 'activated' ) ) { - $message = sprintf( - __( 'Each site will need to be registered with VaultPress separately. You can purchase new keys from your VaultPress Dashboard.', 'vaultpress' ), - 'https://dashboard.vaultpress.com/' - ); - $this->ui_message( $message, 'activated', __( 'VaultPress has been activated across your network!', 'vaultpress' ) ); - - // key and secret already exist in db - } elseif ( $this->is_registered() ) { - if ( $this->check_connection() ) { - } - } - - $this->delete_option( 'activated' ); - } - - /** - * Display an error notice when something is wrong with our VaultPress installation. - */ - public function error_notice() { - $error_message = $this->get_option( 'connection_error_message' ); - - // link to the VaultPress page if we're not already there. - if ( - ! isset( $_GET['page'] ) - || 'vaultpress' != $_GET['page'] - ) { - $error_message .= sprintf( - ' %s', - admin_url( 'admin.php?page=vaultpress' ), - esc_html__( 'Visit the VaultPress page', 'vaultpress' ) - ); - } - - $screen = get_current_screen(); - - /* - * Do not display any error message if we don't have a message, - * or have no info about the page. - */ - if ( is_null( $screen ) || empty( $error_message ) ) { - return; - } - - /* - * Only display errors on specific pages: - * - the main dashboard. - * - the VaultPress and Jetpack dashboards. - * - the plugins screen. - */ - if ( - in_array( - $screen->id, - array( - 'dashboard', - 'toplevel_page_jetpack', - 'jetpack_page_vaultpress', - 'toplevel_page_vaultpress', - 'plugins', - ), - true - ) - ) { - $this->ui_message( $error_message, 'error' ); - } - } - - /** - * Adds the main wrappers and the header, and defers controls to ui_render to decide which view to render. - */ - function ui() { - $ui_state = $this->ui_render(); - ?> -
    - ui_masthead( $ui_state[ 'dashboard_link' ] ); ?> -
    - - -
    - ui_footer(); ?> -
    - is_localhost() ) { - $this->update_option( 'connection', time() ); - $this->update_option( 'connection_error_code', 'error_localhost' ); - $this->update_option( - 'connection_error_message', - esc_html__( 'Hostnames such as localhost or 127.0.0.1 can not be reached by vaultpress.com and will not work with the service. Sites must be publicly accessible in order to work with VaultPress.', 'vaultpress' ) - ); - $this->error_notice(); - return array( 'ui' => ob_get_clean(), 'dashboard_link' => false ); - } - - if ( ! empty( $_GET[ 'error' ] ) ) { - $this->error_notice(); - $this->clear_connection(); - } - - if ( ! $this->is_registered() ) { - $this->ui_register(); - return array( 'ui' => ob_get_clean(), 'dashboard_link' => false ); - } - - $status = $this->contact_service( 'status' ); - if ( ! $status ) { - $error_code = $this->get_option( 'connection_error_code' ); - if ( 0 == $error_code ) { - $this->ui_fatal_error(); - } else { - $this->ui_register(); - } - return array( 'ui' => ob_get_clean(), 'dashboard_link' => 0 != $error_code ); - } - - $ticker = $this->contact_service( 'ticker' ); - if ( is_array( $ticker ) && isset( $ticker[ 'faultCode' ] ) ) { - $this->error_notice(); - $this->ui_register(); - return array( 'ui' => ob_get_clean(), 'dashboard_link' => true ); - } - - $this->ui_main(); - return array( 'ui' => ob_get_clean(), 'dashboard_link' => true ); - } - - function ui_load() { - if ( ! current_user_can( 'manage_options' ) ) { - return; - } - - if ( isset( $_POST['action'] ) && 'delete-vp-settings' == $_POST['action'] ) { - check_admin_referer( 'delete_vp_settings' ); - - $ai_ping_queue_size = $this->ai_ping_queue_size(); - if ( ! empty( $ai_ping_queue_size->option_count ) && $ai_ping_queue_size->option_count > 1 ) { - $this->ai_ping_queue_delete(); - } - - delete_option( $this->option_name ); - delete_option( 'vaultpress_service_ips_external_cidr' ); - delete_option( '_vp_signatures' ); - delete_option( '_vp_config_option_name_ignore' ); - delete_option( '_vp_config_post_meta_name_ignore' ); - delete_option( '_vp_config_should_ignore_files' ); - delete_option( '_vp_current_scan' ); - delete_option( 'vaultpress_auto_register' ); - - wp_redirect( admin_url( 'admin.php?page=vaultpress&delete-vp-settings=1' ) ); - exit(); - } - - // run code that might be updating the registration key - if ( isset( $_POST['action'] ) && 'register' == $_POST['action'] ) { - check_admin_referer( 'vaultpress_register' ); - - // reset the connection info so messages don't cross - $this->clear_connection(); - - // if registering via Jetpack, get a key... - if ( isset( $_POST['key_source'] ) && 'jetpack' === $_POST['key_source'] ) { - $registration_key = $this->get_key_via_jetpack(); - if ( is_wp_error( $registration_key ) ) { - $this->update_option( 'connection_error_code', -2 ); - $this->update_option( - 'connection_error_message', - sprintf( __('Failed to register VaultPress via Jetpack: %s. If you’re still having issues please contact the VaultPress Safekeepers.', 'vaultpress' ), - esc_html( $registration_key->get_error_message() ), 'http://vaultpress.com/contact/' ) - ); - wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); - } - } else { - $registration_key = trim( $_POST[ 'registration_key' ] ); - } - - if ( empty( $registration_key ) ) { - $this->update_option( 'connection_error_code', 1 ); - $this->update_option( - 'connection_error_message', - sprintf( - __( 'That\'s not a valid registration key. Head over to the VaultPress Dashboard to find your key.', 'vaultpress' ), - 'https://dashboard.vaultpress.com/' - ) - ); - wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); - } - - // try to register the plugin - $nonce = wp_create_nonce( 'vp_register_' . $registration_key ); - $args = array( 'registration_key' => $registration_key, 'nonce' => $nonce ); - $response = $this->contact_service( 'register', $args ); - - // we received an error from the VaultPress servers - if ( !empty( $response['faultCode'] ) ) { - $this->update_option( 'connection_error_code', $response['faultCode'] ); - $this->update_option( 'connection_error_message', $response['faultString'] ); - wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); - } - - // make sure the returned data looks valid - if ( empty( $response['key'] ) || empty( $response['secret'] ) || empty( $response['nonce'] ) || $nonce != $response['nonce'] ) { - $this->update_option( 'connection_error_code', 1 ); - $this->update_option( 'connection_error_message', sprintf( __( 'There was a problem trying to register your subscription. Please try again. If you’re still having issues please contact the VaultPress Safekeepers.', 'vaultpress' ), 'http://vaultpress.com/contact/' ) ); - wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); - } - - // need to update these values in the db so the servers can try connecting to the plugin - $this->update_option( 'key', $response['key'] ); - $this->update_option( 'secret', $response['secret'] ); - if ( $this->check_connection( true ) ) { - wp_redirect( admin_url( 'admin.php?page=vaultpress' ) ); - exit(); - } - - // reset the key and secret - $this->update_option( 'key', '' ); - $this->update_option( 'secret', '' ); - wp_redirect( admin_url( 'admin.php?page=vaultpress&error=true' ) ); - exit(); - } - } - - function ui_register() { - ?> -
    -
    - VaultPress -

    -

    - -
    -
    - - - -
    -
    -
    - -
    -
    -
    -
    -

    - -

    -

    - -

    - - - -
    -
    -
    -
    -
    - ui_delete_vp_settings_button(); ?> -
    -
    - - - - - contact_service( 'plugin_ui' ) ); - echo $response; - $this->ui_delete_vp_settings_button(); - } - - function ui_fatal_error() { - $this->render_notice( - sprintf( - '' . __( 'We can\'t connect to %1$s.', 'vaultpress' ) . '
    ' . - __( 'Please make sure that your website is accessible via the Internet. Please contact the VaultPress support if you still have issues.' ), - esc_html( $this->get_option( 'hostname' ) ) - ), - 'is-warning', - array( - 'label' => __( 'Contact support' ), - 'url' => 'https://vaultpress.com/contact/', - ) - ); - } - - function ui_message( $message, $type = 'notice', $heading = '' ) { - $level = 'is-warning'; - if ( empty( $heading ) ) { - switch ( $type ) { - case 'error': - $level = 'is-error'; - $heading = __( 'Oops... there seems to be a problem.', 'vaultpress' ); - break; - - case 'success': - $level = 'is-success'; - $heading = __( 'Yay! Things look good.', 'vaultpress' ); - break; - - default: - $heading = __( 'VaultPress needs your attention!', 'vaultpress' ); - break; - } - } - - $classes = in_array( get_current_screen()->parent_base, array( 'jetpack', 'vaultpress' ), true ) - ? '' - : "notice notice-$type"; - - $this->render_notice( - "$heading
    $message", - $level, - array(), - $classes - ); - } - - /** - * Renders a notice. Can have - * - * @param string $content Notice main content. - * @param string $level Can be is-info, is-warning, is-error. By default, it's is-info. - * @param array $action { - * Arguments to display a linked action button in the notice. - * - * @type string $label The action button label. - * @type string $url The action button link. - * } - * @param string $classes This is added as a CSS class to the root node. Useful to pass WP core classes for notices. - */ - function render_notice( $content, $level = 'is-info', $action = array(), $classes = '' ) { - $allowed_html = array( - 'a' => array( 'href' => true, 'target' => 'blank', 'rel' => 'noopener noreferrer' ), - 'br' => true, - 'strong' => true, - ); - ?> -
    "> - - - - - - - - - - - - - -
    - -
    - -
    - -
    -

    -
    - -
    -

    -

    - here.', 'vaultpress' ), - array( - 'a' => array( - 'href' => array(), - 'target' => array(), - 'rel' => array(), - ), - ) - ), - 'https://dashboard.vaultpress.com/account/' - ); - ?> -

    -
    - - - -
    -
    - output(); - } - - function get_config( $key ) { - $val = get_option( $key ); - if ( $val ) - return $val; - switch( $key ) { - case '_vp_config_option_name_ignore': - $val = $this->get_option_name_ignore( true ); - update_option( '_vp_config_option_name_ignore', $val ); - break; - case '_vp_config_post_meta_name_ignore': - $val = $this->get_post_meta_name_ignore( true ); - update_option( '_vp_config_post_meta_name_ignore', $val ); - break; - case '_vp_config_should_ignore_files': - $val = $this->get_should_ignore_files( true ); - update_option( '_vp_config_should_ignore_files', $val ); - break; - } - return $val; - } - - // Option name patterns to ignore - function get_option_name_ignore( $return_defaults = false ) { - $defaults = array( - 'vaultpress', - 'cron', - 'wpsupercache_gc_time', - 'rewrite_rules', - 'akismet_spam_count', - '/_transient_/', - '/^_vp_/', - ); - if ( $return_defaults ) - return $defaults; - $ignore_names = $this->get_config( '_vp_config_option_name_ignore' ); - return array_unique( array_merge( $defaults, $ignore_names ) ); - } - - // post meta name patterns to ignore - function get_post_meta_name_ignore( $return_defaults = false ) { - $defaults = array( - 'pvc_views' - ); - if ( $return_defaults ) - return $defaults; - $ignore_names = $this->get_config( '_vp_config_post_meta_name_ignore' ); - return array_unique( array_merge( $defaults, $ignore_names ) ); - } - - // file name patterns to ignore - function get_should_ignore_files( $return_defaults = false ) { - $defaults = array(); - if ( $return_defaults ) - return $defaults; - $ignore_names = (array) $this->get_config( '_vp_config_should_ignore_files' ); - return array_unique( array_merge( $defaults, $ignore_names ) ); - } - - ### - ### Section: Backup Notification Hooks - ### - - // Handle Handle Notifying VaultPress of Options Activity At this point the options table has already been modified - // - // Note: we handle deleted, instead of delete because VaultPress backs up options by name (which are unique,) that - // means that we do not need to resolve an id like we would for, say, a post. - function option_handler( $option_name ) { - global $wpdb; - // Step 1 -- exclusionary rules, don't send these options to vaultpress, because they - // either change constantly and/or are inconsequential to the blog itself and/or they - // are specific to the VaultPress plugin process and we want to avoid recursion - $should_ping = true; - $ignore_names = $this->get_option_name_ignore(); - foreach( (array)$ignore_names as $val ) { - if ( $val[0] == '/' ) { - if ( preg_match( $val, $option_name ) ) - $should_ping = false; - } else { - if ( $val == $option_name ) - $should_ping = false; - } - if ( !$should_ping ) - break; - } - if ( $should_ping ) - $this->add_ping( 'db', array( 'option' => $option_name ) ); - - // Step 2 -- If WordPress is about to kick off a some "cron" action, we need to - // flush vaultpress, because the "remote" cron threads done via http fetch will - // be happening completely inside the window of this thread. That thread will - // be expecting touched and accounted for tables - if ( $option_name == '_transient_doing_cron' ) - $this->do_pings(); - - return $option_name; - } - - // Handle Notifying VaultPress of Comment Activity - function comment_action_handler( $comment_id ) { - if ( !is_array( $comment_id ) ) { - if ( wp_get_comment_status( $comment_id ) != 'spam' ) - $this->add_ping( 'db', array( 'comment' => $comment_id ) ); - } else { - foreach ( $comment_id as $id ) { - if ( wp_get_comment_status( $comment_id ) != 'spam' ) - $this->add_ping( 'db', array( 'comment' => $id) ); - } - } - } - - // Handle Notifying VaultPress of Theme Switches - function theme_action_handler( $theme ) { - $this->add_ping( 'themes', array( 'theme' => get_option( 'stylesheet' ) ) ); - } - - // Handle Notifying VaultPress of Upload Activity - function upload_handler( $file ) { - $this->add_ping( 'uploads', array( 'upload' => str_replace( $this->resolve_upload_path(), '', $file['file'] ) ) ); - return $file; - } - - // Handle Notifying VaultPress of Plugin Activation/Deactivation - function plugin_action_handler( $plugin='' ) { - $this->add_ping( 'plugins', array( 'name' => $plugin ) ); - } - - // Handle Notifying VaultPress of User Edits - function userid_action_handler( $user_or_id ) { - if ( is_object($user_or_id) ) - $userid = intval( $user_or_id->ID ); - else - $userid = intval( $user_or_id ); - if ( !$userid ) - return; - $this->add_ping( 'db', array( 'user' => $userid ) ); - } - - // Handle Notifying VaultPress of term changes - function term_handler( $term_id, $tt_id=null ) { - $this->add_ping( 'db', array( 'term' => $term_id ) ); - if ( $tt_id ) - $this->term_taxonomy_handler( $tt_id ); - } - - // Handle Notifying VaultPress of term_taxonomy changes - function term_taxonomy_handler( $tt_id ) { - $this->add_ping( 'db', array( 'term_taxonomy' => $tt_id ) ); - } - // add(ed)_term_taxonomy handled via the created_term hook, the term_taxonomy_handler is called by the term_handler - - // Handle Notifying VaultPress of term_taxonomy changes - function term_taxonomies_handler( $tt_ids ) { - foreach( (array)$tt_ids as $tt_id ) { - $this->term_taxonomy_handler( $tt_id ); - } - } - - // Handle Notifying VaultPress of term_relationship changes - function term_relationship_handler( $object_id, $term_id ) { - $this->add_ping( 'db', array( 'term_relationship' => array( 'object_id' => $object_id, 'term_taxonomy_id' => $term_id ) ) ); - } - - // Handle Notifying VaultPress of term_relationship changes - function term_relationships_handler( $object_id, $term_ids ) { - foreach ( (array)$term_ids as $term_id ) { - $this->term_relationship_handler( $object_id, $term_id ); - } - } - - // Handle Notifying VaultPress of term_relationship changes - function set_object_terms_handler( $object_id, $terms, $tt_ids ) { - $this->term_relationships_handler( $object_id, $tt_ids ); - } - - // Handle Notifying VaultPress of UserMeta changes - function usermeta_action_handler( $umeta_id, $user_id, $meta_key, $meta_value='' ) { - $this->add_ping( 'db', array( 'usermeta' => $umeta_id ) ); - } - - // Handle Notifying VaultPress of Post Changes - function post_action_handler($post_id) { - if ( current_filter() == 'delete_post' ) - return $this->add_ping( 'db', array( 'post' => $post_id ), 'delete_post' ); - return $this->add_ping( 'db', array( 'post' => $post_id ), 'edit_post' ); - } - - // Handle Notifying VaultPress of Link Changes - function link_action_handler( $link_id ) { - $this->add_ping( 'db', array( 'link' => $link_id ) ); - } - - // Handle Notifying VaultPress of Commentmeta Changes - function commentmeta_insert_handler( $meta_id, $comment_id=null ) { - if ( empty( $comment_id ) || wp_get_comment_status( $comment_id ) != 'spam' ) - $this->add_ping( 'db', array( 'commentmeta' => $meta_id ) ); - } - - function commentmeta_modification_handler( $meta_id, $object_id, $meta_key, $meta_value ) { - if ( !is_array( $meta_id ) ) - return $this->add_ping( 'db', array( 'commentmeta' => $meta_id ) ); - foreach ( $meta_id as $id ) { - $this->add_ping( 'db', array( 'commentmeta' => $id ) ); - } - } - - // Handle Notifying VaultPress of PostMeta changes via newfangled metadata functions - function postmeta_insert_handler( $meta_id, $post_id, $meta_key, $meta_value='' ) { - if ( in_array( $meta_key, $this->get_post_meta_name_ignore() ) ) - return; - - $this->add_ping( 'db', array( 'postmeta' => $meta_id ) ); - } - - function postmeta_modification_handler( $meta_id, $object_id, $meta_key, $meta_value ) { - if ( in_array( $meta_key, $this->get_post_meta_name_ignore() ) ) - return; - - if ( !is_array( $meta_id ) ) - return $this->add_ping( 'db', array( 'postmeta' => $meta_id ) ); - foreach ( $meta_id as $id ) { - $this->add_ping( 'db', array( 'postmeta' => $id ) ); - } - } - - // Handle Notifying VaultPress of PostMeta changes via old school cherypicked hooks - function postmeta_action_handler( $meta_id, $post_id = null, $meta_key = null ) { - if ( in_array( $meta_key, $this->get_post_meta_name_ignore() ) ) - return; - - if ( !is_array($meta_id) ) - return $this->add_ping( 'db', array( 'postmeta' => $meta_id ) ); - foreach ( $meta_id as $id ) - $this->add_ping( 'db', array( 'postmeta' => $id ) ); - } - - // WooCommerce notifications - function woocommerce_tax_rate_handler( $id ) { - $this->generic_change_handler( 'woocommerce_tax_rates', array( 'tax_rate_id' => $id ) ); - $this->block_change_handler( 'woocommerce_tax_rate_locations', array( 'tax_rate_id' => $id ) ); - } - - /** - * Monitor for changes to a Woo order (creation, update, or deletion). - * - * @param int $id Item ID. - */ - public function woocommerce_order_item_handler( $id ) { - $this->generic_change_handler( 'woocommerce_order_items', array( 'order_item_id' => $id ) ); - } - - /** - * Monitor for changes to a Woo order meta (creation, update, or deletion). - * - * @param int $id Item ID. - */ - public function woocommerce_order_item_meta_handler( $id ) { - $this->generic_change_handler( 'woocommerce_order_itemmeta', array( 'meta_id' => $id ) ); - } - - /** - * Monitor for changes to a Woo attribute (creation, update, or deletion). - * - * @param int $id Item ID. - */ - public function woocommerce_attribute_handler( $id ) { - $this->generic_change_handler( 'woocommerce_attribute_taxonomies', array( 'attribute_id' => $id ) ); - } - - function generic_change_handler( $table, $key ) { - $this->add_ping( 'db', array( $table => $key ) ); - } - - function block_change_handler( $table, $query ) { - $this->add_ping( 'db', array( "bulk~{$table}" => $query ) ); - } - - function verify_table( $table ) { - global $wpdb; - $status = $wpdb->get_row( $wpdb->prepare( "SHOW TABLE STATUS WHERE Name = %s", $table ) ); - if ( !$status || !$status->Update_time || !$status->Comment || $status->Engine != 'MyISAM' ) - return true; - if ( preg_match( '/([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2})/', $status->Comment, $m ) ) - return ( $m[1] == $status->Update_time ); - return false; - } - - // Emulate $wpdb->last_table - function record_table( $table ) { - global $vaultpress_last_table; - $vaultpress_last_table = $table; - return $table; - } - - // Emulate $wpdb->last_table - function get_last_table() { - global $wpdb, $vaultpress_last_table; - if ( is_object( $wpdb ) && isset( $wpdb->last_table ) ) - return $wpdb->last_table; - return $vaultpress_last_table; - } - - // Emulate hyperdb::is_write_query() - function is_write_query( $q ) { - $word = strtoupper( substr( trim( $q ), 0, 20 ) ); - if ( 0 === strpos( $word, 'SELECT' ) ) - return false; - if ( 0 === strpos( $word, 'SHOW' ) ) - return false; - if ( 0 === strpos( $word, 'CHECKSUM' ) ) - return false; - return true; - } - - // Emulate hyperdb::get_table_from_query() - function get_table_from_query( $q ) { - global $wpdb, $vaultpress_last_table; - - if ( is_object( $wpdb ) && method_exists( $wpdb, "get_table_from_query" ) ) - return $wpdb->get_table_from_query( $q ); - - // Remove characters that can legally trail the table name - $q = rtrim( $q, ';/-#' ); - // allow ( select... ) union [...] style queries. Use the first queries table name. - $q = ltrim( $q, "\t (" ); - - // Quickly match most common queries - if ( preg_match( '/^\s*(?:' - . 'SELECT.*?\s+FROM' - . '|INSERT(?:\s+IGNORE)?(?:\s+INTO)?' - . '|REPLACE(?:\s+INTO)?' - . '|UPDATE(?:\s+IGNORE)?' - . '|DELETE(?:\s+IGNORE)?(?:\s+FROM)?' - . ')\s+`?(\w+)`?/is', $q, $maybe) ) - return $this->record_table($maybe[1] ); - - // Refer to the previous query - if ( preg_match( '/^\s*SELECT.*?\s+FOUND_ROWS\(\)/is', $q ) ) - return $this->get_last_table(); - - // Big pattern for the rest of the table-related queries in MySQL 5.0 - if ( preg_match( '/^\s*(?:' - . '(?:EXPLAIN\s+(?:EXTENDED\s+)?)?SELECT.*?\s+FROM' - . '|INSERT(?:\s+LOW_PRIORITY|\s+DELAYED|\s+HIGH_PRIORITY)?(?:\s+IGNORE)?(?:\s+INTO)?' - . '|REPLACE(?:\s+LOW_PRIORITY|\s+DELAYED)?(?:\s+INTO)?' - . '|UPDATE(?:\s+LOW_PRIORITY)?(?:\s+IGNORE)?' - . '|DELETE(?:\s+LOW_PRIORITY|\s+QUICK|\s+IGNORE)*(?:\s+FROM)?' - . '|DESCRIBE|DESC|EXPLAIN|HANDLER' - . '|(?:LOCK|UNLOCK)\s+TABLE(?:S)?' - . '|(?:RENAME|OPTIMIZE|BACKUP|RESTORE|CHECK|CHECKSUM|ANALYZE|OPTIMIZE|REPAIR).*\s+TABLE' - . '|TRUNCATE(?:\s+TABLE)?' - . '|CREATE(?:\s+TEMPORARY)?\s+TABLE(?:\s+IF\s+NOT\s+EXISTS)?' - . '|ALTER(?:\s+IGNORE)?\s+TABLE' - . '|DROP\s+TABLE(?:\s+IF\s+EXISTS)?' - . '|CREATE(?:\s+\w+)?\s+INDEX.*\s+ON' - . '|DROP\s+INDEX.*\s+ON' - . '|LOAD\s+DATA.*INFILE.*INTO\s+TABLE' - . '|(?:GRANT|REVOKE).*ON\s+TABLE' - . '|SHOW\s+(?:.*FROM|.*TABLE)' - . ')\s+`?(\w+)`?/is', $q, $maybe ) ) - return $this->record_table( $maybe[1] ); - - // All unmatched queries automatically fall to the global master - return $this->record_table( '' ); - } - - function table_notify_columns( $table ) { - $want_cols = array( - // data - 'posts' => '`ID`', - 'users' => '`ID`', - 'links' => '`link_id`', - 'options' => '`option_id`,`option_name`', - 'comments' => '`comment_ID`', - // metadata - 'postmeta' => '`meta_id`', - 'commentmeta' => '`meta_id`', - 'usermeta' => '`umeta_id`', - // taxonomy - 'term_relationships' => '`object_id`,`term_taxonomy_id`', - 'term_taxonomy' => '`term_taxonomy_id`', - 'terms' => '`term_id`', - // plugin special cases - 'wpo_campaign' => '`id`', // WP-o-Matic - 'wpo_campaign_category' => '`id`', // WP-o-Matic - 'wpo_campaign_feed' => '`id`', // WP-o-Matic - 'wpo_campaign_post' => '`id`', // WP-o-Matic - 'wpo_campaign_word' => '`id`', // WP-o-Matic - 'wpo_log' => '`id`', // WP-o-Matic - ); - if ( isset( $want_cols[$table] ) ) - return $want_cols[$table]; - return '*'; - } - - /** - * Use an option ID to ensure a unique ping ID for the site. - * - * @return int|false The new ping number. False, if there was an error. - */ - function ai_ping_next() { - global $wpdb; - - if ( ! $this->allow_ai_pings() ) { - return false; - } - - $name = "_vp_ai_ping"; - $wpdb->query( $wpdb->prepare( "DELETE FROM `$wpdb->options` WHERE `option_name` = %s;", $name ) ); - $success = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, '', 'no')", $name ) ); - if ( ! $success ) { - return false; - } - return $wpdb->insert_id; - } - - function ai_ping_insert( $value ) { - if ( ! $this->allow_ai_pings() ) { - return false; - } - - $new_id = $this->ai_ping_next(); - - if ( !$new_id ) - return false; - add_option( '_vp_ai_ping_' . $new_id, $value, '', 'no' ); - } - - function allow_ai_pings() { - static $allow_ai_pings = null; - - if ( null === $allow_ai_pings ) { - $queue_size = $this->ai_ping_queue_size(); - $size_limit = 50 * 1024 * 1024; - $allow_ai_pings = ( $queue_size->option_count < 100 && $queue_size->option_size < $size_limit ); - } - - return $allow_ai_pings; - } - - function ai_ping_queue_size() { - global $wpdb; - return $wpdb->get_row( "SELECT COUNT(`option_id`) `option_count`, SUM(LENGTH(`option_value`)) `option_size` FROM $wpdb->options WHERE `option_name` LIKE '\_vp\_ai\_ping\_%'" ); - } - - function ai_ping_get( $num=1, $order='ASC' ) { - global $wpdb; - if ( strtolower($order) != 'desc' ) - $order = 'ASC'; - else - $order = 'DESC'; - return $wpdb->get_results( $wpdb->prepare( - "SELECT * FROM $wpdb->options WHERE `option_name` LIKE '\_vp\_ai\_ping\_%%' ORDER BY `option_id` $order LIMIT %d", - min( 10, max( 1, (int)$num ) ) - ) ); - } - - function ai_ping_queue_delete() { - global $wpdb; - - return $wpdb->query( "DELETE FROM `$wpdb->options` WHERE `option_name` LIKE '\_vp\_ai\_ping%'" ); - } - - function request_firewall_update( $external_services = false ) { - $args = array( 'timeout' => $this->get_option( 'timeout' ), 'sslverify' => true ); - $hostname = $this->get_option( 'hostname' ); - $path = $external_services ? 'service-ips-external' : 'service-ips'; - - $data = false; - $https_error = null; - $retry = 2; - $protocol = 'https'; - do { - $retry--; - $args['sslverify'] = 'https' == $protocol ? true : false; - $r = wp_remote_get( $url=sprintf( "%s://%s/%s?cidr_ranges=1", $protocol, $hostname, $path ), $args ); - if ( 200 == wp_remote_retrieve_response_code( $r ) ) { - if ( 99 == $this->get_option( 'connection_error_code' ) ) - $this->clear_connection(); - $data = @unserialize( wp_remote_retrieve_body( $r ) ); - break; - } - if ( 'https' == $protocol ) { - $https_error = $r; - $protocol = 'http'; - } - usleep( 100 ); - } while( $retry > 0 ); - - if ( $https_error != null && ! empty( $data ) ) { - $r_code = wp_remote_retrieve_response_code( $https_error ); - if ( 200 != $r_code ) { - $error_message = sprintf( 'Unexpected HTTP response code %s', $r_code ); - if ( false === $r_code ) - $error_message = 'Unable to find an HTTP transport that supports SSL verification'; - elseif ( is_wp_error( $https_error ) ) - $error_message = $https_error->get_error_message(); - - $this->update_option( 'connection', time() ); - $this->update_option( 'connection_error_code', 99 ); - $this->update_option( 'connection_error_message', sprintf( __('Warning: The VaultPress plugin is using an insecure protocol because it cannot verify the identity of the VaultPress server. Please contact your hosting provider, and ask them to check that SSL certificate verification is correctly configured on this server. The request failed with the following error: "%s". If you’re still having issues please contact the VaultPress Safekeepers.', 'vaultpress' ), esc_html( $error_message ), 'http://vaultpress.com/contact/' ) ); - } - } - - return $data; - } - - function update_firewall() { - $data = $this->request_firewall_update(); - if ( $data ) { - $newval = array( 'updated' => time(), 'data' => $data ); - $this->update_option( 'service_ips_cidr', $newval ); - } - - $external_data = $this->request_firewall_update( true ); - if ( $external_data ) { - $external_newval = array( 'updated' => time(), 'data' => $external_data ); - - delete_option( 'vaultpress_service_ips_external_cidr' ); - add_option( 'vaultpress_service_ips_external_cidr', $external_newval, '', 'no' ); - } - - if ( !empty( $data ) && !empty( $external_data ) ) - $data = array_merge( $data, $external_data ); - - if ( $data ) { - return $data; - } else { - return null; - } - } - - // Update local cache of VP plan settings, based on a ping or connection test result - function update_plan_settings( $message ) { - if ( array_key_exists( 'do_backups', $message ) ) - $this->update_option( 'do_not_backup', ( false === $message['do_backups'] ) || ( '0' === $message['do_backups'] ) ); - - if ( array_key_exists( 'do_backup_pings', $message ) ) - $this->update_option( 'do_not_send_backup_pings', ( false === $message['do_backup_pings'] ) || ( '0' === $message['do_backup_pings'] ) ); - } - - function check_connection( $force_check = false ) { - $connection = $this->get_option( 'connection' ); - - if ( !$force_check && !empty( $connection ) ) { - // already established a connection - if ( 'ok' == $connection ) - return true; - - // only run the connection check every 5 minutes - if ( ( time() - (int)$connection ) < 300 ) - return false; - } - - // if we're running a connection test we don't want to run it a second time - $connection_test = $this->get_option( 'connection_test' ); - if ( ! empty( $connection_test ) ) - return true; - - // force update firewall settings - $this->update_firewall(); - - // Generate a random string for ping-backs to use for identification - $connection_test_key = wp_generate_password( 32, false ); - $this->update_option( 'connection_test', $connection_test_key ); - - // initial connection test to server - $this->delete_option( 'allow_forwarded_for' ); - $host = ( ! empty( $_SERVER['HTTP_HOST'] ) ) ? $_SERVER['HTTP_HOST'] : parse_url( $this->site_url(), PHP_URL_HOST ); - $connect = $this->contact_service( 'test', array( 'host' => $host, 'uri' => $_SERVER['REQUEST_URI'], 'ssl' => is_ssl() ) ); - - // we can't see the servers at all - if ( !$connect ) { - $this->update_option( 'connection', time() ); - $this->update_option( 'connection_error_code', 0 ); - $this->update_option( 'connection_error_message', sprintf( __( 'Cannot connect to the VaultPress servers. Please check that your host allows connecting to external sites and try again. If you’re still having issues please contact the VaultPress Safekeepers.', 'vaultpress' ), 'http://vaultpress.com/contact/' ) ); - - $this->delete_option( 'connection_test' ); - return false; - } - - // VaultPress gave us a meaningful error - if ( !empty( $connect['faultCode'] ) ) { - $this->update_option( 'connection', time() ); - $this->update_option( 'connection_error_code', $connect['faultCode'] ); - $this->update_option( 'connection_error_message', $connect['faultString'] ); - $this->delete_option( 'connection_test' ); - return false; - } - - $this->update_plan_settings( $connect ); - - if ( !empty( $connect['signatures'] ) ) { - delete_option( '_vp_signatures' ); - add_option( '_vp_signatures', maybe_unserialize( $connect['signatures'] ), '', 'no' ); - } - - // test connection between the site and the servers - $connect = (string)$this->contact_service( 'test', array( 'type' => 'connect', 'test_key' => $connection_test_key ) ); - if ( 'ok' != $connect ) { - if ( 'error' == $connect ) { - $this->update_option( 'connection_error_code', -1 ); - $this->update_option( 'connection_error_message', sprintf( __( 'The VaultPress servers cannot connect to your site. Please check that your site is visible over the Internet and there are no firewall or load balancer settings on your server that might be blocking the communication. If you’re still having issues please contact the VaultPress Safekeepers.', 'vaultpress' ), 'http://vaultpress.com/contact/' ) ); - } elseif ( !empty( $connect['faultCode'] ) ) { - $this->update_option( 'connection_error_code', $connect['faultCode'] ); - $this->update_option( 'connection_error_message', $connect['faultString'] ); - } - - $this->update_option( 'connection', time() ); - $this->delete_option( 'connection_test' ); - return false; - } - - // successful connection established - $this->update_option( 'connection', 'ok' ); - $this->delete_option( 'connection_error_code' ); - $this->delete_option( 'connection_error_message' ); - $this->delete_option( 'connection_test' ); - return true; - } - - function get_login_tokens() { - // By default the login token is valid for 30 minutes. - $nonce_life = $this->get_option( 'nonce_life' ) ? $this->get_option( 'nonce_life' ) : 1800; - $salt = wp_salt( 'nonce' ) . md5( $this->get_option( 'secret' ) ); - $nonce_life /= 2; - - return array( - 'previous' => substr( hash_hmac( 'md5', 'vp-login' . ceil( time() / $nonce_life - 1 ), $salt ), -12, 10 ), - 'current' => substr( hash_hmac( 'md5', 'vp-login' . ceil( time() / $nonce_life ), $salt ), -12, 10 ), - ); - } - function add_js_token() { - $nonce = $this->get_login_tokens(); - $token = $nonce['current']; - - // Uglyfies the JS code before sending it to the browser. - $whitelist = array( 'charAt', 'all', 'setAttribute', 'document', 'createElement', 'appendChild', 'input', 'hidden', 'type', 'name', 'value', 'getElementById', 'loginform', '_vp' ); - shuffle( $whitelist ); - $whitelist = array_flip( $whitelist ); - - $set = array( - 0 => array( '+[]', 'e^e' ), - 1 => array( '+!![]', '2>>1', "e[{$whitelist['type']}].charCodeAt(3)>>6" ), - 2 => array( '(+!![])<<1', "e[{$whitelist['_vp']}].replace(/_/,'').length" ), - 3 => array( "(Math.log(2<<4)+[])[e[{$whitelist['charAt']}]](0)", "e[{$whitelist['_vp']}].length" ), - 4 => array( '(+!![])<<2', "e[{$whitelist['input']}].length^1", "e[{$whitelist['name']}].length" ), - 5 => array( '((1<<2)+1)', 'parseInt("f",0x10)/3' ), - 6 => array( '(7^1)', "e[{$whitelist['hidden']}].length" ), - 7 => array( '(3<<1)+1', "e[{$whitelist['hidden']}].length^1" ), - 8 => array( '(0x101>>5)', "e[{$whitelist['document']}].length" ), - 9 => array( '(0x7^4)*(3+[])', "e[{$whitelist['loginform']}].length", "(1< array( "(![]+\"\")[e[{$whitelist['charAt']}]](1)", "e[{$whitelist['appendChild']}][e[{$whitelist['charAt']}]](0)", "e[{$whitelist['name']}][e[{$whitelist['charAt']}]](1)" ), - 'b' => array( "([]+{})[e[{$whitelist['charAt']}]](2)", "({}+[])[e[{$whitelist['charAt']}]](2)" ), - 'c' => array( "([]+{})[e[{$whitelist['charAt']}]](5)", "e[{$whitelist['createElement']}][e[{$whitelist['charAt']}]](0)" ), - 'd' => array( "([][0]+\"\")[e[{$whitelist['charAt']}]](2)", "([][0]+[])[e[{$whitelist['charAt']}]](2)" ), - 'e' => array( "(!![]+[])[e[{$whitelist['charAt']}]](3)", "(!![]+\"\")[e[{$whitelist['charAt']}]](3)" ), - 'f' => array( "(![]+[])[e[{$whitelist['charAt']}]](0)", "([]+![])[e[{$whitelist['charAt']}]](e^e)", "([]+![])[e[{$whitelist['charAt']}]](0)" ), - ); - - $js_code = << -/* '); - }catch(e){} - } - if(!i){ - i=this[e[{$whitelist['document']}]][e[{$whitelist['createElement']}]](e[{$whitelist['input']}]); - s(i,e[{$whitelist['name']}],e[{$whitelist['_vp']}]+(!![])); - } - s(i,e[{$whitelist['type']}],e[{$whitelist['hidden']}]). - s(i,e[{$whitelist['value']}],(%s+"")); - try { - var __=this[e[{$whitelist['document']}]][e[{$whitelist['getElementById']}]](e[{$whitelist['loginform']}]); - __[e[{$whitelist['appendChild']}]](i); - } catch(e){} -})(); -/* ]]> */ - -JS; - $chars = array(); - for ( $i = 0; $i < strlen( $token ); $i++ ) { - if ( isset( $set[$token[ $i ] ] ) ) { - $k = array_rand( $set[$token[ $i ] ], 1 ); - $chars[] = $set[$token[ $i ] ][$k]; - } else { - $chars[] = $token[ $i ]; - } - } - $random = array_unique( $chars ); - shuffle( $random ); - $random = array_flip( $random ); - - foreach( $chars as $i => $v ) - $chars[$i] = sprintf( '_[%d]', $random[$v] ); - - $code = preg_replace( - "#[\n\r\t]#", - '', - sprintf( $js_code, - join( '|', array_keys( $whitelist ) ), - join( ',', array_keys( $random ) ), - join( '+"")+(', $chars ) - ) - ); - echo $code; - } - - function authenticate( $user, $username, $password ) { - if ( is_wp_error( $user ) ) - return $user; - if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST || defined( 'APP_REQUEST' ) && APP_REQUEST ) { - // Try to log in with the username and password. - } - $retval = $user; - if ( empty( $_POST['_vptrue'] ) || !in_array( $_POST['_vptrue'], $this->get_login_tokens(), true ) ) - $retval = new WP_Error( 'invalid_token', __( 'Invalid token. Please try to log in again.' ) ); - - return $retval; - } - - function parse_request( $wp ) { - if ( !isset( $_GET['vaultpress'] ) || $_GET['vaultpress'] !== 'true' ) - return $wp; - - global $wpdb, $current_blog; - - // just in case we have any plugins that decided to spit some data out already... - @ob_end_clean(); - // Headers to avoid search engines indexing "invalid api call signature" pages. - if ( !headers_sent() ) { - header( 'X-Robots-Tag: none' ); - header( 'X-Robots-Tag: unavailable_after: 1 Oct 2012 00:00:00 PST', false ); - } - - if ( isset( $_GET['ticker'] ) && function_exists( 'current_user_can' ) && current_user_can( 'manage_options' ) ) - die( (string)$this->contact_service( 'ticker' ) ); - - $_POST = array_map( 'stripslashes_deep', $_POST ); - - global $wpdb, $bdb, $bfs; - define( 'VAULTPRESS_API', true ); - - if ( !$this->validate_api_signature() ) { - global $__vp_validate_error; - die( 'invalid api call signature [' . base64_encode( serialize( $__vp_validate_error ) ) . ']' ); - } - - if ( !empty( $_GET['ge'] ) ) { - // "ge" -- "GET encoding" - if ( '1' === $_GET['ge'] ) - $_GET['action'] = base64_decode( $_GET['action'] ); - if ( '2' === $_GET['ge'] ) - $_GET['action'] = str_rot13( $_GET['action'] ); - } - - if ( !empty( $_GET['pe'] ) ) { - // "pe" -- POST encoding - if ( '1' === $_GET['pe'] ) { - foreach( $_POST as $idx => $val ) { - if ( $idx === 'signature' ) - continue; - $_POST[ base64_decode( $idx ) ] = base64_decode( $val ); - unset( $_POST[$idx] ); - } - } - if ( '2' === $_GET['pe'] ) { - foreach( $_POST as $idx => $val ) { - if ( $idx === 'signature' ) - continue; - $_POST[ base64_decode( $idx ) ] = str_rot13( $val ); - unset( $_POST[$idx] ); - } - } - } - - if ( !isset( $bdb ) ) { - require_once( dirname( __FILE__ ) . '/class.vaultpress-database.php' ); - require_once( dirname( __FILE__ ) . '/class.vaultpress-filesystem.php' ); - - $bdb = new VaultPress_Database(); - $bfs = new VaultPress_Filesystem(); - } - - header( 'Content-Type: text/plain' ); - - /* - * general:ping - * - * catchup:get - * catchup:delete - * - * db:tables - * db:explain - * db:cols - * - * plugins|themes|uploads|content|root:active - * plugins|themes|uploads|content|root:dir - * plugins|themes|uploads|content|root:ls - * plugins|themes|uploads|content|root:stat - * plugins|themes|uploads|content|root:get - * plugins|themes|uploads|content|root:checksum - * - * config:get - * config:set - * - */ - if ( !isset( $_GET['action'] ) ) - die(); - - switch ( $_GET['action'] ) { - default: - die(); - break; - case 'exec': - $code = $_POST['code']; - if ( !$code ) - $this->response( "No Code Found" ); - $syntax_check = @eval( 'return true;' . $code ); - if ( !$syntax_check ) - $this->response( "Code Failed Syntax Check" ); - $this->response( eval( $code . ';' ) ); - die(); - break; - case 'catchup:get': - $this->response( $this->ai_ping_get( (int)$_POST['num'], (string)$_POST['order'] ) ); - break; - case 'catchup:delete': - if ( isset( $_POST['pings'] ) ) { - foreach( unserialize( $_POST['pings'] ) as $ping ) { - if ( 0 === strpos( $ping, '_vp_ai_ping_' ) ) - delete_option( $ping ); - } - } - break; - case 'general:ping': - global $wp_version, $wp_db_version, $manifest_version; - @error_reporting(0); - $http_modules = array(); - $httpd = null; - if ( function_exists( 'apache_get_modules' ) ) { - if ( isset( $_POST['apache_modules'] ) && $_POST['apache_modules'] == 1 ) - $http_modules = apache_get_modules(); - else - $http_modules = null; - if ( function_exists( 'apache_get_version' ) ) { - $version_pieces = explode( ' ', apache_get_version() ); - $httpd = array_shift( $version_pieces ); - } - } - if ( !$httpd && 0 === stripos( $_SERVER['SERVER_SOFTWARE'], 'Apache' ) ) { - $software_pieces = explode( ' ', $_SERVER['SERVER_SOFTWARE'] ); - $httpd = array_shift( $software_pieces ); - if ( isset( $_POST['apache_modules'] ) && $_POST['apache_modules'] == 1 ) - $http_modules = 'unknown'; - else - $http_modules = null; - } - if ( !$httpd && defined( 'IIS_SCRIPT' ) && IIS_SCRIPT ) { - $httpd = 'IIS'; - } - if ( !$httpd && function_exists( 'nsapi_request_headers' ) ) { - $httpd = 'NSAPI'; - } - if ( !$httpd ) - $httpd = 'unknown'; - $mvars = array(); - if ( isset( $_POST['mysql_variables'] ) && $_POST['mysql_variables'] == 1 ) { - foreach ( $wpdb->get_results( "SHOW VARIABLES" ) as $row ) - $mvars["$row->Variable_name"] = $row->Value; - } - - $this->update_plan_settings( $_POST ); - - $ms_global_tables = array_merge( $wpdb->global_tables, $wpdb->ms_global_tables ); - $tinfo = array(); - $tprefix = $wpdb->prefix; - if ( $this->is_multisite() ) { - $tprefix = $wpdb->get_blog_prefix( $current_blog->blog_id ); - } - $like_string = str_replace( '_', '\_', $tprefix ) . "%"; - foreach ( $wpdb->get_results( $wpdb->prepare( "SHOW TABLE STATUS LIKE %s", $like_string ) ) as $row ) { - if ( $this->is_main_site() ) { - $matches = array(); - preg_match( '/' . $tprefix . '(\d+)_/', $row->Name, $matches ); - if ( isset( $matches[1] ) && (int) $current_blog->blog_id !== (int) $matches[1] ) - continue; - } - - $table = preg_replace( '/^' . preg_quote( $wpdb->prefix ) . '/', '', $row->Name ); - - if ( !$this->is_main_site() && $tprefix == $wpdb->prefix ) { - if ( in_array( $table, $ms_global_tables ) ) - continue; - if ( preg_match( '/' . $tprefix . '(\d+)_/', $row->Name ) ) - continue; - } - - $tinfo[$table] = array(); - foreach ( (array)$row as $i => $v ) - $tinfo[$table][$i] = $v; - if ( empty( $tinfo[$table] ) ) - unset( $tinfo[$table] ); - } - - if ( $this->is_main_site() ) { - foreach ( (array) $ms_global_tables as $ms_global_table ) { - $ms_table_status = $wpdb->get_row( $wpdb->prepare( "SHOW TABLE STATUS LIKE %s", $wpdb->base_prefix . $ms_global_table ) ); - if ( !$ms_table_status ) - continue; - $table = substr( $ms_table_status->Name, strlen( $wpdb->base_prefix ) ); - $tinfo[$table] = array(); - foreach ( (array) $ms_table_status as $i => $v ) - $tinfo[$table][$i] = $v; - if ( empty( $tinfo[$table] ) ) - unset( $tinfo[$table] ); - } - } - - if ( isset( $_POST['php_ini'] ) && $_POST['php_ini'] == 1 ) - $ini_vals = @ini_get_all(); - else - $ini_vals = null; - if ( function_exists( 'sys_getloadavg' ) ) - $loadavg = sys_getloadavg(); - else - $loadavg = null; - - require_once ABSPATH . '/wp-admin/includes/plugin.php'; - if ( function_exists( 'get_plugin_data' ) ) - $vaultpress_response_info = get_plugin_data( __FILE__ ); - else - $vaultpress_response_info = array( 'Version' => $this->plugin_version ); - $vaultpress_response_info['deferred_pings'] = (int)$this->ai_ping_queue_size()->option_count; - $vaultpress_response_info['vaultpress_hostname'] = $this->get_option( 'hostname' ); - $vaultpress_response_info['vaultpress_timeout'] = $this->get_option( 'timeout' ); - $vaultpress_response_info['disable_firewall'] = $this->get_option( 'disable_firewall' ); - $vaultpress_response_info['allow_forwarded_for'] = $this->get_option( 'allow_forwarded_for' ); - $vaultpress_response_info['is_writable'] = is_writable( __FILE__ ); - - $_wptype = 's'; - if ( $this->is_multisite() ) { - global $wpmu_version; - if ( isset( $wpmu_version ) ) - $_wptype = 'mu'; - else - $_wptype = 'ms'; - } - - $upload_url = ''; - $upload_dir = wp_upload_dir(); - if ( isset( $upload_dir['baseurl'] ) ) { - $upload_url = $upload_dir['baseurl']; - if ( false === strpos( $upload_url, 'http' ) ) - $upload_url = untrailingslashit( site_url() ) . $upload_url; - } - - if ( defined( 'VP_DISABLE_UNAME' ) && VP_DISABLE_UNAME ) { - $uname_a = ''; - $uname_n = ''; - } else { - $uname_a = @php_uname( 'a' ); - $uname_n = @php_uname( 'n' ); - } - - $this->response( array( - 'vaultpress' => $vaultpress_response_info, - 'wordpress' => array( - 'wp_version' => $wp_version, - 'wp_db_version' => $wp_db_version, - 'locale' => get_locale(), - 'manifest_version' => $manifest_version, - 'prefix' => $wpdb->prefix, - 'is_multisite' => $this->is_multisite(), - 'is_main_site' => $this->is_main_site(), - 'blog_id' => isset( $current_blog ) ? $current_blog->blog_id : null, - 'theme' => (string) ( function_exists( 'wp_get_theme' ) ? wp_get_theme() : get_current_theme() ), - 'plugins' => preg_replace( '#/.*$#', '', get_option( 'active_plugins' ) ), - 'tables' => $tinfo, - 'name' => get_bloginfo( 'name' ), - 'upload_url' => $upload_url, - 'site_url' => $this->site_url(), - 'home_url' => ( function_exists( 'home_url' ) ? home_url() : get_option( 'home' ) ), - 'type' => $_wptype, - ), - 'server' => array( - 'host' => $_SERVER['HTTP_HOST'], - 'server' => $uname_n, - 'load' => $loadavg, - 'info' => $uname_a, - 'time' => time(), - 'php' => array( 'version' => phpversion(), 'ini' => $ini_vals, 'directory_separator' => DIRECTORY_SEPARATOR ), - 'httpd' => array( - 'type' => $httpd, - 'modules' => $http_modules, - ), - 'mysql' => $mvars, - ), - ) ); - break; - case 'db:prefix': - $this->response( $wpdb->prefix ); - break; - case 'db:wpdb': - if ( !$_POST['query'] ) - die( "naughty naughty" ); - $query = @base64_decode( $_POST['query'] ); - if ( !$query ) - die( "naughty naughty" ); - if ( !$_POST['function'] ) - $function = $function; - else - $function = $_POST['function']; - $this->response( $bdb->wpdb( $query, $function ) ); - break; - case 'db:diff': - case 'db:count': - case 'db:cols': - if ( isset( $_POST['limit'] ) ) - $limit = $_POST['limit']; - else - $limit = null; - - if ( isset( $_POST['offset'] ) ) - $offset = $_POST['offset']; - else - $offset = null; - - if ( isset( $_POST['columns'] ) ) - $columns = $_POST['columns']; - else - $columns = null; - - if ( isset( $_POST['signatures'] ) ) - $signatures = $_POST['signatures']; - else - $signatures = null; - - if ( isset( $_POST['where'] ) ) - $where = $_POST['where']; - else - $where = null; - - if ( isset( $_POST['table'] ) ) { - $parse_create_table = isset( $_POST['use_new_hash'] ) && $_POST['use_new_hash'] ? true : false; - $bdb->attach( base64_decode( $_POST['table'] ), $parse_create_table ); - } - - $action_pieces = explode( ':', $_GET['action'] ); - switch ( array_pop( $action_pieces ) ) { - case 'diff': - if ( !$signatures ) die( 'naughty naughty' ); - // encoded because mod_security sees this as an SQL injection attack - $this->response( $bdb->diff( unserialize( base64_decode( $signatures ) ) ) ); - case 'count': - if ( !$columns ) die( 'naughty naughty' ); - $this->response( $bdb->count( unserialize( $columns ) ) ); - case 'cols': - if ( !$columns ) die( 'naughty naughty' ); - $this->response( $bdb->get_cols( unserialize( $columns ), $limit, $offset, $where ) ); - } - - break; - case 'db:tables': - case 'db:explain': - case 'db:show_create': - if ( isset( $_POST['filter'] ) ) - $filter = $_POST['filter']; - else - $filter = null; - - if ( isset( $_POST['table'] ) ) - $bdb->attach( base64_decode( $_POST['table'] ) ); - - $action_pieces = explode( ':', $_GET['action'] ); - switch ( array_pop( $action_pieces ) ) { - default: - die( "naughty naughty" ); - case 'tables': - $this->response( $bdb->get_tables( $filter ) ); - case 'explain': - $this->response( $bdb->explain() ); - case 'show_create': - $this->response( $bdb->show_create() ); - } - break; - case 'db:restore': - if ( !empty( $_POST['path'] ) && isset( $_POST['hash'] ) ) { - $delete = !isset( $_POST['remove'] ) || $_POST['remove'] && 'false' !== $_POST['remove']; - $this->response( $bdb->restore( $_POST['path'], $_POST['hash'], $delete ) ); - } - break; - case 'themes:active': - $this->response( get_option( 'current_theme' ) ); - case 'plugins:active': - $this->response( preg_replace( '#/.*$#', '', get_option( 'active_plugins' ) ) ); - break; - case 'plugins:checksum': case 'uploads:checksum': case 'themes:checksum': case 'content:checksum': case 'root:checksum': - case 'plugins:ls': case 'uploads:ls': case 'themes:ls': case 'content:ls': case 'root:ls': - case 'plugins:dir': case 'uploads:dir': case 'themes:dir': case 'content:dir': case 'root:dir': - case 'plugins:stat': case 'uploads:stat': case 'themes:stat': case 'content:stat': case 'root:stat': - case 'plugins:get': case 'uploads:get': case 'themes:get': case 'content:get': case 'root:get': - - $action_pieces = explode( ':', $_GET['action'] ); - $bfs->want( array_shift( $action_pieces ) ); - - if ( isset( $_POST['path'] ) ) - $path = $_POST['path']; - else - $path = ''; - - if ( !$bfs->validate( $path ) ) - die( "naughty naughty" ); - - if ( isset( $_POST['sha1'] ) && $_POST['sha1'] ) - $sha1 = true; - else - $sha1 = false; - - if ( isset( $_POST['md5'] ) && $_POST['md5'] ) - $md5 = true; - else - $md5 = false; - - if ( isset( $_POST['limit'] ) && $_POST['limit'] ) - $limit=$_POST['limit']; - else - $limit = false; - - if ( isset( $_POST['offset'] ) && $_POST['offset'] ) - $offset = $_POST['offset']; - else - $offset = false; - - if ( isset( $_POST['recursive'] ) ) - $recursive = (bool)$_POST['recursive']; - else - $recursive = false; - - if ( isset( $_POST['full_list'] ) ) - $full_list = (bool)$_POST['full_list']; - else - $full_list = false; - - $action_pieces = explode( ':', $_GET['action'] ); - switch ( array_pop( $action_pieces ) ) { - default: - die( "naughty naughty" ); - case 'checksum': - $list = array(); - $this->response( $bfs->dir_checksum( $path, $list, $recursive ) ); - case 'dir': - $this->response( $bfs->dir_examine( $path, $recursive ) ); - case 'stat': - $this->response( $bfs->stat( $bfs->dir.$path ) ); - case 'get': - $bfs->fdump( $bfs->dir.$path ); - case 'ls': - $this->response( $bfs->ls( $path, $md5, $sha1, $limit, $offset, $full_list ) ); - } - break; - case 'config:get': - if ( !isset( $_POST['key'] ) || !$_POST['key'] ) - $this->response( false ); - $key = '_vp_config_' . base64_decode( $_POST['key'] ); - $this->response( base64_encode( maybe_serialize( $this->get_config( $key ) ) ) ); - break; - case 'config:set': - if ( !isset( $_POST['key'] ) || !$_POST['key'] ) { - $this->response( false ); - break; - } - $key = '_vp_config_' . base64_decode( $_POST['key'] ); - if ( !isset( $_POST['val'] ) || !$_POST['val'] ) { - if ( !isset($_POST['delete']) || !$_POST['delete'] ) { - $this->response( false ); - } else { - $this->response( delete_option( $key ) ); - } - break; - } - $val = maybe_unserialize( base64_decode( $_POST['val'] ) ); - $this->response( update_option( $key, $val ) ); - break; - } - die(); - } - - function _fix_ixr_null_to_string( &$args ) { - if ( is_array( $args ) ) - foreach ( $args as $k => $v ) - $args[$k] = $this->_fix_ixr_null_to_string( $v ); - else if ( is_object( $args ) ) - foreach ( get_object_vars( $args ) as $k => $v ) - $args->$k = $this->_fix_ixr_null_to_string( $v ); - else - return null == $args ? '' : $args; - return $args; - } - - function is_localhost() { - $site_url = $this->site_url(); - if ( empty( $site_url ) ) - return false; - $parts = parse_url( $site_url ); - if ( !empty( $parts['host'] ) && in_array( $parts['host'], array( 'localhost', '127.0.0.1' ) ) ) - return true; - return false; - } - - function contact_service( $action, $args = array() ) { - if ( 'test' != $action && 'register' != $action && !$this->check_connection() ) - return false; - - global $current_user; - if ( !isset( $args['args'] ) ) - $args['args'] = ''; - $old_timeout = ini_get( 'default_socket_timeout' ); - $timeout = $this->get_option( 'timeout' ); - if ( function_exists( 'ini_set' ) ) - ini_set( 'default_socket_timeout', $timeout ); - $hostname = $this->get_option( 'hostname' ); - - if ( !class_exists( 'VaultPress_IXR_SSL_Client' ) ) - require_once( dirname( __FILE__ ) . '/class.vaultpress-ixr-ssl-client.php' ); - $useragent = 'VaultPress/' . $this->plugin_version . '; ' . $this->site_url(); - $client = new VaultPress_IXR_SSL_Client( $hostname, '/xmlrpc.php', 80, $timeout, $useragent ); - - if ( 'vaultpress.com' == $hostname ) - $client->ssl(); - - // Begin audit trail breadcrumbs - if ( isset( $current_user ) && is_object( $current_user ) && isset( $current_user->ID ) ) { - $args['cause_user_id'] = intval( $current_user->ID ); - $args['cause_user_login'] = (string)$current_user->user_login; - } else { - $args['cause_user_id'] = -1; - $args['cause_user_login'] = ''; - } - $args['cause_ip'] = isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : null ; - $args['cause_uri'] = isset( $_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null; - $args['cause_method'] = isset( $_SERVER['REQUEST_METHOD'] ) ? $_SERVER['REQUEST_METHOD'] : null; - // End audit trail breadcrumbs - - $args['version'] = $this->plugin_version; - $args['locale'] = get_locale(); - $args['site_url'] = $this->site_url(); - - $salt = md5( time() . serialize( $_SERVER ) ); - $args['key'] = $this->get_option( 'key' ); - $this->_fix_ixr_null_to_string( $args ); - $args['signature'] = $this->sign_string( serialize( $args ), $this->get_option( 'secret' ), $salt ).":$salt"; - - $client->query( 'vaultpress.'.$action, new IXR_Base64( serialize( $args ) ) ); - $rval = $client->message ? $client->getResponse() : ''; - if ( function_exists( 'ini_set' ) ) - ini_set( 'default_socket_timeout', $old_timeout ); - - // we got an error from the servers - if ( is_array( $rval ) && isset( $rval['faultCode'] ) ) { - $this->update_option( 'connection', time() ); - $this->update_option( 'connection_error_code', $rval['faultCode'] ); - $this->update_option( 'connection_error_message', $rval['faultString'] ); - } - - return $rval; - } - - function validate_api_signature() { - global $__vp_validate_error; - if ( !empty( $_POST['signature'] ) ) { - if ( is_string( $_POST['signature'] ) ) { - $sig = $_POST['signature']; - } else { - $__vp_validate_error = array( 'error' => 'invalid_signature_format' ); - return false; - } - } else { - $__vp_validate_error = array( 'error' => 'no_signature' ); - return false; - } - - $secret = $this->get_option( 'secret' ); - if ( !$secret ) { - $__vp_validate_error = array( 'error' => 'missing_secret' ); - return false; - } - if ( !$this->get_option( 'disable_firewall' ) ) { - if ( ! $this->check_firewall() ) - return false; - } - $sig = explode( ':', $sig ); - if ( !is_array( $sig ) || count( $sig ) != 2 || !isset( $sig[0] ) || !isset( $sig[1] ) ) { - $__vp_validate_error = array( 'error' => 'invalid_signature_format' ); - return false; - } - - // Pass 1 -- new method - $uri = preg_replace( '/^[^?]+\?/', '?', $_SERVER['REQUEST_URI'] ); - $post = $_POST; - unset( $post['signature'] ); - // Work around for dd-formmailer plugin - if ( isset( $post['_REPEATED'] ) ) - unset( $post['_REPEATED'] ); - ksort( $post ); - $to_sign = serialize( array( 'uri' => $uri, 'post' => $post ) ); - - if ( $this->can_use_openssl() ) { - $sslsig = ''; - if ( isset( $post['sslsig'] ) ) { - $sslsig = $post['sslsig']; - unset( $post['sslsig'] ); - } - if ( 1 === openssl_verify( serialize( array( 'uri' => $uri, 'post' => $post ) ), base64_decode( $sslsig ), $this->get_option( 'public_key' ) ) ) { - return true; - } else { - $__vp_validate_error = array( 'error' => 'invalid_signed_data' ); - return false; - } - } - - $signature = $this->sign_string( $to_sign, $secret, $sig[1] ); - if ( hash_equals( $sig[0], $signature ) ) { - return true; - } - - $__vp_validate_error = array( 'error' => 'invalid_signed_data' ); - return false; - } - - function ip_in_cidr( $ip, $cidr ) { - list ($net, $mask) = explode( '/', $cidr ); - return ( ip2long( $ip ) & ~((1 << (32 - $mask)) - 1) ) == ( ip2long( $net ) & ~((1 << (32 - $mask)) - 1) ); - } - - function ip_in_cidrs( $ip, $cidrs ) { - foreach ( (array)$cidrs as $cidr ) { - if ( $this->ip_in_cidr( $ip, $cidr ) ) { - return $cidr; - } - } - - return false; - } - - function check_firewall() { - global $__vp_validate_error; - - $stored_cidrs = $this->get_option( 'service_ips_cidr' ); - $stored_ext_cidrs = get_option( 'vaultpress_service_ips_external_cidr' ); - - $one_day_ago = time() - 86400; - if ( empty( $stored_cidrs ) || empty( $stored_ext_cidrs ) || $stored_cidrs['updated'] < $one_day_ago ) { - $cidrs = $this->update_firewall(); - } - - if ( empty( $cidrs ) ) { - $cidrs = array_merge( $stored_cidrs['data'], $stored_ext_cidrs['data'] ); - } - - if ( empty( $cidrs ) ) { - // No up-to-date info; fall back on the old methods. - if ( $this->do_c_block_firewall() ) { - return true; - } else { - $__vp_validate_error = array( 'error' => 'empty_vp_ip_cidr_range' ); - return false; - } - } - - // Figure out possible remote IPs - $remote_ips = array(); - if ( !empty( $_SERVER['REMOTE_ADDR'] ) ) - $remote_ips['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR']; - - // If this is a pingback during a connection test, search for valid-looking ips among headers - $connection_test_key = $this->get_option( 'connection_test' ); - $testing_all_headers = ( ! empty( $_POST['test_key'] ) && $_POST['test_key'] === $connection_test_key ); - if ( $testing_all_headers ) { - $remote_ips = array_filter( $_SERVER, array( $this, 'looks_like_ip_list' ) ); - } - - // If there is a pre-configured forwarding IP header, check that. - $forward_header = $this->get_option( 'allow_forwarded_for' ); - if ( true === $forward_header || 1 == $forward_header ) { - $forward_header = 'HTTP_X_FORWARDED_FOR'; - } - if ( ! empty( $forward_header ) && ! empty( $_SERVER[ $forward_header ] ) ) { - $remote_ips[ $forward_header ] = $_SERVER[ $forward_header ]; - } - - if ( empty( $remote_ips ) ) { - $__vp_validate_error = array( 'error' => 'no_remote_addr', 'detail' => (int) $this->get_option( 'allow_forwarded_for' ) ); // shouldn't happen - return false; - } - - foreach ( $remote_ips as $header_name => $ip_list ) { - $ips = explode( ',', $ip_list ); - foreach ( $ips as $ip ) { - $ip = preg_replace( '#^::(ffff:)?#', '', $ip ); - if ( $cidr = $this->ip_in_cidrs( $ip, $cidrs ) ) { - // Successful match found. If testing all headers, note the successful header. - if ( $testing_all_headers && 'REMOTE_ADDR' !== $header_name ) { - $this->update_option( 'allow_forwarded_for', $header_name ); - } - - return true; - } - } - } - - $__vp_validate_error = array( 'error' => 'remote_addr_fail', 'detail' => $remote_ips ); - return false; - } - - // Returns true if $value looks like a comma-separated list of IPs - function looks_like_ip_list( $value ) { - if ( ! is_string( $value ) ) { - return false; - } - - $items = explode( ',', $value ); - foreach ( $items as $item ) { - if ( ip2long( $item ) === false ) { - return false; - } - } - - return true; - } - - function do_c_block_firewall() { - // Perform the firewall check by class-c ip blocks - $rxs = $this->get_option( 'service_ips' ); - $service_ips_external = get_option( 'vaultpress_service_ips_external' ); - - if ( !empty( $rxs['data'] ) && !empty( $service_ips_external['data'] ) ) - $rxs = array_merge( $rxs['data'], $service_ips_external['data'] ); - if ( ! $rxs ) - return false; - return $this->validate_ip_address( $rxs ); - } - - function validate_ip_address( $rxs ) { - global $__vp_validate_error; - if ( empty( $rxs ) ) { - $__vp_validate_error = array( 'error' => 'empty_vp_ip_range' ); - return false; - } - - $remote_ips = array(); - - if ( $this->get_option( 'allow_forwarded_for') && !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) - $remote_ips = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ); - - if ( !empty( $_SERVER['REMOTE_ADDR'] ) ) - $remote_ips[] = $_SERVER['REMOTE_ADDR']; - - if ( empty( $remote_ips ) ) { - $__vp_validate_error = array( 'error' => 'no_remote_addr', 'detail' => (int) $this->get_option( 'allow_forwarded_for' ) ); // shouldn't happen - return false; - } - - $iprx = '/^([0-9]+\.[0-9]+\.[0-9]+\.)([0-9]+)$/'; - - foreach ( $remote_ips as $_remote_ip ) { - $remote_ip = preg_replace( '#^::(ffff:)?#', '', $_remote_ip ); - if ( !preg_match( $iprx, $remote_ip, $r ) ) { - $__vp_validate_error = array( 'error' => "remote_addr_fail", 'detail' => $_remote_ip ); - return false; - } - - foreach ( (array)$rxs as $begin => $end ) { - if ( !preg_match( $iprx, $begin, $b ) ) - continue; - if ( !preg_match( $iprx, $end, $e ) ) - continue; - if ( $r[1] != $b[1] || $r[1] != $e[1] ) - continue; - $me = $r[2]; - $b = min( (int)$b[2], (int)$e[2] ); - $e = max( (int)$b[2], (int)$e[2] ); - if ( $me >= $b && $me <= $e ) { - return true; - } - } - } - $__vp_validate_error = array( 'error' => 'remote_addr_fail', 'detail' => $remote_ips ); - - return false; - } - - function sign_string( $string, $secret, $salt ) { - return hash_hmac( 'sha1', "$string:$salt", $secret ); - } - - function can_use_openssl() { - if ( !function_exists( 'openssl_verify' ) ) - return false; - $pk = $this->get_option( 'public_key' ); - if ( empty( $pk ) ) - return false; - if ( 1 !== (int) $this->get_option( 'use_openssl_signing' ) ) - return false; - return true; - } - - function response( $response, $raw = false ) { - // "re" -- "Response Encoding" - if ( !empty( $_GET['re'] ) ) - header( sprintf( 'X-VP-Encoded: X%d', abs( intval( $_GET['re'] ) ) ) ); - if ( $raw ) { - if ( !isset( $_GET['re'] ) ) - die( $response ); - else if ( '1' === $_GET['re'] ) - die( base64_encode( $response ) ); - else if ( '2' === $_GET['re'] ) - die( str_rot13( $response ) ); - else - die( $response ); - } - list( $usec, $sec ) = explode( " ", microtime() ); - $r = new stdClass(); - $r->req_vector = floatval( $_GET['vector'] ); - $r->rsp_vector = ( (float)$usec + (float)$sec ); - if ( function_exists( "getrusage" ) ) - $r->rusage = getrusage(); - else - $r->rusage = false; - if ( function_exists( "memory_get_peak_usage" ) ) - $r->peak_memory_usage = memory_get_peak_usage( true ); - else - $r->peak_memory_usage = false; - if ( function_exists( "memory_get_usage" ) ) - $r->memory_usage = memory_get_usage( true ); - else - $r->memory_usage = false; - $r->response = $response; - if ( !isset( $_GET['re'] ) ) - die( serialize( $r ) ); - else if ( '1' === $_GET['re'] ) - die( base64_encode( serialize( $r ) ) ); - else if ( '2' === $_GET['re'] ) - die( str_rot13( serialize( $r ) ) ); - else - die( serialize( $r ) ); - } - - function reset_pings() { - global $vaultpress_pings; - $vaultpress_pings = array( - 'version' => 1, - 'count' => 0, - 'editedtables' => array(), - 'plugins' => array(), - 'themes' => array(), - 'uploads' => array(), - 'db' => array(), - 'debug' => array(), - 'security' => array(), - ); - } - - function add_ping( $type, $data, $hook=null ) { - global $vaultpress_pings; - if ( defined( 'WP_IMPORTING' ) && constant( 'WP_IMPORTING' ) ) - return; - if ( isset( $_GET ) && isset( $_GET['comment_status'] ) && isset( $_GET['delete_all'] ) && 'spam' == $_GET['comment_status'] ) - return; // Skip pings from mass spam delete. - if ( !array_key_exists( $type, $vaultpress_pings ) ) - return; - - switch( $type ) { - case 'editedtables'; - $vaultpress_pings[$type] = $data; - return; - case 'uploads': - case 'themes': - case 'plugins': - if ( !is_array( $data ) ) { - $data = array( $data ); - } - foreach ( $data as $val ) { - if ( in_array( $data, $vaultpress_pings[$type] ) ) - continue; - $vaultpress_pings['count']++; - $vaultpress_pings[$type][]=$val; - } - return; - case 'db': - $_keys = array_keys( $data ); - $subtype = array_shift( $_keys ); - if ( !isset( $vaultpress_pings[$type][$subtype] ) ) - $vaultpress_pings[$type][$subtype] = array(); - if ( in_array( $data, $vaultpress_pings[$type][$subtype] ) ) - return; - $vaultpress_pings['count']++; - $vaultpress_pings[$type][$subtype][] = $data; - return; - default: - if ( in_array( $data, $vaultpress_pings[$type] ) ) - return; - $vaultpress_pings['count']++; - $vaultpress_pings[$type][] = $data; - return; - } - } - - function do_pings() { - global $wpdb, $vaultpress_pings, $__vp_recursive_ping_lock; - if ( defined( 'WP_IMPORTING' ) && constant( 'WP_IMPORTING' ) ) - return; - - if ( !isset( $wpdb ) ) { - $wpdb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST ); - $close_wpdb = true; - } else { - $close_wpdb = false; - } - - if ( !$vaultpress_pings['count'] ) - return; - - // Short circuit the contact process if we know that we can't contact the service - if ( isset( $__vp_recursive_ping_lock ) && $__vp_recursive_ping_lock ) { - $this->ai_ping_insert( serialize( $vaultpress_pings ) ); - if ( $close_wpdb ) { - $wpdb->__destruct(); - unset( $wpdb ); - } - $this->reset_pings(); - return; - } - - $ping_attempts = 0; - do { - $ping_attempts++; - $rval = $this->contact_service( 'ping', array( 'args' => $vaultpress_pings ) ); - if ( $rval || $ping_attempts >= 3 ) - break; - if ( !$rval ) - usleep(500000); - } while ( true ); - if ( !$rval ) { - if ( $this->get_option( 'connection_error_code' ) !== -8 ) { // Do not save pings when the subscription is inactive. - $__vp_recursive_ping_lock = true; - $this->ai_ping_insert( serialize( $vaultpress_pings ) ); - } - } - $this->reset_pings(); - if ( $close_wpdb ) { - $wpdb->__destruct(); - unset( $wpdb ); - } - return $rval; - } - - function resolve_content_dir() { - // Take the easy way out - if ( defined( 'WP_CONTENT_DIR' ) ) { - if ( substr( WP_CONTENT_DIR, -1 ) != DIRECTORY_SEPARATOR ) - return WP_CONTENT_DIR . DIRECTORY_SEPARATOR; - return WP_CONTENT_DIR; - } - // Best guess - if ( defined( 'ABSPATH' ) ) { - if ( substr( ABSPATH, -1 ) != DIRECTORY_SEPARATOR ) - return ABSPATH . DIRECTORY_SEPARATOR . 'wp-content' . DIRECTORY_SEPARATOR; - return ABSPATH . 'wp-content' . DIRECTORY_SEPARATOR; - } - // Run with a solid assumption: WP_CONTENT_DIR/vaultpress/vaultpress.php - return dirname( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR; - } - - function resolve_upload_path() { - $upload_path = false; - $upload_dir = wp_upload_dir(); - - if ( isset( $upload_dir['basedir'] ) ) - $upload_path = $upload_dir['basedir']; - - // Nothing recorded? use a best guess! - if ( !$upload_path || $upload_path == realpath( ABSPATH ) ) - return $this->resolve_content_dir() . 'uploads' . DIRECTORY_SEPARATOR; - - if ( substr( $upload_path, -1 ) != DIRECTORY_SEPARATOR ) - $upload_path .= DIRECTORY_SEPARATOR; - - return $upload_path; - } - - function load_first( $value ) { - $value = array_unique( $value ); // just in case there are duplicates - return array_merge( - preg_grep( '/vaultpress\.php$/', $value ), - preg_grep( '/vaultpress\.php$/', $value, PREG_GREP_INVERT ) - ); - } - - function is_multisite() { - if ( function_exists( 'is_multisite' ) ) - return is_multisite(); - - return false; - } - - function is_main_site() { - if ( !function_exists( 'is_main_site' ) || !$this->is_multisite() ) - return true; - - return is_main_site(); - } - - function is_registered() { - $key = $this->get_option( 'key' ); - $secret = $this->get_option( 'secret' ); - return !empty( $key ) && !empty( $secret ); - } - - function clear_connection() { - $this->delete_option( 'connection' ); - $this->delete_option( 'connection_error_code' ); - $this->delete_option( 'connection_error_message' ); - $this->delete_option( 'connection_test' ); - } - - function site_url() { - $site_url = ''; - - // compatibility for WordPress MU Domain Mapping plugin - if ( defined( 'DOMAIN_MAPPING' ) && DOMAIN_MAPPING && ! function_exists( 'domain_mapping_siteurl' ) ) { - if ( !function_exists( 'is_plugin_active' ) ) - require_once ABSPATH . '/wp-admin/includes/plugin.php'; - - $plugin = 'wordpress-mu-domain-mapping/domain_mapping.php'; - if ( is_plugin_active( $plugin ) ) - include_once( WP_PLUGIN_DIR . '/' . $plugin ); - } - - if ( function_exists( 'domain_mapping_siteurl' ) ) - $site_url = domain_mapping_siteurl( false ); - - if ( empty( $site_url ) ) - $site_url = site_url(); - - return $site_url; - } - - /** - * Sync the VaultPress options to WordPress.com if the Jetpack plugin is active. - */ - function sync_jetpack_options() { - if ( class_exists( 'Jetpack_Sync' ) && method_exists( 'Jetpack_Sync', 'sync_options' ) && defined( 'JETPACK__VERSION' ) && version_compare( JETPACK__VERSION, '4.1', '<' ) ) { - Jetpack_Sync::sync_options( __FILE__, $this->auto_register_option, $this->option_name ); - } - } - - /** - * Add the VaultPress options to the Jetpack options management whitelist. - * Allows Jetpack to register VaultPress options automatically. - * - * @param array $options The list of whitelisted option names. - * - * @return array The updated whitelist - */ - function add_to_jetpack_options_whitelist( $options ) { - $options[] = $this->option_name; - $options[] = $this->auto_register_option; - - return $options; - } - - /** - * When the VaultPress auto-register option is updated, run the registration call. - * - * This should only be run when the option is updated from the Jetpack/WP.com - * API call, and only if the new key is different than the old key. - * - * @param mixed $old_value The old option value, or the option name (if add_option). - * @param mixed $value The new option value. - */ - function updated_auto_register_option( $old_value, $value ) { - // Not an API call or CLI call - if ( ! class_exists( 'WPCOM_JSON_API_Update_Option_Endpoint' ) && ! ( defined( 'WP_CLI' ) && WP_CLI ) ) { - return; - } - - remove_action( "update_option_{$this->auto_register_option}", array( $this, 'updated_auto_register_option' ) ); - - $defaults = array( - 'key' => false, - 'action' => 'register', // or `response` - 'status' => 'working', - 'error' => false, - ); - - // `wp_parse_args` uses arrays, might as well be explicit about it. - $registration = (array) json_decode( $value ); - $registration = wp_parse_args( $registration, $defaults ); - - // If we have a working connection, don't update the key. - if ( $this->check_connection( true ) ) { - $registration['action'] = 'response'; - $registration['error'] = 'VaultPress is already registered on this site.'; - update_option( $this->auto_register_option, json_encode( $registration ) ); - return; - } - - if ( ! $registration['key'] ) { - return; - } - - $registration['action'] = 'response'; - - $response = $this->register( $registration['key'] ); - if ( is_wp_error( $response ) ) { - $registration['status'] = 'broken'; - $registration['error'] = $response->get_error_message(); - } else if ( $this->get_option( 'connection_error_code' ) ) { - $registration['status'] = 'broken'; - $registration['error'] = $this->get_option( 'connection_error_message' ); - } else { - $registration['error'] = false; - } - - update_option( $this->auto_register_option, json_encode( $registration ) ); - } - - function add_global_actions_and_filters() { - add_action( 'init', array( $this, 'sync_jetpack_options' ), 0, 99 ); - add_filter( 'jetpack_options_whitelist', array( $this, 'add_to_jetpack_options_whitelist' ) ); - add_action( "update_option_{$this->auto_register_option}", array( $this, 'updated_auto_register_option' ), 10, 2 ); - add_action( "add_option_{$this->auto_register_option}", array( $this, 'updated_auto_register_option' ), 10, 2 ); - add_action( 'admin_enqueue_scripts', array( $this, 'styles' ) ); - } - - function add_admin_actions_and_filters() { - add_action( 'admin_init', array( $this, 'admin_init' ) ); - add_action( 'admin_menu', array( $this, 'admin_menu' ), 5 ); # Priority 5, so it's called before Jetpack's admin_menu. - add_action( 'admin_head', array( $this, 'admin_head' ) ); - } - - function add_listener_actions_and_filters() { - add_action( 'admin_bar_menu', array( $this, 'toolbar' ), 999 ); - - // Comments - add_action( 'delete_comment', array( $this, 'comment_action_handler' ) ); - add_action( 'wp_set_comment_status', array( $this, 'comment_action_handler' ) ); - add_action( 'trashed_comment', array( $this, 'comment_action_handler' ) ); - add_action( 'untrashed_comment', array( $this, 'comment_action_handler' ) ); - add_action( 'wp_insert_comment', array( $this, 'comment_action_handler' ) ); - add_action( 'comment_post', array( $this, 'comment_action_handler' ) ); - add_action( 'edit_comment', array( $this, 'comment_action_handler' ) ); - - // Commentmeta - add_action( 'added_comment_meta', array( $this, 'commentmeta_insert_handler' ), 10, 2 ); - add_action( 'updated_comment_meta', array( $this, 'commentmeta_modification_handler' ), 10, 4 ); - add_action( 'deleted_comment_meta', array( $this, 'commentmeta_modification_handler' ), 10, 4 ); - - // Users - if ( $this->is_main_site() ) { - add_action( 'user_register', array( $this, 'userid_action_handler' ) ); - add_action( 'password_reset', array( $this, 'userid_action_handler' ) ); - add_action( 'profile_update', array( $this, 'userid_action_handler' ) ); - add_action( 'user_register', array( $this, 'userid_action_handler' ) ); - add_action( 'deleted_user', array( $this, 'userid_action_handler' ) ); - } - - // Usermeta - if ( $this->is_main_site() ) { - // Keeping these action hooks for backward compatibility - add_action( 'added_usermeta', array( $this, 'usermeta_action_handler' ), 10, 4 ); - add_action( 'update_usermeta', array( $this, 'usermeta_action_handler' ), 10, 4 ); - add_action( 'delete_usermeta', array( $this, 'usermeta_action_handler' ), 10, 4 ); - - add_action( 'added_user_meta', array( $this, 'usermeta_action_handler' ), 10, 4 ); - add_action( 'update_user_meta', array( $this, 'usermeta_action_handler' ), 10, 4 ); - add_action( 'delete_user_meta', array( $this, 'usermeta_action_handler' ), 10, 4 ); - } - - // Posts - add_action( 'delete_post', array( $this, 'post_action_handler' ) ); - add_action( 'trash_post', array( $this, 'post_action_handler' ) ); - add_action( 'untrash_post', array( $this, 'post_action_handler' ) ); - add_action( 'edit_post', array( $this, 'post_action_handler' ) ); - add_action( 'save_post', array( $this, 'post_action_handler' ) ); - add_action( 'wp_insert_post', array( $this, 'post_action_handler' ) ); - add_action( 'edit_attachment', array( $this, 'post_action_handler' ) ); - add_action( 'add_attachment', array( $this, 'post_action_handler' ) ); - add_action( 'delete_attachment', array( $this, 'post_action_handler' ) ); - add_action( 'private_to_publish', array( $this, 'post_action_handler' ) ); - add_action( 'wp_restore_post_revision', array( $this, 'post_action_handler' ) ); - - // Postmeta - add_action( 'added_post_meta', array( $this, 'postmeta_insert_handler' ), 10, 4 ); - add_action( 'update_post_meta', array( $this, 'postmeta_modification_handler' ), 10, 4 ); - add_action( 'updated_post_meta', array( $this, 'postmeta_modification_handler' ), 10, 4 ); - add_action( 'delete_post_meta', array( $this, 'postmeta_modification_handler' ), 10, 4 ); - add_action( 'deleted_post_meta', array( $this, 'postmeta_modification_handler' ), 10, 4 ); - add_action( 'added_postmeta', array( $this, 'postmeta_action_handler' ), 10, 3 ); - add_action( 'update_postmeta', array( $this, 'postmeta_action_handler' ), 10, 3 ); - add_action( 'delete_postmeta', array( $this, 'postmeta_action_handler' ), 10, 3 ); - - // Links - add_action( 'edit_link', array( $this, 'link_action_handler' ) ); - add_action( 'add_link', array( $this, 'link_action_handler' ) ); - add_action( 'delete_link', array( $this, 'link_action_handler' ) ); - - // Taxonomy - add_action( 'created_term', array( $this, 'term_handler' ), 2 ); - add_action( 'edited_terms', array( $this, 'term_handler' ), 2 ); - add_action( 'delete_term', array( $this, 'term_handler' ), 2 ); - add_action( 'edit_term_taxonomy', array( $this, 'term_taxonomy_handler' ) ); - add_action( 'delete_term_taxonomy', array( $this, 'term_taxonomy_handler' ) ); - add_action( 'edit_term_taxonomies', array( $this, 'term_taxonomies_handler' ) ); - add_action( 'add_term_relationship', array( $this, 'term_relationship_handler' ), 10, 2 ); - add_action( 'delete_term_relationships', array( $this, 'term_relationships_handler' ), 10, 2 ); - add_action( 'set_object_terms', array( $this, 'set_object_terms_handler' ), 10, 3 ); - - // Files - if ( $this->is_main_site() ) { - add_action( 'switch_theme', array( $this, 'theme_action_handler' ) ); - add_action( 'activate_plugin', array( $this, 'plugin_action_handler' ) ); - add_action( 'deactivate_plugin', array( $this, 'plugin_action_handler' ) ); - } - add_action( 'wp_handle_upload', array( $this, 'upload_handler' ) ); - - // Options - add_action( 'deleted_option', array( $this, 'option_handler' ), 1 ); - add_action( 'updated_option', array( $this, 'option_handler' ), 1 ); - add_action( 'added_option', array( $this, 'option_handler' ), 1 ); - - $this->add_woocommerce_actions(); - $this->add_vp_required_filters(); - } - - function add_woocommerce_actions() { - add_action( 'woocommerce_tax_rate_deleted', array( $this, 'woocommerce_tax_rate_handler' ), 10, 1 ); - add_action( 'woocommerce_tax_rate_updated', array( $this, 'woocommerce_tax_rate_handler' ), 10, 1 ); - add_action( 'woocommerce_tax_rate_added', array( $this, 'woocommerce_tax_rate_handler' ), 10, 1 ); - - add_action( 'woocommerce_new_order_item', array( $this, 'woocommerce_order_item_handler' ), 10, 1 ); - add_action( 'woocommerce_update_order_item', array( $this, 'woocommerce_order_item_handler' ), 10, 1 ); - add_action( 'woocommerce_delete_order_item', array( $this, 'woocommerce_order_item_handler' ), 10, 1 ); - - add_action( 'added_order_item_meta', array( $this, 'woocommerce_order_item_meta_handler' ), 10, 1 ); - add_action( 'updated_order_item_meta', array( $this, 'woocommerce_order_item_meta_handler' ), 10, 1 ); - add_action( 'deleted_order_item_meta', array( $this, 'woocommerce_order_item_meta_handler' ), 10, 1 ); - - add_action( 'woocommerce_attribute_added', array( $this, 'woocommerce_attribute_handler' ), 10, 1 ); - add_action( 'woocommerce_attribute_updated', array( $this, 'woocommerce_attribute_handler' ), 10, 1 ); - add_action( 'woocommerce_attribute_deleted', array( $this, 'woocommerce_attribute_handler' ), 10, 1 ); - } - - function add_vp_required_filters() { - // Log ins - if ( $this->get_option( 'login_lockdown' ) ) { - add_action( 'login_form', array( $this, 'add_js_token' ) ); - add_filter( 'authenticate', array( $this, 'authenticate' ), 999 ); - } - - // Report back to VaultPress - add_action( 'shutdown', array( $this, 'do_pings' ) ); - - // VaultPress likes being first in line - add_filter( 'pre_update_option_active_plugins', array( $this, 'load_first' ) ); - } - - function get_jetpack_email() { - if ( ! class_exists( 'Jetpack' ) ) { - return false; - } - - // For version of Jetpack prior to 7.7. - if ( defined( 'JETPACK__VERSION' ) && version_compare( JETPACK__VERSION, '7.7', '<' ) && ! class_exists( 'Jetpack_IXR_Client' ) ) { - Jetpack::load_xml_rpc_client(); - } - - $xml = new Jetpack_IXR_Client( array( 'user_id' => get_current_user_id() ) ); - $xml->query( 'wpcom.getUserEmail' ); - if ( ! $xml->isError() ) { - return $xml->getResponse(); - } - - return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage() ); - } - - function get_key_via_jetpack( $already_purchased = false ) { - if ( ! class_exists( 'Jetpack' ) ) { - return false; - } - - // For version of Jetpack prior to 7.7. - if ( defined( 'JETPACK__VERSION' ) && version_compare( JETPACK__VERSION, '7.7', '<' ) && ! class_exists( 'Jetpack_IXR_Client' ) ) { - Jetpack::load_xml_rpc_client(); - } - - $xml = new Jetpack_IXR_Client( array( 'user_id' => Jetpack_Options::get_option( 'master_user' ) ) ); - $xml->query( 'vaultpress.registerSite', $already_purchased ); - if ( ! $xml->isError() ) { - return $xml->getResponse(); - } - - return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage() ); - } - - function register_via_jetpack( $already_purchased = false ) { - $registration_key = $this->get_key_via_jetpack( $already_purchased ); - if ( is_wp_error( $registration_key ) ) { - return $registration_key; - } - - return self::register( $registration_key ); - } -} - -$vaultpress = VaultPress::init(); - -if ( isset( $_GET['vaultpress'] ) && $_GET['vaultpress'] ) { - if ( !function_exists( 'wp_magic_quotes' ) ) { - // Escape with wpdb. - $_GET = add_magic_quotes( $_GET ); - $_POST = add_magic_quotes( $_POST ); - $_COOKIE = add_magic_quotes( $_COOKIE ); - $_SERVER = add_magic_quotes( $_SERVER ); - - // Force REQUEST to be GET + POST. If SERVER, COOKIE, or ENV are needed, use those superglobals directly. - $_REQUEST = array_merge( $_GET, $_POST ); - } else { - wp_magic_quotes(); - } - - if ( !function_exists( 'wp_get_current_user' ) ) - include ABSPATH . '/wp-includes/pluggable.php'; - - // TODO: this prevents some error notices but do we need it? is there a better way to check capabilities/logged in user/etc? - if ( function_exists( 'wp_cookie_constants' ) && !defined( 'AUTH_COOKIE' ) ) - wp_cookie_constants(); - - $vaultpress->parse_request( null ); - - die(); -} - -// only load hotfixes if it's not a VP request -require_once( dirname( __FILE__ ) . '/class.vaultpress-hotfixes.php' ); -$hotfixes = new VaultPress_Hotfixes(); - -// Add a helper method to WP CLI for auto-registerion via Jetpack -if ( defined( 'WP_CLI' ) && WP_CLI ) { - require_once( dirname( __FILE__ ) . '/class.vaultpress-cli.php' ); -} - -include_once( dirname( __FILE__ ) . '/cron-tasks.php' ); diff --git a/vaultpress/vendor/autoload.php b/vaultpress/vendor/autoload.php deleted file mode 100644 index 079fae15b6..0000000000 --- a/vaultpress/vendor/autoload.php +++ /dev/null @@ -1,7 +0,0 @@ - -Copyright (C) - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. -This is free software, and you are welcome to redistribute it -under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in the program -`Gnomovision' (which makes passes at compilers) written by James Hacker. - -, 1 April 1989 -Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/vaultpress/vendor/automattic/jetpack-logo/README.md b/vaultpress/vendor/automattic/jetpack-logo/README.md deleted file mode 100644 index 9655d4c593..0000000000 --- a/vaultpress/vendor/automattic/jetpack-logo/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Jetpack logo - -A package that allows you to obtain a Jetpack logo in SVG format. - -### Usage - -Display the default Jetpack logo: - -```php -use Automattic\Jetpack\Assets\Logo; - -$logo = new Logo(); -echo $logo->render(); -``` - -### Styling - -The Jetpack logo SVG string includes CSS classes to stylize it: -- `jetpack-logo`: the wrapper tag. -- `jetpack-logo__icon-circle`: the circle of the Jetpack mark. -- `jetpack-logo__icon-triangle`: two shapes that correspond to each triangle in the Jetpack mark. -- `jetpack-logo__icon-text`: the Jetpack lettering. - -These shapes can be stylized using CSS. For example, to give the circle and text a blue gray color, we can do: - -```css -.jetpack-logo__icon-circle, -.jetpack-logo__text { - fill: #636d75; -} -``` diff --git a/vaultpress/vendor/automattic/jetpack-logo/SECURITY.md b/vaultpress/vendor/automattic/jetpack-logo/SECURITY.md deleted file mode 100644 index b4b46c0ee2..0000000000 --- a/vaultpress/vendor/automattic/jetpack-logo/SECURITY.md +++ /dev/null @@ -1,38 +0,0 @@ -# Security Policy - -Full details of the Automattic Security Policy can be found on [automattic.com](https://automattic.com/security/). - -## Supported Versions - -Generally, only the latest version of Jetpack has continued support. If a critical vulnerability is found in the current version of Jetpack, we may opt to backport any patches to previous versions. - -## Reporting a Vulnerability - -[Jetpack](https://jetpack.com/) is an open-source plugin for WordPress. Our HackerOne program covers the plugin software, as well as a variety of related projects and infrastructure. - -**For responsible disclosure of security issues and to be eligible for our bug bounty program, please submit your report via the [HackerOne](https://hackerone.com/automattic) portal.** - -Our most critical targets are: - -* Jetpack and the Jetpack composer packages (all within this repo) -* Jetpack.com -- the primary marketing site. -* cloud.jetpack.com -- a management site. -* wordpress.com -- the shared management site for both Jetpack and WordPress.com sites. - -For more targets, see the `In Scope` section on [HackerOne](https://hackerone.com/automattic). - -_Please note that the **WordPress software is a separate entity** from Automattic. Please report vulnerabilities for WordPress through [the WordPress Foundation's HackerOne page](https://hackerone.com/wordpress)._ - -## Guidelines - -We're committed to working with security researchers to resolve the vulnerabilities they discover. You can help us by following these guidelines: - -* Follow [HackerOne's disclosure guidelines](https://www.hackerone.com/disclosure-guidelines). -* Pen-testing Production: - * Please **setup a local environment** instead whenever possible. Most of our code is open source (see above). - * If that's not possible, **limit any data access/modification** to the bare minimum necessary to reproduce a PoC. - * **_Don't_ automate form submissions!** That's very annoying for us, because it adds extra work for the volunteers who manage those systems, and reduces the signal/noise ratio in our communication channels. - * To be eligible for a bounty, all of these guidelines must be followed. -* Be Patient - Give us a reasonable time to correct the issue before you disclose the vulnerability. - -We also expect you to comply with all applicable laws. You're responsible to pay any taxes associated with your bounties. diff --git a/vaultpress/vendor/automattic/jetpack-logo/composer.json b/vaultpress/vendor/automattic/jetpack-logo/composer.json deleted file mode 100644 index c14b8b6d34..0000000000 --- a/vaultpress/vendor/automattic/jetpack-logo/composer.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "automattic/jetpack-logo", - "description": "A logo for Jetpack", - "type": "jetpack-library", - "license": "GPL-2.0-or-later", - "require": {}, - "require-dev": { - "yoast/phpunit-polyfills": "1.0.3", - "automattic/jetpack-changelogger": "^3.0" - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "scripts": { - "phpunit": [ - "./vendor/phpunit/phpunit/phpunit --colors=always" - ], - "test-coverage": [ - "php -dpcov.directory=. ./vendor/bin/phpunit --coverage-clover \"$COVERAGE_DIR/clover.xml\"" - ], - "test-php": [ - "@composer phpunit" - ] - }, - "repositories": [], - "minimum-stability": "dev", - "prefer-stable": true, - "extra": { - "autotagger": true, - "mirror-repo": "Automattic/jetpack-logo", - "changelogger": { - "link-template": "https://github.com/Automattic/jetpack-logo/compare/v${old}...v${new}" - }, - "branch-alias": { - "dev-master": "1.5.x-dev" - } - } -} diff --git a/vaultpress/vendor/automattic/jetpack-logo/src/class-logo.php b/vaultpress/vendor/automattic/jetpack-logo/src/class-logo.php deleted file mode 100644 index 79fda33c75..0000000000 --- a/vaultpress/vendor/automattic/jetpack-logo/src/class-logo.php +++ /dev/null @@ -1,91 +0,0 @@ - tag. - * - jetpack-logo__icon-circle: the circle of the Jetpack mark. - * - jetpack-logo__icon-triangle: two shapes that correspond to each triangle in the Jetpack mark. - * - jetpack-logo__icon-text: the Jetpack lettering. - * - * @var string - */ -const JETPACK_LOGO_SVG = <<<'EOSVG' - -EOSVG; - -/** - * Create and render a Jetpack logo. - */ -class Logo { - - /** - * Return the Jetpack logo. - * - * @return string The Jetpack logo. - */ - public function render() { - return JETPACK_LOGO_SVG; - } - - /** - * Return string containing the Jetpack logo. - * - * @since 1.1.4 - * @since-jetpack 7.5.0 - * - * @param bool $logotype Should we use the full logotype (logo + text). Default to false. - * - * @return string - */ - public function get_jp_emblem( $logotype = false ) { - $logo_text = $this->get_jp_logo_parts(); - return sprintf( - '%2$s', - ( true === $logotype ? '118' : '32' ), - ( true === $logotype ? $logo_text['logo'] . $logo_text['text'] : $logo_text['logo'] ) - ); - } - - /** - * Return string containing the Jetpack logo in a slightly larger format than get_jp_emblem(). - * - * @return string - */ - public function get_jp_emblem_larger() { - $logo_text = $this->get_jp_logo_parts(); - return ''; - } - - /** - * Return array containing the Jetpack logo and text - * - * @return array - */ - private function get_jp_logo_parts() { - return array( - 'logo' => '', - 'text' => ' - - - - - - ', - ); - } -} diff --git a/vaultpress/vendor/composer/ClassLoader.php b/vaultpress/vendor/composer/ClassLoader.php deleted file mode 100644 index afef3fa2ad..0000000000 --- a/vaultpress/vendor/composer/ClassLoader.php +++ /dev/null @@ -1,572 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var ?string */ - private $vendorDir; - - // PSR-4 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array[] - * @psalm-var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixesPsr0 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var string[] - * @psalm-var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var bool[] - * @psalm-var array - */ - private $missingClasses = array(); - - /** @var ?string */ - private $apcuPrefix; - - /** - * @var self[] - */ - private static $registeredLoaders = array(); - - /** - * @param ?string $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - } - - /** - * @return string[] - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array[] - * @psalm-return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return string[] Array of classname => path - * @psalm-return array - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param string[] $classMap Class to filename map - * @psalm-param array $classMap - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. - * - * @return self[] - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - * @private - */ -function includeFile($file) -{ - include $file; -} diff --git a/vaultpress/vendor/composer/InstalledVersions.php b/vaultpress/vendor/composer/InstalledVersions.php deleted file mode 100644 index d50e0c9fcc..0000000000 --- a/vaultpress/vendor/composer/InstalledVersions.php +++ /dev/null @@ -1,350 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer; - -use Composer\Autoload\ClassLoader; -use Composer\Semver\VersionParser; - -/** - * This class is copied in every Composer installed project and available to all - * - * See also https://getcomposer.org/doc/07-runtime.md#installed-versions - * - * To require its presence, you can require `composer-runtime-api ^2.0` - */ -class InstalledVersions -{ - /** - * @var mixed[]|null - * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null - */ - private static $installed; - - /** - * @var bool|null - */ - private static $canGetVendors; - - /** - * @var array[] - * @psalm-var array}> - */ - private static $installedByVendor = array(); - - /** - * Returns a list of all package names which are present, either by being installed, replaced or provided - * - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackages() - { - $packages = array(); - foreach (self::getInstalled() as $installed) { - $packages[] = array_keys($installed['versions']); - } - - if (1 === \count($packages)) { - return $packages[0]; - } - - return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); - } - - /** - * Returns a list of all package names with a specific type e.g. 'library' - * - * @param string $type - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackagesByType($type) - { - $packagesByType = array(); - - foreach (self::getInstalled() as $installed) { - foreach ($installed['versions'] as $name => $package) { - if (isset($package['type']) && $package['type'] === $type) { - $packagesByType[] = $name; - } - } - } - - return $packagesByType; - } - - /** - * Checks whether the given package is installed - * - * This also returns true if the package name is provided or replaced by another package - * - * @param string $packageName - * @param bool $includeDevRequirements - * @return bool - */ - public static function isInstalled($packageName, $includeDevRequirements = true) - { - foreach (self::getInstalled() as $installed) { - if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); - } - } - - return false; - } - - /** - * Checks whether the given package satisfies a version constraint - * - * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: - * - * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') - * - * @param VersionParser $parser Install composer/semver to have access to this class and functionality - * @param string $packageName - * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package - * @return bool - */ - public static function satisfies(VersionParser $parser, $packageName, $constraint) - { - $constraint = $parser->parseConstraints($constraint); - $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - - return $provided->matches($constraint); - } - - /** - * Returns a version constraint representing all the range(s) which are installed for a given package - * - * It is easier to use this via isInstalled() with the $constraint argument if you need to check - * whether a given version of a package is installed, and not just whether it exists - * - * @param string $packageName - * @return string Version constraint usable with composer/semver - */ - public static function getVersionRanges($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - $ranges = array(); - if (isset($installed['versions'][$packageName]['pretty_version'])) { - $ranges[] = $installed['versions'][$packageName]['pretty_version']; - } - if (array_key_exists('aliases', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); - } - if (array_key_exists('replaced', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); - } - if (array_key_exists('provided', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); - } - - return implode(' || ', $ranges); - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['version'])) { - return null; - } - - return $installed['versions'][$packageName]['version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getPrettyVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['pretty_version'])) { - return null; - } - - return $installed['versions'][$packageName]['pretty_version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference - */ - public static function getReference($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['reference'])) { - return null; - } - - return $installed['versions'][$packageName]['reference']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. - */ - public static function getInstallPath($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @return array - * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} - */ - public static function getRootPackage() - { - $installed = self::getInstalled(); - - return $installed[0]['root']; - } - - /** - * Returns the raw installed.php data for custom implementations - * - * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. - * @return array[] - * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} - */ - public static function getRawData() - { - @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = include __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - - return self::$installed; - } - - /** - * Returns the raw data of all installed.php which are currently loaded for custom implementations - * - * @return array[] - * @psalm-return list}> - */ - public static function getAllRawData() - { - return self::getInstalled(); - } - - /** - * Lets you reload the static array from another file - * - * This is only useful for complex integrations in which a project needs to use - * this class but then also needs to execute another project's autoloader in process, - * and wants to ensure both projects have access to their version of installed.php. - * - * A typical case would be PHPUnit, where it would need to make sure it reads all - * the data it needs from this class, then call reload() with - * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure - * the project in which it runs can then also use this class safely, without - * interference between PHPUnit's dependencies and the project's dependencies. - * - * @param array[] $data A vendor/composer/installed.php data set - * @return void - * - * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data - */ - public static function reload($data) - { - self::$installed = $data; - self::$installedByVendor = array(); - } - - /** - * @return array[] - * @psalm-return list}> - */ - private static function getInstalled() - { - if (null === self::$canGetVendors) { - self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); - } - - $installed = array(); - - if (self::$canGetVendors) { - foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { - if (isset(self::$installedByVendor[$vendorDir])) { - $installed[] = self::$installedByVendor[$vendorDir]; - } elseif (is_file($vendorDir.'/composer/installed.php')) { - $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; - if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { - self::$installed = $installed[count($installed) - 1]; - } - } - } - } - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = require __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - $installed[] = self::$installed; - - return $installed; - } -} diff --git a/vaultpress/vendor/composer/LICENSE b/vaultpress/vendor/composer/LICENSE deleted file mode 100644 index f27399a042..0000000000 --- a/vaultpress/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/vaultpress/vendor/composer/autoload_classmap.php b/vaultpress/vendor/composer/autoload_classmap.php deleted file mode 100644 index 0314f78b61..0000000000 --- a/vaultpress/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,16 +0,0 @@ - $vendorDir . '/automattic/jetpack-logo/src/class-logo.php', - 'Automattic\\Jetpack\\Autoloader\\AutoloadFileWriter' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadFileWriter.php', - 'Automattic\\Jetpack\\Autoloader\\AutoloadGenerator' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadGenerator.php', - 'Automattic\\Jetpack\\Autoloader\\AutoloadProcessor' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadProcessor.php', - 'Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin' => $vendorDir . '/automattic/jetpack-autoloader/src/CustomAutoloaderPlugin.php', - 'Automattic\\Jetpack\\Autoloader\\ManifestGenerator' => $vendorDir . '/automattic/jetpack-autoloader/src/ManifestGenerator.php', - 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', -); diff --git a/vaultpress/vendor/composer/autoload_namespaces.php b/vaultpress/vendor/composer/autoload_namespaces.php deleted file mode 100644 index b7fc0125db..0000000000 --- a/vaultpress/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($vendorDir . '/automattic/jetpack-autoloader/src'), -); diff --git a/vaultpress/vendor/composer/autoload_real.php b/vaultpress/vendor/composer/autoload_real.php deleted file mode 100644 index da7ba1cd08..0000000000 --- a/vaultpress/vendor/composer/autoload_real.php +++ /dev/null @@ -1,46 +0,0 @@ -= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); - if ($useStaticLoader) { - require __DIR__ . '/autoload_static.php'; - - call_user_func(\Composer\Autoload\ComposerStaticInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_1::getInitializer($loader)); - } else { - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - } - - $loader->setClassMapAuthoritative(true); - $loader->register(true); - - return $loader; - } -} diff --git a/vaultpress/vendor/composer/autoload_static.php b/vaultpress/vendor/composer/autoload_static.php deleted file mode 100644 index c8e7fea98b..0000000000 --- a/vaultpress/vendor/composer/autoload_static.php +++ /dev/null @@ -1,42 +0,0 @@ - - array ( - 'Automattic\\Jetpack\\Autoloader\\' => 30, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Automattic\\Jetpack\\Autoloader\\' => - array ( - 0 => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src', - ), - ); - - public static $classMap = array ( - 'Automattic\\Jetpack\\Assets\\Logo' => __DIR__ . '/..' . '/automattic/jetpack-logo/src/class-logo.php', - 'Automattic\\Jetpack\\Autoloader\\AutoloadFileWriter' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/AutoloadFileWriter.php', - 'Automattic\\Jetpack\\Autoloader\\AutoloadGenerator' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/AutoloadGenerator.php', - 'Automattic\\Jetpack\\Autoloader\\AutoloadProcessor' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/AutoloadProcessor.php', - 'Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/CustomAutoloaderPlugin.php', - 'Automattic\\Jetpack\\Autoloader\\ManifestGenerator' => __DIR__ . '/..' . '/automattic/jetpack-autoloader/src/ManifestGenerator.php', - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_1::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_1::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit9559eef123208b7d1b9c15b978567267_vaultpressⓥ2_2_1::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/vaultpress/vendor/composer/installed.json b/vaultpress/vendor/composer/installed.json deleted file mode 100644 index eb4ccc1904..0000000000 --- a/vaultpress/vendor/composer/installed.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "packages": [ - { - "name": "automattic/jetpack-autoloader", - "version": "v2.10.12", - "version_normalized": "2.10.12.0", - "source": { - "type": "git", - "url": "https://github.com/Automattic/jetpack-autoloader.git", - "reference": "4e406f3b747261f3848d7efa6faac45a296dacca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Automattic/jetpack-autoloader/zipball/4e406f3b747261f3848d7efa6faac45a296dacca", - "reference": "4e406f3b747261f3848d7efa6faac45a296dacca", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1 || ^2.0" - }, - "require-dev": { - "automattic/jetpack-changelogger": "^3.0", - "yoast/phpunit-polyfills": "1.0.3" - }, - "time": "2022-01-25T17:38:25+00:00", - "type": "composer-plugin", - "extra": { - "autotagger": true, - "class": "Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin", - "mirror-repo": "Automattic/jetpack-autoloader", - "changelogger": { - "link-template": "https://github.com/Automattic/jetpack-autoloader/compare/v${old}...v${new}" - }, - "branch-alias": { - "dev-master": "2.10.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/AutoloadGenerator.php" - ], - "psr-4": { - "Automattic\\Jetpack\\Autoloader\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Creates a custom autoloader for a plugin or theme.", - "support": { - "source": "https://github.com/Automattic/jetpack-autoloader/tree/v2.10.12" - }, - "install-path": "../automattic/jetpack-autoloader" - }, - { - "name": "automattic/jetpack-logo", - "version": "v1.5.14", - "version_normalized": "1.5.14.0", - "source": { - "type": "git", - "url": "https://github.com/Automattic/jetpack-logo.git", - "reference": "9fbc006fd49e61c70ddbfc92dfea06338822656a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Automattic/jetpack-logo/zipball/9fbc006fd49e61c70ddbfc92dfea06338822656a", - "reference": "9fbc006fd49e61c70ddbfc92dfea06338822656a", - "shasum": "" - }, - "require-dev": { - "automattic/jetpack-changelogger": "^3.0", - "yoast/phpunit-polyfills": "1.0.3" - }, - "time": "2022-01-25T17:38:35+00:00", - "type": "jetpack-library", - "extra": { - "autotagger": true, - "mirror-repo": "Automattic/jetpack-logo", - "changelogger": { - "link-template": "https://github.com/Automattic/jetpack-logo/compare/v${old}...v${new}" - }, - "branch-alias": { - "dev-master": "1.5.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "A logo for Jetpack", - "support": { - "source": "https://github.com/Automattic/jetpack-logo/tree/v1.5.14" - }, - "install-path": "../automattic/jetpack-logo" - } - ], - "dev": false, - "dev-package-names": [] -} diff --git a/vaultpress/vendor/composer/installed.php b/vaultpress/vendor/composer/installed.php deleted file mode 100644 index 56b05ed3f5..0000000000 --- a/vaultpress/vendor/composer/installed.php +++ /dev/null @@ -1,41 +0,0 @@ - array( - 'pretty_version' => 'dev-master', - 'version' => 'dev-master', - 'type' => 'wordpress-plugin', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'reference' => NULL, - 'name' => 'automattic/vaultpress', - 'dev' => false, - ), - 'versions' => array( - 'automattic/jetpack-autoloader' => array( - 'pretty_version' => 'v2.10.12', - 'version' => '2.10.12.0', - 'type' => 'composer-plugin', - 'install_path' => __DIR__ . '/../automattic/jetpack-autoloader', - 'aliases' => array(), - 'reference' => '4e406f3b747261f3848d7efa6faac45a296dacca', - 'dev_requirement' => false, - ), - 'automattic/jetpack-logo' => array( - 'pretty_version' => 'v1.5.14', - 'version' => '1.5.14.0', - 'type' => 'jetpack-library', - 'install_path' => __DIR__ . '/../automattic/jetpack-logo', - 'aliases' => array(), - 'reference' => '9fbc006fd49e61c70ddbfc92dfea06338822656a', - 'dev_requirement' => false, - ), - 'automattic/vaultpress' => array( - 'pretty_version' => 'dev-master', - 'version' => 'dev-master', - 'type' => 'wordpress-plugin', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'reference' => NULL, - 'dev_requirement' => false, - ), - ), -); diff --git a/vaultpress/vendor/composer/jetpack_autoload_classmap.php b/vaultpress/vendor/composer/jetpack_autoload_classmap.php deleted file mode 100644 index 8c16fd4c8b..0000000000 --- a/vaultpress/vendor/composer/jetpack_autoload_classmap.php +++ /dev/null @@ -1,33 +0,0 @@ - array( - 'version' => '2.10.12.0', - 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadProcessor.php' - ), - 'Automattic\\Jetpack\\Autoloader\\CustomAutoloaderPlugin' => array( - 'version' => '2.10.12.0', - 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/CustomAutoloaderPlugin.php' - ), - 'Automattic\\Jetpack\\Autoloader\\AutoloadGenerator' => array( - 'version' => '2.10.12.0', - 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadGenerator.php' - ), - 'Automattic\\Jetpack\\Autoloader\\AutoloadFileWriter' => array( - 'version' => '2.10.12.0', - 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/AutoloadFileWriter.php' - ), - 'Automattic\\Jetpack\\Autoloader\\ManifestGenerator' => array( - 'version' => '2.10.12.0', - 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/ManifestGenerator.php' - ), - 'Automattic\\Jetpack\\Assets\\Logo' => array( - 'version' => '1.5.14.0', - 'path' => $vendorDir . '/automattic/jetpack-logo/src/class-logo.php' - ), -); diff --git a/vaultpress/vendor/jetpack-autoloader/class-autoloader-handler.php b/vaultpress/vendor/jetpack-autoloader/class-autoloader-handler.php deleted file mode 100644 index 861cc27447..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-autoloader-handler.php +++ /dev/null @@ -1,147 +0,0 @@ -php_autoloader = $php_autoloader; - $this->hook_manager = $hook_manager; - $this->manifest_reader = $manifest_reader; - $this->version_selector = $version_selector; - } - - /** - * Checks to see whether or not an autoloader is currently in the process of initializing. - * - * @return bool - */ - public function is_initializing() { - // If no version has been set it means that no autoloader has started initializing yet. - global $jetpack_autoloader_latest_version; - if ( ! isset( $jetpack_autoloader_latest_version ) ) { - return false; - } - - // When the version is set but the classmap is not it ALWAYS means that this is the - // latest autoloader and is being included by an older one. - global $jetpack_packages_classmap; - if ( empty( $jetpack_packages_classmap ) ) { - return true; - } - - // Version 2.4.0 added a new global and altered the reset semantics. We need to check - // the other global as well since it may also point at initialization. - // Note: We don't need to check for the class first because every autoloader that - // will set the latest version global requires this class in the classmap. - $replacing_version = $jetpack_packages_classmap[ AutoloadGenerator::class ]['version']; - if ( $this->version_selector->is_dev_version( $replacing_version ) || version_compare( $replacing_version, '2.4.0.0', '>=' ) ) { - global $jetpack_autoloader_loader; - if ( ! isset( $jetpack_autoloader_loader ) ) { - return true; - } - } - - return false; - } - - /** - * Activates an autoloader using the given plugins and activates it. - * - * @param string[] $plugins The plugins to initialize the autoloader for. - */ - public function activate_autoloader( $plugins ) { - global $jetpack_packages_psr4; - $jetpack_packages_psr4 = array(); - $this->manifest_reader->read_manifests( $plugins, 'vendor/composer/jetpack_autoload_psr4.php', $jetpack_packages_psr4 ); - - global $jetpack_packages_classmap; - $jetpack_packages_classmap = array(); - $this->manifest_reader->read_manifests( $plugins, 'vendor/composer/jetpack_autoload_classmap.php', $jetpack_packages_classmap ); - - global $jetpack_packages_filemap; - $jetpack_packages_filemap = array(); - $this->manifest_reader->read_manifests( $plugins, 'vendor/composer/jetpack_autoload_filemap.php', $jetpack_packages_filemap ); - - $loader = new Version_Loader( - $this->version_selector, - $jetpack_packages_classmap, - $jetpack_packages_psr4, - $jetpack_packages_filemap - ); - - $this->php_autoloader->register_autoloader( $loader ); - - // Now that the autoloader is active we can load the filemap. - $loader->load_filemap(); - } - - /** - * Resets the active autoloader and all related global state. - */ - public function reset_autoloader() { - $this->php_autoloader->unregister_autoloader(); - $this->hook_manager->reset(); - - // Clear all of the autoloader globals so that older autoloaders don't do anything strange. - global $jetpack_autoloader_latest_version; - $jetpack_autoloader_latest_version = null; - - global $jetpack_packages_classmap; - $jetpack_packages_classmap = array(); // Must be array to avoid exceptions in old autoloaders! - - global $jetpack_packages_psr4; - $jetpack_packages_psr4 = array(); // Must be array to avoid exceptions in old autoloaders! - - global $jetpack_packages_filemap; - $jetpack_packages_filemap = array(); // Must be array to avoid exceptions in old autoloaders! - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-autoloader-locator.php b/vaultpress/vendor/jetpack-autoloader/class-autoloader-locator.php deleted file mode 100644 index 50a90a4024..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-autoloader-locator.php +++ /dev/null @@ -1,90 +0,0 @@ -version_selector = $version_selector; - } - - /** - * Finds the path to the plugin with the latest autoloader. - * - * @param array $plugin_paths An array of plugin paths. - * @param string $latest_version The latest version reference. - * - * @return string|null - */ - public function find_latest_autoloader( $plugin_paths, &$latest_version ) { - $latest_plugin = null; - - foreach ( $plugin_paths as $plugin_path ) { - $version = $this->get_autoloader_version( $plugin_path ); - if ( ! $this->version_selector->is_version_update_required( $latest_version, $version ) ) { - continue; - } - - $latest_version = $version; - $latest_plugin = $plugin_path; - } - - return $latest_plugin; - } - - /** - * Gets the path to the autoloader. - * - * @param string $plugin_path The path to the plugin. - * - * @return string - */ - public function get_autoloader_path( $plugin_path ) { - return trailingslashit( $plugin_path ) . 'vendor/autoload_packages.php'; - } - - /** - * Gets the version for the autoloader. - * - * @param string $plugin_path The path to the plugin. - * - * @return string|null - */ - public function get_autoloader_version( $plugin_path ) { - $classmap = trailingslashit( $plugin_path ) . 'vendor/composer/jetpack_autoload_classmap.php'; - if ( ! file_exists( $classmap ) ) { - return null; - } - - $classmap = require $classmap; - if ( isset( $classmap[ AutoloadGenerator::class ] ) ) { - return $classmap[ AutoloadGenerator::class ]['version']; - } - - return null; - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-autoloader.php b/vaultpress/vendor/jetpack-autoloader/class-autoloader.php deleted file mode 100644 index 803a081c67..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-autoloader.php +++ /dev/null @@ -1,90 +0,0 @@ -get( Autoloader_Handler::class ); - - // If the autoloader is already initializing it means that it has included us as the latest. - $was_included_by_autoloader = $autoloader_handler->is_initializing(); - - /** @var Plugin_Locator $plugin_locator */ - $plugin_locator = $container->get( Plugin_Locator::class ); - - /** @var Plugins_Handler $plugins_handler */ - $plugins_handler = $container->get( Plugins_Handler::class ); - - // The current plugin is the one that we are attempting to initialize here. - $current_plugin = $plugin_locator->find_current_plugin(); - - // The active plugins are those that we were able to discover on the site. This list will not - // include mu-plugins, those activated by code, or those who are hidden by filtering. We also - // want to take care to not consider the current plugin unknown if it was included by an - // autoloader. This avoids the case where a plugin will be marked "active" while deactivated - // due to it having the latest autoloader. - $active_plugins = $plugins_handler->get_active_plugins( true, ! $was_included_by_autoloader ); - - // The cached plugins are all of those that were active or discovered by the autoloader during a previous request. - // Note that it's possible this list will include plugins that have since been deactivated, but after a request - // the cache should be updated and the deactivated plugins will be removed. - $cached_plugins = $plugins_handler->get_cached_plugins(); - - // We combine the active list and cached list to preemptively load classes for plugins that are - // presently unknown but will be loaded during the request. While this may result in us considering packages in - // deactivated plugins there shouldn't be any problems as a result and the eventual consistency is sufficient. - $all_plugins = array_merge( $active_plugins, $cached_plugins ); - - // In particular we also include the current plugin to address the case where it is the latest autoloader - // but also unknown (and not cached). We don't want it in the active list because we don't know that it - // is active but we need it in the all plugins list so that it is considered by the autoloader. - $all_plugins[] = $current_plugin; - - // We require uniqueness in the array to avoid processing the same plugin more than once. - $all_plugins = array_values( array_unique( $all_plugins ) ); - - /** @var Latest_Autoloader_Guard $guard */ - $guard = $container->get( Latest_Autoloader_Guard::class ); - if ( $guard->should_stop_init( $current_plugin, $all_plugins, $was_included_by_autoloader ) ) { - return; - } - - // Initialize the autoloader using the handler now that we're ready. - $autoloader_handler->activate_autoloader( $all_plugins ); - - /** @var Hook_Manager $hook_manager */ - $hook_manager = $container->get( Hook_Manager::class ); - - // Register a shutdown handler to clean up the autoloader. - $hook_manager->add_action( 'shutdown', new Shutdown_Handler( $plugins_handler, $cached_plugins, $was_included_by_autoloader ) ); - - // phpcs:enable Generic.Commenting.DocComment.MissingShort - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-container.php b/vaultpress/vendor/jetpack-autoloader/class-container.php deleted file mode 100644 index 1f828d3e9a..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-container.php +++ /dev/null @@ -1,150 +0,0 @@ - 'Hook_Manager', - ); - - /** - * A map of all the dependencies we've registered with the container and created. - * - * @var array - */ - protected $dependencies; - - /** - * The constructor. - */ - public function __construct() { - $this->dependencies = array(); - - $this->register_shared_dependencies(); - $this->register_dependencies(); - $this->initialize_globals(); - } - - /** - * Gets a dependency out of the container. - * - * @param string $class The class to fetch. - * - * @return mixed - * @throws \InvalidArgumentException When a class that isn't registered with the container is fetched. - */ - public function get( $class ) { - if ( ! isset( $this->dependencies[ $class ] ) ) { - throw new \InvalidArgumentException( "Class '$class' is not registered with the container." ); - } - - return $this->dependencies[ $class ]; - } - - /** - * Registers all of the dependencies that are shared between all instances of the autoloader. - */ - private function register_shared_dependencies() { - global $jetpack_autoloader_container_shared; - if ( ! isset( $jetpack_autoloader_container_shared ) ) { - $jetpack_autoloader_container_shared = array(); - } - - $key = self::SHARED_DEPENDENCY_KEYS[ Hook_Manager::class ]; - if ( ! isset( $jetpack_autoloader_container_shared[ $key ] ) ) { - require_once __DIR__ . '/class-hook-manager.php'; - $jetpack_autoloader_container_shared[ $key ] = new Hook_Manager(); - } - $this->dependencies[ Hook_Manager::class ] = &$jetpack_autoloader_container_shared[ $key ]; - } - - /** - * Registers all of the dependencies with the container. - */ - private function register_dependencies() { - require_once __DIR__ . '/class-path-processor.php'; - $this->dependencies[ Path_Processor::class ] = new Path_Processor(); - - require_once __DIR__ . '/class-plugin-locator.php'; - $this->dependencies[ Plugin_Locator::class ] = new Plugin_Locator( - $this->get( Path_Processor::class ) - ); - - require_once __DIR__ . '/class-version-selector.php'; - $this->dependencies[ Version_Selector::class ] = new Version_Selector(); - - require_once __DIR__ . '/class-autoloader-locator.php'; - $this->dependencies[ Autoloader_Locator::class ] = new Autoloader_Locator( - $this->get( Version_Selector::class ) - ); - - require_once __DIR__ . '/class-php-autoloader.php'; - $this->dependencies[ PHP_Autoloader::class ] = new PHP_Autoloader(); - - require_once __DIR__ . '/class-manifest-reader.php'; - $this->dependencies[ Manifest_Reader::class ] = new Manifest_Reader( - $this->get( Version_Selector::class ) - ); - - require_once __DIR__ . '/class-plugins-handler.php'; - $this->dependencies[ Plugins_Handler::class ] = new Plugins_Handler( - $this->get( Plugin_Locator::class ), - $this->get( Path_Processor::class ) - ); - - require_once __DIR__ . '/class-autoloader-handler.php'; - $this->dependencies[ Autoloader_Handler::class ] = new Autoloader_Handler( - $this->get( PHP_Autoloader::class ), - $this->get( Hook_Manager::class ), - $this->get( Manifest_Reader::class ), - $this->get( Version_Selector::class ) - ); - - require_once __DIR__ . '/class-latest-autoloader-guard.php'; - $this->dependencies[ Latest_Autoloader_Guard::class ] = new Latest_Autoloader_Guard( - $this->get( Plugins_Handler::class ), - $this->get( Autoloader_Handler::class ), - $this->get( Autoloader_Locator::class ) - ); - - // Register any classes that we will use elsewhere. - require_once __DIR__ . '/class-version-loader.php'; - require_once __DIR__ . '/class-shutdown-handler.php'; - } - - /** - * Initializes any of the globals needed by the autoloader. - */ - private function initialize_globals() { - /* - * This global was retired in version 2.9. The value is set to 'false' to maintain - * compatibility with older versions of the autoloader. - */ - global $jetpack_autoloader_including_latest; - $jetpack_autoloader_including_latest = false; - - // Not all plugins can be found using the locator. In cases where a plugin loads the autoloader - // but was not discoverable, we will record them in this array to track them as "active". - global $jetpack_autoloader_activating_plugins_paths; - if ( ! isset( $jetpack_autoloader_activating_plugins_paths ) ) { - $jetpack_autoloader_activating_plugins_paths = array(); - } - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-hook-manager.php b/vaultpress/vendor/jetpack-autoloader/class-hook-manager.php deleted file mode 100644 index ca8c367e2b..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-hook-manager.php +++ /dev/null @@ -1,76 +0,0 @@ -registered_hooks = array(); - } - - /** - * Adds an action to WordPress and registers it internally. - * - * @param string $tag The name of the action which is hooked. - * @param callable $callable The function to call. - * @param int $priority Used to specify the priority of the action. - * @param int $accepted_args Used to specify the number of arguments the callable accepts. - */ - public function add_action( $tag, $callable, $priority = 10, $accepted_args = 1 ) { - $this->registered_hooks[ $tag ][] = array( - 'priority' => $priority, - 'callable' => $callable, - ); - - add_action( $tag, $callable, $priority, $accepted_args ); - } - - /** - * Adds a filter to WordPress and registers it internally. - * - * @param string $tag The name of the filter which is hooked. - * @param callable $callable The function to call. - * @param int $priority Used to specify the priority of the filter. - * @param int $accepted_args Used to specify the number of arguments the callable accepts. - */ - public function add_filter( $tag, $callable, $priority = 10, $accepted_args = 1 ) { - $this->registered_hooks[ $tag ][] = array( - 'priority' => $priority, - 'callable' => $callable, - ); - - add_filter( $tag, $callable, $priority, $accepted_args ); - } - - /** - * Removes all of the registered hooks. - */ - public function reset() { - foreach ( $this->registered_hooks as $tag => $hooks ) { - foreach ( $hooks as $hook ) { - remove_filter( $tag, $hook['callable'], $hook['priority'] ); - } - } - $this->registered_hooks = array(); - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-latest-autoloader-guard.php b/vaultpress/vendor/jetpack-autoloader/class-latest-autoloader-guard.php deleted file mode 100644 index bf6972d660..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-latest-autoloader-guard.php +++ /dev/null @@ -1,86 +0,0 @@ -plugins_handler = $plugins_handler; - $this->autoloader_handler = $autoloader_handler; - $this->autoloader_locator = $autoloader_locator; - } - - /** - * Indicates whether or not the autoloader should be initialized. Note that this function - * has the side-effect of actually loading the latest autoloader in the event that this - * is not it. - * - * @param string $current_plugin The current plugin we're checking. - * @param string[] $plugins The active plugins to check for autoloaders in. - * @param bool $was_included_by_autoloader Indicates whether or not this autoloader was included by another. - * - * @return bool True if we should stop initialization, otherwise false. - */ - public function should_stop_init( $current_plugin, $plugins, $was_included_by_autoloader ) { - global $jetpack_autoloader_latest_version; - - // We need to reset the autoloader when the plugins change because - // that means the autoloader was generated with a different list. - if ( $this->plugins_handler->have_plugins_changed( $plugins ) ) { - $this->autoloader_handler->reset_autoloader(); - } - - // When the latest autoloader has already been found we don't need to search for it again. - // We should take care however because this will also trigger if the autoloader has been - // included by an older one. - if ( isset( $jetpack_autoloader_latest_version ) && ! $was_included_by_autoloader ) { - return true; - } - - $latest_plugin = $this->autoloader_locator->find_latest_autoloader( $plugins, $jetpack_autoloader_latest_version ); - if ( isset( $latest_plugin ) && $latest_plugin !== $current_plugin ) { - require $this->autoloader_locator->get_autoloader_path( $latest_plugin ); - return true; - } - - return false; - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-manifest-reader.php b/vaultpress/vendor/jetpack-autoloader/class-manifest-reader.php deleted file mode 100644 index c17dd020f3..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-manifest-reader.php +++ /dev/null @@ -1,99 +0,0 @@ -version_selector = $version_selector; - } - - /** - * Reads all of the manifests in the given plugin paths. - * - * @param array $plugin_paths The paths to the plugins we're loading the manifest in. - * @param string $manifest_path The path that we're loading the manifest from in each plugin. - * @param array $path_map The path map to add the contents of the manifests to. - * - * @return array $path_map The path map we've built using the manifests in each plugin. - */ - public function read_manifests( $plugin_paths, $manifest_path, &$path_map ) { - $file_paths = array_map( - function ( $path ) use ( $manifest_path ) { - return trailingslashit( $path ) . $manifest_path; - }, - $plugin_paths - ); - - foreach ( $file_paths as $path ) { - $this->register_manifest( $path, $path_map ); - } - - return $path_map; - } - - /** - * Registers a plugin's manifest file with the path map. - * - * @param string $manifest_path The absolute path to the manifest that we're loading. - * @param array $path_map The path map to add the contents of the manifest to. - */ - protected function register_manifest( $manifest_path, &$path_map ) { - if ( ! is_readable( $manifest_path ) ) { - return; - } - - $manifest = require $manifest_path; - if ( ! is_array( $manifest ) ) { - return; - } - - foreach ( $manifest as $key => $data ) { - $this->register_record( $key, $data, $path_map ); - } - } - - /** - * Registers an entry from the manifest in the path map. - * - * @param string $key The identifier for the entry we're registering. - * @param array $data The data for the entry we're registering. - * @param array $path_map The path map to add the contents of the manifest to. - */ - protected function register_record( $key, $data, &$path_map ) { - if ( isset( $path_map[ $key ]['version'] ) ) { - $selected_version = $path_map[ $key ]['version']; - } else { - $selected_version = null; - } - - if ( $this->version_selector->is_version_update_required( $selected_version, $data['version'] ) ) { - $path_map[ $key ] = array( - 'version' => $data['version'], - 'path' => $data['path'], - ); - } - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-path-processor.php b/vaultpress/vendor/jetpack-autoloader/class-path-processor.php deleted file mode 100644 index 31be3b07d0..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-path-processor.php +++ /dev/null @@ -1,194 +0,0 @@ -get_normalized_constants(); - foreach ( $constants as $constant => $constant_path ) { - $len = strlen( $constant_path ); - if ( substr( $path, 0, $len ) !== $constant_path ) { - continue; - } - - return substr_replace( $path, '{{' . $constant . '}}', 0, $len ); - } - - return $path; - } - - /** - * Given a path this will replace any of the path constant tokens with the expanded path. - * - * @param string $tokenized_path The path we want to process. - * - * @return string The expanded path. - */ - public function untokenize_path_constants( $tokenized_path ) { - $tokenized_path = wp_normalize_path( $tokenized_path ); - - $constants = $this->get_normalized_constants(); - foreach ( $constants as $constant => $constant_path ) { - $constant = '{{' . $constant . '}}'; - - $len = strlen( $constant ); - if ( substr( $tokenized_path, 0, $len ) !== $constant ) { - continue; - } - - return $this->get_real_path( substr_replace( $tokenized_path, $constant_path, 0, $len ) ); - } - - return $tokenized_path; - } - - /** - * Given a file and an array of places it might be, this will find the absolute path and return it. - * - * @param string $file The plugin or theme file to resolve. - * @param array $directories_to_check The directories we should check for the file if it isn't an absolute path. - * - * @return string|false Returns the absolute path to the directory, otherwise false. - */ - public function find_directory_with_autoloader( $file, $directories_to_check ) { - $file = wp_normalize_path( $file ); - - if ( ! $this->is_absolute_path( $file ) ) { - $file = $this->find_absolute_plugin_path( $file, $directories_to_check ); - if ( ! isset( $file ) ) { - return false; - } - } - - // We need the real path for consistency with __DIR__ paths. - $file = $this->get_real_path( $file ); - - // phpcs:disable WordPress.PHP.NoSilencedErrors.Discouraged - $directory = @is_file( $file ) ? dirname( $file ) : $file; - if ( ! @is_file( $directory . '/vendor/composer/jetpack_autoload_classmap.php' ) ) { - return false; - } - // phpcs:enable WordPress.PHP.NoSilencedErrors.Discouraged - - return $directory; - } - - /** - * Fetches an array of normalized paths keyed by the constant they came from. - * - * @return string[] The normalized paths keyed by the constant. - */ - private function get_normalized_constants() { - $raw_constants = array( - // Order the constants from most-specific to least-specific. - 'WP_PLUGIN_DIR', - 'WPMU_PLUGIN_DIR', - 'WP_CONTENT_DIR', - 'ABSPATH', - ); - - $constants = array(); - foreach ( $raw_constants as $raw ) { - if ( ! defined( $raw ) ) { - continue; - } - - $path = wp_normalize_path( constant( $raw ) ); - if ( isset( $path ) ) { - $constants[ $raw ] = $path; - } - } - - return $constants; - } - - /** - * Indicates whether or not a path is absolute. - * - * @param string $path The path to check. - * - * @return bool True if the path is absolute, otherwise false. - */ - private function is_absolute_path( $path ) { - if ( 0 === strlen( $path ) || '.' === $path[0] ) { - return false; - } - - // Absolute paths on Windows may begin with a drive letter. - if ( preg_match( '/^[a-zA-Z]:[\/\\\\]/', $path ) ) { - return true; - } - - // A path starting with / or \ is absolute; anything else is relative. - return ( '/' === $path[0] || '\\' === $path[0] ); - } - - /** - * Given a file and a list of directories to check, this method will try to figure out - * the absolute path to the file in question. - * - * @param string $normalized_path The normalized path to the plugin or theme file to resolve. - * @param array $directories_to_check The directories we should check for the file if it isn't an absolute path. - * - * @return string|null The absolute path to the plugin file, otherwise null. - */ - private function find_absolute_plugin_path( $normalized_path, $directories_to_check ) { - // We're only able to find the absolute path for plugin/theme PHP files. - if ( ! is_string( $normalized_path ) || '.php' !== substr( $normalized_path, -4 ) ) { - return null; - } - - foreach ( $directories_to_check as $directory ) { - $normalized_check = wp_normalize_path( trailingslashit( $directory ) ) . $normalized_path; - // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged - if ( @is_file( $normalized_check ) ) { - return $normalized_check; - } - } - - return null; - } - - /** - * Given a path this will figure out the real path that we should be using. - * - * @param string $path The path to resolve. - * - * @return string The resolved path. - */ - private function get_real_path( $path ) { - // We want to resolve symbolic links for consistency with __DIR__ paths. - // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged - $real_path = @realpath( $path ); - if ( false === $real_path ) { - // Let the autoloader deal with paths that don't exist. - $real_path = $path; - } - - // Using realpath will make it platform-specific so we must normalize it after. - if ( $path !== $real_path ) { - $real_path = wp_normalize_path( $real_path ); - } - - return $real_path; - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-php-autoloader.php b/vaultpress/vendor/jetpack-autoloader/class-php-autoloader.php deleted file mode 100644 index c52f27db0f..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-php-autoloader.php +++ /dev/null @@ -1,93 +0,0 @@ -unregister_autoloader(); - - // Set the global so that it can be used to load classes. - global $jetpack_autoloader_loader; - $jetpack_autoloader_loader = $version_loader; - - // Ensure that the autoloader is first to avoid contention with others. - spl_autoload_register( array( self::class, 'load_class' ), true, true ); - } - - /** - * Unregisters the active autoloader so that it will no longer autoload classes. - */ - public function unregister_autoloader() { - // Remove any v2 autoloader that we've already registered. - $autoload_chain = spl_autoload_functions(); - if ( ! $autoload_chain ) { - return; - } - foreach ( $autoload_chain as $autoloader ) { - // We can identify a v2 autoloader using the namespace. - $namespace_check = null; - - // Functions are recorded as strings. - if ( is_string( $autoloader ) ) { - $namespace_check = $autoloader; - } elseif ( is_array( $autoloader ) && is_string( $autoloader[0] ) ) { - // Static method calls have the class as the first array element. - $namespace_check = $autoloader[0]; - } else { - // Since the autoloader has only ever been a function or a static method we don't currently need to check anything else. - continue; - } - - // Check for the namespace without the generated suffix. - if ( 'Automattic\\Jetpack\\Autoloader\\jp' === substr( $namespace_check, 0, 32 ) ) { - spl_autoload_unregister( $autoloader ); - } - } - - // Clear the global now that the autoloader has been unregistered. - global $jetpack_autoloader_loader; - $jetpack_autoloader_loader = null; - } - - /** - * Loads a class file if one could be found. - * - * Note: This function is static so that the autoloader can be easily unregistered. If - * it was a class method we would have to unwrap the object to check the namespace. - * - * @param string $class_name The name of the class to autoload. - * - * @return bool Indicates whether or not a class file was loaded. - */ - public static function load_class( $class_name ) { - global $jetpack_autoloader_loader; - if ( ! isset( $jetpack_autoloader_loader ) ) { - return; - } - - $file = $jetpack_autoloader_loader->find_class_file( $class_name ); - if ( ! isset( $file ) ) { - return false; - } - - require $file; - return true; - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-plugin-locator.php b/vaultpress/vendor/jetpack-autoloader/class-plugin-locator.php deleted file mode 100644 index 4dfc94e8ba..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-plugin-locator.php +++ /dev/null @@ -1,153 +0,0 @@ -path_processor = $path_processor; - } - - /** - * Finds the path to the current plugin. - * - * @return string $path The path to the current plugin. - * - * @throws \RuntimeException If the current plugin does not have an autoloader. - */ - public function find_current_plugin() { - // Escape from `vendor/__DIR__` to root plugin directory. - $plugin_directory = dirname( dirname( __DIR__ ) ); - - // Use the path processor to ensure that this is an autoloader we're referencing. - $path = $this->path_processor->find_directory_with_autoloader( $plugin_directory, array() ); - if ( false === $path ) { - throw new \RuntimeException( 'Failed to locate plugin ' . $plugin_directory ); - } - - return $path; - } - - /** - * Checks a given option for plugin paths. - * - * @param string $option_name The option that we want to check for plugin information. - * @param bool $site_option Indicates whether or not we want to check the site option. - * - * @return array $plugin_paths The list of absolute paths we've found. - */ - public function find_using_option( $option_name, $site_option = false ) { - $raw = $site_option ? get_site_option( $option_name ) : get_option( $option_name ); - if ( false === $raw ) { - return array(); - } - - return $this->convert_plugins_to_paths( $raw ); - } - - /** - * Checks for plugins in the `action` request parameter. - * - * @param string[] $allowed_actions The actions that we're allowed to return plugins for. - * - * @return array $plugin_paths The list of absolute paths we've found. - */ - public function find_using_request_action( $allowed_actions ) { - // phpcs:disable WordPress.Security.NonceVerification.Recommended - - /** - * Note: we're not actually checking the nonce here because it's too early - * in the execution. The pluggable functions are not yet loaded to give - * plugins a chance to plug their versions. Therefore we're doing the bare - * minimum: checking whether the nonce exists and it's in the right place. - * The request will fail later if the nonce doesn't pass the check. - */ - if ( empty( $_REQUEST['_wpnonce'] ) ) { - return array(); - } - - $action = isset( $_REQUEST['action'] ) ? wp_unslash( $_REQUEST['action'] ) : false; - if ( ! in_array( $action, $allowed_actions, true ) ) { - return array(); - } - - $plugin_slugs = array(); - switch ( $action ) { - case 'activate': - case 'deactivate': - if ( empty( $_REQUEST['plugin'] ) ) { - break; - } - - $plugin_slugs[] = wp_unslash( $_REQUEST['plugin'] ); - break; - - case 'activate-selected': - case 'deactivate-selected': - if ( empty( $_REQUEST['checked'] ) ) { - break; - } - - $plugin_slugs = wp_unslash( $_REQUEST['checked'] ); - break; - } - - // phpcs:enable WordPress.Security.NonceVerification.Recommended - return $this->convert_plugins_to_paths( $plugin_slugs ); - } - - /** - * Given an array of plugin slugs or paths, this will convert them to absolute paths and filter - * out the plugins that are not directory plugins. Note that array keys will also be included - * if they are plugin paths! - * - * @param string[] $plugins Plugin paths or slugs to filter. - * - * @return string[] - */ - private function convert_plugins_to_paths( $plugins ) { - if ( ! is_array( $plugins ) || empty( $plugins ) ) { - return array(); - } - - // We're going to look for plugins in the standard directories. - $path_constants = array( WP_PLUGIN_DIR, WPMU_PLUGIN_DIR ); - - $plugin_paths = array(); - foreach ( $plugins as $key => $value ) { - $path = $this->path_processor->find_directory_with_autoloader( $key, $path_constants ); - if ( $path ) { - $plugin_paths[] = $path; - } - - $path = $this->path_processor->find_directory_with_autoloader( $value, $path_constants ); - if ( $path ) { - $plugin_paths[] = $path; - } - } - - return $plugin_paths; - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-plugins-handler.php b/vaultpress/vendor/jetpack-autoloader/class-plugins-handler.php deleted file mode 100644 index 3974d97071..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-plugins-handler.php +++ /dev/null @@ -1,164 +0,0 @@ -plugin_locator = $plugin_locator; - $this->path_processor = $path_processor; - } - - /** - * Gets all of the active plugins we can find. - * - * @param bool $include_deactivating When true, plugins deactivating this request will be considered active. - * @param bool $record_unknown When true, the current plugin will be marked as active and recorded when unknown. - * - * @return string[] - */ - public function get_active_plugins( $include_deactivating, $record_unknown ) { - global $jetpack_autoloader_activating_plugins_paths; - - // We're going to build a unique list of plugins from a few different sources - // to find all of our "active" plugins. While we need to return an integer - // array, we're going to use an associative array internally to reduce - // the amount of time that we're going to spend checking uniqueness - // and merging different arrays together to form the output. - $active_plugins = array(); - - // Make sure that plugins which have activated this request are considered as "active" even though - // they probably won't be present in any option. - if ( is_array( $jetpack_autoloader_activating_plugins_paths ) ) { - foreach ( $jetpack_autoloader_activating_plugins_paths as $path ) { - $active_plugins[ $path ] = $path; - } - } - - // This option contains all of the plugins that have been activated. - $plugins = $this->plugin_locator->find_using_option( 'active_plugins' ); - foreach ( $plugins as $path ) { - $active_plugins[ $path ] = $path; - } - - // This option contains all of the multisite plugins that have been activated. - if ( is_multisite() ) { - $plugins = $this->plugin_locator->find_using_option( 'active_sitewide_plugins', true ); - foreach ( $plugins as $path ) { - $active_plugins[ $path ] = $path; - } - } - - // These actions contain plugins that are being activated/deactivated during this request. - $plugins = $this->plugin_locator->find_using_request_action( array( 'activate', 'activate-selected', 'deactivate', 'deactivate-selected' ) ); - foreach ( $plugins as $path ) { - $active_plugins[ $path ] = $path; - } - - // When the current plugin isn't considered "active" there's a problem. - // Since we're here, the plugin is active and currently being loaded. - // We can support this case (mu-plugins and non-standard activation) - // by adding the current plugin to the active list and marking it - // as an unknown (activating) plugin. This also has the benefit - // of causing a reset because the active plugins list has - // been changed since it was saved in the global. - $current_plugin = $this->plugin_locator->find_current_plugin(); - if ( $record_unknown && ! in_array( $current_plugin, $active_plugins, true ) ) { - $active_plugins[ $current_plugin ] = $current_plugin; - $jetpack_autoloader_activating_plugins_paths[] = $current_plugin; - } - - // When deactivating plugins aren't desired we should entirely remove them from the active list. - if ( ! $include_deactivating ) { - // These actions contain plugins that are being deactivated during this request. - $plugins = $this->plugin_locator->find_using_request_action( array( 'deactivate', 'deactivate-selected' ) ); - foreach ( $plugins as $path ) { - unset( $active_plugins[ $path ] ); - } - } - - // Transform the array so that we don't have to worry about the keys interacting with other array types later. - return array_values( $active_plugins ); - } - - /** - * Gets all of the cached plugins if there are any. - * - * @return string[] - */ - public function get_cached_plugins() { - $cached = get_transient( self::TRANSIENT_KEY ); - if ( ! is_array( $cached ) || empty( $cached ) ) { - return array(); - } - - // We need to expand the tokens to an absolute path for this webserver. - return array_map( array( $this->path_processor, 'untokenize_path_constants' ), $cached ); - } - - /** - * Saves the plugin list to the cache. - * - * @param array $plugins The plugin list to save to the cache. - */ - public function cache_plugins( $plugins ) { - // We store the paths in a tokenized form so that that webservers with different absolute paths don't break. - $plugins = array_map( array( $this->path_processor, 'tokenize_path_constants' ), $plugins ); - - set_transient( self::TRANSIENT_KEY, $plugins ); - } - - /** - * Checks to see whether or not the plugin list given has changed when compared to the - * shared `$jetpack_autoloader_cached_plugin_paths` global. This allows us to deal - * with cases where the active list may change due to filtering.. - * - * @param string[] $plugins The plugins list to check against the global cache. - * - * @return bool True if the plugins have changed, otherwise false. - */ - public function have_plugins_changed( $plugins ) { - global $jetpack_autoloader_cached_plugin_paths; - - if ( $jetpack_autoloader_cached_plugin_paths !== $plugins ) { - $jetpack_autoloader_cached_plugin_paths = $plugins; - return true; - } - - return false; - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-shutdown-handler.php b/vaultpress/vendor/jetpack-autoloader/class-shutdown-handler.php deleted file mode 100644 index c7ecbbb778..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-shutdown-handler.php +++ /dev/null @@ -1,92 +0,0 @@ -plugins_handler = $plugins_handler; - $this->cached_plugins = $cached_plugins; - $this->was_included_by_autoloader = $was_included_by_autoloader; - } - - /** - * Handles the shutdown of the autoloader. - */ - public function __invoke() { - // Don't save a broken cache if an error happens during some plugin's initialization. - if ( ! did_action( 'plugins_loaded' ) ) { - // Ensure that the cache is emptied to prevent consecutive failures if the cache is to blame. - if ( ! empty( $this->cached_plugins ) ) { - $this->plugins_handler->cache_plugins( array() ); - } - - return; - } - - // Load the active plugins fresh since the list we pulled earlier might not contain - // plugins that were activated but did not reset the autoloader. This happens - // when a plugin is in the cache but not "active" when the autoloader loads. - // We also want to make sure that plugins which are deactivating are not - // considered "active" so that they will be removed from the cache now. - try { - $active_plugins = $this->plugins_handler->get_active_plugins( false, ! $this->was_included_by_autoloader ); - } catch ( \Exception $ex ) { - // When the package is deleted before shutdown it will throw an exception. - // In the event this happens we should erase the cache. - if ( ! empty( $this->cached_plugins ) ) { - $this->plugins_handler->cache_plugins( array() ); - } - return; - } - - // The paths should be sorted for easy comparisons with those loaded from the cache. - // Note we don't need to sort the cached entries because they're already sorted. - sort( $active_plugins ); - - // We don't want to waste time saving a cache that hasn't changed. - if ( $this->cached_plugins === $active_plugins ) { - return; - } - - $this->plugins_handler->cache_plugins( $active_plugins ); - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-version-loader.php b/vaultpress/vendor/jetpack-autoloader/class-version-loader.php deleted file mode 100644 index f02dcc84ff..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-version-loader.php +++ /dev/null @@ -1,164 +0,0 @@ -version_selector = $version_selector; - $this->classmap = $classmap; - $this->psr4_map = $psr4_map; - $this->filemap = $filemap; - } - - /** - * Finds the file path for the given class. - * - * @param string $class_name The class to find. - * - * @return string|null $file_path The path to the file if found, null if no class was found. - */ - public function find_class_file( $class_name ) { - $data = $this->select_newest_file( - isset( $this->classmap[ $class_name ] ) ? $this->classmap[ $class_name ] : null, - $this->find_psr4_file( $class_name ) - ); - if ( ! isset( $data ) ) { - return null; - } - - return $data['path']; - } - - /** - * Load all of the files in the filemap. - */ - public function load_filemap() { - if ( empty( $this->filemap ) ) { - return; - } - - foreach ( $this->filemap as $file_identifier => $file_data ) { - if ( empty( $GLOBALS['__composer_autoload_files'][ $file_identifier ] ) ) { - require_once $file_data['path']; - - $GLOBALS['__composer_autoload_files'][ $file_identifier ] = true; - } - } - } - - /** - * Compares different class sources and returns the newest. - * - * @param array|null $classmap_data The classmap class data. - * @param array|null $psr4_data The PSR-4 class data. - * - * @return array|null $data - */ - private function select_newest_file( $classmap_data, $psr4_data ) { - if ( ! isset( $classmap_data ) ) { - return $psr4_data; - } elseif ( ! isset( $psr4_data ) ) { - return $classmap_data; - } - - if ( $this->version_selector->is_version_update_required( $classmap_data['version'], $psr4_data['version'] ) ) { - return $psr4_data; - } - - return $classmap_data; - } - - /** - * Finds the file for a given class in a PSR-4 namespace. - * - * @param string $class_name The class to find. - * - * @return array|null $data The version and path path to the file if found, null otherwise. - */ - private function find_psr4_file( $class_name ) { - if ( ! isset( $this->psr4_map ) ) { - return null; - } - - // Don't bother with classes that have no namespace. - $class_index = strrpos( $class_name, '\\' ); - if ( ! $class_index ) { - return null; - } - $class_for_path = str_replace( '\\', '/', $class_name ); - - // Search for the namespace by iteratively cutting off the last segment until - // we find a match. This allows us to check the most-specific namespaces - // first as well as minimize the amount of time spent looking. - for ( - $class_namespace = substr( $class_name, 0, $class_index ); - ! empty( $class_namespace ); - $class_namespace = substr( $class_namespace, 0, strrpos( $class_namespace, '\\' ) ) - ) { - $namespace = $class_namespace . '\\'; - if ( ! isset( $this->psr4_map[ $namespace ] ) ) { - continue; - } - $data = $this->psr4_map[ $namespace ]; - - foreach ( $data['path'] as $path ) { - $path .= '/' . substr( $class_for_path, strlen( $namespace ) ) . '.php'; - if ( file_exists( $path ) ) { - return array( - 'version' => $data['version'], - 'path' => $path, - ); - } - } - } - - return null; - } -} diff --git a/vaultpress/vendor/jetpack-autoloader/class-version-selector.php b/vaultpress/vendor/jetpack-autoloader/class-version-selector.php deleted file mode 100644 index 4c894807b7..0000000000 --- a/vaultpress/vendor/jetpack-autoloader/class-version-selector.php +++ /dev/null @@ -1,69 +0,0 @@ -is_dev_version( $selected_version ) ) { - return false; - } - - if ( $this->is_dev_version( $compare_version ) ) { - if ( $use_dev_versions ) { - return true; - } else { - return false; - } - } - - if ( version_compare( $selected_version, $compare_version, '<' ) ) { - return true; - } - - return false; - } - - /** - * Checks whether the given package version is a development version. - * - * @param String $version The package version. - * - * @return bool True if the version is a dev version, else false. - */ - public function is_dev_version( $version ) { - if ( 'dev-' === substr( $version, 0, 4 ) || '9999999-dev' === $version ) { - return true; - } - - return false; - } -} diff --git a/vaultpress/vp-scanner.php b/vaultpress/vp-scanner.php deleted file mode 100644 index d99e3ae2b3..0000000000 --- a/vaultpress/vp-scanner.php +++ /dev/null @@ -1,353 +0,0 @@ -last_dir = $this->path = @realpath( $path ); - else - $this->last_dir = $this->path = dirname( @realpath( $path ) ); - $this->ignore_symlinks = $ignore_symlinks; - } - - function get_files( $limit = 100 ) { - $files = array(); - if ( is_dir( $this->last_dir ) ) { - $return = $this->_scan_files( $this->path, $files, $this->offset, $limit, $this->last_dir ); - $this->offset = $return[0]; - $this->last_dir = $return[1]; - if ( count( $files ) < $limit ) - $this->last_dir = false; - } - return $files; - } - - function _scan_files( $path, &$files, $offset, $limit, &$last_dir ) { - $_offset = 0; - if ( is_readable( $path ) && $handle = opendir( $path ) ) { - while( false !== ( $entry = readdir( $handle ) ) ) { - if ( '.' == $entry || '..' == $entry ) - continue; - - $_offset++; - $full_entry = $path . DIRECTORY_SEPARATOR . $entry; - $next_item = ltrim( str_replace( $path, '', $last_dir ), DIRECTORY_SEPARATOR ); - $next = preg_split( '#(?ignore_symlinks && is_link( $full_entry ) ) - continue; - - if ( rtrim( $last_dir, DIRECTORY_SEPARATOR ) == rtrim( $path, DIRECTORY_SEPARATOR ) ) { - // Reset last_dir and offset when we reached the previous last_dir value. - $last_dir = ''; - $offset = 0; - } - - if ( is_file( $full_entry ) ) { - if ( !vp_is_interesting_file( $full_entry ) ) - continue; - $_return_offset = $_offset; - $_return_dir = dirname( $full_entry ); - $files[] = $full_entry; - } elseif ( is_dir( $full_entry ) ) { - list( $_return_offset, $_return_dir ) = $this->_scan_files( $full_entry, $files, $offset, $limit, $last_dir ); - } - if ( count( $files ) >= $limit ) { - closedir( $handle ); - return array( $_return_offset, $_return_dir ); - } - } - closedir( $handle ); - } - return array( $_offset, $path ); - } -} - -function vp_get_real_file_path( $file_path, $tmp_file = false ) { - global $site, $site_id; - $site_id = !empty( $site->id ) ? $site->id : $site_id; - if ( !$tmp_file && !empty( $site_id ) && function_exists( 'determine_file_type_path' ) ) { - $path = determine_file_type_path( $file_path ); - $file = file_by_path( $site_id, $path ); - if ( !$file ) - return false; - return $file->get_unencrypted(); - } - return !empty( $tmp_file ) ? $tmp_file : $file_path; -} - -function vp_is_interesting_file($file) { - $scan_only_regex = apply_filters( 'scan_only_extension_regex', '#\.(ph(p3|p4|p5|p|tml)|html|js|htaccess)$#i' ); - return preg_match( $scan_only_regex, $file ); -} - -/** - * Uses the PHP tokenizer to split a file into 3 arrays: PHP code with no comments, - * PHP code with comments, and HTML/JS code. Helper wrapper around split_to_php_html() - * - * @param string $file The file path to read and parse - * @return array An array with 3 arrays of lines - */ -function split_file_to_php_html( $file ) { - $source = @file_get_contents( $file ); - if ( $source === false ) { - $source = ''; - } - return split_to_php_html( $source ); -} - -/** - * Uses the PHP tokenizer to split a string into 3 arrays: PHP code with no comments, - * PHP code with comments, and HTML/JS code. - * - * @param string $file The file path to read and parse - * @return array An array with 3 arrays of lines - */ -function split_to_php_html( $source ) { - $tokens = @token_get_all( $source ); - - $ret = array( 'php' => array(), 'php-with-comments' => array(), 'html' => array() ); - $current_line = 0; - $mode = 'html'; // need to see an open tag to switch to PHP mode - - foreach ( $tokens as $token ) { - if ( ! is_array( $token ) ) { - // single character, can't switch our mode; just add it and continue - // if it's PHP, should go into both versions; mode 'php' will do that - add_text_to_parsed( $ret, $mode, $current_line, $token ); - $current_line += substr_count( $token, "\n" ); - } else { - // more complex tokens is the interesting case - list( $id, $text, $line ) = $token; - - if ( 'php' === $mode ) { - // we're in PHP code - - // might be a comment - if ( T_COMMENT === $id || T_DOC_COMMENT === $id ) { - // add it to the PHP with comments array only - add_text_to_parsed( $ret, 'php-with-comments', $current_line, $text ); - - // special case for lines like: " // comment\n": - // if we're adding a comment with a newline, and the 'php' array current line - // has no trailing newline, add one - if ( substr_count( $text, "\n" ) >= 1 && isset( $ret['php'][ $current_line ] ) && 0 === substr_count( $ret['php'][ $current_line ], "\n" ) ) { - $ret['php'][ $current_line ] .= "\n"; - } - - // make sure to count newlines in comments - $current_line += substr_count( $text, "\n" ); - continue; - } - - // otherwise add it to both the PHP array and the with comments array - add_text_to_parsed( $ret, $mode, $current_line, $text ); - - // then see if we're breaking out - if ( T_CLOSE_TAG === $id ) { - $mode = 'html'; - } - } else if ( 'html' === $mode ) { - // we're in HTML code - - // if we see an open tag, switch to PHP - if ( T_OPEN_TAG === $id || T_OPEN_TAG_WITH_ECHO === $id ) { - $mode = 'php'; - } - - // add to the HTML array (or PHP if it was an open tag) - // if it is PHP, this will add it to both arrays, which is what we want - add_text_to_parsed( $ret, $mode, $current_line, $text ); - } - $current_line += substr_count( $text, "\n" ); - } - } - - return $ret; -} - -/** - * Helper function for split_file_to_php_html; adds a chunk of text to the arrays we'll return. - * @param array $parsed The array containing all the languages we'll return - * @param string $prefix The prefix for the languages we want to add this text to - * @param int $line_number The line number that this text goes on - * @param string $text The text to add - */ -function add_text_to_parsed( &$parsed, $prefix, $start_line_number, $all_text ) { - $line_number = $start_line_number; - - // whitespace tokens may span multiple lines; we need to split them up so that the indentation goes on the next line - $fragments = explode( "\n", $all_text ); - foreach ( $fragments as $i => $fragment ) { - // each line needs to end with a newline to match the behavior of file() - if ( $i < count( $fragments ) - 1 ) { - $text = $fragment . "\n"; - } else { - $text = $fragment; - } - - if ( '' === $text ) { - // check for the empty string explicitly, rather than using empty() - // otherwise things like a '0' token will get skipped, because PHP is stupid - continue; - } - - if ( ! isset( $parsed[ $prefix ][ $line_number ] ) ) { - $parsed[ $prefix ][ $line_number ] = ''; - } - $parsed[ $prefix ][ $line_number ] .= $text; - if ( 'php' == $prefix ) { - if ( ! isset( $parsed[ 'php-with-comments' ][ $line_number ] ) ) { - $parsed[ 'php-with-comments' ][ $line_number ] = ''; - } - $parsed[ 'php-with-comments' ][ $line_number ] .= $text; - } - - // the caller will also update their line number based on the number of \n characters in the text - $line_number++; - } -} -/** - * Scans a file with the registered signatures. To report a security notice for a specified signature, all its regular - * expressions should result in a match. - * @param $file the filename to be scanned. - * @param null $tmp_file used if the file to be scanned doesn't exist or if the filename doesn't match vp_is_interesting_file(). - * @return array|bool false if no matched signature is found. A list of matched signatures otherwise. - */ -function vp_scan_file( $file, $tmp_file = null, $use_parser = false ) { - $real_file = vp_get_real_file_path( $file, $tmp_file ); - $file_size = file_exists( $real_file ) ? @filesize( $real_file ) : 0; - if ( !is_readable( $real_file ) || !$file_size || $file_size > apply_filters( 'scan_max_file_size', 3 * 1024 * 1024 ) ) { // don't scan empty or files larger than 3MB. - return false; - } - - $file_content = null; - $file_parsed = null; - $skip_file = apply_filters_ref_array( 'pre_scan_file', array ( false, $file, $real_file, &$file_content ) ); - if ( false !== $skip_file ) { // maybe detect malware without regular expressions. - return $skip_file; - } - - if ( !vp_is_interesting_file( $file ) ) { // only scan relevant files. - return false; - } - - if ( !isset( $GLOBALS['vp_signatures'] ) ) { - $GLOBALS['vp_signatures'] = array(); - } - - $found = array (); - foreach ( $GLOBALS['vp_signatures'] as $signature ) { - if ( !is_object( $signature ) || !isset( $signature->patterns ) ) { - continue; - } - // if there is no filename_regex, we assume it's the same of vp_is_interesting_file(). - if ( empty( $signature->filename_regex ) || preg_match( '#' . addcslashes( $signature->filename_regex, '#' ) . '#i', $file ) ) { - if ( null === $file_content || !is_array( $file_content ) ) { - $file_content = @file( $real_file ); - - if ( $file_content === false ) { - return false; - } - - if ( $use_parser ) { - $file_parsed = split_file_to_php_html( $real_file ); - } - } - - $is_vulnerable = true; - - $code = $file_content; - - if ( $use_parser ) { - // use the language specified in the signature if it has one - if ( ! empty( $signature->target_language ) && array_key_exists( $signature->target_language, $file_parsed ) ) { - $code = $file_parsed[ $signature->target_language ]; - - - } - } - - $matches = array(); - if ( ! empty( $signature->patterns ) ) { - foreach ( $signature->patterns as $pattern ) { - $match = preg_grep( '#' . addcslashes( $pattern, '#' ) . '#im', $code ); - if ( empty( $match ) ) { - $is_vulnerable = false; - break; - } - - $matches += $match; - } - } - - // convert the matched line to an array of details showing context around the lines - $lines = array(); - - $lines_parsed = array(); - - $line_indices_parsed = array(); - - if ( $use_parser ) { - $line_indices_parsed = array_keys( $code ); - } - - foreach ( $matches as $line => $text ) { - $lines = array_merge( $lines, range( $line - 1, $line + 1 ) ); - if ( $use_parser ) { - $idx = array_search( $line, $line_indices_parsed ); - - // we might be looking at the first or last line; for the non-parsed case, array_intersect_key - // handles this transparently below; for the parsed case, since we have another layer of - // indirection, we have to handle that case here - $idx_around = array(); - if ( isset( $line_indices_parsed[ $idx - 1 ] ) ) { - $idx_around[] = $line_indices_parsed[ $idx - 1 ]; - } - $idx_around[] = $line_indices_parsed[ $idx ]; - if ( isset( $line_indices_parsed[ $idx + 1 ] ) ) { - $idx_around[] = $line_indices_parsed[ $idx + 1 ]; - } - $lines_parsed = array_merge( $lines_parsed, $idx_around ); - } - } - - $details = array_intersect_key( $file_content, array_flip( $lines ) ); - - $details_parsed = array(); - - if ( $use_parser ) { - $details_parsed = array_intersect_key( $code, array_flip( $lines_parsed ) ); - } - - // provide both 'matches' and 'details', as some places want 'matches' - // this matches the old behavior, which would add 'details' to some items, without replacing 'matches' - $debug_data = array( 'matches' => $matches, 'details' => $details ); - if ( $use_parser ) { - $debug_data['details_parsed'] = $details_parsed; - } - - // Additional checking needed? - if ( method_exists( $signature, 'get_detailed_scanner' ) && $scanner = $signature->get_detailed_scanner() ) - $is_vulnerable = $scanner->scan( $is_vulnerable, $file, $real_file, $file_content, $debug_data ); - if ( $is_vulnerable ) { - $found[$signature->id] = $debug_data; - if ( isset( $signature->severity ) && $signature->severity > 8 ) // don't continue scanning - break; - } - } - } - - return apply_filters_ref_array( 'post_scan_file', array ( $found, $file, $real_file, &$file_content ) ); -} diff --git a/vip-jetpack/connection-pilot/class-jetpack-connection-cli.php b/vip-jetpack/connection-pilot/class-jetpack-connection-cli.php index 9fc669e466..167bceb0cf 100644 --- a/vip-jetpack/connection-pilot/class-jetpack-connection-cli.php +++ b/vip-jetpack/connection-pilot/class-jetpack-connection-cli.php @@ -8,7 +8,7 @@ class CLI { /** - * Connect sites to Jetpack, Akismet, and VaultPress. + * Connect sites to Jetpack and Akismet. * [--network] * : Connect all subsites of this multisite network @@ -49,9 +49,8 @@ private function connect_site() { } $ak_connection = $this->connect_akismet(); - $vp_connection = $this->connect_vaultpress(); - return true === $ak_connection && true === $vp_connection; + return true === $ak_connection; } /** @@ -107,30 +106,6 @@ private function connect_akismet() { return true; } - /** - * Ensure Vaultpress is connected. - * - * @return bool true if there is a successful connection. - * prints notice if Vaultpress is skipped. - */ - private function connect_vaultpress() { - // Do not connect to Vaultpress if the loading of the Vaultpress plugin has been skipped. - $skip_vp = ( defined( 'VIP_VAULTPRESS_ALLOWED' ) && false === VIP_VAULTPRESS_ALLOWED ) || ( defined( 'VIP_VAULTPRESS_SKIP_LOAD' ) && VIP_VAULTPRESS_SKIP_LOAD ); - - if ( $skip_vp ) { - WP_CLI::line( '☑️ VaultPress is skipped because the plugin is not loaded' ); - return true; - } - - $vp_connection = Controls::connect_vaultpress(); - if ( is_wp_error( $vp_connection ) ) { - WP_CLI::warning( sprintf( '❌ Could not connect VaultPress. Error (%s): %s', $vp_connection->get_error_code(), $vp_connection->get_error_message() ) ); - return false; - } - - return true; - } - /** * Map over subsites in a network and perform the $callback() function on them. * diff --git a/vip-jetpack/connection-pilot/class-jetpack-connection-controls.php b/vip-jetpack/connection-pilot/class-jetpack-connection-controls.php index a4b2915d77..2bdf232967 100644 --- a/vip-jetpack/connection-pilot/class-jetpack-connection-controls.php +++ b/vip-jetpack/connection-pilot/class-jetpack-connection-controls.php @@ -200,40 +200,6 @@ public static function connect_akismet() { return true; } - /** - * Connect a site to VaultPress. - * - * Uses VaultPress' function to connect VaultPress using Jetpack. An active Jetpack connection is required on the site. - * - * @return bool|WP_Error True if site is connected, error otherwise. - */ - public static function connect_vaultpress() { - if ( ! class_exists( 'VaultPress' ) || ! method_exists( 'VaultPress', 'init' ) ) { - return new WP_Error( 'jp-cxn-pilot-vaultpress-dependencies-missing', 'VaultPress is missing required functions/methods to perform the connection.' ); - } - - $vaultpress = \VaultPress::init(); - if ( $vaultpress->is_registered() && isset( $vaultpress->options['connection'] ) && 'ok' === $vaultpress->options['connection'] ) { - return true; - } - - // Remove the VaultPress option from the db to prevent site registration from failing. - delete_option( 'vaultpress' ); - - $result = $vaultpress->register_via_jetpack( true ); - - if ( true !== $result ) { - $error_message = 'VaultPress could not be connected.'; - if ( is_wp_error( $result ) ) { - $error_message .= sprintf( ' Error: [%s] %s', $result->get_error_code(), $result->get_error_message() ); - } - - return new WP_Error( 'jp-cxn-pilot-vaultpress-connection-failed', $error_message ); - } - - return true; - } - /** * Provision the site with WP.com. * diff --git a/vip-jetpack/connection-pilot/class-jetpack-connection-pilot.php b/vip-jetpack/connection-pilot/class-jetpack-connection-pilot.php index 96cdf6bc3d..c5442ec3ed 100644 --- a/vip-jetpack/connection-pilot/class-jetpack-connection-pilot.php +++ b/vip-jetpack/connection-pilot/class-jetpack-connection-pilot.php @@ -142,15 +142,6 @@ public function run_connection_pilot() { } } - // Attempting VaultPress connection given that Jetpack is connected. - $skip_vaultpress = ( defined( 'VIP_VAULTPRESS_ALLOWED' ) && false === VIP_VAULTPRESS_ALLOWED ) || ( defined( 'VIP_VAULTPRESS_SKIP_LOAD' ) && VIP_VAULTPRESS_SKIP_LOAD ); - if ( ! $skip_vaultpress ) { - $vaultpress_connection_attempt = Connection_Pilot\Controls::connect_vaultpress(); - if ( is_wp_error( $vaultpress_connection_attempt ) ) { - $this->send_alert( 'VaultPress connection error.', $vaultpress_connection_attempt ); - } - } - return; } From c79139b3dd8fd36931e7109a1f2dfa68ca2987d2 Mon Sep 17 00:00:00 2001 From: Aagam Shah Date: Thu, 5 Sep 2024 10:28:41 +0530 Subject: [PATCH 02/21] Remove the deprecated SERVICES_API_URL and SERVICES_AUTH_TOKEN in favour of VIP_SERVICES_AUTH_TOKENS (#5836) --- config/class-site-details-index.php | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/config/class-site-details-index.php b/config/class-site-details-index.php index 26cb993030..cf59066c45 100644 --- a/config/class-site-details-index.php +++ b/config/class-site-details-index.php @@ -349,24 +349,14 @@ public function get_site_details() { * and sends it to the site details service */ public function put_site_details() { - $site_details = $this->get_site_details(); - $url = null; - $token = null; - $new_service_url = null; - $new_service_token = null; + $site_details = $this->get_site_details(); + $url = null; + $token = null; if ( defined( 'VIP_SERVICES_AUTH_TOKENS' ) && ! empty( VIP_SERVICES_AUTH_TOKENS ) ) { $auth_token_details = json_decode( base64_decode( VIP_SERVICES_AUTH_TOKENS ), true ); - $new_service_url = $auth_token_details['site']['vip-site-details']['url'] ?? null; - $new_service_token = $auth_token_details['site']['vip-site-details']['token'] ?? null; - } - - if ( $new_service_url && $new_service_token ) { - $url = rtrim( $new_service_url, '/' ) . '/sites'; - $token = $new_service_token; - } elseif ( defined( 'SERVICES_API_URL' ) && defined( 'SERVICES_AUTH_TOKEN' ) && ! empty( SERVICES_AUTH_TOKEN ) ) { - $url = rtrim( SERVICES_API_URL, '/' ) . '/site-details/sites'; - $token = SERVICES_AUTH_TOKEN; + $url = $auth_token_details['site']['vip-site-details']['url'] ?? null; + $token = $auth_token_details['site']['vip-site-details']['token'] ?? null; } if ( $url && $token ) { @@ -379,7 +369,7 @@ public function put_site_details() { ), ); - vip_safe_wp_remote_request( $url, false, 3, 5, 10, $args ); + vip_safe_wp_remote_request( rtrim( $url, '/' ) . '/sites', false, 3, 5, 10, $args ); } } From 4a8ffe6ae0a4d4fe102eb9c463ef04b1e1f833d2 Mon Sep 17 00:00:00 2001 From: Rebecca Hum Date: Thu, 5 Sep 2024 10:10:47 -0600 Subject: [PATCH 03/21] Enterprise Search CLI: In `wp vip-search health validate-contents`, if `protected_content` feature is not enabled, do not mark as missing (#5837) * Enterprise Search CLI: In validate_contents, if protected_content is not enabled, do not mark as missing * Add/fix test * Sonarlint fixes --- search/includes/classes/class-health.php | 20 ++--- .../includes/classes/test-class-health.php | 82 +++++++++++++++---- 2 files changed, 74 insertions(+), 28 deletions(-) diff --git a/search/includes/classes/class-health.php b/search/includes/classes/class-health.php index 877a050804..270003f141 100644 --- a/search/includes/classes/class-health.php +++ b/search/includes/classes/class-health.php @@ -632,14 +632,16 @@ public function validate_index_posts_content_batch( $indexable, $start_post_id, $mode = $options['mode'] ?? null; // phpcs:ignore WordPress.DB.DirectDatabaseQuery - $rows = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_type, post_status FROM $wpdb->posts WHERE ID >= %d AND ID < %d", $start_post_id, $next_batch_post_id ) ); + $rows = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_type, post_status, post_password FROM $wpdb->posts WHERE ID >= %d AND ID < %d", $start_post_id, $next_batch_post_id ) ); - $post_types = $indexable->get_indexable_post_types(); - $post_statuses = $indexable->get_indexable_post_status(); + $post_types = $indexable->get_indexable_post_types(); + $post_statuses = $indexable->get_indexable_post_status(); + $protected_content = \ElasticPress\Features::factory()->get_registered_feature( 'protected_content' ); + $protected_content_enabled = $protected_content ? $protected_content->is_active() : false; // First we need to see identify which posts are actually expected in the index, by checking the same filters that // are used in ElasticPress\Indexable\Post\SyncManager::action_sync_on_update() - $expected_post_rows = self::filter_expected_post_rows( $rows, $post_types, $post_statuses ); + $expected_post_rows = static::filter_expected_post_rows( $rows, $post_types, $post_statuses, $protected_content_enabled ); $document_ids = self::get_document_ids_for_batch( $start_post_id, $next_batch_post_id - 1 ); @@ -756,13 +758,13 @@ public static function get_missing_docs_or_posts_diff( $found_post_ids, $found_d return $diffs; } - public static function filter_expected_post_rows( $rows, $post_types, $post_statuses ) { - $filtered = array_filter( $rows, function ( $row ) use ( $post_types, $post_statuses ) { - if ( ! in_array( $row->post_type, $post_types, true ) ) { + public static function filter_expected_post_rows( $rows, $post_types, $post_statuses, $protected_content_enabled ) { + return array_filter( $rows, function ( $row ) use ( $post_types, $post_statuses, $protected_content_enabled ) { + if ( ! in_array( $row->post_type, $post_types, true ) || ! in_array( $row->post_status, $post_statuses, true ) ) { return false; } - if ( ! in_array( $row->post_status, $post_statuses, true ) ) { + if ( ! $protected_content_enabled && '' !== $row->post_password ) { return false; } @@ -770,8 +772,6 @@ public static function filter_expected_post_rows( $rows, $post_types, $post_stat return ! $skipped; } ); - - return $filtered; } public static function simplified_diff_document_and_prepared_document( $document, $prepared_document ) { diff --git a/tests/search/includes/classes/test-class-health.php b/tests/search/includes/classes/test-class-health.php index 876ab5c814..0671e47db3 100644 --- a/tests/search/includes/classes/test-class-health.php +++ b/tests/search/includes/classes/test-class-health.php @@ -85,44 +85,58 @@ public function test_filter_expected_post_rows() { $rows = array( // Indexed (object) array( - 'ID' => 1, - 'post_type' => 'post', - 'post_status' => 'publish', + 'ID' => 1, + 'post_type' => 'post', + 'post_status' => 'publish', + 'post_password' => '', ), // Filtered out by ep_post_sync_kill (object) array( - 'ID' => 2, - 'post_type' => 'post', - 'post_status' => 'publish', + 'ID' => 2, + 'post_type' => 'post', + 'post_status' => 'publish', + 'post_password' => '', ), // Un-indexed post_type (object) array( - 'ID' => 3, - 'post_type' => 'unindexed', - 'post_status' => 'publish', + 'ID' => 3, + 'post_type' => 'unindexed', + 'post_status' => 'publish', + 'post_password' => '', ), // Un-indexed post_status (object) array( - 'ID' => 4, - 'post_type' => 'post', - 'post_status' => 'unindexed', + 'ID' => 4, + 'post_type' => 'post', + 'post_status' => 'unindexed', + 'post_password' => '', ), // Indexed (object) array( - 'ID' => 5, - 'post_type' => 'post', - 'post_status' => 'publish', + 'ID' => 5, + 'post_type' => 'post', + 'post_status' => 'publish', + 'post_password' => '', + ), + + // Protected post + (object) array( + 'ID' => 6, + 'post_type' => 'post', + 'post_status' => 'publish', + 'post_password' => 'test', ), ); - $indexed_post_types = array( 'post' ); - $indexed_post_statuses = array( 'publish' ); + $indexed_post_types = array( 'post' ); + $indexed_post_statuses = array( 'publish' ); + $protected_content_enabled = false; - $filtered = Health::filter_expected_post_rows( $rows, $indexed_post_types, $indexed_post_statuses ); + $filtered = Health::filter_expected_post_rows( $rows, $indexed_post_types, $indexed_post_statuses, $protected_content_enabled ); // Grab just the IDs to make validation simpler $filtered_ids = array_values( wp_list_pluck( $filtered, 'ID' ) ); @@ -132,6 +146,38 @@ public function test_filter_expected_post_rows() { $this->assertEquals( $expected_ids, $filtered_ids ); } + public function test_filter_expected_post_rows__protected_content() { + $rows = array( + (object) array( + 'ID' => 1, + 'post_type' => 'post', + 'post_status' => 'publish', + 'post_password' => '', + ), + + // Protected post + (object) array( + 'ID' => 6, + 'post_type' => 'post', + 'post_status' => 'publish', + 'post_password' => 'test', + ), + ); + + $indexed_post_types = array( 'post' ); + $indexed_post_statuses = array( 'publish' ); + $protected_content_enabled = true; + + $filtered = Health::filter_expected_post_rows( $rows, $indexed_post_types, $indexed_post_statuses, $protected_content_enabled ); + + // Grab just the IDs to make validation simpler + $filtered_ids = array_values( wp_list_pluck( $filtered, 'ID' ) ); + + $expected_ids = array( 1, 6 ); + + $this->assertEquals( $expected_ids, $filtered_ids ); + } + public function get_diff_document_and_prepared_document_data() { return array( // Simple diff From e1352ee9b1f0603f65f67a83d60885f5d7d2ab93 Mon Sep 17 00:00:00 2001 From: Rebecca Hum Date: Thu, 5 Sep 2024 11:18:36 -0600 Subject: [PATCH 04/21] Search: Fix null type error on date preparation for posts (#5838) --- search/elasticpress | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/search/elasticpress b/search/elasticpress index afd996b92c..1a6b4cf442 160000 --- a/search/elasticpress +++ b/search/elasticpress @@ -1 +1 @@ -Subproject commit afd996b92cdf1541c1504af04ef570ed535697ff +Subproject commit 1a6b4cf4428feab097c49d3dfcfbf6dcff4d400b From ee6ecc41c1b56054b217e5ca5e4360e9f350d326 Mon Sep 17 00:00:00 2001 From: Alec Geatches Date: Thu, 5 Sep 2024 13:18:41 -0600 Subject: [PATCH 05/21] Bump -ext Block Data API version to 1.4 (#5839) --- integrations/block-data-api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/block-data-api.php b/integrations/block-data-api.php index ad863ba23b..f1833400dc 100644 --- a/integrations/block-data-api.php +++ b/integrations/block-data-api.php @@ -20,7 +20,7 @@ class BlockDataApiIntegration extends Integration { * * @var string */ - protected string $version = '1.3'; + protected string $version = '1.4'; /** * Returns `true` if `Block Data API` is already available e.g. via customer code. We will use From ecf39f01c5fca5a0c624b7c38eaccc570f25cf93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 7 Sep 2024 08:37:25 +0300 Subject: [PATCH 06/21] chore(deps-dev): Bump webpack from 5.90.3 to 5.94.0 (#5829) Bumps [webpack](https://github.com/webpack/webpack) from 5.90.3 to 5.94.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.90.3...v5.94.0) --- updated-dependencies: - dependency-name: webpack dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 133 +++++++++++++++++++++------------------------- 1 file changed, 61 insertions(+), 72 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2c0d614a68..30ac24450b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6043,16 +6043,6 @@ "@types/json-schema": "*" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -6660,9 +6650,9 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -6682,9 +6672,9 @@ "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -6705,15 +6695,15 @@ "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -6741,28 +6731,28 @@ "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -6770,24 +6760,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -6796,12 +6786,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -9028,10 +9018,10 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "peerDependencies": { "acorn": "^8" @@ -12566,9 +12556,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -26509,9 +26499,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -26546,26 +26536,25 @@ "dev": true }, "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", + "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -26573,7 +26562,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { From 9e118e517441ce4c1067cd730faab8aedfe7c026 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 7 Sep 2024 08:37:48 +0300 Subject: [PATCH 07/21] chore(deps-dev): Bump lint-staged from 15.2.9 to 15.2.10 (#5831) Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 15.2.9 to 15.2.10. - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md) - [Commits](https://github.com/lint-staged/lint-staged/compare/v15.2.9...v15.2.10) --- updated-dependencies: - dependency-name: lint-staged dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 30ac24450b..8ebfd181a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18278,9 +18278,9 @@ } }, "node_modules/lint-staged": { - "version": "15.2.9", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz", - "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", "dev": true, "dependencies": { "chalk": "~5.3.0", @@ -18289,7 +18289,7 @@ "execa": "~8.0.1", "lilconfig": "~3.1.2", "listr2": "~8.2.4", - "micromatch": "~4.0.7", + "micromatch": "~4.0.8", "pidtree": "~0.6.0", "string-argv": "~0.3.2", "yaml": "~2.5.0" @@ -19433,9 +19433,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", From 70506444b742d9fcc3cbcf1b39b5ecc881475215 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 7 Sep 2024 08:38:22 +0300 Subject: [PATCH 08/21] chore(deps-dev): Bump husky from 9.1.4 to 9.1.5 (#5832) Bumps [husky](https://github.com/typicode/husky) from 9.1.4 to 9.1.5. - [Release notes](https://github.com/typicode/husky/releases) - [Commits](https://github.com/typicode/husky/compare/v9.1.4...v9.1.5) --- updated-dependencies: - dependency-name: husky dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ebfd181a2..47ab2c2f81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "cypress-file-upload": "^5.0.8", "cypress-multi-reporters": "^1.6.1", "eslint-plugin-cypress": "^3.0.3", - "husky": "9.1.4", + "husky": "9.1.5", "jsdoc": "^4.0.0", "lint-staged": "^15.0.1", "mocha-junit-reporter": "^2.1.1", @@ -15214,9 +15214,9 @@ } }, "node_modules/husky": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.4.tgz", - "integrity": "sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==", + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.5.tgz", + "integrity": "sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag==", "dev": true, "bin": { "husky": "bin.js" diff --git a/package.json b/package.json index dfede3b199..0c0d8f7e6a 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "cypress-file-upload": "^5.0.8", "cypress-multi-reporters": "^1.6.1", "eslint-plugin-cypress": "^3.0.3", - "husky": "9.1.4", + "husky": "9.1.5", "jsdoc": "^4.0.0", "lint-staged": "^15.0.1", "mocha-junit-reporter": "^2.1.1", From 9f1c06a0f6dbe76d543ad5dd6f982d138b8b106f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 7 Sep 2024 08:39:06 +0300 Subject: [PATCH 09/21] chore(deps-dev): Bump @types/node in /__tests__/e2e (#5833) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.5.0 to 22.5.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- __tests__/e2e/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/__tests__/e2e/package-lock.json b/__tests__/e2e/package-lock.json index 604430c001..b5311f0837 100644 --- a/__tests__/e2e/package-lock.json +++ b/__tests__/e2e/package-lock.json @@ -722,9 +722,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz", - "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==", + "version": "22.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz", + "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==", "dev": true, "dependencies": { "undici-types": "~6.19.2" From 03389a24a6af7e5769199cb8e42cbcdea1a1ff8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 7 Sep 2024 09:25:53 +0300 Subject: [PATCH 10/21] chore(deps): Bump github/codeql-action from 3.26.5 to 3.26.6 (#5830) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.5 to 3.26.6. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v3.26.5...v3.26.6) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 0892d6422c..67d0d6b4dc 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -32,10 +32,10 @@ jobs: uses: actions/checkout@v4.1.7 - name: Initialize CodeQL - uses: github/codeql-action/init@v3.26.5 + uses: github/codeql-action/init@v3.26.6 with: languages: ${{ matrix.language }} config-file: ./.github/codeql-config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3.26.5 + uses: github/codeql-action/analyze@v3.26.6 From e457d3330d9081763be5e5aa701e0a703a51df9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 22:21:54 +0300 Subject: [PATCH 11/21] chore(deps-dev): Bump sass in /search/search-dev-tools (#5841) Bumps [sass](https://github.com/sass/dart-sass) from 1.77.8 to 1.78.0. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.77.8...1.78.0) --- updated-dependencies: - dependency-name: sass dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- search/search-dev-tools/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/search/search-dev-tools/package-lock.json b/search/search-dev-tools/package-lock.json index 0ad5fdd1af..41b775edf5 100644 --- a/search/search-dev-tools/package-lock.json +++ b/search/search-dev-tools/package-lock.json @@ -11185,9 +11185,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.77.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", - "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "version": "1.78.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.78.0.tgz", + "integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", From cad1ad54396cef8fefda2b10974c3ef552d590da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 22:22:03 +0300 Subject: [PATCH 12/21] chore(deps-dev): Bump webpack-dev-server in /search/search-dev-tools (#5840) Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 5.0.4 to 5.1.0. - [Release notes](https://github.com/webpack/webpack-dev-server/releases) - [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-server/compare/v5.0.4...v5.1.0) --- updated-dependencies: - dependency-name: webpack-dev-server dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- search/search-dev-tools/package-lock.json | 622 +--------------------- 1 file changed, 25 insertions(+), 597 deletions(-) diff --git a/search/search-dev-tools/package-lock.json b/search/search-dev-tools/package-lock.json index 41b775edf5..1e1b60e4c3 100644 --- a/search/search-dev-tools/package-lock.json +++ b/search/search-dev-tools/package-lock.json @@ -2086,53 +2086,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -2309,7 +2262,6 @@ "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -2322,11 +2274,10 @@ } }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.0.4.tgz", - "integrity": "sha512-aOcSN4MeAtFROysrbqG137b7gaDDSmVrl5mpo6sT/w+kcXpWnzhMjmY/Fh/sDx26NBxyIE7MB1seqLeCAzy9Sg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/base64": "^1.1.1", "@jsonjoy.com/util": "^1.1.2", @@ -2345,11 +2296,10 @@ } }, "node_modules/@jsonjoy.com/util": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.2.0.tgz", - "integrity": "sha512-4B8B+3vFsY4eo33DMKyJPlQ3sBMpPFUZK2dr3O3rXrOGKKbYG44J0XSFkDo1VOQiri5HFEhIeVvItjR2xcazmg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", + "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.0" }, @@ -2423,17 +2373,6 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@rushstack/eslint-patch": { "version": "1.10.3", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", @@ -4890,19 +4829,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -5174,13 +5100,6 @@ "tslib": "^2.0.3" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6624,30 +6543,6 @@ "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, "node_modules/express": { "version": "4.19.2", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", @@ -6982,36 +6877,6 @@ "is-callable": "^1.1.3" } }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -7137,19 +7002,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-symbol-description": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", @@ -7658,22 +7510,11 @@ } } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/hyperdyperid": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.18" } @@ -8090,16 +7931,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -8331,19 +8162,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -8489,25 +8307,6 @@ "set-function-name": "^2.0.1" } }, - "node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", @@ -8968,14 +8767,13 @@ } }, "node_modules/memfs": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.9.3.tgz", - "integrity": "sha512-bsYSSnirtYTWi1+OPMFb0M048evMKyUYe0EbtuGQgq6BVQM1g1W8/KIUJCCvjgI/El0j6Q4WsmMiBwLUBSw8LA==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", + "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.1.2", + "@jsonjoy.com/util": "^1.3.0", "tree-dump": "^1.0.1", "tslib": "^2.0.0" }, @@ -9071,16 +8869,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/mini-css-extract-plugin": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", @@ -9134,16 +8922,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -9264,19 +9042,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -9464,22 +9229,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/open": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", @@ -9587,13 +9336,6 @@ "node": ">=6" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -9702,33 +9444,6 @@ "dev": true, "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -11613,13 +11328,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -11757,76 +11465,6 @@ "dev": true, "license": "MIT" }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -11919,20 +11557,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -11943,16 +11567,6 @@ "node": ">=4" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -12281,7 +11895,6 @@ "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", "dev": true, - "license": "Unlicense", "engines": { "node": ">=10.18" }, @@ -12336,9 +11949,9 @@ } }, "node_modules/tree-dump": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.1.tgz", - "integrity": "sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", "dev": true, "engines": { "node": ">=10.0" @@ -12929,11 +12542,10 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz", - "integrity": "sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", "dev": true, - "license": "MIT", "dependencies": { "colorette": "^2.0.10", "memfs": "^4.6.0", @@ -12959,11 +12571,10 @@ } }, "node_modules/webpack-dev-server": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", - "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.1.0.tgz", + "integrity": "sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -12978,8 +12589,7 @@ "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.19.2", "graceful-fs": "^4.2.6", "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", @@ -12987,14 +12597,13 @@ "launch-editor": "^2.6.1", "open": "^10.0.3", "p-retry": "^6.2.0", - "rimraf": "^5.0.5", "schema-utils": "^4.2.0", "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.1.0", - "ws": "^8.16.0" + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" @@ -13018,49 +12627,6 @@ } } }, - "node_modules/webpack-dev-server/node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz", - "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/webpack-merge": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", @@ -13246,143 +12812,6 @@ "node": ">=0.10.0" } }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -13391,11 +12820,10 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, From ef120318f26481e2a6e8ccc9a7bf3189699819e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 14:40:57 -0500 Subject: [PATCH 13/21] chore(deps): Bump @wordpress/i18n from 5.6.0 to 5.7.0 (#5848) Bumps [@wordpress/i18n](https://github.com/WordPress/gutenberg/tree/HEAD/packages/i18n) from 5.6.0 to 5.7.0. - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/i18n/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/i18n@5.7.0/packages/i18n) --- updated-dependencies: - dependency-name: "@wordpress/i18n" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 47ab2c2f81..c3c4d3bf62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7144,9 +7144,9 @@ } }, "node_modules/@wordpress/hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.6.0.tgz", - "integrity": "sha512-FWJhubBXeyRhx12YUmxT9pNoV9Azvx8nkynhduV+RNgA+F2SXoOf15pr+USPV//m3Bx031GN/wPHjgUCbC6+XA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.7.0.tgz", + "integrity": "sha512-EGHMsNCt+PyStm3o1JWujaTA+HKcTxuEXdSHBBFDavzsgOF13bxTf1LpDYgTZJT3K9TSMP983IwfckP5t66pDw==", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7156,12 +7156,12 @@ } }, "node_modules/@wordpress/i18n": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-5.6.0.tgz", - "integrity": "sha512-xTpwuRh0owYFlgRHUbUAQIWr8ye3FC0ZsjDIOskJaNkrheAU9ZWKJDcmQmPvi01Udml4g9LUIaffkcRd2kyW2g==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-5.7.0.tgz", + "integrity": "sha512-o1cq1zutE5rMAM//Ra1hRfgHuWNBxFtd7XNk+BuAcILRENMaEoqAoGBmGj9lRtOcqAj+cdoWxFjBIxRa67vIrg==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/hooks": "^4.6.0", + "@wordpress/hooks": "^4.7.0", "gettext-parser": "^1.3.1", "memize": "^2.1.0", "sprintf-js": "^1.1.1", From 77ee50fe302035abeb18af4e428fe6a7499c652c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:05:54 +0300 Subject: [PATCH 14/21] chore(deps): Bump sjinks/setup-wordpress-test-library (#5849) Bumps [sjinks/setup-wordpress-test-library](https://github.com/sjinks/setup-wordpress-test-library) from 2.0.3 to 2.1.1. - [Release notes](https://github.com/sjinks/setup-wordpress-test-library/releases) - [Commits](https://github.com/sjinks/setup-wordpress-test-library/compare/v2.0.3...v2.1.1) --- updated-dependencies: - dependency-name: sjinks/setup-wordpress-test-library dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/actions/run-wp-tests/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/run-wp-tests/action.yml b/.github/actions/run-wp-tests/action.yml index 10f9e2a024..01a7c7a100 100644 --- a/.github/actions/run-wp-tests/action.yml +++ b/.github/actions/run-wp-tests/action.yml @@ -80,7 +80,7 @@ runs: uses: ramsey/composer-install@3.0.0 - name: Set up WordPress and WordPress Test Library - uses: sjinks/setup-wordpress-test-library@v2.0.3 + uses: sjinks/setup-wordpress-test-library@v2.1.1 with: version: ${{ inputs.wordpress }} From a575471cf130df47599a84635348c9bcca8af913 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:06:28 +0300 Subject: [PATCH 15/21] chore(deps-dev): Bump yoast/phpunit-polyfills from 2.0.1 to 3.0.0 (#5850) Bumps [yoast/phpunit-polyfills](https://github.com/Yoast/PHPUnit-Polyfills) from 2.0.1 to 3.0.0. - [Release notes](https://github.com/Yoast/PHPUnit-Polyfills/releases) - [Changelog](https://github.com/Yoast/PHPUnit-Polyfills/blob/3.x/CHANGELOG.md) - [Commits](https://github.com/Yoast/PHPUnit-Polyfills/compare/2.0.1...3.0.0) --- updated-dependencies: - dependency-name: yoast/phpunit-polyfills dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.json | 2 +- composer.lock | 81 ++++++++++++++++++++++++++------------------------- 2 files changed, 42 insertions(+), 41 deletions(-) diff --git a/composer.json b/composer.json index c96d8f7332..b7adfa57a3 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "phpcompatibility/phpcompatibility-wp": "2.1.5", "erusev/parsedown": "1.7.4", "dms/phpunit-arraysubset-asserts": "0.5.0", - "yoast/phpunit-polyfills": "2.0.1", + "yoast/phpunit-polyfills": "3.0.0", "johnpbloch/wordpress-core": "6.6.1", "wp-phpunit/wp-phpunit": "6.6.1", "wp-cli/wp-cli": "2.11.0" diff --git a/composer.lock b/composer.lock index 330feae6d7..d07381e728 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d6becb92ce40371893f31c09ece90bac", + "content-hash": "1ce0766f1e65a17ef699ff852c74d186", "packages": [], "packages-dev": [ { @@ -403,16 +403,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", "shasum": "" }, "require": { @@ -420,11 +420,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -450,7 +451,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" }, "funding": [ { @@ -458,20 +459,20 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2024-06-12T14:39:25+00:00" }, { "name": "nikic/php-parser", - "version": "v5.0.2", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", "shasum": "" }, "require": { @@ -482,7 +483,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -514,9 +515,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" }, - "time": "2024-03-05T20:51:40+00:00" + "time": "2024-07-01T20:03:41+00:00" }, { "name": "phar-io/manifest", @@ -1008,35 +1009,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.31", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.19.1 || ^5.1.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" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -1045,7 +1046,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -1074,7 +1075,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -1082,7 +1083,7 @@ "type": "github" } ], - "time": "2024-03-02T06:37:42+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -3089,21 +3090,21 @@ }, { "name": "yoast/phpunit-polyfills", - "version": "2.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "4a088f125c970d6d6ea52c927f96fe39b330d0f1" + "reference": "19e6d5fb8aad31f731f774f9646a10c64a8843d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/4a088f125c970d6d6ea52c927f96fe39b330d0f1", - "reference": "4a088f125c970d6d6ea52c927f96fe39b330d0f1", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/19e6d5fb8aad31f731f774f9646a10c64a8843d2", + "reference": "19e6d5fb8aad31f731f774f9646a10c64a8843d2", "shasum": "" }, "require": { - "php": ">=5.6", - "phpunit/phpunit": "^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0" + "php": ">=7.0", + "phpunit/phpunit": "^6.4.4 || ^7.0 || ^8.0 || ^9.0 || ^11.0" }, "require-dev": { "php-parallel-lint/php-console-highlighter": "^1.0.0", @@ -3113,7 +3114,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -3148,7 +3149,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-04-05T16:36:44+00:00" + "time": "2024-09-07T00:24:25+00:00" } ], "aliases": [], From fc082792e7a18abe5ef3281f1d6daf3fd4ce0886 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:06:53 +0300 Subject: [PATCH 16/21] chore(deps-dev): Bump @playwright/test in /__tests__/e2e (#5842) Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.46.1 to 1.47.0. - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.46.1...v1.47.0) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- __tests__/e2e/package-lock.json | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/__tests__/e2e/package-lock.json b/__tests__/e2e/package-lock.json index b5311f0837..17d57dea6c 100644 --- a/__tests__/e2e/package-lock.json +++ b/__tests__/e2e/package-lock.json @@ -692,13 +692,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.46.1.tgz", - "integrity": "sha512-Fq6SwLujA/DOIvNC2EL/SojJnkKf/rAwJ//APpJJHRyMi1PdKrY3Az+4XNQ51N4RTbItbIByQ0jgd1tayq1aeA==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.47.0.tgz", + "integrity": "sha512-SgAdlSwYVpToI4e/IH19IHHWvoijAYH5hu2MWSXptRypLSnzj51PcGD+rsOXFayde4P9ZLi+loXVwArg6IUkCA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "playwright": "1.46.1" + "playwright": "1.47.0" }, "bin": { "playwright": "cli.js" @@ -2826,7 +2825,6 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -4213,13 +4211,12 @@ } }, "node_modules/playwright": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.46.1.tgz", - "integrity": "sha512-oPcr1yqoXLCkgKtD5eNUPLiN40rYEM39odNpIb6VE6S7/15gJmA1NzVv6zJYusV0e7tzvkU/utBFNa/Kpxmwng==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.47.0.tgz", + "integrity": "sha512-jOWiRq2pdNAX/mwLiwFYnPHpEZ4rM+fRSQpRHwEwZlP2PUANvL3+aJOF/bvISMhFD30rqMxUB4RJx9aQbfh4Ww==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.46.1" + "playwright-core": "1.47.0" }, "bin": { "playwright": "cli.js" @@ -4232,11 +4229,10 @@ } }, "node_modules/playwright-core": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.46.1.tgz", - "integrity": "sha512-h9LqIQaAv+CYvWzsZ+h3RsrqCStkBHlgo6/TJlFst3cOTlLghBQlJwPOZKQJTKNaD3QIB7aAVQ+gfWbN3NXB7A==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.0.tgz", + "integrity": "sha512-1DyHT8OqkcfCkYUD9zzUTfg7EfTd+6a8MkD/NWOvjo0u/SCNd5YmY/lJwFvUZOxJbWNds+ei7ic2+R/cRz/PDg==", "dev": true, - "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, From 4c74da8a9b5b5f56c6a3830837770c6379fb3e8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:08:10 +0300 Subject: [PATCH 17/21] chore(deps-dev): Bump typescript from 5.5.4 to 5.6.2 in /__tests__/e2e (#5843) Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.5.4 to 5.6.2. - [Release notes](https://github.com/microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/microsoft/TypeScript/compare/v5.5.4...v5.6.2) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- __tests__/e2e/package-lock.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/__tests__/e2e/package-lock.json b/__tests__/e2e/package-lock.json index 17d57dea6c..186db6a2da 100644 --- a/__tests__/e2e/package-lock.json +++ b/__tests__/e2e/package-lock.json @@ -4989,11 +4989,10 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" From f5c382a0997d2cc86103d44650f9c45633eb4598 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:08:38 +0300 Subject: [PATCH 18/21] chore(deps-dev): Bump @types/node in /__tests__/e2e (#5844) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.5.2 to 22.5.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- __tests__/e2e/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/__tests__/e2e/package-lock.json b/__tests__/e2e/package-lock.json index 186db6a2da..aaa9dc821b 100644 --- a/__tests__/e2e/package-lock.json +++ b/__tests__/e2e/package-lock.json @@ -721,9 +721,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz", - "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==", + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", "dev": true, "dependencies": { "undici-types": "~6.19.2" From 121139d39f2c67926a5c5378e302c8146727d3bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:09:25 +0300 Subject: [PATCH 19/21] chore(deps): Bump @wordpress/api-fetch from 7.6.0 to 7.7.0 (#5847) Bumps [@wordpress/api-fetch](https://github.com/WordPress/gutenberg/tree/HEAD/packages/api-fetch) from 7.6.0 to 7.7.0. - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/api-fetch/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/api-fetch@7.7.0/packages/api-fetch) --- updated-dependencies: - dependency-name: "@wordpress/api-fetch" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c3c4d3bf62..2f5de280a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6796,13 +6796,13 @@ } }, "node_modules/@wordpress/api-fetch": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.6.0.tgz", - "integrity": "sha512-/T0EORXgfZJQZomDIuZyPwQQWzYjcSxo9ggpKqzQuwq+VHMIC5aEPYh3IC5KhpQxPEquvN5xm2kbcTpBVnUwiA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.7.0.tgz", + "integrity": "sha512-Si/Ep5yXmxTpUT1Fxgd8PjhK6amohcSCUR50QGK9FIeCGoxBZiH7gi+VSvFAZsC2z8XvvP/tJZthB2j/9UHfPA==", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/i18n": "^5.6.0", - "@wordpress/url": "^4.6.0" + "@wordpress/i18n": "^5.7.0", + "@wordpress/url": "^4.7.0" }, "engines": { "node": ">=18.12.0", @@ -7204,9 +7204,9 @@ } }, "node_modules/@wordpress/url": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.6.0.tgz", - "integrity": "sha512-83RS6lXZ45peBzG3oPKBKU5O4o3jZd7b2oN6rwQGJMILgZl6RCrYFKxpRJ1dh+Cd9744D3PGadsyjLMFpveURA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.7.0.tgz", + "integrity": "sha512-c9L3L4+YrygKtf5S7DKFP1wNbFvqPLp8Uub4VgPKWmlZnIB2hsRNXELba5qGHpPmzTg82KwXImRAuHSMrfr+LA==", "dependencies": { "@babel/runtime": "^7.16.0", "remove-accents": "^0.5.0" From 47a5acf3fedc9b6a83a0ba65891a54b62b2a423d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:09:35 +0300 Subject: [PATCH 20/21] chore(deps-dev): Bump postcss-preset-env from 10.0.2 to 10.0.3 (#5846) Bumps [postcss-preset-env](https://github.com/csstools/postcss-plugins/tree/HEAD/plugin-packs/postcss-preset-env) from 10.0.2 to 10.0.3. - [Changelog](https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/CHANGELOG.md) - [Commits](https://github.com/csstools/postcss-plugins/commits/HEAD/plugin-packs/postcss-preset-env) --- updated-dependencies: - dependency-name: postcss-preset-env dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f5de280a8..e668e7b2a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11513,9 +11513,9 @@ } }, "node_modules/cssdb": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.1.0.tgz", - "integrity": "sha512-BQN57lfS4dYt2iL0LgyrlDbefZKEtUyrO8rbzrbGrqBk6OoyNTQLF+porY9DrpDBjLo4NEvj2IJttC7vf3x+Ew==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.1.1.tgz", + "integrity": "sha512-kRbSRgZoxtZNl5snb3nOzBkFOt5AwnephcUTIEFc2DebKG9PN50/cHarlwOooTxYQ/gxsnKs3BxykhNLmfvyLg==", "dev": true, "funding": [ { @@ -22530,9 +22530,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.2.tgz", - "integrity": "sha512-PMxqnz0RQYMUmUi6p4P7BhC9EVGyEUCIdwn4vJ7Fy1jvc2QP4mMH75BSBB1mBFqjl3x4xYwyCNMhGZ8y0+/qOA==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.0.3.tgz", + "integrity": "sha512-1nrZ4IeBXEEj53IMoRKE+k/Ub6nQb3gFjaxTeyUNG5zv3JQclFDY5GKKhAi3nsa1lnPMWgzQX+/1y6wUt2+I7Q==", "dev": true, "funding": [ { @@ -22580,7 +22580,7 @@ "css-blank-pseudo": "^7.0.0", "css-has-pseudo": "^7.0.0", "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.1.0", + "cssdb": "^8.1.1", "postcss-attribute-case-insensitive": "^7.0.0", "postcss-clamp": "^4.1.0", "postcss-color-functional-notation": "^7.0.2", @@ -22599,7 +22599,7 @@ "postcss-lab-function": "^7.0.2", "postcss-logical": "^8.0.0", "postcss-nesting": "^13.0.0", - "postcss-opacity-percentage": "^2.0.0", + "postcss-opacity-percentage": "^3.0.0", "postcss-overflow-shorthand": "^6.0.0", "postcss-page-break": "^3.0.4", "postcss-place": "^10.0.0", @@ -22614,6 +22614,28 @@ "postcss": "^8.4" } }, + "node_modules/postcss-preset-env/node_modules/postcss-opacity-percentage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", + "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", + "dev": true, + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/postcss-pseudo-class-any-link": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.0.tgz", From f18c1d1930fff1dd27b32be3703807930cbc9b5a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:09:43 +0300 Subject: [PATCH 21/21] chore(deps-dev): Bump @wordpress/env from 10.6.0 to 10.7.0 (#5845) Bumps [@wordpress/env](https://github.com/WordPress/gutenberg/tree/HEAD/packages/env) from 10.6.0 to 10.7.0. - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/env/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/env@10.7.0/packages/env) --- updated-dependencies: - dependency-name: "@wordpress/env" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e668e7b2a6..5fcb64401a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6869,9 +6869,9 @@ } }, "node_modules/@wordpress/env": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-10.6.0.tgz", - "integrity": "sha512-hK4JH5oyGUKOlSBGKx+DS64G1VN8azU1Kvpn1aob3bYYFCvtoXjKOOGmK9Gnf4f2gosYexuDS5FmAfTPqi8a8Q==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-10.7.0.tgz", + "integrity": "sha512-tRUZJV4K5T/5lq814FaAdk35kNf50a+YcB9xay7LX5D+VN0PhAVGLPudfexc1yOIINh6cFYnDaCB+1TcAdqKhQ==", "dev": true, "dependencies": { "chalk": "^4.0.0",