#!/usr/bin/php-cgi
<?php
error_reporting(0);
/********************************************
USED BY NETDIAG
********************************************/

ob_start();
include '/www/cgi-bin/getipmac.php';
$result = strip_tags(ob_get_contents());
ob_end_clean();
$result = parse_ini_string($result);

define('_MACADDRESS_', $result['mac']);
define('_IPADDRESS_' , $result['ip']);


if($_POST && isset($_POST['init_diagnostics']) && isset($_POST['modes']))
{
	$parameter = trim(htmlentities(strip_tags($_POST['params'])));
	function clear_tmpfile(){
		exec('echo "" > /www/cgi-bin/tmp.trace');
	}

	$requested_module = strtolower($_POST['modes']);

	if($requested_module == 'ifconfig' )
	{
		$result = shell_exec('ifconfig');
		sleep(2);
		
		$message = $result;
		$status  = true;

	}else if ($requested_module == 'iptables'){

		exec('iptables -nvL > /www/cgi-bin/tmp.trace');
		sleep(2);
		$result = file_get_contents('/www/cgi-bin/tmp.trace');
		clear_tmpfile();

		$message = $result;
		$status  = true;

	}else if ($requested_module == 'tcpdump')
	{
		exec('echo "> tcpdump -D" > /www/cgi-bin/tmp.trace');		
		exec('tcpdump -D >> /www/cgi-bin/tmp.trace');
		sleep(2);
		$result = file_get_contents('/www/cgi-bin/tmp.trace');
		clear_tmpfile();

		$message = $result;
		$status  = true;

	}else if ($requested_module == 'arp'){
		
		exec('cat /proc/net/arp > /www/cgi-bin/tmp.trace');
		sleep(2);
		$result = file_get_contents('/www/cgi-bin/tmp.trace');
		clear_tmpfile();

		$message = $result;
		$status  = true;

	}else if ($requested_module == 'netstat')
	{
		exec('echo "> netstat -a" > /www/cgi-bin/tmp.trace');
		exec('echo "'.PHP_EOL.'" >> /www/cgi-bin/tmp.trace');
		exec('netstat -a >> /www/cgi-bin/tmp.trace');
		exec('echo "'.PHP_EOL.'" >> /www/cgi-bin/tmp.trace');
		sleep(2);
		exec('echo "> netstat -r" >> /www/cgi-bin/tmp.trace');
		exec('netstat -r >> /www/cgi-bin/tmp.trace');
		exec('echo "'.PHP_EOL.'" >> /www/cgi-bin/tmp.trace');
		sleep(2);
		exec('echo "> netstat -l" >> /www/cgi-bin/tmp.trace');
		exec('netstat -l >> /www/cgi-bin/tmp.trace');
		exec('echo "'.PHP_EOL.'" >> /www/cgi-bin/tmp.trace');
		sleep(2);

		$result = file_get_contents('/www/cgi-bin/tmp.trace');
		clear_tmpfile();

		$message = $result;
		$status  = true;

	}else if ($requested_module == 'dnsmasq')
	{
		exec('cat /etc/dnsmasq.conf > /www/cgi-bin/tmp.trace');
		sleep(2);
		$result = file_get_contents('/www/cgi-bin/tmp.trace');
		clear_tmpfile();

		$message = $result;
		$status  = true;

	}else if ($requested_module == 'settings')
	{
		$url = 'http://93.157.3.167:10990/smsglobal/api/rest/requestfleetonesettings';

		$postdata = http_build_query(
		    array(
		        'macid' => _MACADDRESS_,
		        'from'  => 'crewcommwifi Vessel Diagnostics'
		    )
		);

		$opts = array('http' =>
		    array(
		        'method'  => 'POST',
		        'header'  => 'Content-type: application/x-www-form-urlencoded',
		        'content' => $postdata
		    )
		);

		$context  = stream_context_create($opts);

		$result = file_get_contents($url, false, $context);

		$data = json_decode($result,true);
		$data = isset($data[0]) ? $data[0] : $data;
		$resultSettings = '';
		foreach($data as $k => $v){
			$resultSettings .= "$k = $v \n";
		}

		$status = true;
		$message = $resultSettings;

	}else if ($requested_module == 'fsmsg')
	{
		exec('cat /etc/smsg/firesmsg > /www/cgi-bin/tmp.trace');
		sleep(2);
		$result = file_get_contents('/www/cgi-bin/tmp.trace');
		clear_tmpfile();

		$message = $result;
		$status  = true;

	}else if($requested_module == 'send2ship')
	{
		$cmd = 'tar -czfv /www/cgi-bin/tmp.trace.tar /www/cgi-bin/tmp.trace';
		$message = 'Error Process not found';
		$status  = false;

	}else if($requested_module == 'ping'){

		$IP_IS_CORRECT = TRUE;
		if($IP_IS_CORRECT)
		{
			$IP_DOM = $parameter == '' || strlen($parameter) <= 0 ? '93.157.3.167' : trim($parameter);
			// exec("ping {$IP_DOM} > /www/cgi-bin/tmp.trace");
			exec("ping -c 5 $IP_DOM", $output, $status);
			sleep(2);
			if($output){
				$_output = '';
				foreach($output as $k => $v){
					$_output .= $v."\n";
				}
				$status = true;
				$message = $_output;			
			}else{
				$status = $status;
				$message = 'Unable to PING '.$parameter;			
			}
		}else{
			$status  	= false;
			$message 	= 'IP Not Valid';
		}


	}else if($requested_module == 'nslookup')
	{
		$IP_IS_CORRECT = TRUE;
		if($IP_IS_CORRECT)
		{
			$IP_DOM = $parameter == '' || strlen($parameter) <= 0 ? '93.157.3.167' : trim($parameter);
			// exec("ping {$IP_DOM} > /www/cgi-bin/tmp.trace");
			exec("nslookup $IP_DOM", $output, $status);
			sleep(2);
			if($output){
				$_output = '';
				foreach($output as $k => $v){
					$_output .= $v."\n";
				}
				$status = true;
				$message = $_output;			
			}else{
				$status = $status;
				$message = 'Unable to PING '.$parameter;			
			}
		}else{
			$status  	= false;
			$message 	= 'IP Not Valid';
		}

	}else if($requested_module == 'psprocess'){

		exec('ps > /www/cgi-bin/tmp.trace');
		sleep(2);
		$result = file_get_contents('/www/cgi-bin/tmp.trace');
		clear_tmpfile();

		$message = $result;
		$status  = true;

	}else if($requested_module == 'killdiagnosticsprocessinbackground'){


		exec("killall -q traceroute");		
		system("killall -q top");
		$message = "Killed Traceroute process \nKilled top Process";
		$status  = true;

	}else if($requested_module == 'radiustest')
	{
		if(file_exists('/etc/chilli/config'))
		{
			$USER = "radiusSMSGtestuser";
			$PASS = "RADIUSSMSGTESTUSER";
			$data = @parse_ini_file('/etc/chilli/config');
			$RADIUS_IP_1 = isset($data['HS_RADIUS']) ? $data['HS_RADIUS'] : false;
			$RADIUS_IP_2 = isset($data['HS_RADIUS2']) ? $data['HS_RADIUS2'] : false;
			$SECRET = isset($data['HS_RADSECRET']) ? $data['HS_RADSECRET'] : false;
			$PORT = 1812;

			if(!$RADIUS_IP_1 && !RADIUS_IP_2 && !$SECRET)
			{
				$message = "Unable to Parse Config";
				$status = false;
			}else{
				$COMMAND = "/usr/bin/radtest {$USER} {$PASS} {$RADIUS_IP_1} {$PORT} {$SECRET} > /www/cgi-bin/tmp.trace";
				exec($COMMAND);
				sleep(2);
				$message = file_get_contents('/www/cgi-bin/tmp.trace');
				$message = str_replace($PASS, 'XXXXXXXXXXXXX', $message);		
				$message = str_replace($PASS, 'XXXXXXXXXXXXX', $message);
				clear_tmpfile();
				$status = true;				
			}
		}else{
			$status = false;
			$message = 'Unable to load config';
		}

	}else if($requested_module == 'getipmac')
	{

		$message = _MACADDRESS_."\n"._IPADDRESS_;
		$status = true;

	}else if($requested_module == 'syncdebugsettings')
	{
		require_once '/www/cgi-bin/syncsettings.php';
		$sync = new Syncsettings;
		$sync->macaddress(_MACADDRESS_);
		$sync->process_settings();
		$sync->api_key = 'syncdebugsettingsvsettings';
		$sync->process_vsettings();	 
		$sync->api_key = 'syncdebugsettingsvconfig';
		$sync->process_vconfig();			
		$output = $sync->_output_debug_result();
		$message = json_encode($output,JSON_PRETTY_PRINT);
		$status = true;		
	}else if($requested_module == 'clearinstallationdetails')
	{
		$remove_localstore_data_command = 'rm -rf /www/localstore/*';
		$remove_vesselconf_file = "echo '' > /www/vesconf.txt";

		exec($remove_localstore_data_command);
		exec($remove_vesselconf_file);
		sleep(5);
		$message = 'Process was executed, You will be redirected please wait..';
		$status = true;
	}else if($requested_module == 'checkdependencyfunctions')
	{
		$smsg_system_dependency_functions = array(
			'file_get_contents',
			'file_put_contents',
			'json_encode',
			'json_decode',
			'session_start',
			'parse_ini_string',
			'parse_ini_file',
			'array_map',
			'array_filter',			
		);

		$testResult = '';
		foreach ($smsg_system_dependency_functions as $value) {
			$testResult .= ( function_exists($value) ? "{$value} module FOUND." : "{$value} module NOT FOUND!!." )."\n";
		}

		$message = $testResult;
		$status = true;
	}else if($requested_module == 'cronsched')
	{
		exec('crontab -l > /www/cgi-bin/tmp.trace');
		sleep(2);
		$result = file_get_contents('/www/cgi-bin/tmp.trace');
		clear_tmpfile();

		$message = $result;
		$status  = true;
	}else{
		$message = 'Error Process not found';
		$status  = false;
	}


	$output = array(
		'status'  	=> $status,
		'message' 	=> $message,
		'test' 		=> $requested_module
	);

	header("Access-Control-Allow-Origin: *");
	header('Content-Type: application/json');
	echo json_encode($output);
	exit;
}


if(isset($_GET['killtraceroute'])){
	system ("killall -q traceroute");
	echo "TraceRoute Killed";
}

if(isset($_GET['traceroute']))
{

	if(isset($_GET['IP_DOM']) && strlen($_GET['IP_DOM']) >=1 )
	{
		$IP_DOM = trim(htmlentities(strip_tags($_GET['IP_DOM'])));
	}else{
		$IP_DOM = '93.157.3.167';
	}

	echo "<pre>";
	set_time_limit(0);
	system ("killall -q traceroute");
	system("traceroute -m 32 {$IP_DOM}");
	flush();
	system ("killall -q traceroute");
}