Catch & convert Guzzle exception
authorEileen McNaughton <emcnaughton@wikimedia.org>
Sat, 11 Jun 2022 01:25:36 +0000 (13:25 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Sat, 11 Jun 2022 01:42:37 +0000 (13:42 +1200)
CRM/Extension/Browser.php

index 42fe8fa574772944e13b65e3305dc4aa49fd5927..4fe82f18e518efa33afd0b3ddb68c0277f9e6a93 100644 (file)
@@ -9,6 +9,8 @@
  +--------------------------------------------------------------------+
  */
 
+use GuzzleHttp\Exception\GuzzleException;
+
 /**
  * This class glues together the various parts of the extension
  * system.
@@ -250,7 +252,15 @@ class CRM_Extension_Browser {
     $url = $this->getRepositoryUrl() . $this->indexPath;
 
     $client = $this->getGuzzleClient();
-    $response = $client->request('GET', $url, ['sink' => $filename, 'timeout' => \Civi::settings()->get('http_timeout')]);
+    try {
+      $response = $client->request('GET', $url, [
+        'sink' => $filename,
+        'timeout' => \Civi::settings()->get('http_timeout'),
+      ]);
+    }
+    catch (GuzzleException $e) {
+      throw new CRM_Extension_Exception(ts('The CiviCRM public extensions directory at %1 could not be contacted - please check your webserver can make external HTTP requests', [1 => $this->getRepositoryUrl()]), 'connection_error');
+    }
     restore_error_handler();
 
     if ($response->getStatusCode() !== 200) {