true); } else { if (in_array('status enabled', $return)) { $data = array_merge($data, array('status' => 'enabled')); } else { $data = array_merge($data, array('status' => 'disabled')); } } } if ((isset($_GET['summary']) || isset($_GET['summaryRaw']) || !count($_GET)) && $auth) { require_once 'scripts/pi-hole/php/gravity.php'; $return = callFTLAPI('stats'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $stats = array(); foreach ($return as $line) { $tmp = explode(' ', $line); 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]); } } $stats['gravity_last_updated'] = gravity_last_update(true); $data = array_merge($data, $stats); } } if (isset($_GET['getMaxlogage']) && $auth) { $return = callFTLAPI('maxlogage'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { // 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; $data = array_merge($data, array('maxlogage' => $ret)); } } if (isset($_GET['overTimeData10mins']) && $auth) { $return = callFTLAPI('overTime'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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['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 (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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 ($_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'); } if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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_queries' => $top_queries, 'top_ads' => $top_ads, ); $data = array_merge($data, $result); } } if ((isset($_GET['topClients']) || isset($_GET['getQuerySources'])) && $auth) { if (isset($_GET['topClients'])) { $number = $_GET['topClients']; } elseif (isset($_GET['getQuerySources'])) { $number = $_GET['getQuerySources']; } if (is_numeric($number)) { $return = callFTLAPI('top-clients ('.$number.')'); } else { $return = callFTLAPI('top-clients'); } if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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('top_sources' => $top_clients); $data = array_merge($data, $result); } } if (isset($_GET['topClientsBlocked']) && $auth) { if (isset($_GET['topClientsBlocked'])) { $number = $_GET['topClientsBlocked']; } if (is_numeric($number)) { $return = callFTLAPI('top-clients blocked ('.$number.')'); } else { $return = callFTLAPI('top-clients blocked'); } if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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('top_sources_blocked' => $top_clients); $data = array_merge($data, $result); } } if (isset($_GET['getForwardDestinations']) && $auth) { if ($_GET['getForwardDestinations'] === 'unsorted') { $return = callFTLAPI('forward-dest unsorted'); } else { $return = callFTLAPI('forward-dest'); } if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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('forward_destinations' => $forward_dest); $data = array_merge($data, $result); } } if (isset($_GET['getQueryTypes']) && $auth) { $return = callFTLAPI('querytypes'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $querytypes = array(); foreach ($return as $ret) { $tmp = explode(': ', $ret); // Reply cannot contain non-ASCII characters $querytypes[$tmp[0]] = floatval($tmp[1]); } $result = array('querytypes' => $querytypes); $data = array_merge($data, $result); } } if (isset($_GET['getCacheInfo']) && $auth) { $return = callFTLAPI('cacheinfo'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $cacheinfo = array(); foreach ($return as $ret) { $tmp = explode(': ', $ret); // Reply cannot contain non-ASCII characters $cacheinfo[$tmp[0]] = floatval($tmp[1]); } $result = array('cacheinfo' => $cacheinfo); $data = array_merge($data, $result); } } if (isset($_GET['getAllQueries']) && $auth) { if (isset($_GET['from'], $_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 (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { // Set the header header('Content-type: application/json'); // Start the JSON string echo '{"data":['; $first = true; foreach ($return as $line) { // Insert a comma before the next record (except on the first one) if (!$first) { echo ','; } else { $first = false; } $row = str_getcsv($line, ' '); // UTF-8 encode domain $domain = utf8_encode(str_replace('~', ' ', $row[2])); // UTF-8 encode client host name $client = utf8_encode($row[3]); // Insert into array and output it in JSON format // array: time type domain client status dnssecStatus reply response_time CNAMEDomain regexID upstream destination EDE echo json_encode(array($row[0], $row[1], $domain, $client, $row[4], $row[5], $row[6], $row[7], $row[8], $row[9], $row[10], $row[11])); } // Finish the JSON string echo ']}'; // exit at the end exit; } } if (isset($_GET['recentBlocked']) && $auth) { exit(utf8_encode(callFTLAPI('recentBlocked')[0])); unset($data); } if (isset($_GET['getForwardDestinationNames']) && $auth) { $return = callFTLAPI('forward-names'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $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']); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $data['delete_lease'] = $return[0]; } } if (isset($_GET['dns-port']) && $auth) { $return = callFTLAPI('dns-port'); if (array_key_exists('FTLnotrunning', $return)) { $data = array('FTLnotrunning' => true); } else { $data['dns-port'] = $return[0]; } }