Merge branch 'develop' of https://github.com/phpservermon/phpservermon into develop
commit
2c5fe21cbb
19
.htaccess
19
.htaccess
|
@ -1 +1,20 @@
|
|||
Options -Indexes
|
||||
|
||||
<IfModule mod_expires.c>
|
||||
<FilesMatch "\.(js|jpg|jpeg|gif|png|css)$">
|
||||
ExpiresActive on
|
||||
ExpiresDefault "access plus 1 month"
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_deflate.c>
|
||||
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
|
||||
</IfModule>
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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', '');
|
||||
|
|
|
@ -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('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL /cron/status.cron.php was not found on this server.</p></body></html>');
|
||||
}
|
||||
}
|
||||
|
||||
$cron_timeout = PSM_CRON_TIMEOUT;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 "<?php \
|
||||
header('Location: /psm/index.php'); \
|
||||
?>" > /var/www/default/index.php
|
||||
?>" > /var/www/default/index.php
|
||||
|
|
|
@ -18,6 +18,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/sc
|
|||
<parameter key="path.templates">%path.src%templates</parameter>
|
||||
|
||||
<parameter key="db.host" type="constant">PSM_DB_HOST</parameter>
|
||||
<parameter key="db.port" type="constant">PSM_DB_PORT</parameter>
|
||||
<parameter key="db.user" type="constant">PSM_DB_USER</parameter>
|
||||
<parameter key="db.pass" type="constant">PSM_DB_PASS</parameter>
|
||||
<parameter key="db.name" type="constant">PSM_DB_NAME</parameter>
|
||||
|
@ -38,6 +39,7 @@ xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/sc
|
|||
<argument>%db.user%</argument>
|
||||
<argument>%db.pass%</argument>
|
||||
<argument>%db.name%</argument>
|
||||
<argument>%db.port%</argument>
|
||||
</service>
|
||||
|
||||
<service id="event" class="Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher">
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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' => '<b>Format:</b> 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.<br/>'.
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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'),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 = "<?php".PHP_EOL;
|
||||
|
||||
foreach($db_vars as $key => $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);
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
/**
|
||||
* PHP Server Monitor
|
||||
* Monitor your servers and websites.
|
||||
*
|
||||
* This file is part of PHP Server Monitor.
|
||||
* PHP Server Monitor is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PHP Server Monitor is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* 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/>.
|
||||
*
|
||||
* @package phpservermon
|
||||
* @author Daif Alotaibi <daif@daif.net>
|
||||
* @copyright Copyright (c) 2008-2015 Pepijn Over <pep@peplab.net>
|
||||
* @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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<title>{{ title }}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, minimum-scale=1">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<meta name="robots" content="noindex" />
|
||||
<meta name="theme-color" content="#424242">
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
||||
<link rel="icon" type="image/png" href="favicon.png" />
|
||||
|
|
|
@ -69,6 +69,32 @@
|
|||
<input type="text" class="input-mini" id="log_retention_period" name="log_retention_period" value="{{ log_retention_period }}" data-toggle="tooltip" title="{{ label_log_retention_period_description }}" /> {{ label_log_retention_days }}
|
||||
</div>
|
||||
</div>
|
||||
<legend>{{ label_settings_proxy }}</legend>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<label class="checkbox" for="proxy"><input type="checkbox" id="proxy" name="proxy[]" {{ proxy_checked|raw }} />{{ label_proxy }}</label>
|
||||
<p class="help-block">{{ label_alert_proxy|raw }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="proxy_url">{{ label_proxy_url }}</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="proxy_url" name="proxy_url" value="{{ proxy_url }}" maxlength="100" placeholder="{{ label_proxy_url }}" />
|
||||
<p class="help-block">{{ label_alert_proxy_url|raw }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="proxy_user">{{ label_proxy_user }}</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="proxy_user" name="proxy_user" value="{{ proxy_user }}" maxlength="100" placeholder="{{ label_proxy_user }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="proxy_password">{{ label_proxy_password }}</label>
|
||||
<div class="controls">
|
||||
<input type="password" id="proxy_password" name="proxy_password" value="{{ proxy_password }}" maxlength="100" placeholder="{{ label_proxy_password }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-actions">
|
||||
<button class="btn btn-success" type="submit" name="general_submit">{{ label_save }}</button>
|
||||
</div>
|
||||
|
@ -173,6 +199,7 @@
|
|||
<option value="octopush" {{ sms_selected_octopush|raw }}>{{ label_sms_gateway_octopush }}</option>
|
||||
<option value="freemobilesms" {{ sms_selected_freemobilesms|raw }}>{{ label_sms_gateway_freemobilesms }}</option>
|
||||
<option value="clicksend" {{ sms_selected_clicksend|raw }}>{{ label_sms_gateway_clicksend }}</option>
|
||||
<option value="smsgw" {{ sms_selected_smsgw|raw }}>{{ label_sms_gateway_smsgw }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -10,35 +10,48 @@
|
|||
<div class="span6">
|
||||
<form id="psm_config" class="form-horizontal" action="install.php?action=config" method="post">
|
||||
{{ macro.csrf_input() }}
|
||||
<p>Please enter the application url:</p>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="base_url">Application base url</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="base_url" name="base_url" value="{{ base_url }}" />
|
||||
</div>
|
||||
</div>
|
||||
<p>Please enter your database info:</p>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="host">Database host</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="host" name="host" value="{{ host }}" />
|
||||
<input type="text" id="host" name="db_host" value="{{ db_host }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="host">Database port</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="port" name="port" value="{{ port }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="name">Database name</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="name" name="name" value="{{ name }}" placeholder="db name" />
|
||||
<input type="text" id="name" name="db_name" value="{{ db_name }}" placeholder="db name" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="user">Database user</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="user" name="user" value="{{ user }}" placeholder="db user" />
|
||||
<input type="text" id="user" name="db_user" value="{{ db_user }}" placeholder="db user" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="pass">Database password</label>
|
||||
<div class="controls">
|
||||
<input type="password" id="pass" name="pass" value="{{ pass }}" placeholder="db password" />
|
||||
<input type="password" id="pass" name="db_pass" value="{{ db_pass }}" placeholder="db password" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="prefix">Table prefix</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="prefix" name="prefix" value="{{ prefix }}" />
|
||||
<input type="text" id="prefix" name="db_prefix" value="{{ db_prefix }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
|
@ -60,4 +73,4 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
<div class="controls">
|
||||
<select id="type" name="type">
|
||||
<option value="">{{ label_please_select }}</option>
|
||||
<option value="ping" {{ edit_type_selected_ping|raw }}>{{ label_ping }}</option>
|
||||
<option value="service" {{ edit_type_selected_service|raw }}>{{ label_service }}</option>
|
||||
<option value="website" {{ edit_type_selected_website|raw }}>{{ label_website }}</option>
|
||||
</select>
|
||||
|
@ -47,6 +48,7 @@
|
|||
<option value="115">SFTP (115)</option>
|
||||
<option value="43">WHOIS (43)</option>
|
||||
<option value="53">BIND (53)</option>
|
||||
<option value="3389">RDP (3389)</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<div class="tab-content">
|
||||
<input type="hidden" name="saveLayout_csrf" value="{{ csrf_token(csrf_key|default('')) }}" />
|
||||
<div id="flow-layout" class="tab-pane {{ block_layout_active }}">
|
||||
<div class="entity-container">
|
||||
{% for server in servers_offline %}
|
||||
|
|
|
@ -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');
|
||||
|
|
Loading…
Reference in New Issue