diff --git a/api.php b/api.php index 23fe88d7..62ece967 100644 --- a/api.php +++ b/api.php @@ -13,14 +13,10 @@ require_once("scripts/pi-hole/php/database.php"); require_once("scripts/pi-hole/php/auth.php"); check_cors(); -$FTL_IP = "127.0.0.1"; - $data = array(); // Common API functions -if (isset($_GET['status'])) { - $data = array_merge($data, array("status" => piholeStatusAPI())); -} elseif (isset($_GET['enable']) && $auth) { +if (isset($_GET['enable']) && $auth) { if(isset($_GET["auth"])) { if($_GET["auth"] !== $pwhash) diff --git a/api_FTL.php b/api_FTL.php index b7bcf9fe..a596a73d 100644 --- a/api_FTL.php +++ b/api_FTL.php @@ -6,429 +6,355 @@ * This file is copyright under the latest version of the EUPL. * Please see LICENSE file for your rights under this license */ - -if(!isset($api)) -{ - die("Direct call to api_FTL.php is not allowed!"); +if (!isset($api)) { + die("Direct call to api_FTL.php is not allowed!"); } -// $FTL_IP is defined in api.php -$socket = connectFTL($FTL_IP); - -if(!is_resource($socket)) -{ - $data = array_merge($data, array("FTLnotrunning" => true)); +if (isset($_GET['type'])) { + $data["type"] = "FTL"; } -else -{ - if (isset($_GET['type'])) { - $data["type"] = "FTL"; - } - if (isset($_GET['version'])) { - $data["version"] = 3; - } +if (isset($_GET['version'])) { + $data["version"] = 3; +} - if (isset($_GET['summary']) || isset($_GET['summaryRaw']) || !count($_GET)) { - require_once("scripts/pi-hole/php/gravity.php"); - sendRequestFTL("stats"); - $return = getResponseFTL(); +if (isset($_GET['status'])) { + $return = callFTLAPI("stats"); - $stats = []; - foreach($return as $line) { - $tmp = explode(" ",$line); + if (in_array("status enabled", $return)) { + $data = array_merge($data, array("status" => "enabled")); + } else { + $data = array_merge($data, array("status" => "disabled")); + } +} - if($tmp[0] === "domains_being_blocked" && !is_numeric($tmp[1])) { - // Expect string response - $stats[$tmp[0]] = $tmp[1]; - } elseif ($tmp[0] === "status") { - // Expect string response - $stats[$tmp[0]] = piholeStatusAPI(); - } elseif (isset($_GET['summary'])) { - // "summary" expects a formmated string response - if($tmp[0] !== "ads_percentage_today") { - $stats[$tmp[0]] = number_format($tmp[1]); - } else { - $stats[$tmp[0]] = number_format($tmp[1], 1, '.', ''); - } - } else { - // Expect float response - $stats[$tmp[0]] = floatval($tmp[1]); - } +if (isset($_GET['summary']) || isset($_GET['summaryRaw']) || !count($_GET)) { + require_once("scripts/pi-hole/php/gravity.php"); - } - $stats['gravity_last_updated'] = gravity_last_update(true); - $data = array_merge($data,$stats); - } + $return = callFTLAPI("stats"); - if (isset($_GET["getMaxlogage"]) && $auth) { - sendRequestFTL("maxlogage"); - // Convert seconds to hours and rounds to one decimal place. - $ret = round(intval(getResponseFTL()[0]) / 3600, 1); - // Return 24h if value is 0, empty, null or non numeric. - $ret = $ret ?: 24; + $stats = []; + foreach ($return as $line) { + $tmp = explode(" ",$line); - $data = array_merge($data, array("maxlogage" => $ret)); - } + if ($tmp[0] === "domains_being_blocked" && !is_numeric($tmp[1]) || $tmp[0] === "status") { + // Expect string response + $stats[$tmp[0]] = $tmp[1]; + } elseif (isset($_GET['summary'])) { + // "summary" expects a formmated string response + if ($tmp[0] !== "ads_percentage_today") { + $stats[$tmp[0]] = number_format($tmp[1]); + } else { + $stats[$tmp[0]] = number_format($tmp[1], 1, '.', ''); + } + } else { + // Expect float response + $stats[$tmp[0]] = floatval($tmp[1]); + } - if (isset($_GET['overTimeData10mins'])) - { - sendRequestFTL("overTime"); - $return = getResponseFTL(); + } + $stats['gravity_last_updated'] = gravity_last_update(true); + $data = array_merge($data,$stats); +} - $domains_over_time = array(); - $ads_over_time = array(); - foreach($return as $line) - { - $tmp = explode(" ",$line); - $domains_over_time[intval($tmp[0])] = intval($tmp[1]); - $ads_over_time[intval($tmp[0])] = intval($tmp[2]); - } - $result = array('domains_over_time' => $domains_over_time, - 'ads_over_time' => $ads_over_time); - $data = array_merge($data, $result); - } +if (isset($_GET["getMaxlogage"]) && $auth) { + $return = callFTLAPI("stats"); - if (isset($_GET['topItems']) && $auth) - { - if($_GET['topItems'] === "audit") - { - sendRequestFTL("top-domains for audit"); - } - else if(is_numeric($_GET['topItems'])) - { - sendRequestFTL("top-domains (".$_GET['topItems'].")"); - } - else - { - sendRequestFTL("top-domains"); - } + // Convert seconds to hours and rounds to one decimal place. + $ret = round(intval($return[0]) / 3600, 1); + // Return 24h if value is 0, empty, null or non numeric. + $ret = $ret ?: 24; - $return = getResponseFTL(); - $top_queries = array(); - foreach($return as $line) - { - $tmp = explode(" ",$line); - if(count($tmp) == 2) $tmp[2]=""; - $domain = utf8_encode($tmp[2]); - $top_queries[$domain] = intval($tmp[1]); - } + $data = array_merge($data, array("maxlogage" => $ret)); +} - if($_GET['topItems'] === "audit") - { - sendRequestFTL("top-ads for audit"); - } - else if(is_numeric($_GET['topItems'])) - { - sendRequestFTL("top-ads (".$_GET['topItems'].")"); - } - else - { - sendRequestFTL("top-ads"); - } +if (isset($_GET['overTimeData10mins'])) { + $return = callFTLAPI("overTime"); - $return = getResponseFTL(); - $top_ads = array(); - foreach($return as $line) - { - $tmp = explode(" ",$line); - $domain = utf8_encode($tmp[2]); - if(count($tmp) > 3) - $top_ads[$domain." (".$tmp[3].")"] = intval($tmp[1]); - else - $top_ads[$domain] = intval($tmp[1]); - } + $domains_over_time = array(); + $ads_over_time = array(); + foreach ($return as $line) { + $tmp = explode(" ",$line); + $domains_over_time[intval($tmp[0])] = intval($tmp[1]); + $ads_over_time[intval($tmp[0])] = intval($tmp[2]); + } - $result = array('top_queries' => $top_queries, - 'top_ads' => $top_ads); + $result = array( + 'domains_over_time' => $domains_over_time, + 'ads_over_time' => $ads_over_time + ); - $data = array_merge($data, $result); - } + $data = array_merge($data, $result); +} - if ((isset($_GET['topClients']) || isset($_GET['getQuerySources'])) && $auth) - { +if (isset($_GET['topItems']) && $auth) { + if ($_GET['topItems'] === "audit") { + $return = callFTLAPI("top-domains for audit"); + } elseif (is_numeric($_GET['topItems'])) { + $return = callFTLAPI("top-domains (".$_GET['topItems'].")"); + } else { + $return = callFTLAPI("top-domains"); + } - if(isset($_GET['topClients'])) - { - $number = $_GET['topClients']; - } - elseif(isset($_GET['getQuerySources'])) - { - $number = $_GET['getQuerySources']; - } + $top_queries = array(); + foreach ($return as $line) { + $tmp = explode(" ",$line); + if (count($tmp) == 2) { + $tmp[2]=""; + } + $domain = utf8_encode($tmp[2]); + $top_queries[$domain] = intval($tmp[1]); + } - if(is_numeric($number)) - { - sendRequestFTL("top-clients (".$number.")"); - } - else - { - sendRequestFTL("top-clients"); - } + if ($_GET['topItems'] === "audit") { + $return = callFTLAPI("top-ads for audit"); + } elseif (is_numeric($_GET['topItems'])) { + $return = callFTLAPI("top-ads (".$_GET['topItems'].")"); + } else { + $return = callFTLAPI("top-ads"); + } - $return = getResponseFTL(); - $top_clients = array(); - foreach($return as $line) - { - $tmp = explode(" ",$line); - $clientip = utf8_encode($tmp[2]); - if(count($tmp) > 3 && strlen($tmp[3]) > 0) - { - $clientname = utf8_encode($tmp[3]); - $top_clients[$clientname."|".$clientip] = intval($tmp[1]); - } - else - $top_clients[$clientip] = intval($tmp[1]); - } + $top_ads = array(); + foreach ($return as $line) { + $tmp = explode(" ",$line); + $domain = utf8_encode($tmp[2]); + if (count($tmp) > 3) { + $top_ads[$domain." (".$tmp[3].")"] = intval($tmp[1]); + } else { + $top_ads[$domain] = intval($tmp[1]); + } + } - $result = array('top_sources' => $top_clients); - $data = array_merge($data, $result); - } + $result = array( + 'top_queries' => $top_queries, + 'top_ads' => $top_ads + ); - if (isset($_GET['topClientsBlocked']) && $auth) - { + $data = array_merge($data, $result); +} - if(isset($_GET['topClientsBlocked'])) - { - $number = $_GET['topClientsBlocked']; - } +if ((isset($_GET['topClients']) || isset($_GET['getQuerySources'])) && $auth) { - if(is_numeric($number)) - { - sendRequestFTL("top-clients blocked (".$number.")"); - } - else - { - sendRequestFTL("top-clients blocked"); - } + if (isset($_GET['topClients'])) { + $number = $_GET['topClients']; + } elseif (isset($_GET['getQuerySources'])) { + $number = $_GET['getQuerySources']; + } - $return = getResponseFTL(); - $top_clients = array(); - foreach($return as $line) - { - $tmp = explode(" ",$line); - $clientip = utf8_encode($tmp[2]); - if(count($tmp) > 3 && strlen($tmp[3]) > 0) - { - $clientname = utf8_encode($tmp[3]); - $top_clients[$clientname."|".$clientip] = intval($tmp[1]); - } - else - $top_clients[$clientip] = intval($tmp[1]); - } + if (is_numeric($number)) { + $return = callFTLAPI("top-clients (".$number.")"); + } else { + $return = callFTLAPI("top-clients"); + } - $result = array('top_sources_blocked' => $top_clients); - $data = array_merge($data, $result); - } + $top_clients = array(); + foreach ($return as $line) { + $tmp = explode(" ",$line); + $clientip = utf8_encode($tmp[2]); + if (count($tmp) > 3 && strlen($tmp[3]) > 0) { + $clientname = utf8_encode($tmp[3]); + $top_clients[$clientname."|".$clientip] = intval($tmp[1]); + } else { + $top_clients[$clientip] = intval($tmp[1]); + } + } - if (isset($_GET['getForwardDestinations']) && $auth) - { - if($_GET['getForwardDestinations'] === "unsorted") - { - sendRequestFTL("forward-dest unsorted"); - } - else - { - sendRequestFTL("forward-dest"); - } - $return = getResponseFTL(); - $forward_dest = array(); - foreach($return as $line) - { - $tmp = explode(" ",$line); - $forwardip = utf8_encode($tmp[2]); - if(count($tmp) > 3 && strlen($tmp[3]) > 0) - { - $forwardname = utf8_encode($tmp[3]); - $forward_dest[$forwardname."|".$forwardip] = floatval($tmp[1]); - } - else - $forward_dest[$forwardip] = floatval($tmp[1]); - } + $result = array('top_sources' => $top_clients); + $data = array_merge($data, $result); +} - $result = array('forward_destinations' => $forward_dest); - $data = array_merge($data, $result); - } +if (isset($_GET['topClientsBlocked']) && $auth) { - if (isset($_GET['getQueryTypes']) && $auth) - { - sendRequestFTL("querytypes"); - $return = getResponseFTL(); - $querytypes = array(); - foreach($return as $ret) - { - $tmp = explode(": ",$ret); - // Reply cannot contain non-ASCII characters - $querytypes[$tmp[0]] = floatval($tmp[1]); - } + if (isset($_GET['topClientsBlocked'])) { + $number = $_GET['topClientsBlocked']; + } - $result = array('querytypes' => $querytypes); - $data = array_merge($data, $result); - } + if (is_numeric($number)) { + $return = callFTLAPI("top-clients blocked (".$number.")"); + } else { + $return = callFTLAPI("top-clients blocked"); + } - if (isset($_GET['getCacheInfo']) && $auth) - { - sendRequestFTL("cacheinfo"); - $return = getResponseFTL(); - $cacheinfo = array(); - foreach($return as $ret) - { - $tmp = explode(": ",$ret); - // Reply cannot contain non-ASCII characters - $cacheinfo[$tmp[0]] = floatval($tmp[1]); - } + $top_clients = array(); + foreach ($return as $line) { + $tmp = explode(" ",$line); + $clientip = utf8_encode($tmp[2]); + if (count($tmp) > 3 && strlen($tmp[3]) > 0) { + $clientname = utf8_encode($tmp[3]); + $top_clients[$clientname."|".$clientip] = intval($tmp[1]); + } else { + $top_clients[$clientip] = intval($tmp[1]); + } + } - $result = array('cacheinfo' => $cacheinfo); - $data = array_merge($data, $result); - } + $result = array('top_sources_blocked' => $top_clients); + $data = array_merge($data, $result); +} - if (isset($_GET['getAllQueries']) && $auth) - { - if(isset($_GET['from']) && isset($_GET['until'])) - { - // Get limited time interval - sendRequestFTL("getallqueries-time ".$_GET['from']." ".$_GET['until']); - } - else if(isset($_GET['domain'])) - { - // Get specific domain only - sendRequestFTL("getallqueries-domain ".$_GET['domain']); - } - else if(isset($_GET['client']) && (isset($_GET['type']) && $_GET['type'] === "blocked")) - { - // Get specific client only - sendRequestFTL("getallqueries-client-blocked ".$_GET['client']); - } - else if(isset($_GET['client'])) - { - // Get specific client only - sendRequestFTL("getallqueries-client ".$_GET['client']); - } - else if(isset($_GET['querytype'])) - { - // Get specific query type only - sendRequestFTL("getallqueries-qtype ".$_GET['querytype']); - } - else if(isset($_GET['forwarddest'])) - { - // Get specific forward destination only - sendRequestFTL("getallqueries-forward ".$_GET['forwarddest']); - } - else if(is_numeric($_GET['getAllQueries'])) - { - sendRequestFTL("getallqueries (".$_GET['getAllQueries'].")"); - } - else - { - // Get all queries - sendRequestFTL("getallqueries"); - } - $return = getResponseFTL(); - $allQueries = array(); - foreach($return as $line) - { - $tmp = str_getcsv($line," "); - // UTF-8 encode domain - $tmp[2] = utf8_encode(str_replace("~"," ",$tmp[2])); - // UTF-8 encode client host name - $tmp[3] = utf8_encode($tmp[3]); - array_push($allQueries,$tmp); - } +if (isset($_GET['getForwardDestinations']) && $auth) { + if ($_GET['getForwardDestinations'] === "unsorted") { + $return = callFTLAPI("forward-dest unsorted"); + } else { + $return = callFTLAPI("forward-dest"); + } - $result = array('data' => $allQueries); - $data = array_merge($data, $result); - } + $forward_dest = array(); + foreach ($return as $line) { + $tmp = explode(" ",$line); + $forwardip = utf8_encode($tmp[2]); + if (count($tmp) > 3 && strlen($tmp[3]) > 0) { + $forwardname = utf8_encode($tmp[3]); + $forward_dest[$forwardname."|".$forwardip] = floatval($tmp[1]); + } else { + $forward_dest[$forwardip] = floatval($tmp[1]); + } + } - if(isset($_GET["recentBlocked"]) && $auth) - { - sendRequestFTL("recentBlocked"); - die(utf8_encode(getResponseFTL()[0])); - unset($data); - } + $result = array('forward_destinations' => $forward_dest); + $data = array_merge($data, $result); +} - if (isset($_GET['getForwardDestinationNames']) && $auth) - { - sendRequestFTL("forward-names"); - $return = getResponseFTL(); - $forward_dest = array(); - foreach($return as $line) - { - $tmp = explode(" ",$line); - $forwardip = utf8_encode($tmp[2]); - if(count($tmp) > 3) - { - $forwardname = utf8_encode($tmp[3]); - $forward_dest[$forwardname."|".$forwardip] = floatval($tmp[1]); - } - else - { - $forward_dest[$forwardip] = floatval($tmp[1]); - } - } +if (isset($_GET['getQueryTypes']) && $auth) { + $return = callFTLAPI("querytypes"); - $result = array('forward_destinations' => $forward_dest); - $data = array_merge($data, $result); - } + $querytypes = array(); + foreach ($return as $ret) { + $tmp = explode(": ",$ret); + // Reply cannot contain non-ASCII characters + $querytypes[$tmp[0]] = floatval($tmp[1]); + } - if (isset($_GET['overTimeDataQueryTypes']) && $auth) - { - sendRequestFTL("QueryTypesoverTime"); - $return = getResponseFTL(); - $over_time = array(); + $result = array('querytypes' => $querytypes); + $data = array_merge($data, $result); +} - foreach($return as $line) - { - $tmp = explode(" ",$line); - for ($i=0; $i < count($tmp)-1; $i++) { - $over_time[intval($tmp[0])][$i] = floatval($tmp[$i+1]); - } - } - $result = array('over_time' => $over_time); - $data = array_merge($data, $result); - } +if (isset($_GET['getCacheInfo']) && $auth) { + $return = callFTLAPI("cacheinfo"); + $cacheinfo = array(); + foreach ($return as $ret) { + $tmp = explode(": ",$ret); + // Reply cannot contain non-ASCII characters + $cacheinfo[$tmp[0]] = floatval($tmp[1]); + } - if (isset($_GET['getClientNames']) && $auth) - { - sendRequestFTL("client-names"); - $return = getResponseFTL(); - $client_names = array(); - foreach($return as $line) - { - $tmp = explode(" ", $line); - $client_names[] = array( - "name" => utf8_encode($tmp[0]), - "ip" => utf8_encode($tmp[1]) - ); - } + $result = array('cacheinfo' => $cacheinfo); + $data = array_merge($data, $result); +} - $result = array('clients' => $client_names); - $data = array_merge($data, $result); - } +if (isset($_GET['getAllQueries']) && $auth) { + if (isset($_GET['from']) && isset($_GET['until'])) { + // Get limited time interval + $return = callFTLAPI("getallqueries-time ".$_GET['from']." ".$_GET['until']); + } elseif (isset($_GET['domain'])) { + // Get specific domain only + $return = callFTLAPI("getallqueries-domain ".$_GET['domain']); + } elseif (isset($_GET['client']) && (isset($_GET['type']) && $_GET['type'] === "blocked")) { + // Get specific client only + $return = callFTLAPI("getallqueries-client-blocked ".$_GET['client']); + } elseif (isset($_GET['client'])) { + // Get specific client only + $return = callFTLAPI("getallqueries-client ".$_GET['client']); + } elseif (isset($_GET['querytype'])) { + // Get specific query type only + $return = callFTLAPI("getallqueries-qtype ".$_GET['querytype']); + } elseif (isset($_GET['forwarddest'])) { + // Get specific forward destination only + $return = callFTLAPI("getallqueries-forward ".$_GET['forwarddest']); + } elseif (is_numeric($_GET['getAllQueries'])) { + $return = callFTLAPI("getallqueries (".$_GET['getAllQueries'].")"); + } else { + // Get all queries + $return = callFTLAPI("getallqueries"); + } - if (isset($_GET['overTimeDataClients']) && $auth) - { - sendRequestFTL("ClientsoverTime"); - $return = getResponseFTL(); - $over_time = array(); + $allQueries = array(); + foreach ($return as $line) { + $tmp = str_getcsv($line," "); + // UTF-8 encode domain + $tmp[2] = utf8_encode(str_replace("~"," ",$tmp[2])); + // UTF-8 encode client host name + $tmp[3] = utf8_encode($tmp[3]); + array_push($allQueries,$tmp); + } - foreach($return as $line) - { - $tmp = explode(" ",$line); - for ($i=0; $i < count($tmp)-1; $i++) { - $over_time[intval($tmp[0])][$i] = floatval($tmp[$i+1]); - } - } - $result = array('over_time' => $over_time); - $data = array_merge($data, $result); - } + $result = array('data' => $allQueries); + $data = array_merge($data, $result); +} - if (isset($_GET['delete_lease']) && $auth) - { - sendRequestFTL("delete-lease ".$_GET['delete_lease']); - $return = getResponseFTL(); - $data["delete_lease"] = $return[0]; - } +if (isset($_GET["recentBlocked"]) && $auth) { + die(utf8_encode(callFTLAPI("recentBlocked")[0])); + unset($data); +} - disconnectFTL(); +if (isset($_GET['getForwardDestinationNames']) && $auth) { + $return = callFTLAPI("forward-names"); + + $forward_dest = array(); + foreach ($return as $line) { + $tmp = explode(" ",$line); + $forwardip = utf8_encode($tmp[2]); + if (count($tmp) > 3) { + $forwardname = utf8_encode($tmp[3]); + $forward_dest[$forwardname."|".$forwardip] = floatval($tmp[1]); + } else { + $forward_dest[$forwardip] = floatval($tmp[1]); + } + } + + $result = array('forward_destinations' => $forward_dest); + $data = array_merge($data, $result); +} + +if (isset($_GET['overTimeDataQueryTypes']) && $auth) { + $return = callFTLAPI("QueryTypesoverTime"); + $over_time = array(); + + foreach ($return as $line) { + $tmp = explode(" ",$line); + for ($i=0; $i < count($tmp)-1; $i++) { + $over_time[intval($tmp[0])][$i] = floatval($tmp[$i+1]); + } + } + $result = array('over_time' => $over_time); + $data = array_merge($data, $result); +} + +if (isset($_GET['getClientNames']) && $auth) { + $return = callFTLAPI("client-names"); + $client_names = array(); + foreach ($return as $line) { + $tmp = explode(" ", $line); + $client_names[] = array( + "name" => utf8_encode($tmp[0]), + "ip" => utf8_encode($tmp[1]) + ); + } + + $result = array('clients' => $client_names); + $data = array_merge($data, $result); +} + +if (isset($_GET['overTimeDataClients']) && $auth) { + $return = callFTLAPI("ClientsoverTime"); + $over_time = array(); + + foreach ($return as $line) { + $tmp = explode(" ",$line); + for ($i=0; $i < count($tmp)-1; $i++) { + $over_time[intval($tmp[0])][$i] = floatval($tmp[$i+1]); + } + } + $result = array('over_time' => $over_time); + $data = array_merge($data, $result); +} + +if (isset($_GET['delete_lease']) && $auth) { + $return = callFTLAPI("delete-lease ".$_GET['delete_lease']); + $data["delete_lease"] = $return[0]; +} + +if (isset($_GET['dns-port']) && $auth) { + $return = callFTLAPI("dns-port"); + $data["dns-port"] = $return[0]; } ?> diff --git a/scripts/pi-hole/js/index.js b/scripts/pi-hole/js/index.js index 9849d7aa..b42b3822 100644 --- a/scripts/pi-hole/js/index.js +++ b/scripts/pi-hole/js/index.js @@ -583,7 +583,7 @@ function updateForwardDestinationsPie() { } function updateTopClientsChart() { - $.getJSON("api.php?summaryRaw&getQuerySources&topClientsBlocked", function (data) { + $.getJSON("api.php?getQuerySources&topClientsBlocked", function (data) { if ("FTLnotrunning" in data) { return; } @@ -618,12 +618,14 @@ function updateTopClientsChart() { '">' + clientname + ""; - percentage = (data.top_sources[client] / data.dns_queries_today) * 100; + percentage = (data.top_sources[client] / summary.dns_queries_today) * 100; clienttable.append( "