Merge branch 'develop' into feature/265

pull/627/head
Tim 2018-09-05 22:49:05 +02:00 committed by GitHub
commit 38420147e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 237 additions and 163 deletions

View File

@ -5,11 +5,18 @@ Changelog
Not yet released
----------------
#627: Latest server output, error and output during a failure will be saved and are shown on the server page.
b49659f: Added question to notification faq about not recieving notifications.
ef28908: Indentation fix.
#605: Added Norwegian language.
f6173d4: Added license to composer.json file.
* #627: Latest server output, error and output during a failure will be saved and are shown on the server page.
* #631: Added option to specify the request method.
* #628: Added the option to mark specific HTTP status codes as online.
* #640: Removed () after last offline value when the last offline duration is unknown.
* #637: Added php extensions to composer required list, spelling fixes in changelog and composer update.
* #635: Changed server order on ?&mod=user&action=edit&id=x.
* #634: Changed ' to " in sql query, both were used.
* #629: Fix bug that made it impossible to check rdp:// and fixed port update.
* b49659f: Added question to notification faq about not receiving notifications.
* ef28908: Indentation fix.
* #605: Added Norwegian language.
* f6173d4: Added license to composer.json file.
v3.3.1 (released August 10, 2018)
--------------------------------
@ -40,7 +47,7 @@ v3.3.1 (released August 10, 2018)
v3.3.0 (released May 30, 2018)
--------------------------------
* 57f4c36: Added support voor the following SMS gateways: Plivo, SolutionsInfini, Callr and GAtewayAPI.
* 57f4c36: Added support for the following SMS gateways: Plivo, SolutionsInfini, Callr and GatewayAPI.
* c3751e7: Moved Clickatell api key to password field.
* #590: Rollback Twig version update to work with PHP5.
* #589: Enlarge select pattern_online width.
@ -84,7 +91,7 @@ v3.2.2 (released March 27, 2018)
v3.2.1 (released March 27, 2018)
--------------------------------
* #343: Added optinal header value check.
* #343: Added optional header value check.
* #433: Changed baseurl repoforgeextras.
* #432: Changed baseurl repoforge.
* #437: Octopush.class.php updates to Octopush.php.

View File

@ -2,9 +2,12 @@
"name": "phpservermon/phpservermon",
"description": "PHP Server Monitor",
"license": "GPL-3.0-or-later",
"homepage": "http://www.phpservermonitor.org",
"homepage": "https://www.phpservermonitor.org",
"require": {
"php": ">=5.5.9",
"ext-curl": "*",
"ext-pdo": "*",
"ext-xml": "*",
"phpmailer/phpmailer": "~6.0",
"symfony/config": "~3.4",
"symfony/dependency-injection": "~3.4",

82
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "280e04b14bf6e80bca192b48a12bb342",
"content-hash": "b116489d45aab7506cedf3f94fb60ee4",
"packages": [
{
"name": "paragonie/random_compat",
@ -202,7 +202,7 @@
},
{
"name": "symfony/config",
"version": "v3.4.14",
"version": "v3.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
@ -266,16 +266,16 @@
},
{
"name": "symfony/dependency-injection",
"version": "v3.4.14",
"version": "v3.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "1c0e679e522591fd744fdf242fec41a43d62b2b1"
"reference": "09d7df7bf06c1393b6afc85875993cbdbdf897a0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/1c0e679e522591fd744fdf242fec41a43d62b2b1",
"reference": "1c0e679e522591fd744fdf242fec41a43d62b2b1",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/09d7df7bf06c1393b6afc85875993cbdbdf897a0",
"reference": "09d7df7bf06c1393b6afc85875993cbdbdf897a0",
"shasum": ""
},
"require": {
@ -333,11 +333,11 @@
],
"description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com",
"time": "2018-07-29T15:19:31+00:00"
"time": "2018-08-08T11:42:34+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v3.4.14",
"version": "v3.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
@ -400,16 +400,16 @@
},
{
"name": "symfony/filesystem",
"version": "v4.1.3",
"version": "v4.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "2e30335e0aafeaa86645555959572fe7cea22b43"
"reference": "c0f5f62db218fa72195b8b8700e4b9b9cf52eb5e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/2e30335e0aafeaa86645555959572fe7cea22b43",
"reference": "2e30335e0aafeaa86645555959572fe7cea22b43",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/c0f5f62db218fa72195b8b8700e4b9b9cf52eb5e",
"reference": "c0f5f62db218fa72195b8b8700e4b9b9cf52eb5e",
"shasum": ""
},
"require": {
@ -446,20 +446,20 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
"time": "2018-07-26T11:24:31+00:00"
"time": "2018-08-18T16:52:46+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v3.4.14",
"version": "v3.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "19a3267828046a2a4a05e3dc2954bbd2e0ad9fa6"
"reference": "2fb33cb6eefe6e790e4023f7c534a9e4214252fc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/19a3267828046a2a4a05e3dc2954bbd2e0ad9fa6",
"reference": "19a3267828046a2a4a05e3dc2954bbd2e0ad9fa6",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/2fb33cb6eefe6e790e4023f7c534a9e4214252fc",
"reference": "2fb33cb6eefe6e790e4023f7c534a9e4214252fc",
"shasum": ""
},
"require": {
@ -500,29 +500,32 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2018-08-01T14:04:26+00:00"
"time": "2018-08-27T17:45:33+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.8.0",
"version": "v1.9.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae"
"reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
"reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
"reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-ctype": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.8-dev"
"dev-master": "1.9-dev"
}
},
"autoload": {
@ -555,20 +558,20 @@
"polyfill",
"portable"
],
"time": "2018-04-30T19:57:29+00:00"
"time": "2018-08-06T14:22:27+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.8.0",
"version": "v1.9.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "3296adf6a6454a050679cde90f95350ad604b171"
"reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171",
"reference": "3296adf6a6454a050679cde90f95350ad604b171",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8",
"reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8",
"shasum": ""
},
"require": {
@ -580,7 +583,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.8-dev"
"dev-master": "1.9-dev"
}
},
"autoload": {
@ -614,30 +617,30 @@
"portable",
"shim"
],
"time": "2018-04-26T10:06:28+00:00"
"time": "2018-08-06T14:22:27+00:00"
},
{
"name": "symfony/polyfill-php70",
"version": "v1.8.0",
"version": "v1.9.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php70.git",
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6"
"reference": "1e24b0c4a56d55aaf368763a06c6d1c7d3194934"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6",
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/1e24b0c4a56d55aaf368763a06c6d1c7d3194934",
"reference": "1e24b0c4a56d55aaf368763a06c6d1c7d3194934",
"shasum": ""
},
"require": {
"paragonie/random_compat": "~1.0|~2.0",
"paragonie/random_compat": "~1.0|~2.0|~9.99",
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.8-dev"
"dev-master": "1.9-dev"
}
},
"autoload": {
@ -673,7 +676,7 @@
"portable",
"shim"
],
"time": "2018-04-26T10:06:28+00:00"
"time": "2018-08-06T14:22:27+00:00"
},
{
"name": "twig/twig",
@ -751,7 +754,10 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=5.5.9"
"php": ">=5.5.9",
"ext-curl": "*",
"ext-pdo": "*",
"ext-xml": "*"
},
"platform-dev": []
}

Binary file not shown.

View File

@ -343,9 +343,10 @@ function psm_parse_msg($status, $type, $vars) {
* @param boolean $add_agent add user agent?
* @param string|bool $website_username Username website
* @param string|bool $website_password Password website
* @param string|bool $request_method Request method like GET, POST etc.
* @return string cURL result
*/
function psm_curl_get($href, $header = false, $body = true, $timeout = null, $add_agent = true, $website_username = false, $website_password = false) {
function psm_curl_get($href, $header = false, $body = true, $timeout = null, $add_agent = true, $website_username = false, $website_password = false, $request_method = null) {
$timeout = $timeout == null ? PSM_CURL_TIMEOUT : intval($timeout);
$ch = curl_init();
@ -359,6 +360,10 @@ function psm_curl_get($href, $header = false, $body = true, $timeout = null, $ad
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_ENCODING, '');
if (!empty($request_method)) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request_method);
}
if ($website_username !== false && $website_password !== false && !empty($website_username) && !empty($website_password)) {
curl_setopt($ch, CURLOPT_USERPWD, $website_username.":".$website_password);
}

View File

@ -48,6 +48,7 @@ $sm_lang = array(
'go_back' => 'Go back',
'ok' => 'OK',
'cancel' => 'Cancel',
'none' => 'None',
'activate' => 'Activate',
'advanced' => 'Advanced',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
@ -161,6 +162,9 @@ $sm_lang = array(
'port' => 'Port',
'custom_port' => 'Custom Port',
'popular_ports' => 'Popular Ports',
'request_method' => 'Request method',
'custom_request_method' => 'Custom request method',
'popular_request_methods' => 'Popular request methods',
'please_select' => 'Please select',
'type' => 'Type',
'type_website' => 'Website',
@ -170,6 +174,8 @@ $sm_lang = array(
'pattern_description' => 'If this pattern is not found on the website, the server will be marked online/offline. Regular expressions are allowed.',
'pattern_online' => 'Pattern indicates website is',
'pattern_online_description' => 'Online: If this pattern is not found on the website, the server will be marked online. Offline: If this pattern is not found on the website, the server will be marked offline.',
'allow_http_status' => 'Allow HTTP status code',
'allow_http_status_description' => 'Mark website as online. HTTP Status codes lower then 400 are marked as online by default. Seperate with |. Example: 401|403.',
'header' => 'Header',
'header_name_description' => 'Header name (case-sensitive)',
'header_value_description' => 'Header value. Regular expressions are allowed.',

View File

@ -142,6 +142,8 @@ $sm_lang = array(
'type_service' => 'Service',
'pattern' => 'Zoek voor tekst/regex',
'pattern_description' => 'Als dit patroon niet gevonden wordt op de website, zal de server als offline gemarkeerd worden. Regular expressions zijn toegestaan.',
'allow_http_status' => 'Sta HTTP status code toe',
'allow_http_status_description' => 'Markeer website als online. HTTP status code lager dan 400 worden standaard als online gemarkeerd. Scheiden met |. Bijvoorbeeld: 401|403.',
'last_check' => 'Laatst gecontroleerd',
'last_online' => 'Laatst online',
'last_offline' => 'Laatst offline',

View File

@ -61,10 +61,12 @@ abstract class AbstractServerController extends AbstractController {
`s`.`server_id`,
`s`.`ip`,
`s`.`port`,
`s`.`request_method`,
`s`.`type`,
`s`.`label`,
`s`.`pattern`,
`s`.`pattern_online`,
`s`.`allow_http_status`,
`s`.`header_name`,
`s`.`header_value`,
`s`.`status`,
@ -110,7 +112,8 @@ abstract class AbstractServerController extends AbstractController {
$server['last_online'] = psm_timespan($server['last_online']);
$server['last_offline'] = psm_timespan($server['last_offline']);
if ($server['last_offline'] != psm_get_lang('system', 'never')) {
$server['last_offline_duration'] = "(".$server['last_offline_duration'].")";
$server['last_offline_duration'] = is_null($server['last_offline_duration']) ?
null : "(".$server['last_offline_duration'].")";
}
$server['last_check'] = psm_timespan($server['last_check']);
$server['active'] = psm_get_lang('system', $server['active']);

View File

@ -196,10 +196,12 @@ class ServerController extends AbstractServerController {
'edit_value_label' => $edit_server['label'],
'edit_value_ip' => $edit_server['ip'],
'edit_value_port' => $edit_server['port'],
'edit_value_request_method' => $edit_server['request_method'],
'edit_value_timeout' => $edit_server['timeout'],
'default_value_timeout' => PSM_CURL_TIMEOUT,
'edit_value_pattern' => $edit_server['pattern'],
'edit_pattern_selected_'.$edit_server['pattern_online'] => 'selected="selected"',
'edit_value_allow_http_status' => $edit_server['allow_http_status'],
'edit_value_header_name' => $edit_server['header_name'],
'edit_value_header_value' => $edit_server['header_value'],
'edit_value_warning_threshold' => $edit_server['warning_threshold'],
@ -264,9 +266,11 @@ class ServerController extends AbstractServerController {
'website_username' => psm_POST('website_username'),
'website_password' => $encrypted_password,
'port' => intval(psm_POST('port', 0)),
'request_method' => empty(psm_POST('request_method')) ? null : psm_POST('request_method'),
'type' => psm_POST('type', ''),
'pattern' => psm_POST('pattern', ''),
'pattern_online' => in_array($_POST['pattern_online'], array('yes', 'no')) ? $_POST['pattern_online'] : 'yes',
'allow_http_status' => psm_POST('allow_http_status', ''),
'header_name' => psm_POST('header_name', ''),
'header_value' => psm_POST('header_value', ''),
'rtime' => psm_POST('rtime', '0.0000000'),
@ -278,15 +282,15 @@ class ServerController extends AbstractServerController {
'telegram' => in_array($_POST['telegram'], array('yes', 'no')) ? $_POST['telegram'] : 'no',
);
// make sure websites start with http://
if ($clean['type'] == 'website' && substr($clean['ip'], 0, 4) != 'http') {
if ($clean['type'] == 'website' && substr($clean['ip'], 0, 4) != 'http' && substr($clean['ip'], 0, 3) != 'rdp') {
$clean['ip'] = 'http://'.$clean['ip'];
}
// 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'])) {
// format port from http, https or rdp url
if ($clean['type'] == 'website') {
$tmp = parse_url($clean["ip"]);
if (isset($tmp["port"])) {
$clean["port"] = $tmp["port"];
@ -463,8 +467,12 @@ class ServerController extends AbstractServerController {
'label_fieldset_permissions' => psm_get_lang('servers', 'fieldset_permissions'),
'label_port' => psm_get_lang('servers', 'port'),
'label_custom_port' => psm_get_lang('servers', 'custom_port'),
'label_please_select' => psm_get_lang('servers', 'please_select'),
'label_popular_ports' => psm_get_lang('servers', 'popular_ports'),
'label_request_method' => psm_get_lang('servers', 'request_method'),
'label_custom_request_method' => psm_get_lang('servers', 'custom_request_method'),
'label_popular_request_methods' => psm_get_lang('servers', 'popular_request_methods'),
'label_none' => psm_get_lang('system', 'none'),
'label_please_select' => psm_get_lang('servers', 'please_select'),
'label_type' => psm_get_lang('servers', 'type'),
'label_website' => psm_get_lang('servers', 'type_website'),
'label_service' => psm_get_lang('servers', 'type_service'),
@ -473,6 +481,8 @@ class ServerController extends AbstractServerController {
'label_pattern_description' => psm_get_lang('servers', 'pattern_description'),
'label_pattern_online' => psm_get_lang('servers', 'pattern_online'),
'label_pattern_online_description' => psm_get_lang('servers', 'pattern_online_description'),
'label_allow_http_status' => psm_get_lang('servers', 'allow_http_status'),
'label_allow_http_status_description' => psm_get_lang('servers', 'allow_http_status_description'),
'label_header' => psm_get_lang('servers', 'header'),
'label_header_name_description' => psm_get_lang('servers', 'header_name_description'),
'label_header_value_description' => psm_get_lang('servers', 'header_value_description'),

View File

@ -49,7 +49,7 @@ class UserController extends AbstractController {
}
public function run($action = NULL) {
$servers = $this->db->select(PSM_DB_PREFIX.'servers', null, array('server_id', 'label'), '', "ORDER BY `active` ASC, `status` DESC, `label` ASC");
$servers = $this->db->select(PSM_DB_PREFIX.'servers', null, array('server_id', 'label'), '', "ORDER BY `label` ASC");
// change the indexes to reflect their server ids
foreach ($servers as $server) {
$this->servers[$server['server_id']] = $server;
@ -110,6 +110,7 @@ class UserController extends AbstractController {
'label' => $servers_labels[$server_id]
);
}
sort($user['emp_servers']);
$user['url_delete'] = psm_build_url(array(
'mod' => 'user',

View File

@ -225,10 +225,12 @@ class Installer {
`server_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`ip` varchar(500) NOT NULL,
`port` int(5) unsigned NOT NULL,
`request_method` varchar(50) unsigned NULL,
`label` varchar(255) NOT NULL,
`type` enum('ping','service','website') NOT NULL default 'service',
`pattern` varchar(255) NOT NULL,
`pattern` varchar(255) NOT NULL default '',
`pattern_online` enum('yes','no') NOT NULL default 'yes',
`allow_http_status` varchar(255) NOT NULL default '',
`header_name` varchar(255) NOT NULL default '',
`header_value` varchar(255) NOT NULL default '',
`status` enum('on','off') NOT NULL default 'on',
@ -555,6 +557,8 @@ class Installer {
$queries[] = "ALTER TABLE `".PSM_DB_PREFIX."servers` ADD COLUMN `last_error` VARCHAR(255) NULL AFTER `website_password`;";
$queries[] = "ALTER TABLE `".PSM_DB_PREFIX."servers` ADD COLUMN `last_error_output` TEXT NULL AFTER `last_error`;";
$queries[] = "ALTER TABLE `".PSM_DB_PREFIX."servers` ADD COLUMN `last_output` TEXT NULL AFTER `last_error_output`;";
$queries[] = "ALTER TABLE `".PSM_DB_PREFIX."servers` ADD COLUMN `request_method` varchar(50) NULL AFTER `port`;";
$queries[] = "ALTER TABLE `".PSM_DB_PREFIX."servers` ADD COLUMN `allow_http_status` VARCHAR(255) NOT NULL DEFAULT '' AFTER `pattern_online`;";
$this->execSQL($queries);
}
}

View File

@ -179,8 +179,8 @@ class HistoryGraph {
}
$records = $this->db->execute(
'SELECT *
FROM `'.PSM_DB_PREFIX."servers_$type`
"SELECT *
FROM `".PSM_DB_PREFIX."servers_$type`
WHERE `server_id` = :server_id AND `date` BETWEEN :start_time AND :end_time ORDER BY `date` ASC",
array(
'server_id' => $server_id,

View File

@ -88,7 +88,7 @@ class StatusUpdater {
$this->server = $this->db->selectRow(PSM_DB_PREFIX.'servers', array(
'server_id' => $server_id,
), array(
'server_id', 'ip', 'port', 'label', 'type', 'pattern', 'pattern_online', 'header_name', 'header_value', 'status', 'active', 'warning_threshold',
'server_id', 'ip', 'port', 'request_method', 'label', 'type', 'pattern', 'pattern_online', 'allow_http_status', 'header_name', 'header_value', 'status', 'active', 'warning_threshold',
'warning_threshold_counter', 'timeout', 'website_username', 'website_password', 'last_offline'
));
if (empty($this->server)) {
@ -241,7 +241,8 @@ class StatusUpdater {
$this->server['timeout'],
true,
$this->server['website_username'],
psm_password_decrypt($this->server['server_id'].psm_get_conf('password_encrypt_key'), $this->server['website_password'])
psm_password_decrypt($this->server['server_id'].psm_get_conf('password_encrypt_key'), $this->server['website_password']),
$this->server['request_method']
);
$this->header = $curl_result;
@ -263,8 +264,9 @@ class StatusUpdater {
$code = $code_matches[1][0];
$msg = $code_matches[2][0];
$allow_http_status = explode("|", $this->server['allow_http_status']);
// All status codes starting with a 4 or higher mean trouble!
if (substr($code, 0, 1) >= '4') {
if (substr($code, 0, 1) >= '4' && !in_array($code ,$allow_http_status)) {
$this->error = "HTTP STATUS ERROR: ".$code.' '.$msg;
$result = false;
} else {

View File

@ -59,6 +59,32 @@
<input class="input-mini" type="text" id="port" name="port" value="{{ edit_value_port }}" maxlength="5" />
</div>
</div>
<div class="control-group popularRequestMethodsGroup types typeWebsite">
<label class="control-label" for="popularRequestMethods">{{ label_request_method }}</label>
<div class="controls">
<select id="popularRequestMethods" name="popularRequestMethods">
<option value="">{{ label_none }}</option>
<optgroup label="{{ label_popular_request_methods }}">
<option value="GET">GET</option>
<option value="HEAD">HEAD</option>
<option value="POST">POST</option>
<option value="PUT">PUT</option>
<option value="DELETE">DELETE</option>
<option value="CONNECT">CONNECT</option>
<option value="OPTIONS">OPTIONS</option>
<option value="TRACE">TRACE</option>
<option value="PATCH">PATCH</option>
</optgroup>
<option value="custom">{{ label_custom_request_method }}</option>
</select>
</div>
</div>
<div class="control-group requestMethodGroup types typeWebsite">
<label class="control-label" for="requestMethod">{{ label_custom_request_method }}</label>
<div class="controls">
<input class="input" type="text" id="requestMethod" name="request_method" value="{{ edit_value_request_method }}" maxlength="50" />
</div>
</div>
<div class="control-group types typeWebsite">
<label class="control-label" for="pattern">{{ label_pattern }}</label>
<div class="controls">
@ -74,6 +100,12 @@
</select>
</div>
</div>
<div class="control-group types typeWebsite">
<label class="control-label" for="allow_http_status">{{ label_allow_http_status }}</label>
<div class="controls">
<input type="text" id="allow_http_status" name="allow_http_status" value="{{ edit_value_allow_http_status }}" maxlength="255" data-toggle="tooltip" title="{{ label_allow_http_status_description }}" />
</div>
</div>
<div class="control-group types typeWebsite">
<label class="control-label" for="header_name">{{ label_header }}</label>
<div class="controls">

View File

@ -1,24 +1,24 @@
$().ready(function() {
$(".show-modal").click(function (e) {
$('.show-modal').click(function (e) {
var $this = $(this);
if ($this.is("a")) {
if ($this.is('a')) {
e.preventDefault();
}
var $modal_id = $this.attr("data-modal-id") || "main";
var $modal = $("#" + $modal_id + "Modal");
var $modal_id = $this.attr('data-modal-id') || 'main';
var $modal = $('#' + $modal_id + 'Modal');
if ($modal.length) {
$modal.find(".modalOKButton").data("modal-origin", $this);
$modal.find('.modalOKButton').data('modal-origin', $this);
var param = $this.attr("data-modal-param");
var param = $this.attr('data-modal-param');
if (param) {
var ary = param.split(",");
var ary = param.split(',');
for (var index = 0; index < ary.length && index < 9; ++index) {
var value = ary[index];
$($modal).find("span.modalP" + (index+1)).text(value);
$($modal).find('span.modalP' + (index+1)).text(value);
}
}
scroll(0, 0);
$modal.modal("show");
$modal.modal('show');
} else {
// Just in case we forgot the dialog box
var conf = confirm("Are you sure?");
@ -29,19 +29,18 @@ $().ready(function() {
return false;
});
$(".modalOKButton").click(function(e) {
$('.modalOKButton').click(function(e) {
var $this = $(this);
var $origin = $this.data("modal-origin");
if ($origin.is("a")) {
window.location = $origin.attr("href");
var $origin = $this.data('modal-origin');
if ($origin.is('a')) {
window.location = $origin.attr('href');
} else {
$origin.next("input[type=hidden]").attr("value", 1);
$origin.closest("form").submit();
$origin.next('input[type=hidden]').attr('value', 1);
$origin.closest('form').submit();
}
return false;
});
$("select.multiselect").multiselect({
$('select.multiselect').multiselect({
includeSelectAllOption: true,
maxHeight: 400,
enableCaseInsensitiveFiltering: true
@ -52,94 +51,88 @@ $().ready(function() {
// popularPorts
// initial
$(".portGroup").hide();
var portInput = $("#port").val();
$('.portGroup').hide();
var portInput = $('#port').val();
if (portInput !== "") {
var findPopularPorts = $("#popularPorts").find('option[value=" + portInput + "]');
if (portInput != '') {
var findPopularPorts = $('#popularPorts').find('option[value=' + portInput + ']');
if (findPopularPorts.length) {
$(findPopularPorts).attr("selected", "selected");
} else {
$("#popularPorts").find('option[value=custom]').attr("selected", "selected");
$(".portGroup").slideDown();
$('#popularPorts').find('option[value=custom]').attr("selected", "selected");
$('.portGroup').slideDown();
}
}
$("#popularPorts").change(function () {
changePopularPorts($(this).val(), false, $("#type").val());
$('#popularPorts').change(function () {
changePopular($(this).val(), $('#type').val());
});
// popularRequestMethods
// initial
$('.requestMethodGroup').hide();
var requestMethodInput = $('#requestMethod').val();
if (requestMethodInput != '') {
var findPopularRequestMethods = $('#popularRequestMethods').find('option[value=' + requestMethodInput + ']');
if (findPopularRequestMethods.length) {
$(findPopularRequestMethods).attr("selected", "selected");
} else {
$('#popularRequestMethods').find('option[value=custom]').attr("selected", "selected");
$('.requestMethodGroup').slideDown();
}
}
$('#popularRequestMethods').change(function () {
changePopular($(this).val(), $('#type').val());
});
// server type
$(".types").hide();
changeTypeSwitch($("#type").val());
$('.types').hide();
changeTypeSwitch($('#type').val());
$("#type").change(function () {
changeTypeSwitch($("#type").val());
changePopularPorts($("#popularPorts").val(), true, $("#type").val());
});
// advanced information
$(".advanced").hide();
var advancedopen = 0;
$("#advanced").click(
function() {
advancedSwitch((advancedopen += 1) % 2);
$('#type').change(function () {
changeTypeSwitch($('#type').val());
});
});
function advancedSwitch(statusInput) {
switch (statusInput) {
case 0:
$(".advanced").slideUp();
break;
case 1:
$(".advanced").slideDown();
break;
default:
$(".advanced").hide();
}
}
function changeTypeSwitch(typeInput) {
switch (typeInput) {
case "service":
$(".types").slideUp();
$(".typeService").slideDown();
case 'service':
$('.types').slideUp();
$('.typeService').slideDown();
changePopular($('#popularPorts').val(), typeInput, true);
break;
case "website":
$(".types").slideUp();
$(".typeWebsite").slideDown();
case 'website':
$('.types').slideUp();
$('.typeWebsite').slideDown();
changePopular($('#popularRequestMethods').val(), typeInput, true);
break;
default:
$(".types").hide();
$('.types').slideUp();
}
}
function changePopularPorts(popularPorts, changeType, typeInput) {
if (changeType === true) {
if (typeInput == "service") {
if (popularPorts == "custom") {
$(".portGroup").slideDown();
} else {
$(".portGroup").hide();
}
function changePopular(inputValue, typeInput, changedType = false) {
if (typeInput == 'website') {
htmlClass = '.requestMethodGroup';
htmlID = '#requestMethod';
} else if (typeInput == 'service') {
htmlClass = '.portGroup';
htmlID = '#port';
}
if (inputValue == 'custom') {
$(htmlClass).slideDown();
} else {
if (popularPorts == "custom") {
$(".portGroup").slideDown();
} else {
$("#port").val(popularPorts);
$(".portGroup").slideUp();
}
changedType ? $(htmlClass).hide() : $(htmlClass).slideUp();
$(htmlID).val(inputValue);
}
}
function psm_xhr(mod, params, method, on_complete, options) {
method = (typeof method == "undefined") ? "GET" : method;
method = (typeof method == 'undefined') ? 'GET' : method;
var xhr_options = {
data: params,
@ -151,29 +144,29 @@ function psm_xhr(mod, params, method, on_complete, options) {
};
$.extend(xhr_options, options);
var result = $.ajax("index.php?xhr=1&mod=" + mod, xhr_options);
var result = $.ajax('index.php?xhr=1&mod=' + mod, xhr_options);
return result;
}
function psm_saveLayout(layout) {
var params = {
action: "saveLayout",
action: 'saveLayout',
csrf: $("input[name=saveLayout_csrf]").val(),
layout: layout
};
psm_xhr("server_status", params, "POST");
psm_xhr('server_status', params, 'POST');
}
function psm_tooltips() {
$('input[data-toggle="tooltip"]').tooltip({
"trigger":"hover",
"placement": "right",
"container": "body"
'trigger':'hover',
'placement': 'right',
'container': 'body'
});
$('i[data-toggle="tooltip"]').tooltip({
"trigger":"hover",
"placement": "bottom"
'trigger':'hover',
'placement': 'bottom'
});
}
@ -196,14 +189,14 @@ function rtrim(str) {
}
function psm_flash_message(message) {
var flashmessage = $("#flashmessage");
var flashmessage = $('#flashmessage');
if (flashmessage.length) {
if(typeof message != "undefined") {
if (typeof message != 'undefined') {
flashmessage.html(message);
}
var t = flashmessage.html();
var c = trim(t);
var t = c.replace("&nbsp;", "");
var t = c.replace('&nbsp;', '');
if (t) {
flashmessage.slideDown();
}