Add log messages and catch exception

This commit is contained in:
James Cole
2021-11-19 15:47:19 +01:00
parent babf462bcf
commit 9c8b31fdbb
3 changed files with 29 additions and 2 deletions

View File

@@ -38,9 +38,16 @@ class Sha3SignatureGenerator implements SignatureGeneratorInterface
/**
* @inheritDoc
* @throws FireflyException
*/
public function generate(WebhookMessage $message): string
{
// webhook is deleted
if (null === $message->webhook) {
throw new FireflyException('Part of a deleted webhook.');
}
try {
$json = json_encode($message->message, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
@@ -48,7 +55,7 @@ class Sha3SignatureGenerator implements SignatureGeneratorInterface
Log::error(sprintf('JSON value: %s', $message->message));
Log::error($e->getMessage());
Log::error($e->getTraceAsString());
throw new FireflyException('Could not generate JSON for SHA3 hash.', $e);
throw new FireflyException('Could not generate JSON for SHA3 hash.', 0, $e);
}
// signature v1 is generated using the following structure:

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Jobs;
use Log;
use FireflyIII\Models\WebhookMessage;
use FireflyIII\Services\Webhook\WebhookSenderInterface;
use Illuminate\Bus\Queueable;
@@ -58,6 +59,7 @@ class SendWebhookMessage implements ShouldQueue
*/
public function handle(): void
{
Log::debug(sprintf('Now handling webhook message #%d', $this->message->id));
// send job!
$sender = app(WebhookSenderInterface::class);
$sender->setMessage($this->message);

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Services\Webhook;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Webhook\SignatureGeneratorInterface;
use FireflyIII\Models\WebhookAttempt;
use FireflyIII\Models\WebhookMessage;
@@ -55,7 +56,24 @@ class StandardWebhookSender implements WebhookSenderInterface
// have the signature generator generate a signature. If it fails, the error thrown will
// end up in send() to be caught.
$signatureGenerator = app(SignatureGeneratorInterface::class);
$signature = $signatureGenerator->generate($this->message);
try {
$signature = $signatureGenerator->generate($this->message);
} catch(FireflyException $e) {
Log::error('Did not send message because of a Firefly III Exception.');
Log::error($e->getMessage());
Log::error($e->getTraceAsString());
$attempt = new WebhookAttempt;
$attempt->webhookMessage()->associate($this->message);
$attempt->status_code = 0;
$attempt->logs = sprintf('Exception: %s', $e->getMessage());
$attempt->save();
$this->message->errored = true;
$this->message->sent = false;
$this->message->save();
return;
}
Log::debug(sprintf('Trying to send webhook message #%d', $this->message->id));