From 14509ee602a89578bd669973e2b21f7b0fd11a62 Mon Sep 17 00:00:00 2001 From: TimZ99 Date: Mon, 26 Feb 2018 23:10:44 +0100 Subject: [PATCH] Added support for Telegram --- src/includes/functions.inc.php | 52 ++++++++++++++++- src/includes/psmconfig.inc.php | 5 ++ src/lang/en_US.lang.php | 22 +++++++ .../Config/Controller/ConfigController.php | 51 ++++++++++++++++- .../Install/Controller/InstallController.php | 1 + .../Controller/AbstractServerController.php | 2 + .../Server/Controller/LogController.php | 3 +- .../Server/Controller/ServerController.php | 6 +- .../User/Controller/ProfileController.php | 10 +++- .../Module/User/Controller/UserController.php | 10 +++- src/psm/Util/Install/Installer.php | 35 ++++++++++-- src/psm/Util/Server/UpdateManager.php | 6 +- .../Util/Server/Updater/StatusNotifier.php | 54 +++++++++++++++++- .../default/module/config/config.tpl.html | 33 +++++++++++ .../default/module/server/log.tpl.html | 1 + .../module/server/server/list.tpl.html | 18 +++++- .../module/server/server/update.tpl.html | 11 ++++ .../module/server/server/view.tpl.html | 6 +- .../default/module/user/profile.tpl.html | 14 ++++- .../default/module/user/user/update.tpl.html | 10 ++++ static/css/style.css | 6 +- .../img/glyphicons-halflings-white.png | Bin 12298 -> 33145 bytes .../img/glyphicons-halflings.png | Bin 19800 -> 43656 bytes 23 files changed, 328 insertions(+), 28 deletions(-) diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index b509929d..b7717c28 100644 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -491,6 +491,17 @@ function psm_build_pushover() { return $pushover; } +/** + * + * @return \psm\Txtmsg\TxtmsgInterface + */ +function psm_build_telegram() { + $telegram = new \Telegram(); + $telegram->setToken(psm_get_conf('telegram_api_token')); + + return $telegram; +} + /** * Prepare a new SMS util. * @@ -712,7 +723,7 @@ function psm_password_decrypt($key, $encryptedString) if (empty($key)) throw new \InvalidArgumentException('invalid_encryption_key'); - + $data = base64_decode($encryptedString); $iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)); @@ -728,4 +739,41 @@ function psm_password_decrypt($key, $encryptedString) ); return $decrypted; -} \ No newline at end of file +} + +/** + * Send notification to Telegram + * + * @return string + * @author Tim Zandbergen + */ + class telegram + { + private $_token; + private $_user; + private $_message; + private $_url; + + public function setToken ($token) { + $this->_token = (string)$token; + + } + public function setUser ($user) { + $this->_user = (string)$user; + } + public function setMessage ($message) { + $this->_message = (string)$message; + } + public function send () { + if(!Empty($this->_token) && !Empty($this->_user) && !Empty($this->_message)) { + $this->_url = 'https://api.telegram.org/bot' . urlencode($this->_token) . '/sendMessage?chat_id=' . urlencode($this->_user) . '&text=' . urlencode($this->_message); + } + $con = curl_init($this->_url); + curl_setopt($con, CURLOPT_RETURNTRANSFER, true); + curl_setopt($con, CURLOPT_CONNECTTIMEOUT, 5); + curl_setopt($con, CURLOPT_TIMEOUT, 60); + $response = curl_exec($con); + $response = json_decode($response, true); + return $response; + } + } diff --git a/src/includes/psmconfig.inc.php b/src/includes/psmconfig.inc.php index b185cd78..cb89908c 100644 --- a/src/includes/psmconfig.inc.php +++ b/src/includes/psmconfig.inc.php @@ -107,6 +107,11 @@ define('PSM_CURL_TIMEOUT', 10); */ define('PSM_PUSHOVER_CLONE_URL', 'https://pushover.net/apps/clone/php_server_monitor'); +/** + * Get chat id for Telegram service. + */ +define('PSM_TELEGRAM_GET_ID_URL', 'https://telegram.me/cid_bot'); + /** * By defining the PSM_BASE_URL, you will force the psm_build_url() to use this. * Useful for cronjobs if it cannot be auto-detected. diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index 56b75300..bc558555 100644 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -88,6 +88,11 @@ $sm_lang = array( 'pushover_key' => 'Pushover Key', 'pushover_device' => 'Pushover Device', 'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.', + 'telegram' => 'Telegram', + 'telegram_description' => 'Telegram is a chat app that makes it easy to get real-time notifications. Visit the documentation for more info and an install guide.', + 'telegram_chat_id' => 'Telegram chat id', + 'telegram_chat_id_description' => 'The message will be send to the corresponding chat.', + 'telegram_get_chat_id' => 'Click here to get your chat id', 'delete_title' => 'Delete User', 'delete_message' => 'Are you sure you want to delete user \'%1\'?', 'deleted' => 'User deleted.', @@ -112,6 +117,7 @@ $sm_lang = array( 'email' => 'Email', 'sms' => 'SMS', 'pushover' => 'Pushover', + 'telegram' => 'Telegram', 'no_logs' => 'No logs', 'clear' => 'Clear log', 'delete_title' => 'Delete log', @@ -153,6 +159,7 @@ $sm_lang = array( 'sms' => 'SMS', 'send_sms' => 'Send SMS', 'pushover' => 'Pushover', + 'telegram' => 'Telegram', 'users' => 'Users', 'delete_title' => 'Delete server', 'delete_message' => 'Are you sure you want to delete server \'%1\'?', @@ -181,6 +188,7 @@ $sm_lang = array( 'warning_notifications_disabled_sms' => 'SMS notifications are disabled.', 'warning_notifications_disabled_email' => 'Email notifications are disabled.', 'warning_notifications_disabled_pushover' => 'Pushover notifications are disabled.', + 'warning_notifications_disabled_telegram' => 'Telegram notifications are disabled.', 'error_server_no_match' => 'Server not found.', 'error_server_label_bad_length' => 'The label must be between 1 and 255 characters.', 'error_server_ip_bad_length' => 'The domain / IP must be between 1 and 255 characters.', @@ -234,6 +242,10 @@ $sm_lang = array( 'pushover_clone_app' => 'Click here to create your Pushover app', 'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token_description' => 'Before you can use Pushover, you need to register an App at their website and enter the App API Token here.', + 'telegram_status' => 'Allow sending Telegram messages', + 'telegram_description' => 'Telegram is a chat app that makes it easy to get real-time notifications. Visit the documentation for more info and an install guide.', + 'telegram_api_token' => 'Telegram API Token', + 'telegram_api_token_description' => 'Before you can use Telegram, you need to get a API token. Open your Telegram app and search for @Botfather.', 'alert_type' => 'Select when you\'d like to be notified.', 'alert_type_description' => 'Status change: '. 'You will receive a notifcation when a server has a change in status. So from online -> offline or offline -> online.
'. @@ -253,13 +265,16 @@ $sm_lang = array( 'log_email' => 'Log emails sent by the script', 'log_sms' => 'Log text messages sent by the script', 'log_pushover' => 'Log pushover messages sent by the script', + 'log_telegram' => 'Log Telegram messages sent by the script', 'updated' => 'The configuration has been updated.', 'tab_email' => 'Email', 'tab_sms' => 'SMS', 'tab_pushover' => 'Pushover', + 'tab_telegram' => 'Telegram', 'settings_email' => 'Email settings', 'settings_sms' => 'Text message settings', 'settings_pushover' => 'Pushover settings', + 'settings_telegram' => 'Telegram settings', 'settings_notification' => 'Notification settings', 'settings_log' => 'Log settings', 'settings_proxy' => 'Proxy settings', @@ -274,6 +289,7 @@ $sm_lang = array( 'test_email' => 'An email will be sent to the address specified in your user profile.', 'test_sms' => 'An SMS will be sent to the phone number specified in your user profile.', 'test_pushover' => 'A Pushover notification will be sent to the user key/device specified in your user profile.', + 'test_telegram' => 'A Telegram notification will be sent to the chat id specified in your user profile.', 'send' => 'Send', 'test_subject' => 'Test', 'test_message' => 'Test message', @@ -286,6 +302,10 @@ $sm_lang = array( 'pushover_error' => 'An error has occurred while sending the Pushover notification: %s', 'pushover_error_noapp' => 'Unable to send test notification: no Pushover App API token found in the global configuration.', 'pushover_error_nokey' => 'Unable to send test notification: no Pushover key found in your profile.', + 'telegram_sent' => 'Telegram notification sent', + 'telegram_error' => 'An error has occurred while sending the Telegram notification: %s', + 'telegram_error_notoken' => 'Unable to send test notification: no Telegram API token found in the global configuration.', + 'telegram_error_noid' => 'Unable to send test notification: no chat id found in your profile.', 'log_retention_period' => 'Log retention period', 'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server uptime. Enter 0 to disable log cleanup.', 'log_retention_days' => 'days', @@ -297,11 +317,13 @@ $sm_lang = array( 'off_email_body' => "Failed to connect to the following server:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Error: %ERROR%
Date: %DATE%", 'off_pushover_title' => 'Server \'%LABEL%\' is DOWN', 'off_pushover_message' => "Failed to connect to the following server:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Error: %ERROR%
Date: %DATE%", + 'off_telegram_message' => "Failed to connect to the following server:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Error: %ERROR%
Date: %DATE%", 'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%', 'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is RUNNING', 'on_email_body' => "Server '%LABEL%' is running again:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Date: %DATE%", 'on_pushover_title' => 'Server \'%LABEL%\' is RUNNING', 'on_pushover_message' => 'Server \'%LABEL%\' is running again:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Date: %DATE%', + 'on_telegram_message' => 'Server \'%LABEL%\' is running again:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Date: %DATE%', ), 'login' => array( 'welcome_usermenu' => 'Welcome, %user_name%', diff --git a/src/psm/Module/Config/Controller/ConfigController.php b/src/psm/Module/Config/Controller/ConfigController.php index b030234f..c8e77dab 100644 --- a/src/psm/Module/Config/Controller/ConfigController.php +++ b/src/psm/Module/Config/Controller/ConfigController.php @@ -41,10 +41,12 @@ class ConfigController extends AbstractController { 'email_smtp', 'sms_status', 'pushover_status', + 'telegram_status', 'log_status', 'log_email', 'log_sms', 'log_pushover', + 'log_telegram', 'show_update', ); @@ -66,6 +68,7 @@ class ConfigController extends AbstractController { 'sms_gateway_password', 'sms_from', 'pushover_api_token', + 'telegram_api_token', ); private $default_tab = 'general'; @@ -135,7 +138,7 @@ class ConfigController extends AbstractController { $tpl_data[$this->default_tab . '_active'] = 'active'; - $testmodals = array('email', 'sms', 'pushover'); + $testmodals = array('email', 'sms', 'pushover', 'telegram'); foreach($testmodals as $modal_id) { $modal = new \psm\Util\Module\Modal($this->twig, 'test' . ucfirst($modal_id), \psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL); $this->addModal($modal); @@ -186,6 +189,8 @@ class ConfigController extends AbstractController { $this->testSMS(); } elseif(!empty($_POST['test_pushover'])) { $this->testPushover(); + } elseif(!empty($_POST['test_telegram'])) { + $this->testTelegram(); } if($language_refresh) { @@ -201,6 +206,8 @@ class ConfigController extends AbstractController { $this->default_tab = 'sms'; } elseif(isset($_POST['pushover_submit']) || !empty($_POST['test_pushover'])) { $this->default_tab = 'pushover'; + } elseif(isset($_POST['telegram_submit']) || !empty($_POST['test_telegram'])) { + $this->default_tab = 'telegram'; } } return $this->runAction('index'); @@ -287,14 +294,49 @@ class ConfigController extends AbstractController { } } + /** + * Execute telegram test + * + * @todo move test to separate class + */ + protected function testTelegram() { + $telegram = psm_build_telegram(); + $user = $this->getUser()->getUser(); + $api_token = psm_get_conf('telegram_api_token'); + + if(empty($api_token)) { + $this->addMessage(psm_get_lang('config', 'telegram_error_notoken'), 'error'); + } elseif(empty($user->telegram_id)) { + $this->addMessage(psm_get_lang('config', 'telegram_error_noid'), 'error'); + } else { + $telegram->setMessage(psm_get_lang('config', 'test_message')); + $telegram->setUser($user->telegram_id); + + $result = $telegram->send(); + + if(isset($result['ok']) && $result['ok'] != false) { + $this->addMessage(psm_get_lang('config', 'telegram_sent'), 'success'); + } else { + if(isset($result['description'])) { + $error = $result['description']; + } else { + $error = 'Unknown'; + } + $this->addMessage(sprintf(psm_get_lang('config', 'telegram_error'), $error), 'error'); + } + } + } + protected function getLabels() { return array( 'label_tab_email' => psm_get_lang('config', 'tab_email'), 'label_tab_sms' => psm_get_lang('config', 'tab_sms'), 'label_tab_pushover' => psm_get_lang('config', 'tab_pushover'), + 'label_tab_telegram' => psm_get_lang('config', 'tab_telegram'), 'label_settings_email' => psm_get_lang('config', 'settings_email'), 'label_settings_sms' => psm_get_lang('config', 'settings_sms'), 'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'), + 'label_settings_telegram' => psm_get_lang('config', 'settings_telegram'), 'label_settings_notification' => psm_get_lang('config', 'settings_notification'), 'label_settings_log' => psm_get_lang('config', 'settings_log'), 'label_settings_proxy' => psm_get_lang('config', 'settings_proxy'), @@ -346,6 +388,10 @@ class ConfigController extends AbstractController { psm_get_lang('config', 'pushover_api_token_description'), PSM_PUSHOVER_CLONE_URL ), + 'label_telegram_description' => psm_get_lang('config', 'telegram_description'), + 'label_telegram_status' => psm_get_lang('config', 'telegram_status'), + 'label_telegram_api_token' => psm_get_lang('config', 'telegram_api_token'), + 'label_telegram_api_token_description' => psm_get_lang('config', 'telegram_api_token_description'), 'label_alert_type' => psm_get_lang('config', 'alert_type'), 'label_alert_type_description' => psm_get_lang('config', 'alert_type_description'), 'label_alert_type_status' => psm_get_lang('config', 'alert_type_status'), @@ -356,6 +402,7 @@ class ConfigController extends AbstractController { 'label_log_email' => psm_get_lang('config', 'log_email'), 'label_log_sms' => psm_get_lang('config', 'log_sms'), 'label_log_pushover' => psm_get_lang('config', 'log_pushover'), + 'label_log_telegram' => psm_get_lang('config', 'log_telegram'), 'label_alert_proxy' => psm_get_lang('config', 'alert_proxy'), 'label_alert_proxy_url' => psm_get_lang('config', 'alert_proxy_url'), 'label_auto_refresh' => psm_get_lang('config', 'auto_refresh'), @@ -368,4 +415,4 @@ class ConfigController extends AbstractController { 'label_log_retention_days' => psm_get_lang('config', 'log_retention_days'), ); } -} \ No newline at end of file +} diff --git a/src/psm/Module/Install/Controller/InstallController.php b/src/psm/Module/Install/Controller/InstallController.php index d4d93c99..b9a9c0eb 100644 --- a/src/psm/Module/Install/Controller/InstallController.php +++ b/src/psm/Module/Install/Controller/InstallController.php @@ -214,6 +214,7 @@ class InstallController extends AbstractController { 'level' => PSM_USER_ADMIN, 'pushover_key' => '', 'pushover_device' => '', + 'telegram_id' => '', ); $validator = $this->container->get('util.user.validator'); diff --git a/src/psm/Module/Server/Controller/AbstractServerController.php b/src/psm/Module/Server/Controller/AbstractServerController.php index 8f01f61d..8aa0020c 100644 --- a/src/psm/Module/Server/Controller/AbstractServerController.php +++ b/src/psm/Module/Server/Controller/AbstractServerController.php @@ -75,6 +75,7 @@ abstract class AbstractServerController extends AbstractController { `s`.`email`, `s`.`sms`, `s`.`pushover`, + `s`.`telegram`, `s`.`warning_threshold`, `s`.`warning_threshold_counter`, `s`.`timeout`, @@ -106,6 +107,7 @@ abstract class AbstractServerController extends AbstractController { $server['email'] = psm_get_lang('system', $server['email']); $server['sms'] = psm_get_lang('system', $server['sms']); $server['pushover'] = psm_get_lang('system', $server['pushover']); + $server['telegram'] = psm_get_lang('system', $server['telegram']); if($server['status'] == 'on' && $server['warning_threshold_counter'] > 0) { $server['status'] = 'warning'; diff --git a/src/psm/Module/Server/Controller/LogController.php b/src/psm/Module/Server/Controller/LogController.php index 4620fc2e..d790b122 100644 --- a/src/psm/Module/Server/Controller/LogController.php +++ b/src/psm/Module/Server/Controller/LogController.php @@ -51,6 +51,7 @@ class LogController extends AbstractServerController { 'label_email' => psm_get_lang('log', 'email'), 'label_sms' => psm_get_lang('log', 'sms'), 'label_pushover' => psm_get_lang('log', 'pushover'), + 'label_telegram' => psm_get_lang('log', 'telegram'), 'label_title' => psm_get_lang('log', 'title'), 'label_server' => psm_get_lang('servers', 'server'), 'label_type' => psm_get_lang('log', 'type'), @@ -71,7 +72,7 @@ class LogController extends AbstractServerController { $tpl_data['has_admin_actions'] = true; } - $log_types = array('status', 'email', 'sms', 'pushover'); + $log_types = array('status', 'email', 'sms', 'pushover', 'telegram'); foreach($log_types as $key) { $records = $this->getEntries($key); diff --git a/src/psm/Module/Server/Controller/ServerController.php b/src/psm/Module/Server/Controller/ServerController.php index 667158b3..7412e677 100644 --- a/src/psm/Module/Server/Controller/ServerController.php +++ b/src/psm/Module/Server/Controller/ServerController.php @@ -92,6 +92,7 @@ class ServerController extends AbstractServerController { 'email' => 'icon-envelope', 'sms' => 'icon-mobile', 'pushover' => 'icon-pushover', + 'telegram' => 'icon-telegram', ); $servers = $this->getServers(); @@ -208,10 +209,11 @@ class ServerController extends AbstractServerController { 'edit_email_selected_' . $edit_server['email'] => 'selected="selected"', 'edit_sms_selected_' . $edit_server['sms'] => 'selected="selected"', 'edit_pushover_selected_' . $edit_server['pushover'] => 'selected="selected"', + 'edit_telegram_selected_' . $edit_server['telegram'] => 'selected="selected"', )); } - $notifications = array('email', 'sms', 'pushover'); + $notifications = array('email', 'sms', 'pushover', 'telegram'); foreach($notifications as $notification) { if(psm_get_conf($notification . '_status') == 0) { $tpl_data['warning_' . $notification] = true; @@ -272,6 +274,7 @@ class ServerController extends AbstractServerController { 'email' => in_array($_POST['email'], array('yes', 'no')) ? $_POST['email'] : 'no', 'sms' => in_array($_POST['sms'], array('yes', 'no')) ? $_POST['sms'] : 'no', 'pushover' => in_array($_POST['pushover'], array('yes', 'no')) ? $_POST['pushover'] : 'no', + 'telegram' => in_array($_POST['telegram'], array('yes', 'no')) ? $_POST['telegram'] : 'no', ); // make sure websites start with http:// if($clean['type'] == 'website' && substr($clean['ip'], 0, 4) != 'http') { @@ -479,6 +482,7 @@ class ServerController extends AbstractServerController { 'label_sms' => psm_get_lang('servers', 'sms'), 'label_send_sms' => psm_get_lang('servers', 'send_sms'), 'label_pushover' => psm_get_lang('servers', 'pushover'), + 'label_telegram' => psm_get_lang('servers', 'telegram'), 'label_users' => psm_get_lang('servers', 'users'), 'label_warning_threshold' => psm_get_lang('servers', 'warning_threshold'), 'label_warning_threshold_description' => psm_get_lang('servers', 'warning_threshold_description'), diff --git a/src/psm/Module/User/Controller/ProfileController.php b/src/psm/Module/User/Controller/ProfileController.php index 0d4630e5..2300f5ec 100644 --- a/src/psm/Module/User/Controller/ProfileController.php +++ b/src/psm/Module/User/Controller/ProfileController.php @@ -35,7 +35,7 @@ class ProfileController extends AbstractController { * Editable fields for the profile * @var array $profile_fields */ - protected $profile_fields = array('name', 'user_name', 'mobile', 'pushover_key', 'pushover_device', 'email'); + protected $profile_fields = array('name', 'user_name', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id', 'email'); function __construct(Database $db, \Twig_Environment $twig) { parent::__construct($db, $twig); @@ -66,6 +66,12 @@ class ProfileController extends AbstractController { 'label_pushover_key' => psm_get_lang('users', 'pushover_key'), 'label_pushover_device' => psm_get_lang('users', 'pushover_device'), 'label_pushover_device_description' => psm_get_lang('users', 'pushover_device_description'), + 'label_telegram' => psm_get_lang('users', 'telegram'), + 'label_telegram_description' => psm_get_lang('users', 'telegram_description'), + 'label_telegram_chat_id' => psm_get_lang('users', 'telegram_chat_id'), + 'label_telegram_chat_id_description' => psm_get_lang('users', 'telegram_chat_id_description'), + 'label_telegram_get_chat_id' => psm_get_lang('users', 'telegram_get_chat_id'), + 'telegram_get_chat_id_url' => PSM_TELEGRAM_GET_ID_URL, 'label_email' => psm_get_lang('users', 'email'), 'label_save' => psm_get_lang('system', 'save'), 'form_action' => psm_build_url(array( @@ -135,4 +141,4 @@ class ProfileController extends AbstractController { return $this->executeIndex(); } -} \ No newline at end of file +} diff --git a/src/psm/Module/User/Controller/UserController.php b/src/psm/Module/User/Controller/UserController.php index ef71353c..1e498011 100644 --- a/src/psm/Module/User/Controller/UserController.php +++ b/src/psm/Module/User/Controller/UserController.php @@ -89,7 +89,7 @@ class UserController extends AbstractController { $users = $this->db->select( PSM_DB_PREFIX.'users', null, - array('user_id', 'user_name', 'level', 'name', 'mobile', 'pushover_key', 'pushover_device', 'email'), + array('user_id', 'user_name', 'level', 'name', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id', 'email'), null, array('name') ); @@ -133,7 +133,7 @@ class UserController extends AbstractController { */ protected function executeEdit() { $user_id = isset($_GET['id']) ? intval($_GET['id']) : 0; - $fields_prefill = array('name', 'user_name', 'mobile', 'pushover_key', 'pushover_device', 'email'); + $fields_prefill = array('name', 'user_name', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id', 'email'); if($user_id == 0) { // insert mode @@ -215,7 +215,7 @@ class UserController extends AbstractController { } $user_id = (isset($_GET['id'])) ? intval($_GET['id']) : 0; - $fields = array('name', 'user_name', 'password', 'password_repeat', 'level', 'mobile', 'pushover_key', 'pushover_device', 'email'); + $fields = array('name', 'user_name', 'password', 'password_repeat', 'level', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id', 'email'); $clean = array(); foreach($fields as $field) { if(isset($_POST[$field])) { @@ -333,6 +333,10 @@ class UserController extends AbstractController { 'label_pushover_key' => psm_get_lang('users', 'pushover_key'), 'label_pushover_device' => psm_get_lang('users', 'pushover_device'), 'label_pushover_device_description' => psm_get_lang('users', 'pushover_device_description'), + 'label_telegram' => psm_get_lang('users', 'telegram'), + 'label_telegram_description' => psm_get_lang('users', 'telegram_description'), + 'label_telegram_id' => psm_get_lang('users', 'telegram_id'), + 'label_telegram_id_description' => psm_get_lang('users', 'telegram_id_description'), 'label_email' => psm_get_lang('users', 'email'), 'label_servers' => psm_get_lang('menu', 'server'), 'label_action' => psm_get_lang('system', 'action'), diff --git a/src/psm/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index 10c672ab..64d4fd54 100644 --- a/src/psm/Util/Install/Installer.php +++ b/src/psm/Util/Install/Installer.php @@ -126,7 +126,7 @@ class Installer { $this->log('Populating database...'); $queries = array(); - $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "servers` (`ip`, `port`, `label`, `type`, `pattern`, `status`, `active`, `email`, `sms`, `pushover`) VALUES ('http://sourceforge.net/index.php', 80, 'SourceForge', 'website', '', 'on', 'yes', 'yes', 'yes', 'yes'), ('smtp.gmail.com', 465, 'Gmail SMTP', 'service', '', 'on', 'yes', 'yes', 'yes', 'yes')"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "servers` (`ip`, `port`, `label`, `type`, `pattern`, `status`, `active`, `email`, `sms`, `pushover`, `telegram`) VALUES ('http://sourceforge.net/index.php', 80, 'SourceForge', 'website', '', 'on', 'yes', 'yes', 'yes', 'yes', 'yes'), ('smtp.gmail.com', 465, 'Gmail SMTP', 'service', '', 'on', 'yes', 'yes', 'yes', 'yes', 'yes')"; $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "users_servers` (`user_id`,`server_id`) VALUES (1, 1), (1, 2);"; $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUE ('language', 'en_US'), @@ -150,12 +150,15 @@ class Installer { ('sms_from', '1234567890'), ('pushover_status', '0'), ('pushover_api_token', ''), + ('telegram_status', '0'), + ('telegram_api_token', ''), ('password_encrypt_key', '" . sha1(microtime()) . "'), ('alert_type', 'status'), ('log_status', '1'), ('log_email', '1'), ('log_sms', '1'), ('log_pushover', '1'), + ('log_telegram', '1'), ('log_retention_period', '365'), ('version', '" . PSM_VERSION . "'), ('version_update_check', '" . PSM_VERSION . "'), @@ -189,6 +192,7 @@ class Installer { `mobile` varchar(15) NOT NULL, `pushover_key` varchar(255) NOT NULL, `pushover_device` varchar(255) NOT NULL, + `telegram_id` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, PRIMARY KEY (`user_id`), UNIQUE KEY `unique_username` (`user_name`) @@ -207,7 +211,7 @@ class Installer { PSM_DB_PREFIX . 'log' => "CREATE TABLE `" . PSM_DB_PREFIX . "log` ( `log_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `server_id` int(11) unsigned NOT NULL, - `type` enum('status','email','sms','pushover') NOT NULL, + `type` enum('status','email','sms','pushover','telegram') NOT NULL, `message` varchar(255) NOT NULL, `datetime` timestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (`log_id`) @@ -235,10 +239,11 @@ class Installer { `email` enum('yes','no') NOT NULL default 'yes', `sms` enum('yes','no') NOT NULL default 'no', `pushover` enum('yes','no') NOT NULL default 'yes', - `warning_threshold` mediumint(1) unsigned NOT NULL DEFAULT '1', - `warning_threshold_counter` mediumint(1) unsigned NOT NULL DEFAULT '0', - `timeout` smallint(1) unsigned NULL DEFAULT NULL, - `website_username` varchar(255) DEFAULT NULL, + `telegram` enum('yes','no') NOT NULL default 'yes', + `warning_threshold` mediumint(1) unsigned NOT NULL DEFAULT '1', + `warning_threshold_counter` mediumint(1) unsigned NOT NULL DEFAULT '0', + `timeout` smallint(1) unsigned NULL DEFAULT NULL, + `website_username` varchar(255) DEFAULT NULL, `website_password` varchar(255) DEFAULT NULL, PRIMARY KEY (`server_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", @@ -299,6 +304,9 @@ class Installer { if(version_compare($version_from, '3.2.1', '<')) { $this->upgrade321(); } + if(version_compare($version_from, '3.2.2', '<')) { + $this->upgrade322(); + } psm_update_conf('version', $version_to); } @@ -492,4 +500,19 @@ class Installer { $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD COLUMN `header_name` VARCHAR(255) AFTER `pattern`, ADD COLUMN `header_value` VARCHAR(255) AFTER `header_name`"; $this->execSQL($queries); } + + /** + * Upgrade for v3.2.2 release + */ + protected function upgrade322() { + $queries = array(); + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "users` ADD `telegram_id` VARCHAR( 255 ) NOT NULL AFTER `pushover_device`;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `telegram` ENUM( 'yes','no' ) NOT NULL DEFAULT 'yes' AFTER `pushover`;"; + $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "log` CHANGE `type` `type` ENUM( 'status', 'email', 'sms', 'pushover', 'telegram' ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUE + ('telegram_status', '0'), + ('log_telegram', '1'), + ('telegram_api_token', '');"; + $this->execSQL($queries); + } } diff --git a/src/psm/Util/Server/UpdateManager.php b/src/psm/Util/Server/UpdateManager.php index 6502d8a2..91e11822 100644 --- a/src/psm/Util/Server/UpdateManager.php +++ b/src/psm/Util/Server/UpdateManager.php @@ -56,13 +56,13 @@ class UpdateManager extends ContainerAware { )"; } - $sql = "SELECT `s`.`server_id`,`s`.`ip`,`s`.`port`,`s`.`label`,`s`.`type`,`s`.`pattern`,`s`.`header_name`,`s`.`header_value`,`s`.`status`,`s`.`active`,`s`.`email`,`s`.`sms`,`s`.`pushover` + $sql = "SELECT `s`.`server_id`,`s`.`ip`,`s`.`port`,`s`.`label`,`s`.`type`,`s`.`pattern`,`s`.`header_name`,`s`.`header_value`,`s`.`status`,`s`.`active`,`s`.`email`,`s`.`sms`,`s`.`pushover`,`s`.`telegram` FROM `".PSM_DB_PREFIX."servers` AS `s` {$sql_join} WHERE `active`='yes' "; $servers = $this->container->get('db')->query($sql); - + $updater = new Updater\StatusUpdater($this->container->get('db')); $notifier = new Updater\StatusNotifier($this->container->get('db')); @@ -78,4 +78,4 @@ class UpdateManager extends ContainerAware { $archive->archive(); $archive->cleanup(); } -} \ No newline at end of file +} diff --git a/src/psm/Util/Server/Updater/StatusNotifier.php b/src/psm/Util/Server/Updater/StatusNotifier.php index c3869196..aa5adf3d 100644 --- a/src/psm/Util/Server/Updater/StatusNotifier.php +++ b/src/psm/Util/Server/Updater/StatusNotifier.php @@ -60,6 +60,12 @@ class StatusNotifier { */ protected $send_pushover = false; + /** + * Send telegram? + * @var boolean $send_telegram + */ + protected $send_telegram = false; + /** * Save log records? * @var boolean $save_log @@ -96,6 +102,7 @@ class StatusNotifier { $this->send_emails = psm_get_conf('email_status'); $this->send_sms = psm_get_conf('sms_status'); $this->send_pushover = psm_get_conf('pushover_status'); + $this->send_telegram = psm_get_conf('telegram_status'); $this->save_logs = psm_get_conf('log_status'); } @@ -121,7 +128,7 @@ class StatusNotifier { $this->server = $this->db->selectRow(PSM_DB_PREFIX . 'servers', array( 'server_id' => $server_id, ), array( - 'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'status', 'header_name', 'header_value', 'error', 'active', 'email', 'sms', 'pushover', + 'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'status', 'header_name', 'header_value', 'error', 'active', 'email', 'sms', 'pushover', 'telegram', )); if(empty($this->server)) { return false; @@ -188,6 +195,12 @@ class StatusNotifier { $this->notifyByPushover($users); } + // check if telegram is enabled for this server + if($this->send_telegram && $this->server['telegram'] == 'yes') { + // yay lets wake those nerds up! + $this->notifyByTelegram($users); + } + return $notify; } @@ -313,6 +326,43 @@ class StatusNotifier { return $result; } + /** + * This functions performs the telegram notifications + * + * @param array $users + * @return boolean + */ + protected function notifyByTelegram($users) { + // Remove users that have no telegram_id + foreach($users as $k => $user) { + if (trim($user['telegram_id']) == '') { + unset($users[$k]); + } + } + + // Validation + if (empty($users)) { + return; + } + + // Telegram + $message = psm_parse_msg($this->status_new, 'telegram_message', $this->server); + $telegram = psm_build_telegram(); + $telegram->setMessage(str_replace('
', "\n", $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)) { + psm_add_log_user($log_id, $user['user_id']); + } + $telegram->setUser($user['telegram_id']); + $telegram->send(); + } + } + /** * Get all users for the provided server id * @param int $server_id @@ -321,7 +371,7 @@ class StatusNotifier { public function getUsers($server_id) { // find all the users with this server listed $users = $this->db->query(" - SELECT `u`.`user_id`, `u`.`name`,`u`.`email`, `u`.`mobile`, `u`.`pushover_key`, `u`.`pushover_device` + SELECT `u`.`user_id`, `u`.`name`,`u`.`email`, `u`.`mobile`, `u`.`pushover_key`, `u`.`pushover_device`, `u`.`telegram_id` FROM `".PSM_DB_PREFIX."users` AS `u` JOIN `".PSM_DB_PREFIX."users_servers` AS `us` ON ( `us`.`user_id`=`u`.`user_id` diff --git a/src/templates/default/module/config/config.tpl.html b/src/templates/default/module/config/config.tpl.html index ff994718..344adbf6 100644 --- a/src/templates/default/module/config/config.tpl.html +++ b/src/templates/default/module/config/config.tpl.html @@ -5,6 +5,7 @@
  • {{ label_tab_sms }}
  • {{ label_tab_pushover }}
  • +
  • {{ label_tab_telegram }}
  • @@ -266,6 +267,38 @@
    +
    +
    + {{ label_settings_telegram }} +
    +
    + +

    {{ label_telegram_description|raw }}

    +
    +
    +
    +
    + +
    +
    +
    + +
    + +

    {{ label_telegram_api_token_description|raw }}

    +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    {{ macro.csrf_input() }} diff --git a/src/templates/default/module/server/log.tpl.html b/src/templates/default/module/server/log.tpl.html index f05400b4..6edfb760 100644 --- a/src/templates/default/module/server/log.tpl.html +++ b/src/templates/default/module/server/log.tpl.html @@ -10,6 +10,7 @@
  • {{ label_email }}
  • {{ label_sms }}
  • {{ label_pushover }}
  • +
  • {{ label_telegram }}
  • {% for tab in tabs %} diff --git a/src/templates/default/module/server/server/list.tpl.html b/src/templates/default/module/server/server/list.tpl.html index 08e64db3..ed5d7ae3 100644 --- a/src/templates/default/module/server/server/list.tpl.html +++ b/src/templates/default/module/server/server/list.tpl.html @@ -23,7 +23,15 @@
    {{ server.type }}
    {{ server.rtime }} s
    {{ server.last_online }}
    -
    + +
    + + + + + +
    +
    @@ -51,7 +59,11 @@
    {{ server.ip_short|raw }}
    - + + + + +
    @@ -63,4 +75,4 @@ {% endfor %} - \ No newline at end of file + diff --git a/src/templates/default/module/server/server/update.tpl.html b/src/templates/default/module/server/server/update.tpl.html index 1b1636aa..b03e44c5 100644 --- a/src/templates/default/module/server/server/update.tpl.html +++ b/src/templates/default/module/server/server/update.tpl.html @@ -146,6 +146,17 @@
    +
    + +
    + +
    +
    diff --git a/src/templates/default/module/server/server/view.tpl.html b/src/templates/default/module/server/server/view.tpl.html index 17dad262..a9423f7e 100644 --- a/src/templates/default/module/server/server/view.tpl.html +++ b/src/templates/default/module/server/server/view.tpl.html @@ -69,6 +69,10 @@ {{ label_pushover }}: {{ pushover }} + + {{ label_telegram }}: + {{ telegram }} + {{ label_timeout }}: {{ timeout }} s @@ -100,4 +104,4 @@ {% endif %} -{{ html_history|raw }} \ No newline at end of file +{{ html_history|raw }} diff --git a/src/templates/default/module/user/profile.tpl.html b/src/templates/default/module/user/profile.tpl.html index a5f390d5..36260972 100644 --- a/src/templates/default/module/user/profile.tpl.html +++ b/src/templates/default/module/user/profile.tpl.html @@ -62,6 +62,18 @@ +
    +
    +
    + +
    {{ label_telegram_description|raw }}

    +
    +
    + +
    + +
    +
    @@ -70,4 +82,4 @@
    - \ No newline at end of file + diff --git a/src/templates/default/module/user/user/update.tpl.html b/src/templates/default/module/user/user/update.tpl.html index 8c19a2f9..e8f0099e 100644 --- a/src/templates/default/module/user/user/update.tpl.html +++ b/src/templates/default/module/user/user/update.tpl.html @@ -66,6 +66,16 @@ +
    + +
    {{ label_telegram_description|raw }}
    +
    +
    + +
    + +
    +
    diff --git a/static/css/style.css b/static/css/style.css index c306cb96..ece2d6fb 100755 --- a/static/css/style.css +++ b/static/css/style.css @@ -671,4 +671,8 @@ legend{ .icon-pushover { background-position: -72px -168px; -} \ No newline at end of file +} + +.icon-telegram { + background-position: -96px -168px; +} diff --git a/static/plugin/twitter-bootstrap/img/glyphicons-halflings-white.png b/static/plugin/twitter-bootstrap/img/glyphicons-halflings-white.png index 7ac87d2f0d3b3f83c87b4fc126e48b00d4e1d68b..7d4a716a39a51933b91904d089b35e222495dc57 100644 GIT binary patch literal 33145 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 P00000NkvXXu0mjfcC@L&_bvhdW#f6K#J0Y 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 X%G*SKORqTLzc*TH`l>a`ZzBE|Cm$GH diff --git a/static/plugin/twitter-bootstrap/img/glyphicons-halflings.png b/static/plugin/twitter-bootstrap/img/glyphicons-halflings.png index 6dc2d36fd225db5ad50fa00a2e61697465ff532c..2f169c05900f272f433e30716c429a3406a1aa78 100644 GIT binary patch literal 43656 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 F{{om$Ku`bx