Edit File by line
/home/zeestwma/ceyloniy.../wp-conte.../plugins/extendif.../app/Shared/Services
File: HttpClient.php
<?php
[0] Fix | Delete
[1] Fix | Delete
/**
[2] Fix | Delete
* HTTP Client utility for making secure requests
[3] Fix | Delete
*/
[4] Fix | Delete
[5] Fix | Delete
namespace Extendify\Shared\Services;
[6] Fix | Delete
[7] Fix | Delete
use Extendify\Config;
[8] Fix | Delete
use Extendify\PartnerData;
[9] Fix | Delete
[10] Fix | Delete
defined('ABSPATH') || die('No direct access.');
[11] Fix | Delete
[12] Fix | Delete
/**
[13] Fix | Delete
* Utility class for making secure HTTP requests with WordPress data
[14] Fix | Delete
*/
[15] Fix | Delete
class HttpClient
[16] Fix | Delete
{
[17] Fix | Delete
/**
[18] Fix | Delete
* Build WordPress environment parameters
[19] Fix | Delete
*
[20] Fix | Delete
* @param \WP_REST_Request|null $request - Optional request object
[21] Fix | Delete
* @param array $additionalParams - Additional parameters to merge
[22] Fix | Delete
* @return array
[23] Fix | Delete
*/
[24] Fix | Delete
public static function buildParams($request = null, $additionalParams = [])
[25] Fix | Delete
{
[26] Fix | Delete
$params = [
[27] Fix | Delete
'wp_language' => \get_locale(),
[28] Fix | Delete
'wp_theme' => \get_option('template'),
[29] Fix | Delete
'wp_version' => \get_bloginfo('version'),
[30] Fix | Delete
'mode' => Config::$environment,
[31] Fix | Delete
'library_version' => Config::$version,
[32] Fix | Delete
'wp_active_plugins' => ($request && $request->get_method() === 'POST') ? \get_option('active_plugins') : [],
[33] Fix | Delete
'is_block_theme' => function_exists('wp_is_block_theme') ? wp_is_block_theme() : false,
[34] Fix | Delete
'sdk_partner' => PartnerData::$id,
[35] Fix | Delete
];
[36] Fix | Delete
[37] Fix | Delete
// Add devmode if header is set
[38] Fix | Delete
if ($request && $request->get_header('x_extendify_dev_mode') === 'true') {
[39] Fix | Delete
$params['devmode'] = true;
[40] Fix | Delete
}
[41] Fix | Delete
[42] Fix | Delete
return array_merge($params, $additionalParams);
[43] Fix | Delete
}
[44] Fix | Delete
[45] Fix | Delete
/**
[46] Fix | Delete
* Build headers
[47] Fix | Delete
*
[48] Fix | Delete
* @param \WP_REST_Request|null $request - Optional request object
[49] Fix | Delete
* @param array $additionalHeaders - Additional headers to merge
[50] Fix | Delete
* @return array
[51] Fix | Delete
*/
[52] Fix | Delete
public static function buildHeaders($request = null, $additionalHeaders = [])
[53] Fix | Delete
{
[54] Fix | Delete
$headers = [
[55] Fix | Delete
'Accept' => 'application/json',
[56] Fix | Delete
];
[57] Fix | Delete
[58] Fix | Delete
if ($request) {
[59] Fix | Delete
$headers['referer'] = $request->get_header('referer');
[60] Fix | Delete
$headers['user_agent'] = $request->get_header('user_agent');
[61] Fix | Delete
}
[62] Fix | Delete
[63] Fix | Delete
return array_filter(array_merge($headers, $additionalHeaders));
[64] Fix | Delete
}
[65] Fix | Delete
[66] Fix | Delete
/**
[67] Fix | Delete
* Make a GET request with WordPress parameters and proper error handling
[68] Fix | Delete
*
[69] Fix | Delete
* @param string $url - Base URL for the request
[70] Fix | Delete
* @param array $extra - Array containing 'params' and/or 'headers' keys for additional data
[71] Fix | Delete
* @param \WP_REST_Request|null $request - Optional request object for headers
[72] Fix | Delete
* @return array - Array containing 'response' data and 'code' status
[73] Fix | Delete
*/
[74] Fix | Delete
public static function get($url, $extra = [], $request = null)
[75] Fix | Delete
{
[76] Fix | Delete
$params = self::buildParams($request, $extra['params'] ?? []);
[77] Fix | Delete
$headers = self::buildHeaders($request, $extra['headers'] ?? []);
[78] Fix | Delete
[79] Fix | Delete
$requestUrl = \add_query_arg(
[80] Fix | Delete
\urlencode_deep(\urldecode_deep($params)),
[81] Fix | Delete
$url
[82] Fix | Delete
);
[83] Fix | Delete
[84] Fix | Delete
$response = \wp_safe_remote_get($requestUrl, ['headers' => $headers]);
[85] Fix | Delete
[86] Fix | Delete
// If there was an error, return 500
[87] Fix | Delete
if (\is_wp_error($response) || \wp_remote_retrieve_response_code($response) !== 200) {
[88] Fix | Delete
return ['response' => [], 'code' => 500];
[89] Fix | Delete
}
[90] Fix | Delete
[91] Fix | Delete
$result = json_decode(\wp_remote_retrieve_body($response), true);
[92] Fix | Delete
[93] Fix | Delete
// Validate JSON decode was successful and has expected structure
[94] Fix | Delete
if (json_last_error() !== JSON_ERROR_NONE || !is_array($result)) {
[95] Fix | Delete
return ['response' => [], 'code' => 500];
[96] Fix | Delete
}
[97] Fix | Delete
[98] Fix | Delete
return ['response' => $result, 'code' => 200];
[99] Fix | Delete
}
[100] Fix | Delete
[101] Fix | Delete
/**
[102] Fix | Delete
* Make a POST request with WordPress parameters and proper error handling
[103] Fix | Delete
*
[104] Fix | Delete
* @param string $url - Base URL for the request
[105] Fix | Delete
* @param array $extra - Array containing 'params' and/or 'headers' keys for additional data
[106] Fix | Delete
* @param \WP_REST_Request|null $request - Optional request object for headers
[107] Fix | Delete
* @param bool $encode - Whether to JSON encode the body (default: false)
[108] Fix | Delete
* @return array - Array containing 'response' data and 'code' status
[109] Fix | Delete
*/
[110] Fix | Delete
public static function post($url, $extra = [], $request = null, $encode = false)
[111] Fix | Delete
{
[112] Fix | Delete
$body = self::buildParams($request, $extra['params'] ?? []);
[113] Fix | Delete
$headers = self::buildHeaders($request, $extra['headers'] ?? []);
[114] Fix | Delete
[115] Fix | Delete
$response = \wp_safe_remote_post($url, [
[116] Fix | Delete
'headers' => $headers,
[117] Fix | Delete
'body' => $encode ? \wp_json_encode($body) : $body,
[118] Fix | Delete
]);
[119] Fix | Delete
[120] Fix | Delete
// If there was an error, return 500
[121] Fix | Delete
if (\is_wp_error($response) || \wp_remote_retrieve_response_code($response) !== 200) {
[122] Fix | Delete
return ['response' => [], 'code' => 500];
[123] Fix | Delete
}
[124] Fix | Delete
[125] Fix | Delete
$result = json_decode(\wp_remote_retrieve_body($response), true);
[126] Fix | Delete
[127] Fix | Delete
// Validate JSON decode was successful and has expected structure
[128] Fix | Delete
if (json_last_error() !== JSON_ERROR_NONE || !is_array($result)) {
[129] Fix | Delete
return ['response' => [], 'code' => 500];
[130] Fix | Delete
}
[131] Fix | Delete
[132] Fix | Delete
return ['response' => $result, 'code' => 200];
[133] Fix | Delete
}
[134] Fix | Delete
}
[135] Fix | Delete
[136] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function