summaryrefslogtreecommitdiff
path: root/execute.php
diff options
context:
space:
mode:
Diffstat (limited to 'execute.php')
-rw-r--r--execute.php120
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