Skip to content

Commit

Permalink
Merge pull request #13946 from agileware/CIVICRM-1163
Browse files Browse the repository at this point in the history
Replaced get_headers functions call with Guzzle HTTP request.
  • Loading branch information
mattwire authored Apr 4, 2019
2 parents 18fe192 + 5b987d8 commit 563c82d
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 25 deletions.
24 changes: 24 additions & 0 deletions CRM/Utils/Check/Component.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
+--------------------------------------------------------------------+
*/

use GuzzleHttp\Client;

/**
*
* @package CRM
Expand Down Expand Up @@ -57,4 +59,26 @@ public function checkAll() {
return $messages;
}

/**
* Check if file exists on given URL.
*
* @param $url
* @return bool
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function fileExists($url, $timeout = 0.50) {
$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;
}

}
34 changes: 16 additions & 18 deletions CRM/Utils/Check/Component/Env.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ public function checkPhpVersion() {
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) {
Expand All @@ -60,9 +60,9 @@ public function checkPhpVersion() {
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) {
Expand All @@ -74,9 +74,9 @@ public function checkPhpVersion() {
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 {
Expand All @@ -88,9 +88,9 @@ public function checkPhpVersion() {
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'
);
}

Expand All @@ -111,9 +111,9 @@ public function checkPhpMysqli() {
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'
);
}

Expand Down Expand Up @@ -883,9 +883,7 @@ public function checkResourceUrl() {

// 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 <a href="%1">CiviCRM Resource URL</a>.',
Expand Down
12 changes: 5 additions & 7 deletions CRM/Utils/Check/Component/Security.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,7 @@ public function checkLogFileIsNotAccessible() {
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 <a href="%1">CiviCRM debug log</a> should not be downloadable.'
. '<br />' .
Expand Down Expand Up @@ -145,9 +144,9 @@ public function checkUploadsAreNotAccessible() {
2 => $privateDir,
3 => $heuristicUrl,
)),
ts('Private Files Readable'),
\Psr\Log\LogLevel::WARNING,
'fa-lock'
ts('Private Files Readable'),
\Psr\Log\LogLevel::WARNING,
'fa-lock'
);
}
}
Expand Down Expand Up @@ -365,8 +364,7 @@ public function isDirAccessible($dir, $url) {
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;
Expand Down
29 changes: 29 additions & 0 deletions tests/phpunit/CRM/Utils/Check/Component/EnvTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

/**
* Class CRM_Utils_Check_Component_EnvTest
* @package CiviCRM
* @subpackage CRM_Utils_Type
* @group headless
*/
class CRM_Utils_Check_Component_EnvTest extends CiviUnitTestCase {

public function setUp() {
parent::setUp();
}

/**
* File check test should fail if reached maximum timeout.
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function testResourceUrlCheck() {
$check = new \CRM_Utils_Check_Component_Env();
$failRequest = $check->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.');

}

}

0 comments on commit 563c82d

Please sign in to comment.