mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-05 04:03:26 +00:00
Fix some final webhook code.
This commit is contained in:
@@ -73,7 +73,7 @@ class CreateRequest extends FormRequest
|
|||||||
$deliveries = implode(',', array_values(config('firefly.webhooks.deliveries')));
|
$deliveries = implode(',', array_values(config('firefly.webhooks.deliveries')));
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'title' => 'between:1,512',
|
'title' => 'required|between:1,512|uniqueObjectForUser:webhooks,title',
|
||||||
'active' => [new IsBoolean],
|
'active' => [new IsBoolean],
|
||||||
'trigger' => sprintf('required|in:%s', $triggers),
|
'trigger' => sprintf('required|in:%s', $triggers),
|
||||||
'response' => sprintf('required|in:%s', $responses),
|
'response' => sprintf('required|in:%s', $responses),
|
||||||
|
@@ -57,6 +57,7 @@ class UpdateRequest extends FormRequest
|
|||||||
$return['trigger'] = $triggers[$return['trigger']] ?? 0;
|
$return['trigger'] = $triggers[$return['trigger']] ?? 0;
|
||||||
$return['response'] = $responses[$return['response']] ?? 0;
|
$return['response'] = $responses[$return['response']] ?? 0;
|
||||||
$return['delivery'] = $deliveries[$return['delivery']] ?? 0;
|
$return['delivery'] = $deliveries[$return['delivery']] ?? 0;
|
||||||
|
$return['secret'] = null !== $this->get('secret');
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -74,7 +75,7 @@ class UpdateRequest extends FormRequest
|
|||||||
$webhook = $this->route()->parameter('webhook');
|
$webhook = $this->route()->parameter('webhook');
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'title' => 'between:1,512',
|
'title' => sprintf('between:1,512|uniqueObjectForUser:webhooks,title,%d', $webhook->id),
|
||||||
'active' => [new IsBoolean],
|
'active' => [new IsBoolean],
|
||||||
'trigger' => sprintf('required|in:%s', $triggers),
|
'trigger' => sprintf('required|in:%s', $triggers),
|
||||||
'response' => sprintf('required|in:%s', $responses),
|
'response' => sprintf('required|in:%s', $responses),
|
||||||
|
@@ -53,6 +53,7 @@ class StandardMessageGenerator implements MessageGeneratorInterface
|
|||||||
*/
|
*/
|
||||||
public function generateMessages(): void
|
public function generateMessages(): void
|
||||||
{
|
{
|
||||||
|
Log::debug(__METHOD__);
|
||||||
// get the webhooks:
|
// get the webhooks:
|
||||||
$this->webhooks = $this->getWebhooks();
|
$this->webhooks = $this->getWebhooks();
|
||||||
|
|
||||||
@@ -105,6 +106,7 @@ class StandardMessageGenerator implements MessageGeneratorInterface
|
|||||||
foreach ($this->webhooks as $webhook) {
|
foreach ($this->webhooks as $webhook) {
|
||||||
$this->runWebhook($webhook);
|
$this->runWebhook($webhook);
|
||||||
}
|
}
|
||||||
|
Log::debug('Done with StandardMessageGenerator::run');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -86,7 +86,7 @@ class StoredGroupEventHandler
|
|||||||
*/
|
*/
|
||||||
public function triggerWebhooks(StoredTransactionGroup $storedGroupEvent): void
|
public function triggerWebhooks(StoredTransactionGroup $storedGroupEvent): void
|
||||||
{
|
{
|
||||||
Log::debug('StoredTransactionGroup:triggerWebhooks');
|
Log::debug(__METHOD__);
|
||||||
$group = $storedGroupEvent->transactionGroup;
|
$group = $storedGroupEvent->transactionGroup;
|
||||||
$user = $group->user;
|
$user = $group->user;
|
||||||
/** @var MessageGeneratorInterface $engine */
|
/** @var MessageGeneratorInterface $engine */
|
||||||
|
@@ -37,7 +37,7 @@ class WebhookEventHandler
|
|||||||
*/
|
*/
|
||||||
public function sendWebhookMessages(): void
|
public function sendWebhookMessages(): void
|
||||||
{
|
{
|
||||||
// kick offf the job!
|
// kick off the job!
|
||||||
$messages = WebhookMessage
|
$messages = WebhookMessage
|
||||||
::where('webhook_messages.sent', 0)
|
::where('webhook_messages.sent', 0)
|
||||||
->where('webhook_messages.errored', 0)
|
->where('webhook_messages.errored', 0)
|
||||||
|
@@ -30,7 +30,7 @@ use JsonException;
|
|||||||
*/
|
*/
|
||||||
class Sha3SignatureGenerator implements SignatureGeneratorInterface
|
class Sha3SignatureGenerator implements SignatureGeneratorInterface
|
||||||
{
|
{
|
||||||
private int $version = 0;
|
private int $version = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
|
@@ -110,6 +110,7 @@ class HomeController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(AccountRepositoryInterface $repository)
|
public function index(AccountRepositoryInterface $repository)
|
||||||
{
|
{
|
||||||
|
var_dump(\Str::random(24));
|
||||||
$types = config('firefly.accountTypesByIdentifier.asset');
|
$types = config('firefly.accountTypesByIdentifier.asset');
|
||||||
$count = $repository->count($types);
|
$count = $repository->count($types);
|
||||||
Log::channel('audit')->info('User visits homepage.');
|
Log::channel('audit')->info('User visits homepage.');
|
||||||
|
@@ -23,7 +23,7 @@ class SendWebhookMessage implements ShouldQueue
|
|||||||
/**
|
/**
|
||||||
* Create a new job instance.
|
* Create a new job instance.
|
||||||
*
|
*
|
||||||
* @return void
|
* @param WebhookMessage $message
|
||||||
*/
|
*/
|
||||||
public function __construct(WebhookMessage $message)
|
public function __construct(WebhookMessage $message)
|
||||||
{
|
{
|
||||||
|
@@ -82,7 +82,7 @@ class Webhook extends Model
|
|||||||
// delivery
|
// delivery
|
||||||
public const DELIVERY_JSON = 300;
|
public const DELIVERY_JSON = 300;
|
||||||
|
|
||||||
protected $fillable = ['active', 'trigger', 'response', 'delivery', 'user_id', 'url'];
|
protected $fillable = ['active', 'trigger', 'response', 'delivery', 'user_id', 'url', 'title', 'secret'];
|
||||||
|
|
||||||
protected $casts
|
protected $casts
|
||||||
= [
|
= [
|
||||||
|
@@ -25,6 +25,7 @@ namespace FireflyIII\Repositories\Webhook;
|
|||||||
use FireflyIII\Models\Webhook;
|
use FireflyIII\Models\Webhook;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use Str;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class WebhookRepository
|
* Class WebhookRepository
|
||||||
@@ -54,6 +55,7 @@ class WebhookRepository implements WebhookRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
public function store(array $data): Webhook
|
public function store(array $data): Webhook
|
||||||
{
|
{
|
||||||
|
$secret = $random = Str::random(24);
|
||||||
$fullData = [
|
$fullData = [
|
||||||
'user_id' => $this->user->id,
|
'user_id' => $this->user->id,
|
||||||
'active' => $data['active'] ?? false,
|
'active' => $data['active'] ?? false,
|
||||||
@@ -61,6 +63,7 @@ class WebhookRepository implements WebhookRepositoryInterface
|
|||||||
'trigger' => $data['trigger'],
|
'trigger' => $data['trigger'],
|
||||||
'response' => $data['response'],
|
'response' => $data['response'],
|
||||||
'delivery' => $data['delivery'],
|
'delivery' => $data['delivery'],
|
||||||
|
'secret' => $secret,
|
||||||
'url' => $data['url'],
|
'url' => $data['url'],
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -77,6 +80,12 @@ class WebhookRepository implements WebhookRepositoryInterface
|
|||||||
$webhook->response = $data['response'] ?? $webhook->response;
|
$webhook->response = $data['response'] ?? $webhook->response;
|
||||||
$webhook->delivery = $data['delivery'] ?? $webhook->delivery;
|
$webhook->delivery = $data['delivery'] ?? $webhook->delivery;
|
||||||
$webhook->url = $data['url'] ?? $webhook->url;
|
$webhook->url = $data['url'] ?? $webhook->url;
|
||||||
|
|
||||||
|
if (array_key_exists('secret', $data) && null !== $data['secret']) {
|
||||||
|
$secret = $random = Str::random(24);
|
||||||
|
$webhook->secret = $secret;
|
||||||
|
}
|
||||||
|
|
||||||
$webhook->save();
|
$webhook->save();
|
||||||
|
|
||||||
return $webhook;
|
return $webhook;
|
||||||
|
@@ -22,7 +22,9 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Services\Webhook;
|
namespace FireflyIII\Services\Webhook;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
use FireflyIII\Helpers\Webhook\SignatureGeneratorInterface;
|
use FireflyIII\Helpers\Webhook\SignatureGeneratorInterface;
|
||||||
|
use FireflyIII\Models\WebhookAttempt;
|
||||||
use FireflyIII\Models\WebhookMessage;
|
use FireflyIII\Models\WebhookMessage;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use GuzzleHttp\Exception\ClientException;
|
use GuzzleHttp\Exception\ClientException;
|
||||||
@@ -68,12 +70,17 @@ class StandardWebhookSender implements WebhookSenderInterface
|
|||||||
try {
|
try {
|
||||||
$json = json_encode($this->message->message, JSON_THROW_ON_ERROR);
|
$json = json_encode($this->message->message, JSON_THROW_ON_ERROR);
|
||||||
} catch (JsonException $e) {
|
} catch (JsonException $e) {
|
||||||
// TODO throw Firefly Exception
|
Log::error('Did not send message because of a JSON error.');
|
||||||
// $attempt = new WebhookAttempt;
|
Log::error($e->getMessage());
|
||||||
// $attempt->webhookMessage()->associate($this->message);
|
Log::error($e->getTraceAsString());
|
||||||
// $attempt->status_code = 0;
|
$attempt = new WebhookAttempt;
|
||||||
// $attempt->logs = sprintf('Json error: %s', $e->getMessage());
|
$attempt->webhookMessage()->associate($this->message);
|
||||||
// $attempt->save();
|
$attempt->status_code = 0;
|
||||||
|
$attempt->logs = sprintf('Json error: %s', $e->getMessage());
|
||||||
|
$attempt->save();
|
||||||
|
$this->message->errored = true;
|
||||||
|
$this->message->sent = false;
|
||||||
|
$this->message->save();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -89,7 +96,6 @@ class StandardWebhookSender implements WebhookSenderInterface
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
$client = new Client;
|
$client = new Client;
|
||||||
//$logs = $this->message->logs ?? [];
|
|
||||||
try {
|
try {
|
||||||
$res = $client->request('POST', $this->message->webhook->url, $options);
|
$res = $client->request('POST', $this->message->webhook->url, $options);
|
||||||
$this->message->sent = true;
|
$this->message->sent = true;
|
||||||
@@ -99,22 +105,13 @@ class StandardWebhookSender implements WebhookSenderInterface
|
|||||||
//$logs[] = sprintf('%s: %s', date('Y-m-d H:i:s'), $e->getMessage());
|
//$logs[] = sprintf('%s: %s', date('Y-m-d H:i:s'), $e->getMessage());
|
||||||
$this->message->errored = true;
|
$this->message->errored = true;
|
||||||
$this->message->sent = false;
|
$this->message->sent = false;
|
||||||
|
$this->message->save();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
$this->message->save();
|
$this->message->save();
|
||||||
|
|
||||||
// $attempt = new WebhookAttempt;
|
|
||||||
// $attempt->webhookMessage()->associate($this->message);
|
|
||||||
// $attempt->status_code = $res->getStatusCode();
|
|
||||||
// $attempt->logs = '';
|
|
||||||
// $attempt->response = (string)$res->getBody();
|
|
||||||
// $attempt->save();
|
|
||||||
|
|
||||||
Log::debug(sprintf('Webhook message #%d was sent. Status code %d', $this->message->id, $res->getStatusCode()));
|
Log::debug(sprintf('Webhook message #%d was sent. Status code %d', $this->message->id, $res->getStatusCode()));
|
||||||
Log::debug(sprintf('Webhook request body size: %d bytes', strlen($json)));
|
Log::debug(sprintf('Webhook request body size: %d bytes', strlen($json)));
|
||||||
Log::debug(sprintf('Response body: %s', $res->getBody()));
|
Log::debug(sprintf('Response body: %s', $res->getBody()));
|
||||||
|
|
||||||
//$sender
|
|
||||||
|
|
||||||
//$this->sendMessageV0($this->message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -55,6 +55,7 @@ class WebhookTransformer extends AbstractTransformer
|
|||||||
'updated_at' => $webhook->updated_at->toAtomString(),
|
'updated_at' => $webhook->updated_at->toAtomString(),
|
||||||
'active' => $webhook->active,
|
'active' => $webhook->active,
|
||||||
'title' => $webhook->title,
|
'title' => $webhook->title,
|
||||||
|
'secret' => $webhook->secret,
|
||||||
'trigger' => $this->getEnum($webhook->trigger),
|
'trigger' => $this->getEnum($webhook->trigger),
|
||||||
'response' => $this->getEnum($webhook->response),
|
'response' => $this->getEnum($webhook->response),
|
||||||
'delivery' => $this->getEnum($webhook->delivery),
|
'delivery' => $this->getEnum($webhook->delivery),
|
||||||
|
@@ -655,6 +655,7 @@ class FireflyValidator extends Validator
|
|||||||
->where('id', '!=', $existingId)
|
->where('id', '!=', $existingId)
|
||||||
->where('url', $url)->count();
|
->where('url', $url)->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user