3 use BookStack\Activity\Models\Loggable;
4 use BookStack\Activity\Models\Webhook;
5 use BookStack\Activity\Tools\WebhookFormatter;
6 use BookStack\Facades\Theme;
7 use BookStack\Theming\ThemeEvents;
8 use BookStack\Users\Models\User;
10 // Format the usual BookStack webhook data into a format that
11 // pushover can accept.
12 function formatWebhookDataForPushover(array $defaultWebhookData): array
14 // Within here you can define and provide back any of the variables
15 // supported by the pushover API as defined here:
16 // https://pushover.net/api#messages
19 'token' => 'axxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // Replace value with an app/api token/key
20 'user' => 'uxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // Replace value with user/group key
21 'message' => $defaultWebhookData['text'],
23 // Any other optional parameters
24 'url' => $defaultWebhookData['url'] ?? null,
29 // Listen for webhook call events in BookStack, so we can manipulate the
30 // data before it's sent to the webhook endpoint.
31 Theme::listen(ThemeEvents::WEBHOOK_CALL_BEFORE, function (
34 string|Loggable $detail,
38 // Override the data format if going to a pushover API endpoint
39 if (str_starts_with($webhook->endpoint, 'https://api.pushover.net')) {
40 $defaultData = WebhookFormatter::getDefault($event, $webhook, $detail, $initiator, $initTime);
41 return formatWebhookDataForPushover($defaultData->format());
44 // Otherwise return null to leave the webhook data alone