2021-12-07 09:55:11 -05:00
|
|
|
<?php
|
|
|
|
|
2023-05-17 12:56:55 -04:00
|
|
|
namespace BookStack\Activity\Controllers;
|
2021-12-07 09:55:11 -05:00
|
|
|
|
2023-05-17 12:56:55 -04:00
|
|
|
use BookStack\Activity\ActivityType;
|
|
|
|
use BookStack\Activity\Models\Webhook;
|
|
|
|
use BookStack\Activity\Queries\WebhooksAllPaginatedAndSorted;
|
2023-05-18 15:53:39 -04:00
|
|
|
use BookStack\Http\Controller;
|
2022-10-30 11:16:06 -04:00
|
|
|
use BookStack\Util\SimpleListOptions;
|
2021-12-07 09:55:11 -05:00
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
|
|
|
class WebhookController extends Controller
|
|
|
|
{
|
2021-12-08 09:29:42 -05:00
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
$this->middleware([
|
|
|
|
'can:settings-manage',
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
2021-12-07 09:55:11 -05:00
|
|
|
/**
|
|
|
|
* Show all webhooks configured in the system.
|
|
|
|
*/
|
2022-10-30 08:02:06 -04:00
|
|
|
public function index(Request $request)
|
2021-12-07 09:55:11 -05:00
|
|
|
{
|
2022-10-30 11:16:06 -04:00
|
|
|
$listOptions = SimpleListOptions::fromRequest($request, 'webhooks')->withSortOptions([
|
|
|
|
'name' => trans('common.sort_name'),
|
|
|
|
'endpoint' => trans('settings.webhooks_endpoint'),
|
|
|
|
'created_at' => trans('common.sort_created_at'),
|
|
|
|
'updated_at' => trans('common.sort_updated_at'),
|
|
|
|
'active' => trans('common.status'),
|
|
|
|
]);
|
2022-10-30 08:02:06 -04:00
|
|
|
|
2022-10-30 11:16:06 -04:00
|
|
|
$webhooks = (new WebhooksAllPaginatedAndSorted())->run(20, $listOptions);
|
|
|
|
$webhooks->appends($listOptions->getPaginationAppends());
|
2021-12-18 06:43:05 -05:00
|
|
|
|
2022-01-04 08:33:24 -05:00
|
|
|
$this->setPageTitle(trans('settings.webhooks'));
|
|
|
|
|
2022-10-30 08:02:06 -04:00
|
|
|
return view('settings.webhooks.index', [
|
|
|
|
'webhooks' => $webhooks,
|
2022-10-30 11:16:06 -04:00
|
|
|
'listOptions' => $listOptions,
|
2022-10-30 08:02:06 -04:00
|
|
|
]);
|
2021-12-07 09:55:11 -05:00
|
|
|
}
|
2021-12-08 09:29:42 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Show the view for creating a new webhook in the system.
|
|
|
|
*/
|
|
|
|
public function create()
|
|
|
|
{
|
2022-01-04 08:33:24 -05:00
|
|
|
$this->setPageTitle(trans('settings.webhooks_create'));
|
2022-01-06 07:18:11 -05:00
|
|
|
|
2021-12-08 09:29:42 -05:00
|
|
|
return view('settings.webhooks.create');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Store a new webhook in the system.
|
|
|
|
*/
|
|
|
|
public function store(Request $request)
|
|
|
|
{
|
2021-12-08 12:35:58 -05:00
|
|
|
$validated = $this->validate($request, [
|
2021-12-18 06:43:05 -05:00
|
|
|
'name' => ['required', 'max:150'],
|
2021-12-08 12:35:58 -05:00
|
|
|
'endpoint' => ['required', 'url', 'max:500'],
|
2021-12-18 06:43:05 -05:00
|
|
|
'events' => ['required', 'array'],
|
|
|
|
'active' => ['required'],
|
2022-01-03 14:42:48 -05:00
|
|
|
'timeout' => ['required', 'integer', 'min:1', 'max:600'],
|
2021-12-08 12:35:58 -05:00
|
|
|
]);
|
|
|
|
|
|
|
|
$webhook = new Webhook($validated);
|
2021-12-12 12:39:06 -05:00
|
|
|
$webhook->active = $validated['active'] === 'true';
|
2021-12-08 12:35:58 -05:00
|
|
|
$webhook->save();
|
|
|
|
$webhook->updateTrackedEvents(array_values($validated['events']));
|
|
|
|
|
2021-12-08 09:29:42 -05:00
|
|
|
$this->logActivity(ActivityType::WEBHOOK_CREATE, $webhook);
|
2021-12-18 06:43:05 -05:00
|
|
|
|
2021-12-08 09:29:42 -05:00
|
|
|
return redirect('/settings/webhooks');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Show the view to edit an existing webhook.
|
|
|
|
*/
|
|
|
|
public function edit(string $id)
|
|
|
|
{
|
|
|
|
/** @var Webhook $webhook */
|
2021-12-08 12:35:58 -05:00
|
|
|
$webhook = Webhook::query()
|
|
|
|
->with('trackedEvents')
|
|
|
|
->findOrFail($id);
|
2021-12-08 09:29:42 -05:00
|
|
|
|
2022-01-04 08:33:24 -05:00
|
|
|
$this->setPageTitle(trans('settings.webhooks_edit'));
|
|
|
|
|
2021-12-08 09:29:42 -05:00
|
|
|
return view('settings.webhooks.edit', ['webhook' => $webhook]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Update an existing webhook with the provided request data.
|
|
|
|
*/
|
|
|
|
public function update(Request $request, string $id)
|
|
|
|
{
|
2021-12-08 12:35:58 -05:00
|
|
|
$validated = $this->validate($request, [
|
2021-12-18 06:43:05 -05:00
|
|
|
'name' => ['required', 'max:150'],
|
2021-12-08 12:35:58 -05:00
|
|
|
'endpoint' => ['required', 'url', 'max:500'],
|
2021-12-18 06:43:05 -05:00
|
|
|
'events' => ['required', 'array'],
|
|
|
|
'active' => ['required'],
|
2022-01-03 14:42:48 -05:00
|
|
|
'timeout' => ['required', 'integer', 'min:1', 'max:600'],
|
2021-12-08 12:35:58 -05:00
|
|
|
]);
|
|
|
|
|
2021-12-08 09:29:42 -05:00
|
|
|
/** @var Webhook $webhook */
|
|
|
|
$webhook = Webhook::query()->findOrFail($id);
|
|
|
|
|
2021-12-12 12:39:06 -05:00
|
|
|
$webhook->active = $validated['active'] === 'true';
|
2021-12-08 12:35:58 -05:00
|
|
|
$webhook->fill($validated)->save();
|
|
|
|
$webhook->updateTrackedEvents($validated['events']);
|
2021-12-08 09:29:42 -05:00
|
|
|
|
|
|
|
$this->logActivity(ActivityType::WEBHOOK_UPDATE, $webhook);
|
2021-12-18 06:43:05 -05:00
|
|
|
|
2021-12-08 09:29:42 -05: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 06:43:05 -05:00
|
|
|
|
2022-01-04 08:33:24 -05:00
|
|
|
$this->setPageTitle(trans('settings.webhooks_delete'));
|
|
|
|
|
2021-12-08 09:29:42 -05:00
|
|
|
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);
|
|
|
|
|
2021-12-08 12:35:58 -05:00
|
|
|
$webhook->trackedEvents()->delete();
|
2021-12-08 09:29:42 -05:00
|
|
|
$webhook->delete();
|
|
|
|
|
|
|
|
$this->logActivity(ActivityType::WEBHOOK_DELETE, $webhook);
|
2021-12-18 06:43:05 -05:00
|
|
|
|
2021-12-08 09:29:42 -05:00
|
|
|
return redirect('/settings/webhooks');
|
|
|
|
}
|
2021-12-07 09:55:11 -05:00
|
|
|
}
|