mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
Added webhook call http exception handling
Will now catch and log errors on events such as http timeouts. For #3122
This commit is contained in:
parent
fe54c7f27a
commit
6e18620a0a
@ -73,10 +73,16 @@ class DispatchWebhookJob implements ShouldQueue
|
|||||||
$themeResponse = Theme::dispatch(ThemeEvents::WEBHOOK_CALL_BEFORE, $this->event, $this->webhook, $this->detail);
|
$themeResponse = Theme::dispatch(ThemeEvents::WEBHOOK_CALL_BEFORE, $this->event, $this->webhook, $this->detail);
|
||||||
$webhookData = $themeResponse ?? $this->buildWebhookData();
|
$webhookData = $themeResponse ?? $this->buildWebhookData();
|
||||||
|
|
||||||
$response = Http::asJson()
|
try {
|
||||||
->withOptions(['allow_redirects' => ['strict' => true]])
|
$response = Http::asJson()
|
||||||
->timeout(3)
|
->withOptions(['allow_redirects' => ['strict' => true]])
|
||||||
->post($this->webhook->endpoint, $webhookData);
|
->timeout(3)
|
||||||
|
->post($this->webhook->endpoint, $webhookData);
|
||||||
|
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
Log::error("Webhook call to endpoint {$this->webhook->endpoint} failed with error \"{$exception->getMessage()}\"");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ($response->failed()) {
|
if ($response->failed()) {
|
||||||
Log::error("Webhook call to endpoint {$this->webhook->endpoint} failed with status {$response->status()}");
|
Log::error("Webhook call to endpoint {$this->webhook->endpoint} failed with status {$response->status()}");
|
||||||
|
@ -60,6 +60,18 @@ class WebhookCallTest extends TestCase
|
|||||||
$this->assertTrue($logger->hasError('Webhook call to endpoint https://wh.example.com failed with status 500'));
|
$this->assertTrue($logger->hasError('Webhook call to endpoint https://wh.example.com failed with status 500'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_webhook_call_exception_is_caught_and_logged()
|
||||||
|
{
|
||||||
|
Http::shouldReceive('asJson')->andThrow(new \Exception('Failed to perform request'));
|
||||||
|
|
||||||
|
$logger = $this->withTestLogger();
|
||||||
|
$this->newWebhook(['active' => true, 'endpoint' => 'https://wh.example.com'], ['all']);
|
||||||
|
|
||||||
|
$this->runEvent(ActivityType::ROLE_CREATE);
|
||||||
|
|
||||||
|
$this->assertTrue($logger->hasError('Webhook call to endpoint https://wh.example.com failed with error "Failed to perform request"'));
|
||||||
|
}
|
||||||
|
|
||||||
public function test_webhook_call_data_format()
|
public function test_webhook_call_data_format()
|
||||||
{
|
{
|
||||||
Http::fake([
|
Http::fake([
|
||||||
|
Loading…
Reference in New Issue
Block a user