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/CHANGELOG.rst b/CHANGELOG.rst index 2ff1ddc6..0c0069f7 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -21,7 +21,7 @@ v3.2.0 not yet released * #181: Added blank index files to prevent directory listing. * #237: Adding CSRF protection. * #287: Default language - English -* #286: Add popular ports drop dowwn +* #286: Add popular ports drop down * #269: Added Slovenian language * #96: Authentication for website checks 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 b307dc44..a1e5c180 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 ec725f67..02a84d22 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)'); } @@ -531,7 +541,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/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 07c1d5d1..8c3eb986 100755 --- a/src/lang/en_US.lang.php +++ b/src/lang/en_US.lang.php @@ -135,6 +135,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', @@ -188,6 +189,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', @@ -214,6 +219,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', @@ -234,6 +240,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', @@ -248,6 +256,7 @@ $sm_lang = array( 'settings_pushover' => 'Pushover 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/fr_FR.lang.php b/src/lang/fr_FR.lang.php index 6c7edbdf..b540de9e 100644 --- a/src/lang/fr_FR.lang.php +++ b/src/lang/fr_FR.lang.php @@ -282,7 +282,7 @@ $sm_lang = array( 'title_forgot' => 'Mot de passe oublié ?', 'title_reset' => 'Réinitialisation du mot de passe', 'submit' => 'Envoyer', - 'remember_me' => 'Se vouvenir de moi', + 'remember_me' => 'Se souvenir de moi', 'login' => 'Connexion', 'logout' => 'Déconnexion', 'username' => 'Nom', diff --git a/src/psm/Module/Config/Controller/ConfigController.php b/src/psm/Module/Config/Controller/ConfigController.php index d058de63..2fcaad1f 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', @@ -52,6 +53,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', @@ -293,11 +297,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'), @@ -321,6 +330,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'), @@ -346,6 +356,8 @@ 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_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'), @@ -356,4 +368,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..d948370e 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 c2c61db2..748f5434 100644 --- a/src/psm/Module/Server/Controller/ServerController.php +++ b/src/psm/Module/Server/Controller/ServerController.php @@ -286,6 +286,8 @@ class ServerController extends AbstractServerController { $clean["port"] = 443; } elseif ($tmp["scheme"] === "http") { $clean["port"] = 80; + } elseif ($tmp["scheme"] === "rdp") { + $clean["port"] = 3389; } } @@ -458,6 +460,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 5afde541..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'); } diff --git a/src/psm/Service/Database.php b/src/psm/Service/Database.php index c5296170..15cbf101 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 = (!empty($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/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index 6c3ee490..eacbb410 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, @@ -442,6 +446,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 fa7d252a..4ce7dc56 100644 --- a/src/templates/default/main/body.tpl.html +++ b/src/templates/default/main/body.tpl.html @@ -6,7 +6,7 @@ {{ title }} - + diff --git a/src/templates/default/module/config/config.tpl.html b/src/templates/default/module/config/config.tpl.html index 103c52a8..076890d8 100644 --- a/src/templates/default/module/config/config.tpl.html +++ b/src/templates/default/module/config/config.tpl.html @@ -69,6 +69,32 @@  {{ label_log_retention_days }} + {{ label_settings_proxy }} +
+
+ +

{{ label_alert_proxy|raw }}

+
+
+
+ +
+ +

{{ label_alert_proxy_url|raw }}

+
+
+
+ +
+ +
+
+
+ +
+ +
+
@@ -173,6 +199,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 2378d21e..4f26e357 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 77fe4c89..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 %} 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');