Webhooks have titles now.

This commit is contained in:
James Cole
2020-12-03 06:54:42 +01:00
parent eb80578e30
commit a539cfe4f2
11 changed files with 50 additions and 31 deletions

View File

@@ -66,8 +66,6 @@ class CreateController extends Controller
{
$data = $request->getData();
$webhook = $this->repository->store($data);
$manager = $this->getManager();
/** @var WebhookTransformer $transformer */
$transformer = app(WebhookTransformer::class);

View File

@@ -68,8 +68,6 @@ class EditController extends Controller
{
$data = $request->getData();
$webhook = $this->repository->update($webhook, $data);
$manager = $this->getManager();
/** @var WebhookTransformer $transformer */
$transformer = app(WebhookTransformer::class);

View File

@@ -43,6 +43,7 @@ class CreateRequest extends FormRequest
$deliveries = array_flip(config('firefly.webhooks.deliveries'));
$fields = [
'title' => ['title', 'string'],
'active' => ['active', 'boolean'],
'trigger' => ['trigger', 'string'],
'response' => ['response', 'string'],
@@ -51,15 +52,12 @@ class CreateRequest extends FormRequest
];
// this is the way.
$return = $this->getAllData($fields);
$return = $this->getAllData($fields);
$return['trigger'] = $triggers[$return['trigger']] ?? 0;
$return['response'] = $responses[$return['response']] ?? 0;
$return['delivery'] = $deliveries[$return['delivery']] ?? 0;
return [
'active' => $return['active'],
'trigger' => $triggers[$return['trigger']] ?? 0,
'response' => $responses[$return['response']] ?? 0,
'delivery' => $deliveries[$return['delivery']] ?? 0,
'url' => $return['url'],
];
return $return;
}
/**
@@ -74,6 +72,7 @@ class CreateRequest extends FormRequest
$deliveries = implode(',', array_values(config('firefly.webhooks.deliveries')));
return [
'title' => 'between:1,512',
'active' => [new IsBoolean],
'trigger' => sprintf('required|in:%s', $triggers),
'response' => sprintf('required|in:%s', $responses),

View File

@@ -43,6 +43,7 @@ class UpdateRequest extends FormRequest
$deliveries = array_flip(config('firefly.webhooks.deliveries'));
$fields = [
'title' => ['title', 'string'],
'active' => ['active', 'boolean'],
'trigger' => ['trigger', 'string'],
'response' => ['response', 'string'],
@@ -51,15 +52,12 @@ class UpdateRequest extends FormRequest
];
// this is the way.
$return = $this->getAllData($fields);
$return = $this->getAllData($fields);
$return['trigger'] = $triggers[$return['trigger']] ?? 0;
$return['response'] = $responses[$return['response']] ?? 0;
$return['delivery'] = $deliveries[$return['delivery']] ?? 0;
return [
'active' => $return['active'],
'trigger' => $triggers[$return['trigger']] ?? 0,
'response' => $responses[$return['response']] ?? 0,
'delivery' => $deliveries[$return['delivery']] ?? 0,
'url' => $return['url'],
];
return $return;
}
/**
@@ -72,9 +70,10 @@ class UpdateRequest extends FormRequest
$triggers = implode(',', array_values(config('firefly.webhooks.triggers')));
$responses = implode(',', array_values(config('firefly.webhooks.responses')));
$deliveries = implode(',', array_values(config('firefly.webhooks.deliveries')));
$webhook = $this->route()->parameter('webhook');
$webhook = $this->route()->parameter('webhook');
return [
'title' => 'between:1,512',
'active' => [new IsBoolean],
'trigger' => sprintf('required|in:%s', $triggers),
'response' => sprintf('required|in:%s', $responses),

View File

@@ -86,7 +86,7 @@ class WebhookMessageGenerator
*/
private function getWebhooks(): Collection
{
return $this->user->webhooks()->where('trigger', $this->trigger)->get(['webhooks.*']);
return $this->user->webhooks()->where('active', 1)->where('trigger', $this->trigger)->get(['webhooks.*']);
}
private function run(): void

View File

@@ -23,13 +23,15 @@ declare(strict_types=1);
namespace FireflyIII\Handlers\Events;
use FireflyIII\Events\UpdatedTransactionGroup;
use FireflyIII\Generator\Webhook\WebhookMessageGenerator;
use FireflyIII\Models\Account;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionType;
use FireflyIII\Models\Webhook;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
use FireflyIII\TransactionRules\Engine\RuleEngine;
use FireflyIII\TransactionRules\Engine\RuleEngineInterface;
use Illuminate\Support\Collection;
use Log;
/**
@@ -112,4 +114,18 @@ class UpdatedGroupEventHandler
$newRuleEngine->fire();
}
/**
* @param UpdatedTransactionGroup $updatedGroupEvent
*/
public function triggerWebhooks(UpdatedTransactionGroup $updatedGroupEvent): void
{
Log::debug('UpdatedGroupEventHandler:triggerWebhooks');
$group = $updatedGroupEvent->transactionGroup;
$user = $group->user;
$engine = new WebhookMessageGenerator;
$engine->setUser($user);
$engine->setTransactionGroups(new Collection([$group]));
$engine->setTrigger(Webhook::TRIGGER_UPDATE_TRANSACTION);
$engine->generateMessages();
}
}

View File

@@ -92,7 +92,7 @@ class WebhookEventHandler
$client = new Client;
$logs = $message->logs ?? [];
try {
$res = $client->request('GET', $message->webhook->url, $options);
$res = $client->request('POST', $message->webhook->url, $options);
$message->sent = true;
} catch (ClientException|Exception $e) {
Log::error($e->getMessage());
@@ -106,6 +106,7 @@ class WebhookEventHandler
$message->save();
Log::debug(sprintf('Webhook message #%d was sent. Status code %d', $message->id, $res->getStatusCode()));
Log::debug(sprintf('Webhook request body size: %d bytes', strlen($json)));
Log::debug(sprintf('Response body: %s', $res->getBody()));
}

View File

@@ -51,6 +51,10 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
* @method static \Illuminate\Database\Eloquent\Builder|WebhookMessage whereUuid($value)
* @method static \Illuminate\Database\Eloquent\Builder|WebhookMessage whereWebhookId($value)
* @mixin \Eloquent
* @property int $attempts
* @property array|null $logs
* @method static \Illuminate\Database\Eloquent\Builder|WebhookMessage whereAttempts($value)
* @method static \Illuminate\Database\Eloquent\Builder|WebhookMessage whereLogs($value)
*/
class WebhookMessage extends Model
{

View File

@@ -55,7 +55,8 @@ class WebhookRepository implements WebhookRepositoryInterface
{
$fullData = [
'user_id' => $this->user->id,
'active' => $data['active'],
'active' => $data['active'] ?? false,
'title' => $data['title'] ?? null,
'trigger' => $data['trigger'],
'response' => $data['response'],
'delivery' => $data['delivery'],

View File

@@ -53,6 +53,7 @@ class WebhookTransformer extends AbstractTransformer
'created_at' => $webhook->created_at->toAtomString(),
'updated_at' => $webhook->updated_at->toAtomString(),
'active' => $webhook->active,
'title' => $webhook->title,
'trigger' => $this->getEnum($webhook->trigger),
'response' => $this->getEnum($webhook->response),
'delivery' => $this->getEnum($webhook->delivery),