From 600f63097ec45defd066747ffa3d2653b1430450 Mon Sep 17 00:00:00 2001 From: Michael <33117529+mtelgkamp@users.noreply.github.com> Date: Thu, 15 Apr 2021 02:00:06 +0200 Subject: [PATCH] Add more variables for webhook json (#1016) * Add more variables for webhook json To allow status specific icons and a special Text defined in the json, not only provide #message as variable, but also #server_ip, #server_label, #server_last_offline_duration and #status. * Add #server_error as additional variable for webhooks --- src/includes/functions.inc.php | 13 ++++++------- src/lang/en_US.lang.php | 7 +++---- src/psm/Util/Server/Updater/StatusNotifier.php | 15 +++++++++++---- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index 1f432f51..f0560f17 100644 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -1075,23 +1075,22 @@ namespace { { protected $url; protected $json; - protected $message; /** * Send Webhook * * @return bool|string - * @var string $message + * @var array $replacements an array of the replacements * */ - public function sendWebhook($message) + public function sendWebhook($replacements) { $error = ""; $success = 1; - $this->setMessage($message); - $jsonMessage = strtr($this->json, array('#message' => $this->message)); + $replacements['#message'] = $this->stripTagsFromMessage($replacements['#message']); + $jsonMessage = strtr($this->json, $replacements); $curl = curl_init($this->url); curl_setopt($curl, CURLOPT_POST, 1); @@ -1167,7 +1166,7 @@ namespace { * @var string $message * */ - public function setMessage($message) + public function stripTagsFromMessage($message) { $message = str_replace("", "\n", $message); @@ -1178,7 +1177,7 @@ namespace { $message = str_replace("", "", $message); $message = str_replace("", "", $message); $message = strip_tags($message); - $this->message = (string)$message; + return (string)$message; } } } diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index ba697d5b..856fd14c 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -134,12 +134,11 @@ $sm_lang = array( 'jabber_label' => 'Jabber', 'jabber_description' => 'You Jabber account', 'webhook' => 'Webhook', - 'webhook_description' => 'Send a json webhook to a certain endpoint.
The json can be customized, e.g. { -"text":"servermon: #message"}', + 'webhook_description' => 'Send a json webhook to a certain endpoint.', 'webhook_url' => 'Webhook Url', 'webhook_url_description' => 'Webhook public endpoint url, should start with https://.', 'webhook_json' => 'Webhook JSON', - 'webhook_json_description' => 'Define a custom json, use #message as message variable.', + 'webhook_json_description' => 'Define a custom json, e.g. {"username": "servermon: #server_label" "text": "#server_ip is **#status**"}.
Available variables: #message, #server_error, #server_ip, #server_label, #server_last_offline_duration and #status', 'delete_title' => 'Delete User', 'delete_message' => 'Are you sure you want to delete user \'%1\'?', 'deleted' => 'User deleted.', @@ -320,7 +319,7 @@ $sm_lang = array( 'webhook_url' => 'Webhook Url', 'webhook_url_description' => 'Url to webhook endpoint', 'webhook_json' => 'Webhook Json', - 'webhook_json_description' => 'Customized Json, use #message as message variable.', + 'webhook_json_description' => 'Define a custom json. Available variables: #message, #server_error, #server_ip, #server_label, #server_last_offline_duration and #status', 'pushover_status' => 'Allow sending Pushover messages', 'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See their website for more info.', 'pushover_clone_app' => 'Click here to create your Pushover app', diff --git a/src/psm/Util/Server/Updater/StatusNotifier.php b/src/psm/Util/Server/Updater/StatusNotifier.php index 970bc714..a1f972d6 100644 --- a/src/psm/Util/Server/Updater/StatusNotifier.php +++ b/src/psm/Util/Server/Updater/StatusNotifier.php @@ -316,7 +316,7 @@ class StatusNotifier } return; } - + $this->combiNotification['notifications'][$method][$status][$this->server_id] = psm_parse_msg($this->status_new, $method . '_message', $this->server, true); } @@ -632,7 +632,14 @@ class StatusNotifier } $webhook->setUrl($user['webhook_url']); $webhook->setJson($user['webhook_json']); - $webhook->sendWebhook($message); + $webhook->sendWebhook([ + '#message' => $message, + '#server_ip' => $this->server['ip'], + '#server_label' => $this->server['label'], + '#server_error' => $this->server['error'], + '#server_last_offline_duration' => $this->status_new ? $this->server['last_offline_duration'] : '', + '#status' => $this->status_new ? 'online' : 'offline' + ]); } } /** @@ -699,12 +706,12 @@ class StatusNotifier if ((bool)psm_get_conf('telegram_add_url')) $message .= '
'.PSM_BASE_URL; $telegram = psm_build_telegram(); $telegram->setMessage($message); - + // Log if (psm_get_conf('log_telegram')) { $log_id = psm_add_log($this->server_id, 'telegram', $message); } - + foreach ($users as $user) { // Log if (!empty($log_id)) {