diff options
Diffstat (limited to 'execute.php')
-rw-r--r-- | execute.php | 120 |
1 files changed, 37 insertions, 83 deletions
diff --git a/execute.php b/execute.php index 9761c57..dd24a6c 100644 --- a/execute.php +++ b/execute.php @@ -20,8 +20,38 @@ */ require_once 'config.php'; -require_once 'router.php'; -require_once 'utils.php'; +require_once 'routers/router.php'; + +function process_output($output) { + global $config; + + $return = ''; + + foreach (preg_split("/((\r?\n)|(\r\n?))/", $output) as $line) { + // Get rid of empty lines + if (empty($line)) { + continue; + } + + $valid = true; + + foreach ($config['filters'] as $filter) { + // Line has been marked as invalid + // Or filtered based on the configuration + if (!$valid || (preg_match($filter, $line) === 1)) { + $valid = false; + break; + } + } + + if ($valid) { + // The line is valid, print it + $return .= $line."\n"; + } + } + + return $return; +} // Obvious spam if (!isset($_POST['dontlook']) || !empty($_POST['dontlook'])) { @@ -35,89 +65,13 @@ if (isset($_POST['query']) && !empty($_POST['query']) && $query = htmlspecialchars($_POST['query']); $hostname = htmlspecialchars($_POST['routers']); $parameters = htmlspecialchars($_POST['parameters']); - $valid_request = false; - switch ($query) { - case 'bgp': - if (match_ipv4($parameters) || match_ipv6($parameters)) { - $valid_request = true; - } else { - $error = 'The parameter is not an IPv4/IPv6 address.'; - } - break; - - case 'as-path-regex': - if (match_aspath_regex($parameters)) { - $valid_request = true; - } else { - $error = 'The parameter is not an AS-Path regular expression.'; - } - break; + // Do the processing + $router = Router::instance($hostname, $_SERVER['REMOTE_ADDR']); + $data = $router->send_command($query, $parameters); - case 'as': - if (match_as($parameters)) { - $valid_request = true; - } else { - $error = 'The parameter is not an AS number.'; - } - break; - - case 'ping': - case 'traceroute': - if (match_ipv4($parameters) || match_ipv6($parameters) || - match_fqdn($parameters)) { - $valid_request = true; - } else { - $error = 'The parameter is not an IPv4/IPv6 address or a FQDN.'; - } - break; - - default: - $error = 'Unknown request: '.$query; - break; - } - - if (!$valid_request && isset($error)) { - // Unknown query or invalid parameters - echo $error; - } else { - // Do the processing - // Router connection, command execution, disconnection - $router = new Router($hostname, $_SERVER['REMOTE_ADDR']); - $data = $router->send_command($query, $parameters); - - // Process the output line by line - $return = ''; - foreach (preg_split("/((\r?\n)|(\r\n?))/", $data) as $line) { - // Get rid of empty lines - if (empty($line)) { - continue; - } - - $valid = true; - - foreach ($config['filters'] as $filter) { - // Line has been marked as invalid - if (!$valid) { - break; - } - - // Filter line based on the configuration - if (preg_match($filter, $line) === 1) { - $valid = false; - break; - } - } - - // The line is valid, print it - if ($valid) { - $return .= $line."\n"; - } - } - - // Display the result of the command - echo $return; - } + // Display the result of the command + print process_output($data); } // End of execute.php |