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 fdfa4b39..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 diff --git a/config.php.sample b/config.php.sample index 42f6f9ec..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/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/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 51665f08..058c7919 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', @@ -316,4 +317,4 @@ $sm_lang = array( '401_unauthorized' => 'Unauthorized', '401_unauthorized_description' => 'You do not have the privileges to view this page.', ), -); \ 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 582f64aa..cae533f8 100644 --- a/src/psm/Module/Install/Controller/InstallController.php +++ b/src/psm/Module/Install/Controller/InstallController.php @@ -121,6 +121,7 @@ class InstallController extends AbstractController { $config = array( 'db_host' => 'localhost', + 'db_port' => '3306' 'db_name' => '', 'db_user' => '', 'db_pass' => '', @@ -142,6 +143,7 @@ class InstallController extends AbstractController { // test db connection $this->db = new \psm\Service\Database( $config['db_host'], + $config['db_port'], $config['db_user'], $config['db_pass'], $config['db_name'] @@ -308,6 +310,7 @@ class InstallController extends AbstractController { 'pass' => '', 'name' => '', 'host' => '', + 'port' => '3306' ); $pattern = "/define\('SM_{key}', '(.*?)'/u"; 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/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/Util/Install/Installer.php b/src/psm/Util/Install/Installer.php index 6c3ee490..612f7764 100644 --- a/src/psm/Util/Install/Installer.php +++ b/src/psm/Util/Install/Installer.php @@ -218,7 +218,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, 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/install/config_new.tpl.html b/src/templates/default/module/install/config_new.tpl.html index 84be15c8..200d45c3 100644 --- a/src/templates/default/module/install/config_new.tpl.html +++ b/src/templates/default/module/install/config_new.tpl.html @@ -24,6 +24,12 @@ +
+ +
+ +
+
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 @@ +