diff --git a/.htaccess b/.htaccess index 5a928f6d..1014e510 100644 --- a/.htaccess +++ b/.htaccess @@ -1 +1,20 @@ Options -Indexes + + + + ExpiresActive on + ExpiresDefault "access plus 1 month" + + + + +AddOutputFilterByType DEFLATE text/plain +AddOutputFilterByType DEFLATE text/html +AddOutputFilterByType DEFLATE text/xml +AddOutputFilterByType DEFLATE text/css +AddOutputFilterByType DEFLATE application/xml +AddOutputFilterByType DEFLATE application/xhtml+xml +AddOutputFilterByType DEFLATE application/rss+xml +AddOutputFilterByType DEFLATE application/javascript +AddOutputFilterByType DEFLATE application/x-javascript + diff --git a/README.rst b/README.rst index 942cb0c3..e76cdaab 100755 --- a/README.rst +++ b/README.rst @@ -75,6 +75,7 @@ Requirements * PHP 5.3.7+ * PHP cURL package * PHP PDO mysql driver +* PHP-XML Install @@ -116,3 +117,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PHP Server Monitor. If not, see http://www.gnu.org/licenses/. + +Docker +------- + +PHPServerMonitor is now available on Docker : https://github.com/phpservermon/docker-phpservermonitor diff --git a/composer.json b/composer.json index 4243789d..885fe4db 100755 --- a/composer.json +++ b/composer.json @@ -3,10 +3,7 @@ "description": "PHP Server Monitor", "homepage": "http://www.phpservermonitor.org", "repositories": [ - { - "type": "vcs", - "url": "https://github.com/phpservermon/php-pushover" - } + ], "require": { "php": ">=5.3.7", diff --git a/config.php.sample b/config.php.sample index 667afe2e..a90981a3 100755 --- a/config.php.sample +++ b/config.php.sample @@ -4,4 +4,5 @@ define('PSM_DB_USER', 'db_user'); define('PSM_DB_PASS', 'db_pass'); define('PSM_DB_NAME', 'db_name'); define('PSM_DB_HOST', 'localhost'); - +define('PSM_DB_PORT', '3306'); +define('PSM_BASE_URL', ''); diff --git a/cron/status.cron.php b/cron/status.cron.php index 0905d8da..9e533a1a 100644 --- a/cron/status.cron.php +++ b/cron/status.cron.php @@ -29,7 +29,12 @@ require_once __DIR__ . '/../src/bootstrap.php'; if(!psm_is_cli()) { - die('This script can only be run from the command line.'); + // check if it's an allowed host + $allow = PSM_CRON_ALLOW; + if(!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow)) { + header('HTTP/1.0 404 Not Found'); + die('404 Not Found

Not Found

The requested URL /cron/status.cron.php was not found on this server.

'); + } } $cron_timeout = PSM_CRON_TIMEOUT; diff --git a/docs/install.rst b/docs/install.rst index f8e0efa2..627704fb 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -27,6 +27,7 @@ To change these values correctly, only update the second parameter of the functi define('PSM_DB_NAME', 'db_name'); define('PSM_DB_USER', 'db_user'); define('PSM_DB_PASS', 'db_user_password'); + define('PSM_DB_PORT', '3306'); For example: to change your username you should ONLY change the 'db\_user' part. Do NOT remove the quotes around your username as that will result in an error. diff --git a/puphpet/files/exec-once/psminstall.sh b/puphpet/files/exec-once/psminstall.sh index 2ebd8b54..b115800f 100644 --- a/puphpet/files/exec-once/psminstall.sh +++ b/puphpet/files/exec-once/psminstall.sh @@ -6,8 +6,9 @@ define('PSM_DB_USER', 'psm'); \ define('PSM_DB_PASS', 'psm'); \ define('PSM_DB_NAME', 'psm'); \ define('PSM_DB_HOST', 'localhost'); \ +define('PSM_DB_PORT', '3306'); \ ?>" > /var/www/default/psm/config.php echo "" > /var/www/default/index.php \ No newline at end of file +?>" > /var/www/default/index.php diff --git a/src/config/services.xml b/src/config/services.xml index 5d3fbd1b..43446dcd 100644 --- a/src/config/services.xml +++ b/src/config/services.xml @@ -18,6 +18,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/sc %path.src%templates PSM_DB_HOST + PSM_DB_PORT PSM_DB_USER PSM_DB_PASS PSM_DB_NAME @@ -38,6 +39,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/sc %db.user% %db.pass% %db.name% + %db.port% diff --git a/src/includes/functions.inc.php b/src/includes/functions.inc.php index 08d0c512..d2fde786 100755 --- a/src/includes/functions.inc.php +++ b/src/includes/functions.inc.php @@ -335,6 +335,16 @@ function psm_curl_get($href, $header = false, $body = true, $timeout = null, $ad curl_setopt($ch, CURLOPT_URL, $href); + $proxy_url = psm_get_conf('proxy_url',''); + if (psm_get_conf('proxy','0') === '1') { + curl_setopt($ch, CURLOPT_PROXY, $proxy_url); + $proxy_user = psm_get_conf('proxy_user',''); + $proxy_password = psm_get_conf('proxy_password',''); + if (!empty($proxy_user) && !empty($proxy_password)) { + curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_user . ':' . $proxy_password); + } + } + if($add_agent) { curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; phpservermon/'.PSM_VERSION.'; +http://www.phpservermonitor.org)'); } @@ -542,7 +552,11 @@ function psm_build_sms() { break; case 'octopush': $sms = new \psm\Txtmsg\Octopush(); - break; } + break; + case 'smsgw': + $sms = new \psm\Txtmsg\Smsgw(); + break; + } // copy login information from the config file if($sms) { diff --git a/src/lang/cs_CZ.lang.php b/src/lang/cs_CZ.lang.php index 09049038..f816f172 100644 --- a/src/lang/cs_CZ.lang.php +++ b/src/lang/cs_CZ.lang.php @@ -54,7 +54,7 @@ $sm_lang = array( 'long_day_format' => '%B %e, %Y', 'yesterday_format' => 'Včera v %k:%M', 'other_day_format' => '%A v %k:%M', - 'never' => 'Never', + 'never' => 'Nikdy', 'hours_ago' => 'před %d hodinami', 'an_hour_ago' => 'cca před hodinou', 'minutes_ago' => 'před %d minutami', @@ -177,7 +177,7 @@ $sm_lang = array( 'warning_notifications_disabled_pushover' => 'Pushover upozornění jsou vypnuta.', 'error_server_no_match' => 'Server nenalezen.', 'error_server_label_bad_length' => 'Popisek musí obsahovat 1 až 255 znaků.', - 'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovat 1 ař 255 znaků.', + 'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovat 1 až 255 znaků.', 'error_server_ip_bad_service' => 'IP adresa není platná.', 'error_server_ip_bad_website' => 'URL webu není platná.', 'error_server_type_invalid' => 'Zvolený typ serveru není platný', @@ -209,14 +209,16 @@ $sm_lang = array( 'sms_gateway_clickatell' => 'Clickatell', 'sms_gateway_textmarketer' => 'Textmarketer', 'sms_gateway_smsglobal' => 'SMSGlobal', - 'sms_gateway_nexmo' => 'Nexmo', 'sms_gateway_octopush' => 'Octopush', 'sms_gateway_smsit' => 'Smsit', 'sms_gateway_freevoipdeal' => 'FreeVoipDeal', + 'sms_gateway_freemobilesms' => 'FreeMobileSMS', + 'sms_gateway_clicksend' => 'ClickSend', + 'sms_gateway_nexmo' => 'Nexmo', 'sms_gateway_username' => 'Uživatelské jméno brány', 'sms_gateway_password' => 'Heslo brány', 'sms_from' => 'Telefonní číslo odesilatele', - 'pushover_status' => 'Povolit zsílání Pushover zpráv', + 'pushover_status' => 'Povolit zasílání Pushover zpráv', 'pushover_description' => 'Pushover je služba umožňující jednoduše zasílat real-time upozornění. Více na webu Pushover', 'pushover_clone_app' => 'Klikněte pro vytvoření Pushover aplikace', 'pushover_api_token' => 'Pushover App API Token', @@ -225,7 +227,7 @@ $sm_lang = array( 'alert_type_description' => 'Změna stavu: '. 'Obdržíte upozornění při změně stavu, tedy:online -> offline nebo offline -> online.
'. '
Offline: '. - 'Obdržíte upozornění, kdy server přejde poprvé do offline stavu. Například, pokud je cron nastaven na 15 minut a sledovaný server bude offline mezi 01:00 a 06:00.
'. + 'Obdržíte upozornění, kdy server přejde poprvé do offline stavu. Například, pokud je cron nastaven na 15 minut a sledovaný server bude offline mezi 01:00 a 06:00. Obdržíte upozornění pouze v 01:00.
'. '
Vždy: '. 'Obdržíte upozornění při každém spuštění kontroly, tedy i pokud bude server offline několik hodin.', 'alert_type_status' => 'Změna stavu', @@ -277,7 +279,7 @@ $sm_lang = array( 'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%', 'off_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je offline', 'off_email_body' => 'Nebylo možné spojit se se serverem:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Chyba: %ERROR%
Datum: %DATE%', - 'off_pushover_title' => 'Server \'%LABEL%\'je offline', + 'off_pushover_title' => 'Server \'%LABEL%\' je offline', 'off_pushover_message' => 'Nebylo možné spojit se se serverem:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Chyba: %ERROR%
Datum: %DATE%', 'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%', 'on_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je online', diff --git a/src/lang/de_DE.lang.php b/src/lang/de_DE.lang.php index fd8aee95..885d6199 100644 --- a/src/lang/de_DE.lang.php +++ b/src/lang/de_DE.lang.php @@ -125,6 +125,7 @@ $sm_lang = array( 'type' => 'Typ', 'type_website' => 'Webseite', 'type_service' => 'Service', + 'type_ping' => 'Ping', 'pattern' => 'Suchstring/-muster', 'pattern_description' => 'Wenn das gesuchte Muster nicht in der Webseite ist, wird die Seite als offline markiert. Reguläre Ausdrücke sind erlaubt.', 'last_check' => 'Letzter Check', diff --git a/src/lang/en_US.lang.php b/src/lang/en_US.lang.php index 2a5cd6e9..a9b537da 100755 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -141,6 +141,7 @@ $sm_lang = array( 'type' => 'Type', 'type_website' => 'Website', 'type_service' => 'Service', + 'type_ping' => 'Ping', 'pattern' => 'Search string/pattern', 'pattern_description' => 'If this pattern is not found on the website, the server will be marked offline. Regular expressions are allowed.', 'last_check' => 'Last check', @@ -196,6 +197,10 @@ $sm_lang = array( 'show_update' => 'Check for updates?', 'password_encrypt_key' => 'The encryption key password', 'password_encrypt_key_note' => 'This key is used to encrypt passwords that are stored on servers for access to websites. If the key will change the stored password is invalid!', + 'proxy' => 'Enable proxy', + 'proxy_url' => 'Proxy URL', + 'proxy_user' => 'Proxy username', + 'proxy_password' => 'Proxy password', 'email_status' => 'Allow sending email', 'email_from_email' => 'Email from address', 'email_from_name' => 'Email from name', @@ -222,6 +227,7 @@ $sm_lang = array( 'sms_gateway_freemobilesms' => 'FreeMobileSMS', 'sms_gateway_clicksend' => 'ClickSend', 'sms_gateway_nexmo' => 'Nexmo', + 'sms_gateway_smsgw' => 'SMSgw', 'sms_gateway_username' => 'Gateway username', 'sms_gateway_password' => 'Gateway password', 'sms_from' => 'Sender\'s phone number', @@ -246,6 +252,8 @@ $sm_lang = array( 'alert_type_status' => 'Status change', 'alert_type_offline' => 'Offline', 'alert_type_always' => 'Always', + 'alert_proxy' => 'Even if enabled, proxy is never used for services', + 'alert_proxy_url' => 'Format: Host:Port', 'log_status' => 'Log status', 'log_status_description' => 'If log status is set to TRUE, the monitor will log the event whenever the Notification settings are passed.', 'log_email' => 'Log emails sent by the script', @@ -263,6 +271,7 @@ $sm_lang = array( 'settings_pushbullet' => 'Pushbullet settings', 'settings_notification' => 'Notification settings', 'settings_log' => 'Log settings', + 'settings_proxy' => 'Proxy settings', 'auto_refresh' => 'Auto-refresh', 'auto_refresh_servers' => 'Auto-refresh servers page.
'. diff --git a/src/lang/sk_SK.lang.php b/src/lang/sk_SK.lang.php new file mode 100644 index 00000000..4d720371 --- /dev/null +++ b/src/lang/sk_SK.lang.php @@ -0,0 +1,318 @@ +. + * + * @package phpservermon + * @author Peter Misura + * @copyright Copyright (c) 2008-2015 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://www.phpservermonitor.org/ + **/ + +$sm_lang = array( + 'name' => 'Slovensky - Slovak', + 'locale' => array('sk_SK.UTF-8', 'sk_SK', 'slovak', 'slovak'), + 'locale_tag' => 'sk', + 'locale_dir' => 'ltr', + 'system' => array( + 'title' => 'Server Monitor', + 'install' => 'Inštalácia', + 'action' => 'Akcia', + 'save' => 'Uložiť', + 'edit' => 'Upraviť', + 'delete' => 'Zmazať', + 'date' => 'Dátum', + 'message' => 'Správa', + 'yes' => 'Áno', + 'no' => 'Nie', + 'insert' => 'Vložiť', + 'add_new' => 'Pridať', + 'update_available' => 'Nová verzia - ({version}) je dostupná na http://www.phpservermonitor.org.', + 'back_to_top' => 'Späť na začiatok', + 'go_back' => 'Späť', + 'ok' => 'OK', + 'cancel' => 'Zrušiť', + // date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php + 'short_day_format' => '%B %e', + 'long_day_format' => '%B %e, %Y', + 'yesterday_format' => 'Včera v %k:%M', + 'other_day_format' => '%A v %k:%M', + 'never' => 'Nikdy', + 'hours_ago' => 'pred %d hodinami', + 'an_hour_ago' => 'cca pred hodinou', + 'minutes_ago' => 'pred %d minútami', + 'a_minute_ago' => 'cca pred minútou', + 'seconds_ago' => 'pred %d sekundami', + 'a_second_ago' => 'pred chvíľou', + ), + 'menu' => array( + 'config' => 'Konfigurácia', + 'server' => 'Servery', + 'server_log' => 'Log', + 'server_status' => 'Stav', + 'server_update' => 'Aktualizácia', + 'user' => 'Užívateľ', + 'help' => 'Nápoveda', + ), + 'users' => array( + 'user' => 'Užívateľ', + 'name' => 'Meno', + 'user_name' => 'Užívateľské meno', + 'password' => 'Heslo', + 'password_repeat' => 'Rovnaké heslo (pre kontrolu)', + 'password_leave_blank' => 'Nevyplňujte ak nechcete zmeniť.', + 'level' => 'Oprávnenie', + 'level_10' => 'Administrátor', + 'level_20' => 'Užívateľ', + 'level_description' => 'Administrátor má plný prístup: môže spravovať servery, užívateľov a upraviť globálnu konfiguráciu.
Uživatel má práva len na čítanie a spustiť aktualizáciu serverov, ktoré má priradené.', + 'mobile' => 'Mobil', + 'email' => 'E-mail', + 'pushover' => 'Pushover', + 'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac na webe Pushover', + 'pushover_key' => 'Pushover Token', + 'pushover_device' => 'Pushover Zariadenie', + 'pushover_device_description' => 'Název zariadenia, na ktoré má byť správa odoslaná. Ponechajte prázdne pre odoslanie na všetky zariadenia.', + 'delete_title' => 'Zmazať užívateľa', + 'delete_message' => 'Naozaj zmazať užívateľa \'%1\'?', + 'deleted' => 'Užívateľ zmazaný.', + 'updated' => 'Užívateľ aktualizovaný.', + 'inserted' => 'Užívateľ pridaný.', + 'profile' => 'Profil', + 'profile_updated' => 'Váš užívateľský profil bol upravený.', + 'error_user_name_bad_length' => 'Užívateľské meno musí obsahovať 2 až 64 znakov.', + 'error_user_name_invalid' => 'Užívateľské meno môže obsahovať iba písmena (a-z, A-Z), čísla (0-9) a podtržítka (_).', + 'error_user_name_exists' => 'Zadané uživatelské jméno již existuje v databázi.', + 'error_user_email_bad_length' => 'E-mailová adresa musí obsahovat 5 až 255 znaků .', + 'error_user_email_invalid' => 'E-mailová adresa je neplatná', + 'error_user_level_invalid' => 'Zadané oprávnenie je neplatné.', + 'error_user_no_match' => 'Užívateľ nebol najdený.', + 'error_user_password_invalid' => 'Zadané heslo je neplatné.', + 'error_user_password_no_match' => 'Zadaná heslá sa nezhodujú.', + ), + 'log' => array( + 'title' => 'Záznamy logu', + 'type' => 'Typ', + 'status' => 'Stav', + 'email' => 'E-mail', + 'sms' => 'SMS', + 'pushover' => 'Pushover', + 'no_logs' => 'Žiadne záznamy', + ), + 'servers' => array( + 'server' => 'Server', + 'status' => 'Stav', + 'label' => 'Popis', + 'domain' => 'Doména/IP', + 'timeout' => 'Časový limit', + 'timeout_description' => 'Počet sekúnd čakania na odpoveď serveru.', + 'authentication_settings' => 'Nastavenie autentizacie (voliteľný)', + 'website_username' => 'Užívateľské meno', + 'website_username_description' => 'Užívateľské meno pre prístup na stránku. (Len Apache autorizácia je podporovaná.)', + 'website_password' => 'Heslo', + 'website_password_description' => 'Heslo pre prístup na stránku. Heslo je v databázi šifrované.', + 'fieldset_monitoring' => 'Monitoring', + 'fieldset_permissions' => 'Oprávnenie', + 'port' => 'Port', + 'custom_port' => 'Užívateľský Port', + 'popular_ports' => 'Populárne Porty', + 'please_select' => 'Prosím vyberte', + 'type' => 'Typ', + 'type_website' => 'Web', + 'type_service' => 'Služba', + 'pattern' => 'Vyhledat reťazec/vzor', + 'pattern_description' => 'Pokiaľ reťazec nebude na webe nájdený, bude server označený ako offline. Regulárne výrazy sú povolené.', + 'last_check' => 'Posledná kontrola', + 'last_online' => 'Naposledy online', + 'monitoring' => 'Monitoring', + 'no_monitoring' => 'Žiadne monitorované služby', + 'email' => 'E-mail', + 'send_email' => 'Odoslať e-mail', + 'sms' => 'SMS', + 'send_sms' => 'Odoslať SMS', + 'pushover' => 'Pushover', + 'users' => 'Užívatelia', + 'delete_title' => 'Zmazať server', + 'delete_message' => 'Naozaj si prajete zmazať \'%1\'?', + 'deleted' => 'Server zmazaný.', + 'updated' => 'Server aktualizovaný.', + 'inserted' => 'Server pridaný.', + 'latency' => 'Latencia', + 'latency_max' => 'Latencia (maximum)', + 'latency_min' => 'Latencia (minimum)', + 'latency_avg' => 'Latencia (priemer)', + 'uptime' => 'Uptime', + 'year' => 'Rok', + 'month' => 'Mesiac', + 'week' => 'Týždeň', + 'day' => 'Deň', + 'hour' => 'Hodina', + 'warning_threshold' => 'Stropná hranica varovania', + 'warning_threshold_description' => 'Počet neúspešných pokusov pred označením serveru ako offline.', + 'chart_last_week' => 'Minulý týždeň', + 'chart_history' => 'História', + // Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html + 'chart_day_format' => '%Y-%m-%d', + 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', + 'chart_short_date_format' => '%m/%d %H:%M', + 'chart_short_time_format' => '%H:%M', + 'warning_notifications_disabled_sms' => 'SMS upozornenia sú vypnuté.', + 'warning_notifications_disabled_email' => 'E-mailové upozornenia sú vypnuté.', + 'warning_notifications_disabled_pushover' => 'Pushover upozornenia sú vypnuté.', + 'error_server_no_match' => 'Server nenájdený.', + 'error_server_label_bad_length' => 'Popisok musí obsahovať 1 až 255 znakov.', + 'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovať 1 až 255 znakov.', + 'error_server_ip_bad_service' => 'IP adresa nie je platná.', + 'error_server_ip_bad_website' => 'URL webu nie je platná.', + 'error_server_type_invalid' => 'Zvolený typ serveru nie je platný', + 'error_server_warning_threshold_invalid' => 'Hranica varovania musí byť číslo väčšie ako 0.', + ), + 'config' => array( + 'general' => 'Všeobecné', + 'language' => 'Jazyk', + 'show_update' => 'Kontrolovať aktualizácie?', + 'password_encrypt_key' => 'Šifrovací kľúč pre heslá', + 'password_encrypt_key_note' => 'Týmto klúčom sa šifrujú heslá, ktoré sa ukladajú na serveroch pre prístup na webové stránky. Ak kľúč zmeníte, budú uložené heslá neplatné!', + 'email_status' => 'Povoliť odosielanie e-mailu', + 'email_from_email' => 'E-mailová adresa odosielateľa', + 'email_from_name' => 'Jméno odosielateľa', + 'email_smtp' => 'Zapnúť SMTP', + 'email_smtp_host' => 'SMTP adresa', + 'email_smtp_port' => 'SMTP port', + 'email_smtp_security' => 'SMTP zabezpečenie', + 'email_smtp_security_none' => 'žiadne', + 'email_smtp_username' => 'SMTP užívateľské meno', + 'email_smtp_password' => 'SMTP heslo', + 'email_smtp_noauth' => 'Nechajte prázdne pre použitie SMTP bez hesla', + 'sms_status' => 'Povoliť odosielanie textových správ', + 'sms_gateway' => 'Brána použitá pro odosielanie správ', + 'sms_gateway_mosms' => 'Mosms', + 'sms_gateway_mollie' => 'Mollie', + 'sms_gateway_spryng' => 'Spryng', + 'sms_gateway_inetworx' => 'Inetworx', + 'sms_gateway_clickatell' => 'Clickatell', + 'sms_gateway_textmarketer' => 'Textmarketer', + 'sms_gateway_smsglobal' => 'SMSGlobal', + 'sms_gateway_octopush' => 'Octopush', + 'sms_gateway_smsit' => 'Smsit', + 'sms_gateway_freevoipdeal' => 'FreeVoipDeal', + 'sms_gateway_freemobilesms' => 'FreeMobileSMS', + 'sms_gateway_clicksend' => 'ClickSend', + 'sms_gateway_nexmo' => 'Nexmo', + 'sms_gateway_username' => 'Užívateľské meno brány', + 'sms_gateway_password' => 'Heslo brány', + 'sms_from' => 'Telefónne číslo odosielateľa', + 'pushover_status' => 'Povoliť zasielanie Pushover správ', + 'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac na webe Pushover', + 'pushover_clone_app' => 'Kliknite pre vytvorenie Pushover aplikácie', + 'pushover_api_token' => 'Pushover App API Token', + 'pushover_api_token_description' => 'Pred použitím Pushoveru sa musíte registrovať a získať API Token.', + 'alert_type' => 'Zvoľte kedy si prajete byť upozornení.', + 'alert_type_description' => 'Zmena stavu: '. + 'Obdržíte upozornenie pri zmene stavu, teda: online -> offline alebo offline -> online.
'. + '
Offline: '. + 'Obdržíte upozornenie, keď server prejde *PO PRVÝ KRÁT* do offline stavu. Napríklad, '. + 'pokiaľ je cron nastavený na 15 minút a sledovaný server bude offline mezi 01:00 a 06:00, '. + 'tak obdržíte upozornenie iba o 01:00.
'. + '
Vždy: '. + 'Obdržíte upozornenie pri každom spustení kontroly, teda aj pokiaľ bude server offline niekoľko hodín.', + 'alert_type_status' => 'Zmena stavu', + 'alert_type_offline' => 'Offline', + 'alert_type_always' => 'Vždy', + 'log_status' => 'Log', + 'log_status_description' => 'Pokiaľ je Log nastavený na hodnotu TRUE, systém do neho zapíše všetky upozornenia.', + 'log_email' => 'Logovať odoslané e-maily', + 'log_sms' => 'Logovať odoslané textové správy', + 'log_pushover' => 'Logovať odoslané Pushover správy', + 'updated' => 'Nastavenie bolo aktualizované.', + 'tab_email' => 'E-mail', + 'tab_sms' => 'SMS', + 'tab_pushover' => 'Pushover', + 'settings_email' => 'Nastavenie e-mailov', + 'settings_sms' => 'Nastavenie textových správ', + 'settings_pushover' => 'Nastavenie Pushover', + 'settings_notification' => 'Nastavenie upozornení', + 'settings_log' => 'Nastavenie logu', + 'auto_refresh' => 'Automaticky obnoviť', + 'auto_refresh_servers' => + 'Automaticky obnoviť stránku Servery.
'. + ''. + 'Čas v sekundách, 0 pre vypnutie automatického obnovenia.'. + '', + 'seconds' => 'sekúnd', + 'test' => 'Test', + 'test_email' => 'E-mail bude odoslaný na adresu uvedenú v užívateľskom profile.', + 'test_sms' => 'SMS bude odoslaná na telefónne číslo uvedené v užívateľskom profile.', + 'test_pushover' => 'Pushover upozornenie bude odoslané užívateľovi/zariadeniu podľa nastavení v užívateľskom profile.', + 'send' => 'Odoslať', + 'test_subject' => 'Test', + 'test_message' => 'Testovacia správa', + 'email_sent' => 'E-mail odoslaný', + 'email_error' => 'Chyba pri odosielaní e-mailu', + 'sms_sent' => 'SMS odoslaná', + 'sms_error' => 'Chyba pri odosielaní SMS', + 'sms_error_nomobile' => 'Nebolo možné odoslať SMS: v užívateľskom profile nebylo nájdené platné telefónne číslo.', + 'pushover_sent' => 'Pushover upozornenie odoslané.', + 'pushover_error' => 'Nastala chyba pri odosielaní Pushover upozornenia: %s', + 'pushover_error_noapp' => 'Nebolo možné odoslať testovacie upozornenie: v globálnom nastavení nebol nájdený žiaden API token.', + 'pushover_error_nokey' => 'Nebylo možné odoslať testovacie upozornenie: ve vašom profile nie je definovaný Pushover key.', + 'log_retention_period' => 'Rotácia logu', + 'log_retention_period_description' => 'Počet dní po které budú uchované logy upozornení. Vložte 0 pre vypnutie autorotáce.', + 'log_retention_days' => 'dní', + ), + // for newlines in the email messages use
+ 'notifications' => array( + 'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%', + 'off_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je offline', + 'off_email_body' => 'Nebolo možné spojiť sa so serverom:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Chyba: %ERROR%
Dátum: %DATE%', + 'off_pushover_title' => 'Server \'%LABEL%\' je offline', + 'off_pushover_message' => 'Nebolo možné spojiť sa so serverom:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Chyba: %ERROR%
Dátum: %DATE%', + 'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%', + 'on_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je online', + 'on_email_body' => "Server '%LABEL%' je opäť online

Server: %LABEL%
IP: %IP%
Port: %PORT%
Dátum: %DATE%", + 'on_pushover_title' => 'Server \'%LABEL%\' je online', + 'on_pushover_message' => 'Server \'%LABEL%\' je znovu online:

Server: %LABEL%
IP: %IP%
Port: %PORT%
Dátum: %DATE%', + ), + 'login' => array( + 'welcome_usermenu' => 'Vitajte, %user_name%', + 'title_sign_in' => 'Prosím prihláste sa', + 'title_forgot' => 'Zabudnuté heslo?', + 'title_reset' => 'Obnova hesla', + 'submit' => 'Odoslať', + 'remember_me' => 'Zapamätať údaje', + 'login' => 'Prihlásiť', + 'logout' => 'Odhlásiť', + 'username' => 'Užívateľské meno', + 'password' => 'Heslo', + 'password_repeat' => 'Opakujte heslo', + 'password_forgot' => 'Zabudnuté heslo?', + 'password_reset' => 'Obnoviť heslo', + 'password_reset_email_subject' => 'Obnoviť heslo pre PHP Server Monitor', + 'password_reset_email_body' => 'Použite následujúci odkaz pre obnovenie hesla. Odkaz je platný jednu hodinu.

%link%', + 'error_user_incorrect' => 'Zadané užívateľské meno nebolo nájdené.', + 'error_login_incorrect' => 'Prihlásenie nebolo úspešné.', + 'error_login_passwords_nomatch' => 'Zadané heslá sa nezhodujú.', + 'error_reset_invalid_link' => 'Odkaz je neplatný.', + 'success_password_forgot' => 'Na vašu e-mailovú adresu bol zaslaný e-mail s informáciami pre obnovu hesla.', + 'success_password_reset' => 'Vaše heslo bolo úspešne obnovené. Prosím prihláste sa.', + ), + 'error' => array( + '401_unauthorized' => 'Nedostatočné oprávnenia', + '401_unauthorized_description' => 'Nemáte oprávnenie zobraziť túto stránku.', + ), +); diff --git a/src/lang/zh_CN.lang.php b/src/lang/zh_CN.lang.php index 864b3b01..f82ada0d 100644 --- a/src/lang/zh_CN.lang.php +++ b/src/lang/zh_CN.lang.php @@ -40,8 +40,8 @@ $sm_lang = array( 'date' => '日期', 'message' => '消息', 'yes' => '是', - 'no' => '否o', - 'insert' => '插入', + 'no' => '否', + 'insert' => '新增', 'add_new' => '添加', 'update_available' => '发现新版本({version}) http://www.phpservermonitor.org.', 'back_to_top' => '返回顶部', @@ -84,13 +84,13 @@ $sm_lang = array( 'mobile' => '手机', 'email' => '邮件', 'pushover' => 'Pushover', - 'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See their website for more info.', + 'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 Pushover 官网.', '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.', - 'delete_title' => 'Delete User', - 'delete_message' => 'Are you sure you want to delete user \'%1\'?', - 'deleted' => 'User deleted.', + 'pushover_device_description' => '要发送信息的设备名. 留空则发送到所有设备.', + 'delete_title' => '删除用户', + 'delete_message' => '确认删除用户 \'%1\'?', + 'deleted' => '用户已删除.', 'updated' => '用户已更新.', 'inserted' => '用户已添加.', 'profile' => '个人资料', @@ -112,16 +112,26 @@ $sm_lang = array( 'email' => '邮件', 'sms' => '短信', 'pushover' => 'Pushover', - 'no_logs' => 'No logs', + 'no_logs' => '没有日志', ), 'servers' => array( 'server' => '服务器', 'status' => '状态', 'label' => '标签', 'domain' => '域名/IP', - 'timeout' => 'Timeout', - 'timeout_description' => 'Number of seconds to wait for the server to respond.', + 'timeout' => '超时时间', + 'timeout_description' => '等待服务器响应的时间.', + 'authentication_settings' => '访问权限设置 (可选)', + 'website_username' => '用户名', + 'website_username_description' => '网站分配的用户名.', + 'website_password' => '密码', + 'website_password_description' => '网站分配的密码,密码将会加密存放', + 'fieldset_monitoring' => '通知', + 'fieldset_permissions' => '权限', 'port' => '端口', + 'custom_port' => '指定端口', + 'popular_ports' => '默认端口', + 'please_select' => '请选择', 'type' => '类型', 'type_website' => '网站', 'type_service' => '服务', @@ -130,16 +140,16 @@ $sm_lang = array( 'last_check' => '最后检查', 'last_online' => '最后在线', 'monitoring' => '监控中', - 'no_monitoring' => 'No monitoring', + 'no_monitoring' => '未监控', 'email' => '邮件', 'send_email' => '发送邮件', 'sms' => '短信', 'send_sms' => '发送短信', 'pushover' => 'Pushover', - 'users' => 'Users', - 'delete_title' => 'Delete Server', - 'delete_message' => 'Are you sure you want to delete server \'%1\'?', - 'deleted' => 'Server deleted.', + 'users' => '用户', + 'delete_title' => '删除服务器', + 'delete_message' => '确认删除服务器 \'%1\'?', + 'deleted' => '服务器已删除.', 'updated' => '服务器已更新.', 'inserted' => '服务器已添加.', 'latency' => '延迟', @@ -161,16 +171,16 @@ $sm_lang = array( 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'chart_short_date_format' => '%m/%d %H:%M', 'chart_short_time_format' => '%H:%M', - 'warning_notifications_disabled_sms' => 'SMS notifications are disabled.', - 'warning_notifications_disabled_email' => 'Email notifications are disabled.', - 'warning_notifications_disabled_pushover' => 'Pushover 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.', - 'error_server_ip_bad_service' => 'The IP address is not valid.', - 'error_server_ip_bad_website' => 'The website URL is not valid.', - 'error_server_type_invalid' => 'The selected server type is invalid.', - 'error_server_warning_threshold_invalid' => 'The warning threshold must be a valid integer greater than 0.', + 'warning_notifications_disabled_sms' => 'SMS 通知不可用.', + 'warning_notifications_disabled_email' => 'Email 通知不可用.', + 'warning_notifications_disabled_pushover' => 'Pushover 通知不可用.', + 'error_server_no_match' => '服务器不存在.', + 'error_server_label_bad_length' => '标签 长度要求 1 ~ 255 字符.', + 'error_server_ip_bad_length' => 'domain / IP 长度要求 1 ~ 255 字符.', + 'error_server_ip_bad_service' => '非法 IP.', + 'error_server_ip_bad_website' => '非法 URL.', + 'error_server_type_invalid' => '非法选项.', + 'error_server_warning_threshold_invalid' => '报警阈值为大于 0 的数字.', ), 'config' => array( 'general' => '通用', @@ -182,8 +192,8 @@ $sm_lang = array( 'email_smtp' => '使用SMTP发送', 'email_smtp_host' => 'SMTP主机', 'email_smtp_port' => 'SMTP端口', - 'email_smtp_security' => 'SMTP security', - 'email_smtp_security_none' => 'None', + 'email_smtp_security' => 'SMTP 设置', + 'email_smtp_security_none' => '空', 'email_smtp_username' => 'SMTP用户名', 'email_smtp_password' => 'SMTP密码', 'email_smtp_noauth' => '留空为无验证', @@ -194,7 +204,7 @@ $sm_lang = array( 'sms_gateway_spryng' => 'Spryng', 'sms_gateway_inetworx' => 'Inetworx', 'sms_gateway_clickatell' => 'Clickatell', - 'sms_gateway_textmarketer' => 'Textmarketer', + 'sms_gateway_textmarketer' => 'Textmarketer', 'sms_gateway_smsglobal' => 'SMSGlobal', 'sms_gateway_octopush' => 'Octopush', 'sms_gateway_smsit' => 'Smsit', @@ -203,11 +213,11 @@ $sm_lang = array( 'sms_gateway_username' => 'SMS网关用户名', 'sms_gateway_password' => 'SMS网关密码', 'sms_from' => '发信人电话号', - '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', - '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.', + 'pushover_status' => '允许 Pushover 通知', + 'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 Pushover 官网.', + 'pushover_clone_app' => '点此创建 Pushover App', + 'pushover_api_token' => 'Pushover API Token', + 'pushover_api_token_description' => '请先 注册Pushover 并获取 Api Token.', 'alert_type' => '如果想要收到提醒请选中此项.', 'alert_type_description' => '状态变化: '. '服务器 online -> offline 或 offline -> online 的状态变化将会收到提醒.
'. @@ -224,17 +234,18 @@ $sm_lang = array( 'log_status_description' => '如果状态记录设置为开, 提醒发送时均会保存记录.', 'log_email' => '记录脚本所发邮件?', 'log_sms' => '记录脚本所发短信SMS?', - 'log_pushover' => 'Log pushover messages sent by the script', + 'log_pushover' => '记录脚本所发pushover消息?', 'updated' => '设置已更新.', 'tab_email' => '邮件发送设置', 'tab_sms' => '短信发送设置', 'tab_pushover' => 'Pushover', 'settings_email' => '邮件发送设置', 'settings_sms' => '短信发送设置', - 'settings_pushover' => 'Pushover settings', + 'settings_pushover' => 'Pushover 设置', 'settings_notification' => '提醒设置', 'settings_log' => '日志设置', - 'auto_refresh' => 'Auto-refresh', + 'auto_refresh' => '自动刷新', + 'password_encrypt_key' => '加密密钥', 'auto_refresh_servers' => '自动刷新服务器页.
'. ''. @@ -242,24 +253,24 @@ $sm_lang = array( '', 'seconds' => 'seconds', 'test' => 'Test', - '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.', - 'send' => 'Send', - 'test_subject' => 'Test', - 'test_message' => 'Test message', - 'email_sent' => 'Email sent', - 'email_error' => 'Error in email sending', - 'sms_sent' => 'Sms sent', - 'sms_error' => 'Error in sms sending', - 'sms_error_nomobile' => 'Unable to send test SMS: no valid phone number found in your profile.', - 'pushover_sent' => 'Pushover notification sent', - '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.', - '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', + 'test_email' => '将发送一封邮件到您账户设置的邮件地址.', + 'test_sms' => '将发送一封短信到您账户设置的手机号码.', + 'test_pushover' => '将发送一条 Pushover 通知到您账户设置的 key/device 设备上.', + 'send' => '发送', + 'test_subject' => '测试', + 'test_message' => '测试信息', + 'email_sent' => '发送Email', + 'email_error' => 'Error 发送出错', + 'sms_sent' => '发送Sms', + 'sms_error' => '短信发送出错', + 'sms_error_nomobile' => '无法发送短信: 您的账号未设置有效手机号码.', + 'pushover_sent' => '发送Pushover通知', + 'pushover_error' => 'Pushover通知发送出错: %s', + 'pushover_error_noapp' => 'Pushover通知发送出错: no Pushover App API token found in the global configuration.', + 'pushover_error_nokey' => 'Pushover通知无法发送: no Pushover key found in your profile.', + 'log_retention_period' => '日志保留时长', + 'log_retention_period_description' => '日志存档保留时间,0为禁用日志清理', + 'log_retention_days' => '天', ), // for newlines in the email messages use
'notifications' => array( @@ -298,7 +309,7 @@ $sm_lang = array( 'success_password_reset' => '密码重设成功.请登录.', ), 'error' => array( - '401_unauthorized' => 'Unauthorized', - '401_unauthorized_description' => 'You do not have the privileges to view this page.', + '401_unauthorized' => '未授权的请求', + '401_unauthorized_description' => '未授权的请求.', ), ); diff --git a/src/psm/Module/Config/Controller/ConfigController.php b/src/psm/Module/Config/Controller/ConfigController.php index bdac4eb4..f733c60d 100644 --- a/src/psm/Module/Config/Controller/ConfigController.php +++ b/src/psm/Module/Config/Controller/ConfigController.php @@ -36,6 +36,7 @@ class ConfigController extends AbstractController { * @var array $checkboxes */ protected $checkboxes = array( + 'proxy', 'email_status', 'email_smtp', 'sms_status', @@ -54,6 +55,9 @@ class ConfigController extends AbstractController { * @var array $fields */ protected $fields = array( + 'proxy_url', + 'proxy_user', + 'proxy_password', 'email_from_name', 'email_from_email', 'email_smtp_host', @@ -298,11 +302,16 @@ class ConfigController extends AbstractController { 'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'), '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'), 'label_general' => psm_get_lang('config', 'general'), 'label_language' => psm_get_lang('config', 'language'), 'label_show_update' => psm_get_lang('config', 'show_update'), 'label_password_encrypt_key' => psm_get_lang('config', 'password_encrypt_key'), 'label_password_encrypt_key_note' => psm_get_lang('config', 'password_encrypt_key_note'), + 'label_proxy' => psm_get_lang('config', 'proxy'), + 'label_proxy_url' => psm_get_lang('config', 'proxy_url'), + 'label_proxy_user' => psm_get_lang('config', 'proxy_user'), + 'label_proxy_password' => psm_get_lang('config', 'proxy_password'), 'label_email_status' => psm_get_lang('config', 'email_status'), 'label_email_from_email' => psm_get_lang('config', 'email_from_email'), 'label_email_from_name' => psm_get_lang('config', 'email_from_name'), @@ -326,6 +335,7 @@ class ConfigController extends AbstractController { 'label_sms_gateway_freevoipdeal' => psm_get_lang('config', 'sms_gateway_freevoipdeal'), 'label_sms_gateway_smsglobal' => psm_get_lang('config', 'sms_gateway_smsglobal'), 'label_sms_gateway_nexmo' => psm_get_lang('config', 'sms_gateway_nexmo'), + 'label_sms_gateway_smsgw' => psm_get_lang('config', 'sms_gateway_smsgw'), 'label_sms_gateway_octopush' => psm_get_lang('config', 'sms_gateway_octopush'), 'label_sms_gateway_freemobilesms' => psm_get_lang('config', 'sms_gateway_freemobilesms'), 'label_sms_gateway_clicksend' => psm_get_lang('config', 'sms_gateway_clicksend'), @@ -354,6 +364,8 @@ class ConfigController extends AbstractController { 'label_log_sms' => psm_get_lang('config', 'log_sms'), 'label_log_pushover' => psm_get_lang('config', 'log_pushover'), 'label_log_pushbullet' => psm_get_lang('config', 'log_pushover'), + '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'), 'label_auto_refresh_servers' => psm_get_lang('config', 'auto_refresh_servers'), 'label_seconds' => psm_get_lang('config', 'seconds'), @@ -364,4 +376,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 dad31b14..cae533f8 100644 --- a/src/psm/Module/Install/Controller/InstallController.php +++ b/src/psm/Module/Install/Controller/InstallController.php @@ -120,11 +120,13 @@ class InstallController extends AbstractController { } $config = array( - 'host' => 'localhost', - 'name' => '', - 'user' => '', - 'pass' => '', - 'prefix' => 'psm_', + 'db_host' => 'localhost', + 'db_port' => '3306' + 'db_name' => '', + 'db_user' => '', + 'db_pass' => '', + 'db_prefix' => 'psm_', + 'base_url' => '', ); $changed = false; @@ -140,10 +142,11 @@ class InstallController extends AbstractController { if($changed) { // test db connection $this->db = new \psm\Service\Database( - $config['host'], - $config['user'], - $config['pass'], - $config['name'] + $config['db_host'], + $config['db_port'], + $config['db_user'], + $config['db_pass'], + $config['db_name'] ); if($this->db->status()) { @@ -275,11 +278,11 @@ class InstallController extends AbstractController { * @param array $db_vars prefix,user,pass,name,host * @return boolean|string TRUE on success, string with config otherwise */ - protected function writeConfigFile($db_vars) { + protected function writeConfigFile($array_config) { $config = " $value) { - $line = "define('PSM_DB_{key}', '{value}');".PHP_EOL; + foreach($array_config as $key => $value) { + $line = "define('PSM_{key}', '{value}');".PHP_EOL; $line = str_replace( array('{key}', '{value}'), array(strtoupper($key), $value), @@ -307,8 +310,9 @@ class InstallController extends AbstractController { 'pass' => '', 'name' => '', 'host' => '', + 'port' => '3306' ); - $pattern = "/define\('SM_DB_{key}', '(.*?)'/u"; + $pattern = "/define\('SM_{key}', '(.*?)'/u"; foreach($vars as $key => $value) { $pattern_key = str_replace('{key}', strtoupper($key), $pattern); diff --git a/src/psm/Module/Server/Controller/ServerController.php b/src/psm/Module/Server/Controller/ServerController.php index ff5fa795..87ba3746 100644 --- a/src/psm/Module/Server/Controller/ServerController.php +++ b/src/psm/Module/Server/Controller/ServerController.php @@ -280,6 +280,20 @@ class ServerController extends AbstractServerController { // validate the lot $server_validator = new \psm\Util\Server\ServerValidator($this->db); + // format port from http/s url + if($clean['type'] == 'website' && empty($clean['port'])) { + $tmp = parse_url($clean["ip"]); + if(isset($tmp["port"])) { + $clean["port"] = $tmp["port"]; + } elseif ($tmp["scheme"] === "https") { + $clean["port"] = 443; + } elseif ($tmp["scheme"] === "http") { + $clean["port"] = 80; + } elseif ($tmp["scheme"] === "rdp") { + $clean["port"] = 3389; + } + } + try { if($this->server_id > 0) { $server_validator->serverId($this->server_id); @@ -449,6 +463,7 @@ class ServerController extends AbstractServerController { 'label_type' => psm_get_lang('servers', 'type'), 'label_website' => psm_get_lang('servers', 'type_website'), 'label_service' => psm_get_lang('servers', 'type_service'), + 'label_ping' => psm_get_lang('servers', 'type_ping'), 'label_pattern' => psm_get_lang('servers', 'pattern'), 'label_pattern_description' => psm_get_lang('servers', 'pattern_description'), 'label_last_check' => psm_get_lang('servers', 'last_check'), diff --git a/src/psm/Module/Server/Controller/StatusController.php b/src/psm/Module/Server/Controller/StatusController.php index 4ef5aca9..600e9be1 100644 --- a/src/psm/Module/Server/Controller/StatusController.php +++ b/src/psm/Module/Server/Controller/StatusController.php @@ -37,6 +37,7 @@ class StatusController extends AbstractServerController { function __construct(Database $db, \Twig_Environment $twig) { parent::__construct($db, $twig); + $this->setCSRFKey('status'); $this->setActions(array('index', 'saveLayout'), 'index'); } @@ -91,6 +92,13 @@ class StatusController extends AbstractServerController { $this->twig->addGlobal('auto_refresh', true); $this->twig->addGlobal('auto_refresh_seconds', $auto_refresh_seconds); } + + if($this->isXHR() || isset($_SERVER["HTTP_X_REQUESTED_WITH"])) { + $this->xhr = true; + //disable auto refresh in ajax return html + $layout_data["auto_refresh"] = 0; + } + return $this->twig->render('module/server/status/index.tpl.html', $layout_data); } diff --git a/src/psm/Service/Database.php b/src/psm/Service/Database.php index c5296170..16ff69fc 100644 --- a/src/psm/Service/Database.php +++ b/src/psm/Service/Database.php @@ -35,6 +35,12 @@ class Database { */ protected $db_host; + /** + * DB port + * @var string $db_port + */ + protected $db_port = 3306; + /** * DB name * @var string $db_name @@ -81,9 +87,10 @@ class Database { * @param string $pass * @param string $db */ - function __construct($host = null, $user = null, $pass = null, $db = null) { + function __construct($host = null, $user = null, $pass = null, $db = null, $port = null) { if($host != null && $user != null && $pass !== null && $db != null) { $this->db_host = $host; + $this->db_port = $port || 3306; $this->db_name = $db; $this->db_user = $user; $this->db_pass = $pass; @@ -498,7 +505,7 @@ class Database { // Initizale connection try { $this->pdo = new \PDO( - 'mysql:host='.$this->db_host.';dbname='.$this->db_name.';charset=utf8', + 'mysql:host='.$this->db_host.';port='.$this->db_port.';dbname='.$this->db_name.';charset=utf8', $this->db_user, $this->db_pass ); diff --git a/src/psm/Txtmsg/Mollie.php b/src/psm/Txtmsg/Mollie.php index 7c173777..1824c802 100644 --- a/src/psm/Txtmsg/Mollie.php +++ b/src/psm/Txtmsg/Mollie.php @@ -61,7 +61,7 @@ class Mollie extends Core { public function sendSMS($message) { $recipients = implode(',', $this->recipients); - $result = $this->_auth_https_post('www.mollie.nl', '/xml/sms/', + $result = $this->_auth_https_post('api.messagebird.com', '/xml/sms/', 'gateway='.urlencode($this->gateway). '&username='.urlencode($this->username). '&password='.urlencode($this->password). @@ -97,4 +97,4 @@ class Mollie extends Core { } return $buf; } -} \ No newline at end of file +} diff --git a/src/psm/Txtmsg/Smsgw.php b/src/psm/Txtmsg/Smsgw.php new file mode 100644 index 00000000..5fafb937 --- /dev/null +++ b/src/psm/Txtmsg/Smsgw.php @@ -0,0 +1,61 @@ +. + * + * @package phpservermon + * @author Daif Alotaibi + * @copyright Copyright (c) 2008-2015 Pepijn Over + * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 + * @version Release: @package_version@ + * @link http://www.phpservermonitor.org/ + **/ + +namespace psm\Txtmsg; + +class Smsgw extends Core { + + /** + * Send a text message to one or more recipients + * + * @param string $message + * @return boolean + */ + + public function sendSMS($message) { + $url = 'http://api.smsgw.net/SendBulkSMS'; + $post = array( + 'strUserName' => $this->username, + 'strPassword' => $this->password, + 'strTagName' => $this->originator, + 'strRecepientNumbers' => implode(';', $this->recipients), + 'strMessage' => $message, + ); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ch, CURLOPT_HEADER, FALSE); + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $post); + $data = curl_exec($ch); + if($data == '1') { + $this->success = true; + } + return $this->success; + } + +} diff --git a/src/psm/Txtmsg/Spryng.php b/src/psm/Txtmsg/Spryng.php index 2a1a7028..482aafba 100644 --- a/src/psm/Txtmsg/Spryng.php +++ b/src/psm/Txtmsg/Spryng.php @@ -46,6 +46,7 @@ class Spryng extends Core { public function sendSMS($message) { $recipients = implode(',', $this->recipients); + $message = urlencode($message); $result = $this->_auth_https_post('http://www.spryng.nl', '/SyncTextService', '?OPERATION=send' . diff --git a/src/psm/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index 4150b5a3..b5f599dc 100644 --- a/src/psm/Util/Install/Installer.php +++ b/src/psm/Util/Install/Installer.php @@ -130,6 +130,10 @@ class Installer { $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'), + ('proxy', '0'), + ('proxy_url', ''), + ('proxy_user', ''), + ('proxy_password', ''), ('email_status', '1'), ('email_from_email', 'monitor@example.org'), ('email_from_name', 'Server Monitor'), @@ -218,7 +222,7 @@ class Installer { `ip` varchar(500) NOT NULL, `port` int(5) unsigned NOT NULL, `label` varchar(255) NOT NULL, - `type` enum('service','website') NOT NULL default 'service', + `type` enum('ping','service','website') NOT NULL default 'service', `pattern` varchar(255) NOT NULL, `status` enum('on','off') NOT NULL default 'on', `error` varchar(255) NULL, @@ -445,6 +449,11 @@ class Installer { psm_update_conf('password_encrypt_key', sha1(microtime())); $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` CHANGE `ip` `ip` VARCHAR(500) NOT NULL;"; $queries[] = "ALTER TABLE `" . PSM_DB_PREFIX . "servers` ADD `website_username` varchar(255) NULL, ADD `website_password` varchar(255) NULL AFTER `website_username`;"; + $queries[] = "INSERT INTO `" . PSM_DB_PREFIX . "config` (`key`, `value`) VALUE + ('proxy', '0'), + ('proxy_url', ''), + ('proxy_user', ''), + ('proxy_password', '');"; $this->execSQL($queries); diff --git a/src/psm/Util/Server/ServerValidator.php b/src/psm/Util/Server/ServerValidator.php index 8b23d14f..4c97333f 100644 --- a/src/psm/Util/Server/ServerValidator.php +++ b/src/psm/Util/Server/ServerValidator.php @@ -101,6 +101,11 @@ class ServerValidator { throw new \InvalidArgumentException('server_ip_bad_service'); } break; + case 'ping': + if(!filter_var($value, FILTER_VALIDATE_IP)) { + throw new \InvalidArgumentException('server_ip_bad_service'); + } + break; } return true; @@ -113,7 +118,7 @@ class ServerValidator { * @throws \InvalidArgumentException */ public function type($type) { - if(!in_array($type, array('service', 'website'))) { + if(!in_array($type, array('ping', 'service', 'website'))) { throw new \InvalidArgumentException('server_type_invalid'); } return true; diff --git a/src/psm/Util/Server/Updater/StatusUpdater.php b/src/psm/Util/Server/Updater/StatusUpdater.php index 84b147e1..ad787b2f 100644 --- a/src/psm/Util/Server/Updater/StatusUpdater.php +++ b/src/psm/Util/Server/Updater/StatusUpdater.php @@ -90,6 +90,9 @@ class StatusUpdater { } switch($this->server['type']) { + case 'ping': + $this->status_new = $this->updatePing($max_runs); + break; case 'service': $this->status_new = $this->updateService($max_runs); break; @@ -134,6 +137,41 @@ class StatusUpdater { } + /** + * Check the current servers ping status - Code from http://stackoverflow.com/a/20467492 + * @param int $max_runs + * @param int $run + * @return boolean + */ + protected function updatePing($max_runs, $run = 1) { + $errno = 0; + // save response time + $starttime = microtime(true); + // set ping payload + $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost"; + + $fp = @fsockopen ($this->server['ip'], $this->server['port'], $errno, $this->error, 10); + $socket = socket_create(AF_INET, SOCK_RAW, 1); + socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 10, 'usec' => 0)); + socket_connect($socket, $this->server['ip'], null); + + socket_send($socket, $package, strLen($package), 0); + if (socket_read($socket, 255)) { + $this->rtime = microtime(true) - $starttime; + $status = true; + } else { + $status = false; + } + socket_close($socket); + + // check if server is available and rerun if asked. + if(!$status && $run < $max_runs) { + return $this->updatePing($max_runs, $run + 1); + } + + return $status; + } + /** * Check the current server as a service * @param int $max_runs diff --git a/src/templates/default/main/body.tpl.html b/src/templates/default/main/body.tpl.html index 2197ac9e..4ce7dc56 100644 --- a/src/templates/default/main/body.tpl.html +++ b/src/templates/default/main/body.tpl.html @@ -6,14 +6,11 @@ {{ title }} - + - {% if auto_refresh %} - - {% endif %} diff --git a/src/templates/default/module/config/config.tpl.html b/src/templates/default/module/config/config.tpl.html index 8e5c33b7..855fa2d3 100644 --- a/src/templates/default/module/config/config.tpl.html +++ b/src/templates/default/module/config/config.tpl.html @@ -70,6 +70,32 @@  {{ label_log_retention_days }} + {{ label_settings_proxy }} +
+
+ +

{{ label_alert_proxy|raw }}

+
+
+
+ +
+ +

{{ label_alert_proxy_url|raw }}

+
+
+
+ +
+ +
+
+
+ +
+ +
+
@@ -174,6 +200,7 @@ + diff --git a/src/templates/default/module/install/config_new.tpl.html b/src/templates/default/module/install/config_new.tpl.html index 64fe07ab..200d45c3 100644 --- a/src/templates/default/module/install/config_new.tpl.html +++ b/src/templates/default/module/install/config_new.tpl.html @@ -10,35 +10,48 @@
{{ macro.csrf_input() }} +

Please enter the application url:

+
+ +
+ +
+

Please enter your database info:

- + +
+
+
+ +
+
- +
- +
- +
- +
@@ -60,4 +73,4 @@
{% endif %}
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/src/templates/default/module/server/server/update.tpl.html b/src/templates/default/module/server/server/update.tpl.html index 5a708885..ead54a30 100644 --- a/src/templates/default/module/server/server/update.tpl.html +++ b/src/templates/default/module/server/server/update.tpl.html @@ -20,6 +20,7 @@
@@ -47,6 +48,7 @@ +
diff --git a/src/templates/default/module/server/status/index.tpl.html b/src/templates/default/module/server/status/index.tpl.html index 4f579206..c66cde78 100644 --- a/src/templates/default/module/server/status/index.tpl.html +++ b/src/templates/default/module/server/status/index.tpl.html @@ -1,4 +1,5 @@
+
{% for server in servers_offline %} @@ -57,4 +58,17 @@
-
\ No newline at end of file + + +{% if auto_refresh %} + +{% endif %} \ No newline at end of file diff --git a/static/js/scripts.js b/static/js/scripts.js index fb29cb63..46669303 100755 --- a/static/js/scripts.js +++ b/static/js/scripts.js @@ -135,6 +135,7 @@ function psm_xhr(mod, params, method, on_complete, options) { function psm_saveLayout(layout) { var params = { action: 'saveLayout', + csrf: $("input[name=saveLayout_csrf]").val(), layout: layout }; psm_xhr('server_status', params, 'POST');