BookStack/app/Http/Controllers/WebhookController.php

143 lines
4.0 KiB
PHP
Raw Normal View History

2021-12-07 14:55:11 +00:00
<?php
namespace BookStack\Http\Controllers;
use BookStack\Actions\ActivityType;
use BookStack\Actions\Queries\WebhooksAllPaginatedAndSorted;
use BookStack\Actions\Webhook;
2021-12-07 14:55:11 +00:00
use Illuminate\Http\Request;
class WebhookController extends Controller
{
public function __construct()
{
$this->middleware([
'can:settings-manage',
]);
}
2021-12-07 14:55:11 +00:00
/**
* Show all webhooks configured in the system.
*/
public function index(Request $request)
2021-12-07 14:55:11 +00:00
{
$listDetails = [
'search' => $request->get('search', ''),
'sort' => setting()->getForCurrentUser('webhooks_sort', 'name'),
'order' => setting()->getForCurrentUser('webhooks_sort_order', 'asc'),
];
$webhooks = (new WebhooksAllPaginatedAndSorted())->run(20, $listDetails);
$webhooks->appends(['search' => $listDetails['search']]);
2021-12-18 11:43:05 +00:00
$this->setPageTitle(trans('settings.webhooks'));
return view('settings.webhooks.index', [
'webhooks' => $webhooks,
'listDetails' => $listDetails,
]);
2021-12-07 14:55:11 +00:00
}
/**
* Show the view for creating a new webhook in the system.
*/
public function create()
{
$this->setPageTitle(trans('settings.webhooks_create'));
2022-01-06 12:18:11 +00:00
return view('settings.webhooks.create');
}
/**
* Store a new webhook in the system.
*/
public function store(Request $request)
{
$validated = $this->validate($request, [
2021-12-18 11:43:05 +00:00
'name' => ['required', 'max:150'],
'endpoint' => ['required', 'url', 'max:500'],
2021-12-18 11:43:05 +00:00
'events' => ['required', 'array'],
'active' => ['required'],
'timeout' => ['required', 'integer', 'min:1', 'max:600'],
]);
$webhook = new Webhook($validated);
$webhook->active = $validated['active'] === 'true';
$webhook->save();
$webhook->updateTrackedEvents(array_values($validated['events']));
$this->logActivity(ActivityType::WEBHOOK_CREATE, $webhook);
2021-12-18 11:43:05 +00:00
return redirect('/settings/webhooks');
}
/**
* Show the view to edit an existing webhook.
*/
public function edit(string $id)
{
/** @var Webhook $webhook */
$webhook = Webhook::query()
->with('trackedEvents')
->findOrFail($id);
$this->setPageTitle(trans('settings.webhooks_edit'));
return view('settings.webhooks.edit', ['webhook' => $webhook]);
}
/**
* Update an existing webhook with the provided request data.
*/
public function update(Request $request, string $id)
{
$validated = $this->validate($request, [
2021-12-18 11:43:05 +00:00
'name' => ['required', 'max:150'],
'endpoint' => ['required', 'url', 'max:500'],
2021-12-18 11:43:05 +00:00
'events' => ['required', 'array'],
'active' => ['required'],
'timeout' => ['required', 'integer', 'min:1', 'max:600'],
]);
/** @var Webhook $webhook */
$webhook = Webhook::query()->findOrFail($id);
$webhook->active = $validated['active'] === 'true';
$webhook->fill($validated)->save();
$webhook->updateTrackedEvents($validated['events']);
$this->logActivity(ActivityType::WEBHOOK_UPDATE, $webhook);
2021-12-18 11:43:05 +00:00
return redirect('/settings/webhooks');
}
/**
* Show the view to delete a webhook.
*/
public function delete(string $id)
{
/** @var Webhook $webhook */
$webhook = Webhook::query()->findOrFail($id);
2021-12-18 11:43:05 +00:00
$this->setPageTitle(trans('settings.webhooks_delete'));
return view('settings.webhooks.delete', ['webhook' => $webhook]);
}
/**
* Destroy a webhook from the system.
*/
public function destroy(string $id)
{
/** @var Webhook $webhook */
$webhook = Webhook::query()->findOrFail($id);
$webhook->trackedEvents()->delete();
$webhook->delete();
$this->logActivity(ActivityType::WEBHOOK_DELETE, $webhook);
2021-12-18 11:43:05 +00:00
return redirect('/settings/webhooks');
}
2021-12-07 14:55:11 +00:00
}