From a3316f9fe7c7b2e3b59ae737e7e4d4505bb3de6d Mon Sep 17 00:00:00 2001 From: Promofaux Date: Tue, 13 Dec 2016 23:13:16 +0000 Subject: [PATCH 1/4] check if domain is blocked or not by checking it against list.preEventHorizon --- data.php | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/data.php b/data.php index 9c91cc34..6b3c9ded 100644 --- a/data.php +++ b/data.php @@ -4,6 +4,7 @@ $divide = $setupVars['IPV6_ADDRESS'] != "" && $setupVars['IPV4_ADDRESS'] != ""; $hosts = file_exists("/etc/hosts") ? file("/etc/hosts") : array(); $log = new \SplFileObject('/var/log/pihole.log'); + $gravity = new \SplFileObject('/etc/pihole/list.preEventHorizon'); /******* Public Members ********/ function getSummaryData() { @@ -141,9 +142,10 @@ } function getAllQueries($orderBy) { - global $log,$setupVars; + global $log,$setupVars,$gravity; $allQueries = array("data" => array()); $dns_queries = getDnsQueriesAll($log); + $gravity_domains = getGravityDomains($gravity); $hostname = trim(file_get_contents("/etc/hostname"), "\x00..\x1F"); if(isset($setupVars["API_QUERY_LOG_SHOW"])) @@ -188,16 +190,10 @@ $status = ""; if (substr($tmp, 0, 5) == "query"){ - $type = substr($exploded[count($exploded)-4], 6, -1); - $domain = $exploded[count($exploded)-3]; - $client = $exploded[count($exploded)-1]; - - } - elseif ((substr($tmp, 0, 9) == "forwarded" || $exploded[count($exploded)-3] == "pi.hole" || $exploded[count($exploded)-3] == $hostname) && $showpermitted){ - $status="OK"; - } - elseif ((substr($tmp, strlen($tmp) - 12, 12) == "gravity.list" && $exploded[count($exploded)-5] != "read") && $showblocked){ - $status="Pi-holed"; + $type = substr($exploded[count($exploded)-4], 6, -1); + $domain = $exploded[count($exploded)-3]; + $client = $exploded[count($exploded)-1]; + $status = isset($gravity_domains[$domain]) ? "Pi-holed" : "OK"; } if ( $status != ""){ @@ -260,6 +256,23 @@ return $lines; } + function getGravityDomains($gravity){ + $gravity->rewind(); + $lines=[]; + $new_lines=[]; + foreach ($gravity as $line) { + $lines[] = $line; + } + + //Probably a more elegant way to do this... + foreach(array_values($lines) as $v){ + $new_lines[str_replace(array("\r", "\n"), '', $v)] = 1; + } + + return $new_lines; + + } + function getBlockedQueries(\SplFileObject $log) { $log->rewind(); $lines = []; From bbdb675d7b4d9ecfa1397ab88cee5ed490158225 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Wed, 14 Dec 2016 10:34:13 +0100 Subject: [PATCH 2/4] Reimplement API_QUERY_LOG_SHOW actions + remove obsolete if statement --- data.php | 59 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/data.php b/data.php index 6b3c9ded..6098be9c 100644 --- a/data.php +++ b/data.php @@ -189,38 +189,39 @@ $tmp = $exploded[count($exploded)-4]; $status = ""; - if (substr($tmp, 0, 5) == "query"){ - $type = substr($exploded[count($exploded)-4], 6, -1); - $domain = $exploded[count($exploded)-3]; - $client = $exploded[count($exploded)-1]; + if (substr($tmp, 0, 5) == "query") + { $status = isset($gravity_domains[$domain]) ? "Pi-holed" : "OK"; - } + if(($status === "Pi-holed" && $showblocked) || ($status === "OK" && $showpermitted)) + { + $type = substr($exploded[count($exploded)-4], 6, -1); + $domain = $exploded[count($exploded)-3]; + $client = $exploded[count($exploded)-1]; - if ( $status != ""){ - if($orderBy == "orderByClientDomainTime"){ - $allQueries['data'][hasHostName($client)][$domain][$time->format('Y-m-d\TH:i:s')] = $status; - }elseif ($orderBy == "orderByClientTimeDomain"){ - $allQueries['data'][hasHostName($client)][$time->format('Y-m-d\TH:i:s')][$domain] = $status; - }elseif ($orderBy == "orderByTimeClientDomain"){ - $allQueries['data'][$time->format('Y-m-d\TH:i:s')][hasHostName($client)][$domain] = $status; - }elseif ($orderBy == "orderByTimeDomainClient"){ - $allQueries['data'][$time->format('Y-m-d\TH:i:s')][$domain][hasHostName($client)] = $status; - }elseif ($orderBy == "orderByDomainClientTime"){ - $allQueries['data'][$domain][hasHostName($client)][$time->format('Y-m-d\TH:i:s')] = $status; - }elseif ($orderBy == "orderByDomainTimeClient"){ - $allQueries['data'][$domain][$time->format('Y-m-d\TH:i:s')][hasHostName($client)] = $status; - }else{ - array_push($allQueries['data'], array( - $time->format('Y-m-d\TH:i:s'), - $type, - $domain, - hasHostName($client), - $status, - "" - )); - } + if($orderBy == "orderByClientDomainTime"){ + $allQueries['data'][hasHostName($client)][$domain][$time->format('Y-m-d\TH:i:s')] = $status; + }elseif ($orderBy == "orderByClientTimeDomain"){ + $allQueries['data'][hasHostName($client)][$time->format('Y-m-d\TH:i:s')][$domain] = $status; + }elseif ($orderBy == "orderByTimeClientDomain"){ + $allQueries['data'][$time->format('Y-m-d\TH:i:s')][hasHostName($client)][$domain] = $status; + }elseif ($orderBy == "orderByTimeDomainClient"){ + $allQueries['data'][$time->format('Y-m-d\TH:i:s')][$domain][hasHostName($client)] = $status; + }elseif ($orderBy == "orderByDomainClientTime"){ + $allQueries['data'][$domain][hasHostName($client)][$time->format('Y-m-d\TH:i:s')] = $status; + }elseif ($orderBy == "orderByDomainTimeClient"){ + $allQueries['data'][$domain][$time->format('Y-m-d\TH:i:s')][hasHostName($client)] = $status; + }else{ + array_push($allQueries['data'], array( + $time->format('Y-m-d\TH:i:s'), + $type, + $domain, + hasHostName($client), + $status, + "" + )); + } + } } - } return $allQueries; } From e59e1264534661b2638eecac77cb88307aa8d6ac Mon Sep 17 00:00:00 2001 From: DL6ER Date: Wed, 14 Dec 2016 11:37:50 +0100 Subject: [PATCH 3/4] Speed up function getGravityDomains() --- data.php | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/data.php b/data.php index 6098be9c..e16fcd5a 100644 --- a/data.php +++ b/data.php @@ -260,18 +260,13 @@ function getGravityDomains($gravity){ $gravity->rewind(); $lines=[]; - $new_lines=[]; foreach ($gravity as $line) { - $lines[] = $line; + // Strip newline (and possibly carriage return) from end of string + // using rtrim() + $lines[rtrim($line)] = true; } - //Probably a more elegant way to do this... - foreach(array_values($lines) as $v){ - $new_lines[str_replace(array("\r", "\n"), '', $v)] = 1; - } - - return $new_lines; - + return $lines; } function getBlockedQueries(\SplFileObject $log) { From c599c30763221aae8cc86ffa6fbd5d6ff300e5c5 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Wed, 14 Dec 2016 11:39:20 +0100 Subject: [PATCH 4/4] Add API option to get gravity domains --- api.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/api.php b/api.php index e1120af0..6259590d 100644 --- a/api.php +++ b/api.php @@ -76,6 +76,10 @@ )); } + if (isset($_GET['getGravityDomains'])) { + $data = array_merge($data, getGravityDomains($gravity)); + } + function filterArray(&$a) { $sanArray = array(); foreach ($a as $k=>$v) {