From 4094935aeace33eb8caf8fdcd7a76d992bdc6682 Mon Sep 17 00:00:00 2001 From: Alok Patel Date: Thu, 4 Apr 2019 08:32:09 +0530 Subject: [PATCH] CIVICRM-1163: Replaced get_headers functions call with Guzzle HTTP request. --- CRM/Utils/Check/Component.php | 24 +++++++++++++ CRM/Utils/Check/Component/Env.php | 34 +++++++++---------- CRM/Utils/Check/Component/Security.php | 12 +++---- .../CRM/Utils/Check/Component/EnvTest.php | 29 ++++++++++++++++ 4 files changed, 74 insertions(+), 25 deletions(-) create mode 100644 tests/phpunit/CRM/Utils/Check/Component/EnvTest.php diff --git a/CRM/Utils/Check/Component.php b/CRM/Utils/Check/Component.php index 74c9a836ee..f1a8b35a62 100644 --- a/CRM/Utils/Check/Component.php +++ b/CRM/Utils/Check/Component.php @@ -25,6 +25,8 @@ +--------------------------------------------------------------------+ */ +use GuzzleHttp\Client; + /** * * @package CRM @@ -57,4 +59,26 @@ abstract class CRM_Utils_Check_Component { return $messages; } + /** + * Check if file exists on given URL. + * + * @param $url + * @return bool + * @throws \GuzzleHttp\Exception\GuzzleException + */ + public function fileExists($url, $timeout = 0.25) { + $fileExists = FALSE; + try { + $guzzleClient = new GuzzleHttp\Client(); + $guzzleResponse = $guzzleClient->request('GET', $url, array( + 'timeout' => $timeout, + )); + $fileExists = ($guzzleResponse->getStatusCode() == 200); + } + catch (Exception $e) { + echo $e->getMessage(); + } + return $fileExists; + } + } diff --git a/CRM/Utils/Check/Component/Env.php b/CRM/Utils/Check/Component/Env.php index 6ebef2febf..8d75242fb5 100644 --- a/CRM/Utils/Check/Component/Env.php +++ b/CRM/Utils/Check/Component/Env.php @@ -47,9 +47,9 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { 1 => $phpVersion, 2 => CRM_Upgrade_Incremental_General::RECOMMENDED_PHP_VER, )), - ts('PHP Up-to-Date'), - \Psr\Log\LogLevel::INFO, - 'fa-server' + ts('PHP Up-to-Date'), + \Psr\Log\LogLevel::INFO, + 'fa-server' ); } elseif (version_compare($phpVersion, CRM_Upgrade_Incremental_General::MIN_RECOMMENDED_PHP_VER) >= 0) { @@ -60,9 +60,9 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { 1 => $phpVersion, 2 => CRM_Upgrade_Incremental_General::RECOMMENDED_PHP_VER, )), - ts('PHP Out-of-Date'), - \Psr\Log\LogLevel::NOTICE, - 'fa-server' + ts('PHP Out-of-Date'), + \Psr\Log\LogLevel::NOTICE, + 'fa-server' ); } elseif (version_compare($phpVersion, CRM_Upgrade_Incremental_General::MIN_INSTALL_PHP_VER) >= 0) { @@ -74,9 +74,9 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { 2 => CRM_Upgrade_Incremental_General::MIN_RECOMMENDED_PHP_VER, 3 => CRM_Upgrade_Incremental_General::RECOMMENDED_PHP_VER, )), - ts('PHP Out-of-Date'), - \Psr\Log\LogLevel::WARNING, - 'fa-server' + ts('PHP Out-of-Date'), + \Psr\Log\LogLevel::WARNING, + 'fa-server' ); } else { @@ -88,9 +88,9 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { 2 => CRM_Upgrade_Incremental_General::MIN_RECOMMENDED_PHP_VER, 3 => CRM_Upgrade_Incremental_General::RECOMMENDED_PHP_VER, )), - ts('PHP Out-of-Date'), - \Psr\Log\LogLevel::ERROR, - 'fa-server' + ts('PHP Out-of-Date'), + \Psr\Log\LogLevel::ERROR, + 'fa-server' ); } @@ -111,9 +111,9 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { 1 => 'https://civicrm.org/blog/totten/psa-please-verify-php-extension-mysqli', 2 => 'mysqli', )), - ts('Forward Compatibility: Enable "mysqli"'), - \Psr\Log\LogLevel::WARNING, - 'fa-server' + ts('Forward Compatibility: Enable "mysqli"'), + \Psr\Log\LogLevel::WARNING, + 'fa-server' ); } @@ -883,9 +883,7 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { // Does arrow.png exist where we expect it? $arrowUrl = CRM_Core_Config::singleton()->userFrameworkResourceURL . 'packages/jquery/css/images/arrow.png'; - $headers = get_headers($arrowUrl); - $fileExists = stripos($headers[0], "200 OK") ? 1 : 0; - if ($fileExists === FALSE) { + if ($this->fileExists($arrowUrl) === FALSE) { $messages[] = new CRM_Utils_Check_Message( __FUNCTION__, ts('The Resource URL is not set correctly. Please set the CiviCRM Resource URL.', diff --git a/CRM/Utils/Check/Component/Security.php b/CRM/Utils/Check/Component/Security.php index 262b36ac16..caf32ddbae 100644 --- a/CRM/Utils/Check/Component/Security.php +++ b/CRM/Utils/Check/Component/Security.php @@ -86,8 +86,7 @@ class CRM_Utils_Check_Component_Security extends CRM_Utils_Check_Component { if (count($log_path) > 1) { $url[] = $log_path[1]; $log_url = implode($filePathMarker, $url); - $headers = @get_headers($log_url); - if (stripos($headers[0], '200')) { + if ($this->fileExists($log_url)) { $docs_url = $this->createDocUrl('checkLogFileIsNotAccessible'); $msg = 'The CiviCRM debug log should not be downloadable.' . '
' . @@ -145,9 +144,9 @@ class CRM_Utils_Check_Component_Security extends CRM_Utils_Check_Component { 2 => $privateDir, 3 => $heuristicUrl, )), - ts('Private Files Readable'), - \Psr\Log\LogLevel::WARNING, - 'fa-lock' + ts('Private Files Readable'), + \Psr\Log\LogLevel::WARNING, + 'fa-lock' ); } } @@ -365,8 +364,7 @@ class CRM_Utils_Check_Component_Security extends CRM_Utils_Check_Component { return FALSE; } - $headers = @get_headers("$url/$file"); - if (stripos($headers[0], '200')) { + if ($this->fileExists("$url/$file")) { $content = @file_get_contents("$url/$file"); if (preg_match('/delete me/', $content)) { $result = TRUE; diff --git a/tests/phpunit/CRM/Utils/Check/Component/EnvTest.php b/tests/phpunit/CRM/Utils/Check/Component/EnvTest.php new file mode 100644 index 0000000000..cb9a3201c3 --- /dev/null +++ b/tests/phpunit/CRM/Utils/Check/Component/EnvTest.php @@ -0,0 +1,29 @@ +fileExists('https://civicrm.org', 0.001); + $successRequest = $check->fileExists('https://civicrm.org', 0); + + $this->assertEquals(FALSE, $failRequest, 'Request should fail for minimum timeout.'); + $this->assertEquals(TRUE, $successRequest, 'Request should not fail for infinite timeout.'); + + } + +} -- 2.25.1