forked from spatie/laravel-webhook-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWebhookProcessor.php
82 lines (59 loc) · 1.84 KB
/
WebhookProcessor.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
namespace Spatie\WebhookClient;
use Exception;
use Illuminate\Http\Request;
use Spatie\WebhookClient\Events\InvalidSignatureEvent;
use Spatie\WebhookClient\Exceptions\WebhookFailed;
use Spatie\WebhookClient\Models\WebhookCall;
class WebhookProcessor {
/**
* @var Request
*/
protected $request;
/**
* @var WebhookConfig
*/
protected $config;
public function __construct(Request $request, WebhookConfig $config)
{
$this->request = $request;
$this->config = $config;
}
public function process()
{
$this->ensureValidSignature();
if (! $this->config->webhookProfile->shouldProcess($this->request)) {
return $this->createResponse();
}
$webhookCall = $this->storeWebhook();
$this->processWebhook($webhookCall);
return $this->createResponse();
}
protected function ensureValidSignature()
{
if (! $this->config->signatureValidator->isValid($this->request, $this->config)) {
event(new InvalidSignatureEvent($this->request));
throw WebhookFailed::invalidSignature();
}
return $this;
}
protected function storeWebhook(): WebhookCall
{
return $this->config->webhookModel::storeWebhook($this->config, $this->request);
}
protected function processWebhook(WebhookCall $webhookCall): void
{
try {
$job = new $this->config->processWebhookJobClass($webhookCall);
$webhookCall->clearException();
dispatch($job);
} catch (Exception $exception) {
$webhookCall->saveException($exception);
throw $exception;
}
}
protected function createResponse()
{
return $this->config->webhookResponse->respondToValidWebhook($this->request, $this->config);
}
}