From 8520816205b517900a2997ae029f767121e0dffc Mon Sep 17 00:00:00 2001 From: Rinat Khaziev Date: Tue, 30 Jul 2024 13:54:20 -0500 Subject: [PATCH 1/4] Refactor status code handling: move all header related logic inside a send_headers callback. Add ability to override the error code via a vip_maintenance_mode_origin_status_code filter --- maintenance-mode.php | 36 ++++++++++++++++++++++-------------- vipgo-helper.php | 1 + 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/maintenance-mode.php b/maintenance-mode.php index fe7db2f..2ad4902 100644 --- a/maintenance-mode.php +++ b/maintenance-mode.php @@ -53,18 +53,13 @@ function current_user_can_bypass_vip_maintenance_mode() { return current_user_can( $required_capability ); } -/** - * Redirects visitors and users without edit_posts capability to the maintenance page - * - * Uses the plugin template when there's no template called `template-maintenance-mode.php` in the theme root folder. - * - * @since 0.1.1 - */ -function vip_maintenance_mode_template_redirect() { + +add_action( 'send_headers', 'vip_maintenance_mode_send_headers', PHP_INT_MAX ); + +function vip_maintenance_mode_send_headers() { if ( current_user_can_bypass_vip_maintenance_mode() ) { return; } - /** * Filters whether to respond with a 503 status code. * @@ -74,11 +69,11 @@ function vip_maintenance_mode_template_redirect() { * * @param bool $bool Whether to respond with a 503 status code. Default true. */ - $respond_503 = apply_filters( 'vip_maintenance_mode_respond_503', true ); - - if ( true === $respond_503 ) { - status_header( 503 ); + $respond_with_status_code = apply_filters( 'vip_maintenance_mode_respond_503', true ); + $respond_origin_status_code = apply_filters( 'vip_maintenance_mode_origin_status_code', 503 ); + if ( true === $respond_with_status_code ) { + status_header( $respond_origin_status_code ); /** * Filters the Retry-After value used to indicate how long the service is expected to be unavailable. * @@ -96,7 +91,20 @@ function vip_maintenance_mode_template_redirect() { } header( 'X-Maintenance-Mode-WP: true' ); - +} + +/** + * Redirects visitors and users without edit_posts capability to the maintenance page + * + * Uses the plugin template when there's no template called `template-maintenance-mode.php` in the theme root folder. + * + * @since 0.1.1 + */ +function vip_maintenance_mode_template_redirect() { + if ( current_user_can_bypass_vip_maintenance_mode() ) { + return; + } + if ( locate_template( 'template-maintenance-mode.php' ) ) { get_template_part( 'template-maintenance-mode' ); } else { diff --git a/vipgo-helper.php b/vipgo-helper.php index 6fd7fd3..c6cdd02 100644 --- a/vipgo-helper.php +++ b/vipgo-helper.php @@ -27,3 +27,4 @@ function wpcom_vip_maintenance_mode_do_not_respond_503_for_services( $should_set } add_filter( 'vip_maintenance_mode_respond_503', 'wpcom_vip_maintenance_mode_do_not_respond_503_for_services', 30 ); +add_filter( 'vip_maintenance_mode_origin_status_code', fn() => 418 ); From b563f91ed0be64f2954e18ce477256c6c73e93aa Mon Sep 17 00:00:00 2001 From: Rinat Khaziev Date: Tue, 30 Jul 2024 21:04:41 -0500 Subject: [PATCH 2/4] Update code to 566 --- vipgo-helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vipgo-helper.php b/vipgo-helper.php index c6cdd02..33a6006 100644 --- a/vipgo-helper.php +++ b/vipgo-helper.php @@ -27,4 +27,4 @@ function wpcom_vip_maintenance_mode_do_not_respond_503_for_services( $should_set } add_filter( 'vip_maintenance_mode_respond_503', 'wpcom_vip_maintenance_mode_do_not_respond_503_for_services', 30 ); -add_filter( 'vip_maintenance_mode_origin_status_code', fn() => 418 ); +add_filter( 'vip_maintenance_mode_origin_status_code', fn() => 566 ); From 619f06c43f6d7e8a1a57860fc84e85965de9e86b Mon Sep 17 00:00:00 2001 From: Rinat Khaziev Date: Wed, 31 Jul 2024 11:19:24 -0500 Subject: [PATCH 3/4] Work around core logic that silently discarded a status code without description --- maintenance-mode.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/maintenance-mode.php b/maintenance-mode.php index 2ad4902..5a2acb6 100644 --- a/maintenance-mode.php +++ b/maintenance-mode.php @@ -53,7 +53,6 @@ function current_user_can_bypass_vip_maintenance_mode() { return current_user_can( $required_capability ); } - add_action( 'send_headers', 'vip_maintenance_mode_send_headers', PHP_INT_MAX ); function vip_maintenance_mode_send_headers() { @@ -73,7 +72,7 @@ function vip_maintenance_mode_send_headers() { $respond_origin_status_code = apply_filters( 'vip_maintenance_mode_origin_status_code', 503 ); if ( true === $respond_with_status_code ) { - status_header( $respond_origin_status_code ); + status_header( $respond_origin_status_code, 'Service Unavailable' ); /** * Filters the Retry-After value used to indicate how long the service is expected to be unavailable. * @@ -104,7 +103,6 @@ function vip_maintenance_mode_template_redirect() { if ( current_user_can_bypass_vip_maintenance_mode() ) { return; } - if ( locate_template( 'template-maintenance-mode.php' ) ) { get_template_part( 'template-maintenance-mode' ); } else { From 5ac2c66c94935238a9009cba666873874a2f645e Mon Sep 17 00:00:00 2001 From: Rinat Khaziev Date: Wed, 31 Jul 2024 11:19:59 -0500 Subject: [PATCH 4/4] Set the response code to 583 as per internal discussion --- vipgo-helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vipgo-helper.php b/vipgo-helper.php index 33a6006..95a7441 100644 --- a/vipgo-helper.php +++ b/vipgo-helper.php @@ -27,4 +27,4 @@ function wpcom_vip_maintenance_mode_do_not_respond_503_for_services( $should_set } add_filter( 'vip_maintenance_mode_respond_503', 'wpcom_vip_maintenance_mode_do_not_respond_503_for_services', 30 ); -add_filter( 'vip_maintenance_mode_origin_status_code', fn() => 566 ); +add_filter( 'vip_maintenance_mode_origin_status_code', fn() => 583 );