1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-08-07 23:03:00 +03:00

Added active toggle to webhooks

To allow easy temporary de-activation without deletion or other
workarounds. Updated tests to cover.
This commit is contained in:
Dan Brown
2021-12-12 17:39:06 +00:00
parent 917598f7c8
commit dbd4281ae8
10 changed files with 41 additions and 8 deletions

View File

@@ -84,10 +84,13 @@ class ActivityLogger
*/
protected function dispatchWebhooks(string $type, $detail): void
{
$webhooks = Webhook::query()->whereHas('trackedEvents', function(Builder $query) use ($type) {
$query->where('event', '=', $type)
->orWhere('event', '=', 'all');
})->get();
$webhooks = Webhook::query()
->whereHas('trackedEvents', function(Builder $query) use ($type) {
$query->where('event', '=', $type)
->orWhere('event', '=', 'all');
})
->where('active', '=', true)
->get();
foreach ($webhooks as $webhook) {
dispatch(new DispatchWebhookJob($webhook, $type, $detail));

View File

@@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
* @property string $name
* @property string $endpoint
* @property Collection $trackedEvents
* @property bool $active
*/
class Webhook extends Model implements Loggable
{

View File

@@ -43,10 +43,12 @@ class WebhookController extends Controller
$validated = $this->validate($request, [
'name' => ['required', 'max:150'],
'endpoint' => ['required', 'url', 'max:500'],
'events' => ['required', 'array']
'events' => ['required', 'array'],
'active' => ['required'],
]);
$webhook = new Webhook($validated);
$webhook->active = $validated['active'] === 'true';
$webhook->save();
$webhook->updateTrackedEvents(array_values($validated['events']));
@@ -75,12 +77,14 @@ class WebhookController extends Controller
$validated = $this->validate($request, [
'name' => ['required', 'max:150'],
'endpoint' => ['required', 'url', 'max:500'],
'events' => ['required', 'array']
'events' => ['required', 'array'],
'active' => ['required'],
]);
/** @var Webhook $webhook */
$webhook = Webhook::query()->findOrFail($id);
$webhook->active = $validated['active'] === 'true';
$webhook->fill($validated)->save();
$webhook->updateTrackedEvents($validated['events']);