oont-contents/plugins/wp-optimize/includes/class-wp-optimize-http-error-codes-trait.php
2025-02-10 13:57:45 +01:00

188 lines
8.5 KiB
PHP

<?php
if (!defined('WPO_VERSION')) die('No direct access allowed');
if (!trait_exists('WP_Optimize_HTTP_Error_Codes_Trait')) :
trait WP_Optimize_HTTP_Error_Codes_Trait {
/**
* List of HTTP semantic codes taken from
* https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
* This list includes non-default HTTP codes that are not part of RFC 9110 but might appear on the wild
*
* @var array
*/
private $http_codes;
/**
* Initialize `$this->http_codes` table
*
* @return void
*/
private function set_codes() {
$this->http_codes = array(
100 => __('Continue', 'wp-optimize'),
101 => __('Switching Protocols', 'wp-optimize'),
102 => __('Processing (WebDAV; RFC 2518)', 'wp-optimize'),
103 => __('Early Hints (RFC 8297)', 'wp-optimize'),
200 => __('OK', 'wp-optimize'),
201 => __('Created', 'wp-optimize'),
202 => __('Accepted', 'wp-optimize'),
203 => __('Non-Authoritative Information (since HTTP/1.1)', 'wp-optimize'),
204 => __('No Content', 'wp-optimize'),
205 => __('Reset Content', 'wp-optimize'),
206 => __('Partial Content', 'wp-optimize'),
207 => __('Multi-Status (WebDAV; RFC 4918)', 'wp-optimize'),
208 => __('Already Reported (WebDAV; RFC 5842)', 'wp-optimize'),
226 => __('IM Used (RFC 3229)', 'wp-optimize'),
300 => __('Multiple Choices', 'wp-optimize'),
301 => __('Moved Permanently', 'wp-optimize'),
302 => __('Found (Previously "Moved temporarily")', 'wp-optimize'),
303 => __('See Other (since HTTP/1.1)', 'wp-optimize'),
304 => __('Not Modified', 'wp-optimize'),
305 => __('Use Proxy (since HTTP/1.1)', 'wp-optimize'),
306 => __('Switch Proxy', 'wp-optimize'),
307 => __('Temporary Redirect (since HTTP/1.1)', 'wp-optimize'),
308 => __('Permanent Redirect', 'wp-optimize'),
400 => __('Bad Request', 'wp-optimize'),
401 => __('Unauthorized', 'wp-optimize'),
402 => __('Payment Required', 'wp-optimize'),
403 => __('Forbidden', 'wp-optimize'),
404 => __('Not Found', 'wp-optimize'),
405 => __('Method Not Allowed', 'wp-optimize'),
406 => __('Not Acceptable', 'wp-optimize'),
407 => __('Proxy Authentication Required', 'wp-optimize'),
408 => __('Request Timeout', 'wp-optimize'),
409 => __('Conflict', 'wp-optimize'),
410 => __('Gone', 'wp-optimize'),
411 => __('Length Required', 'wp-optimize'),
412 => __('Precondition Failed', 'wp-optimize'),
413 => __('Payload Too Large', 'wp-optimize'),
414 => __('URI Too Long', 'wp-optimize'),
415 => __('Unsupported Media Type', 'wp-optimize'),
416 => __('Range Not Satisfiable', 'wp-optimize'),
417 => __('Expectation Failed', 'wp-optimize'),
418 => __('I\'m a teapot (RFC 2324, RFC 7168)', 'wp-optimize'),
421 => __('Misdirected Request', 'wp-optimize'),
422 => __('Unprocessable Entity', 'wp-optimize'),
423 => __('Locked (WebDAV; RFC 4918)', 'wp-optimize'),
424 => __('Failed Dependency (WebDAV; RFC 4918)', 'wp-optimize'),
425 => __('Too Early (RFC 8470)', 'wp-optimize'),
426 => __('Upgrade Required', 'wp-optimize'),
428 => __('Precondition Required (RFC 6585)', 'wp-optimize'),
429 => __('Too Many Requests (RFC 6585)', 'wp-optimize'),
431 => __('Request Header Fields Too Large (RFC 6585)', 'wp-optimize'),
451 => __('Unavailable For Legal Reasons (RFC 7725)', 'wp-optimize'),
500 => __('Internal Server Error', 'wp-optimize'),
501 => __('Not Implemented', 'wp-optimize'),
502 => __('Bad Gateway', 'wp-optimize'),
503 => __('Service Unavailable', 'wp-optimize'),
504 => __('Gateway Timeout', 'wp-optimize'),
505 => __('HTTP Version Not Supported', 'wp-optimize'),
506 => __('Variant Also Negotiates (RFC 2295)', 'wp-optimize'),
507 => __('Insufficient Storage (WebDAV; RFC 4918)', 'wp-optimize'),
508 => __('Loop Detected (WebDAV; RFC 5842)', 'wp-optimize'),
510 => __('Not Extended (RFC 2774)', 'wp-optimize'),
511 => __('Network Authentication Required (RFC 6585)', 'wp-optimize'),
218 => __('This is fine (Apache HTTP Server)', 'wp-optimize'),
419 => __('Page Expired (Laravel Framework)', 'wp-optimize'),
420 => __('Method Failure (Spring Framework)', 'wp-optimize'),
430 => __('Request Header Fields Too Large (Shopify)', 'wp-optimize'),
450 => __('Blocked by Windows Parental Controls (Microsoft)', 'wp-optimize'),
498 => __('Invalid Token (Esri)', 'wp-optimize'),
509 => __('Bandwidth Limit Exceeded (Apache Web Server/cPanel)', 'wp-optimize'),
529 => __('Site is overloaded', 'wp-optimize'),
530 => __('Site is frozen', 'wp-optimize'),
598 => __('(Informal convention) Network read timeout error', 'wp-optimize'),
599 => __('Network Connect Timeout Error', 'wp-optimize'),
440 => __('IIS - Login Time-out', 'wp-optimize'),
449 => __('IIS - Retry With', 'wp-optimize'),
444 => __('Nginx - No Response', 'wp-optimize'),
494 => __('Nginx - Request header too large', 'wp-optimize'),
495 => __('Nginx - SSL Certificate Error', 'wp-optimize'),
496 => __('Nginx - SSL Certificate Required', 'wp-optimize'),
497 => __('Nginx - HTTP Request Sent to HTTPS Port', 'wp-optimize'),
499 => __('Nginx - Client Closed Request', 'wp-optimize'),
520 => __('Cloudflare - Web Server Returned an Unknown Error', 'wp-optimize'),
521 => __('Cloudflare - Web Server Is Down', 'wp-optimize'),
522 => __('Cloudflare - Connection Timed Out', 'wp-optimize'),
523 => __('Cloudflare - Origin Is Unreachable', 'wp-optimize'),
524 => __('Cloudflare - A Timeout Occurred', 'wp-optimize'),
525 => __('Cloudflare - SSL Handshake Failed', 'wp-optimize'),
526 => __('Cloudflare - Invalid SSL Certificate', 'wp-optimize'),
527 => __('Cloudflare - Railgun Error', 'wp-optimize'),
460 => __('AWS Load Balancer - Connection Closed', 'wp-optimize'),
463 => __('AWS Load Balancer - Too Many Redirects', 'wp-optimize'),
464 => __('AWS Load Balancer - Incompatible Protocols', 'wp-optimize'),
561 => __('AWS Load Balancer - Unauthorized', 'wp-optimize'),
);
}
/**
* Get the current theme's style.css headers
*
* @return array|WP_Error
*/
protected function get_stylesheet_headers() {
static $headers;
if (isset($headers)) return $headers;
$style = get_template_directory_uri() . '/style.css';
/**
* Filters wp_remote_get parameters, when checking if browser cache is enabled.
*
* @param array $request_params Default parameters
*/
$request_params = apply_filters('wpoptimize_get_stylesheet_headers_args', array('timeout' => 10));
// trying to load style.css.
$response = wp_remote_get($style, $request_params);
if (is_wp_error($response)) return $response;
$response_code = wp_remote_retrieve_response_code($response);
if (200 != $response_code) {
$link = sprintf('<a href="%s" target="_blank">%s</a>', $style, $style);
if (401 == $response_code) {
$error = '<b>' . esc_html__('401 Unauthorized', 'wp-optimize') . '</b>';
$error_string = sprintf(esc_html__('The server responded with a %s error.', 'wp-optimize'), $error) . ' '
. esc_html__('This usually happens when the site requires authentication to access it.', 'wp-optimize') . ' '
. sprintf(esc_html__('Please temporarily disable authentication for the following URL: %s and retry.', 'wp-optimize'), $link);
} elseif (404 == $response_code) {
$error = '<b>' . esc_html__('404 File Not Found', 'wp-optimize') . '</b>';
$error_string = sprintf(esc_html__('The server responded with a %s error', 'wp-optimize'), $error) . ' '
. sprintf(esc_html__('Please temporarily restore the file under URL: %s, or just create an empty file and try again.', 'wp-optimize'), $link);
} else {
$error = '<b>' . $response_code . ' ' . $this->get_http_code_label($response_code) . '</b>';
$error_string = sprintf(esc_html__('The server responded with a %s error whilst trying to open the URL: %s.', 'wp-optimize'), $error, $link) . ' '
. esc_html__('Please contact your website administrator to resolve this.', 'wp-optimize') . ' ' . esc_html__('Once the issue is addressed, try again.', 'wp-optimize');
}
return new WP_Error('unauthorized', $error_string);
}
$headers = wp_remote_retrieve_headers($response);
if (is_object($headers) && method_exists($headers, 'getAll')) {
$headers = $headers->getAll();
}
return is_array($headers) ? $headers : array();
}
/**
* Return label for HTTP code
*
* @param int $code The HTTP code
* @return string
*/
private function get_http_code_label($code) {
if (!isset($this->http_codes)) {
$this->set_codes();
}
return $code . " " . !empty($this->http_codes[$code]) ? $this->http_codes[$code] : esc_html__("HTTP Code", "wp-optimize");
}
}
endif;