=$serverName ?>
- 0) foreach ($queryResults as $num => $value) { echo "[$num]:$adlistsUrls[$num]\n"; } ?>
-
-
- diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh
index e7f3cd48..6543efbb 100755
--- a/advanced/Scripts/piholeDebug.sh
+++ b/advanced/Scripts/piholeDebug.sh
@@ -814,29 +814,13 @@ check_x_headers() {
# server is operating correctly
echo_current_diagnostic "Dashboard and block page"
# Use curl -I to get the header and parse out just the X-Pi-hole one
- local block_page
- block_page=$(curl -Is localhost | awk '/X-Pi-hole/' | tr -d '\r')
- # Do it for the dashboard as well, as the header is different than above
+ local full_curl_output_dashboard
local dashboard
- dashboard=$(curl -Is localhost/admin/ | awk '/X-Pi-hole/' | tr -d '\r')
+ full_curl_output_dashboard="$(curl -Is localhost/admin/)"
+ dashboard=$(echo "${full_curl_output_dashboard}" | awk '/X-Pi-hole/' | tr -d '\r')
# Store what the X-Header should be in variables for comparison later
- local block_page_working
- block_page_working="X-Pi-hole: A black hole for Internet advertisements."
local dashboard_working
dashboard_working="X-Pi-hole: The Pi-hole Web interface is working!"
- local full_curl_output_block_page
- full_curl_output_block_page="$(curl -Is localhost)"
- local full_curl_output_dashboard
- full_curl_output_dashboard="$(curl -Is localhost/admin/)"
- # If the X-header found by curl matches what is should be,
- if [[ $block_page == "$block_page_working" ]]; then
- # display a success message
- log_write "$TICK Block page X-Header: ${COL_GREEN}${block_page}${COL_NC}"
- else
- # Otherwise, show an error
- log_write "$CROSS Block page X-Header: ${COL_RED}X-Header does not match or could not be retrieved.${COL_NC}"
- log_write "${COL_RED}${full_curl_output_block_page}${COL_NC}"
- fi
# Same logic applies to the dashboard as above, if the X-Header matches what a working system should have,
if [[ $dashboard == "$dashboard_working" ]]; then
@@ -845,6 +829,7 @@ check_x_headers() {
else
# Otherwise, it's a failure since the X-Headers either don't exist or have been modified in some way
log_write "$CROSS Web interface X-Header: ${COL_RED}X-Header does not match or could not be retrieved.${COL_NC}"
+
log_write "${COL_RED}${full_curl_output_dashboard}${COL_NC}"
fi
}
diff --git a/advanced/Scripts/query.sh b/advanced/Scripts/query.sh
index 5f25e5be..ae266ec0 100755
--- a/advanced/Scripts/query.sh
+++ b/advanced/Scripts/query.sh
@@ -16,7 +16,6 @@ GRAVITYDB="${piholeDir}/gravity.db"
options="$*"
all=""
exact=""
-blockpage=""
matchType="match"
# Source pihole-FTL from install script
pihole_FTL="${piholeDir}/pihole-FTL.conf"
@@ -71,18 +70,14 @@ Options:
fi
# Handle valid options
-if [[ "${options}" == *"-bp"* ]]; then
- exact="exact"; blockpage=true
-else
- [[ "${options}" == *"-all"* ]] && all=true
- if [[ "${options}" == *"-exact"* ]]; then
- exact="exact"; matchType="exact ${matchType}"
- fi
+[[ "${options}" == *"-all"* ]] && all=true
+if [[ "${options}" == *"-exact"* ]]; then
+ exact="exact"; matchType="exact ${matchType}"
fi
# Strip valid options, leaving only the domain and invalid options
# This allows users to place the options before or after the domain
-options=$(sed -E 's/ ?-(bp|adlists?|all|exact) ?//g' <<< "${options}")
+options=$(sed -E 's/ ?-(adlists?|all|exact) ?//g' <<< "${options}")
# Handle remaining options
# If $options contain non ASCII characters, convert to punycode
@@ -136,17 +131,11 @@ scanDatabaseTable() {
wbMatch=true
# Print table name
- if [[ -z "${blockpage}" ]]; then
- echo " ${matchType^} found in ${COL_BOLD}exact ${table}${COL_NC}"
- fi
+ echo " ${matchType^} found in ${COL_BOLD}exact ${table}${COL_NC}"
# Loop over results and print them
mapfile -t results <<< "${result}"
for result in "${results[@]}"; do
- if [[ -n "${blockpage}" ]]; then
- echo "π ${result}"
- exit 0
- fi
domain="${result/|*}"
if [[ "${result#*|}" == "0" ]]; then
extra=" (disabled)"
@@ -181,18 +170,13 @@ scanRegexDatabaseTable() {
# Form a "results" message
str_result="${COL_BOLD}${str_regexMatches}${COL_NC}"
# If we are displaying more than just the source of the block
- if [[ -z "${blockpage}" ]]; then
- # Set the wildcard match flag
- wcMatch=true
- # Echo the "matched" message, indented by one space
- echo " ${str_message}"
- # Echo the "results" message, each line indented by three spaces
- # shellcheck disable=SC2001
- echo "${str_result}" | sed 's/^/ /'
- else
- echo "π .wildcard"
- exit 0
- fi
+ # Set the wildcard match flag
+ wcMatch=true
+ # Echo the "matched" message, indented by one space
+ echo " ${str_message}"
+ # Echo the "results" message, each line indented by three spaces
+ # shellcheck disable=SC2001
+ echo "${str_result}" | sed 's/^/ /'
fi
fi
}
@@ -222,7 +206,7 @@ elif [[ -z "${all}" ]] && [[ "${#results[*]}" -ge 100 ]]; then
fi
# Print "Exact matches for" title
-if [[ -n "${exact}" ]] && [[ -z "${blockpage}" ]]; then
+if [[ -n "${exact}" ]]; then
plural=""; [[ "${#results[*]}" -gt 1 ]] && plural="es"
echo " ${matchType^}${plural} for ${COL_BOLD}${domainQuery}${COL_NC} found in:"
fi
@@ -238,9 +222,7 @@ for result in "${results[@]}"; do
extra=""
fi
- if [[ -n "${blockpage}" ]]; then
- echo "0 ${adlistAddress}"
- elif [[ -n "${exact}" ]]; then
+ if [[ -n "${exact}" ]]; then
echo " - ${adlistAddress}${extra}"
else
if [[ ! "${adlistAddress}" == "${adlistAddress_prev:-}" ]]; then
diff --git a/advanced/blockingpage.css b/advanced/blockingpage.css
deleted file mode 100644
index 0cc7a65c..00000000
--- a/advanced/blockingpage.css
+++ /dev/null
@@ -1,455 +0,0 @@
-/* Pi-hole: A black hole for Internet advertisements
-* (c) 2017 Pi-hole, LLC (https://pi-hole.net)
-* Network-wide ad blocking via your own hardware.
-*
-* This file is copyright under the latest version of the EUPL.
-* Please see LICENSE file for your rights under this license. */
-
-/* Text Customisation Options ======> */
-.title::before { content: "Website Blocked"; }
-.altBtn::before { content: "Why am I here?"; }
-.linkPH::before { content: "About Pi-hole"; }
-.linkEmail::before { content: "Contact Admin"; }
-
-#bpOutput.add::before { content: "Info"; }
-#bpOutput.add::after { content: "The domain is being whitelisted..."; }
-#bpOutput.error::before, .unhandled::before { content: "Error"; }
-#bpOutput.unhandled::after { content: "An unhandled exception occurred. This may happen when your browser is unable to load jQuery, or when the webserver is denying access to the Pi-hole API."; }
-#bpOutput.success::before { content: "Success"; }
-#bpOutput.success::after { content: "Website has been whitelisted! You may need to flush your DNS cache"; }
-
-.recentwl::before { content: "This site has been whitelisted. Please flush your DNS cache and/or restart your browser."; }
-.unknown::before { content: "This website is not found in any of Pi-hole's blacklists. The reason you have arrived here is unknown."; }
-.cname::before { content: "This site is an alias for "; } /* cname.com */
-.cname::after { content: ", which may be blocked by Pi-hole."; }
-
-.blacklist::before { content: "Manually Blacklisted"; }
-.wildcard::before { content: "Manually Blacklisted by Wildcard"; }
-.noblock::before { content: "Not found on any Blacklist"; }
-
-#bpBlock::before { content: "Access to the following website has been denied:"; }
-#bpFlag::before { content: "This is primarily due to being flagged as:"; }
-
-#bpHelpTxt::before { content: "If you have an ongoing use for this website, please "; }
-#bpHelpTxt a::before, #bpHelpTxt span::before { content: "ask the administrator"; }
-#bpHelpTxt::after{ content: " of the Pi-hole on this network to have it whitelisted"; }
-
-#bpBack::before { content: "Back to safety"; }
-#bpInfo::before { content: "Technical Info"; }
-#bpFoundIn::before { content: "This site is found in "; }
-#bpFoundIn span::after { content: " of "; }
-#bpFoundIn::after { content: " lists:"; }
-#bpWhitelist::before { content: "Whitelist"; }
-
-footer span::before { content: "Page generated on "; }
-
-/* Hide whitelisting form entirely */
-/* #bpWLButtons { display: none; } */
-
-/* Text Customisation Options <=============================== */
-
-/* http://necolas.github.io/normalize.css ======> */
-html { font-family: sans-serif; line-height: 1.15; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; }
-body { margin: 0; }
-article, aside, footer, header, nav, section { display: block; }
-h1 { font-size: 2em; margin: 0.67em 0; }
-figcaption, figure, main { display: block; }
-figure { margin: 1em 40px; }
-hr { box-sizing: content-box; height: 0; overflow: visible; }
-pre { font-family: monospace, monospace; font-size: 1em; }
-a { background-color: transparent; -webkit-text-decoration-skip: objects; }
-a:active, a:hover { outline-width: 0; }
-abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted; }
-b, strong { font-weight: inherit; }
-b, strong { font-weight: bolder; }
-code, kbd, samp { font-family: monospace, monospace; font-size: 1em; }
-dfn { font-style: italic; }
-mark { background-color: #ff0; color: #000; }
-small { font-size: 80%; }
-sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
-sub { bottom: -0.25em; }
-sup { top: -0.5em; }
-audio, video { display: inline-block; }
-audio:not([controls]) { display: none; height: 0; }
-img { border-style: none; }
-svg:not(:root) { overflow: hidden; }
-button, input, optgroup, select, textarea { font-family: sans-serif; font-size: 100%; line-height: 1.15; margin: 0; }
-button, input { overflow: visible; }
-button, select { text-transform: none; }
-button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; }
-button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; }
-button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; }
-fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
-legend { box-sizing: border-box; color: inherit; display: table; max-width: 100%; padding: 0; white-space: normal; }
-progress { display: inline-block; vertical-align: baseline; }
-textarea { overflow: auto; }
-[type="checkbox"], [type="radio"] { box-sizing: border-box; padding: 0; }
-[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; }
-[type="search"] { -webkit-appearance: textfield; outline-offset: -2px; }
-[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
-::-webkit-file-upload-button { -webkit-appearance: button; font: inherit; }
-details, menu { display: block; }
-summary { display: list-item; }
-canvas { display: inline-block; }
-template { display: none; }
-[hidden] { display: none; }
-/* Normalize.css <=============================== */
-
-html { font-size: 62.5%; }
-
-a { color: #3c8dbc; text-decoration: none; }
-a:hover { color: #72afda; text-decoration: underline; }
-b { color: rgb(68, 68, 68); }
-p { margin: 0; }
-
-label, .buttons a {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-label, .buttons *:not([disabled]) { cursor: pointer; }
-
-/* Touch device dark tap highlight */
-header h1 a, label, .buttons * { -webkit-tap-highlight-color: transparent; }
-
-/* Webkit Focus Glow */
-textarea, input, button { outline: none; }
-
-@font-face {
- font-family: "Source Sans Pro";
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: local("Source Sans Pro Regular"), local("SourceSansPro-Regular"),
- url("/admin/style/vendor/SourceSansPro/source-sans-pro-v13-latin-regular.woff2") format("woff2"),
- url("/admin/style/vendor/SourceSansPro/source-sans-pro-v13-latin-regular.woff") format("woff");
-}
-
-@font-face {
- font-family: "Source Sans Pro";
- font-style: normal;
- font-weight: 700;
- font-display: swap;
- src: local("Source Sans Pro Bold"), local("SourceSansPro-Bold"),
- url("/admin/style/vendor/SourceSansPro/source-sans-pro-v13-latin-700.woff2") format("woff2"),
- url("/admin/style/vendor/SourceSansPro/source-sans-pro-v13-latin-700.woff") format("woff");
-}
-
-body {
- background: #dbdbdb url("/admin/img/boxed-bg.jpg") repeat fixed;
- color: #333;
- font: 1.4rem "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
- line-height: 2.2rem;
-}
-
-/* User is greeted with a splash page when browsing to Pi-hole IP address */
-#splashpage {
- background: #222;
- color: rgba(255, 255, 255, 0.7);
- text-align: center;
- width: 100%;
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-#splashpage img { margin: 5px; width: 256px; }
-#splashpage b { color: inherit; }
-
-#bpWrapper {
- margin: 0 auto;
- max-width: 1250px;
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);
-}
-
-header {
- background: #3c8dbc;
- display: table;
- position: relative;
- width: 100%;
-}
-
-header h1, header h1 a, header .spc, header #bpAlt label {
- display: table-cell;
- color: #fff;
- white-space: nowrap;
- vertical-align: middle;
- height: 50px; /* Must match #bpAbout top value */
-}
-
-h1 a {
- background-color: rgba(0, 0, 0, 0.1);
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 2rem;
- font-weight: 400;
- min-width: 230px;
- text-align: center;
-}
-
-h1 a:hover, header #bpAlt:hover { background-color: rgba(0, 0, 0, 0.12); color: inherit; text-decoration: none; }
-
-header .spc { width: 100%; }
-
-header #bpAlt label {
- background: url("/admin/img/logo.svg") no-repeat center left 15px;
- background-size: 15px 23px;
- padding: 0 15px;
- text-indent: 30px;
-}
-
-[type="checkbox"][id$="Toggle"] { display: none; }
-[type="checkbox"][id$="Toggle"]:checked ~ #bpAbout,
-[type="checkbox"][id$="Toggle"]:checked ~ #bpMoreInfo {
- display: block;
-}
-
-html, body {
- height: 100%;
-}
-
-#pihole_card {
- width: 400px;
- height: auto;
- max-width: 400px;
-}
-
- #pihole_card p, #pihole_card a {
- font-size: 13pt;
- text-align: center;
- }
-
-#pihole_logo_splash {
- height: auto;
- width: 100%;
-}
-
-/* Click anywhere else on screen to hide #bpAbout */
-#bpAboutToggle:checked {
- display: block;
- height: 300px; /* VH Fallback */
- height: 100vh;
- left: 0;
- top: 0;
- opacity: 0;
- position: absolute;
- width: 100%;
-}
-
-#bpAbout {
- background: #3c8dbc;
- border-bottom-left-radius: 5px;
- border: 1px solid #fff;
- border-right-width: 0;
- box-shadow: -1px 1px 1px rgba(0, 0, 0, 0.12);
- box-sizing: border-box;
- display: none;
- font-size: 1.7rem;
- top: 50px;
- position: absolute;
- right: 0;
- width: 280px;
- z-index: 1;
-}
-
-.aboutPH {
- box-sizing: border-box;
- color: rgba(255, 255, 255, 0.8);
- display: block;
- padding: 10px;
- width: 100%;
- text-align: center;
-}
-
-.aboutImg {
- background: url("/admin/img/logo.svg") no-repeat center;
- background-size: 90px 90px;
- height: 90px;
- margin: 0 auto;
- padding: 2px;
- width: 90px;
-}
-
-.aboutPH p { margin: 10px 0; }
-.aboutPH small { display: block; font-size: 1.2rem; }
-
-.aboutLink {
- background: #fff;
- border-top: 1px solid #ddd;
- display: table;
- font-size: 1.4rem;
- text-align: center;
- width: 100%;
-}
-
-.aboutLink a {
- display: table-cell;
- padding: 14px;
- min-width: 50%;
-}
-
-main {
- background: #ecf0f5;
- font-size: 1.65rem;
- padding: 10px;
-}
-
-#bpOutput {
- background: #00c0ef;
- border-radius: 3px;
- border: 1px solid rgba(0, 0, 0, 0.1);
- color: #fff;
- font-size: 1.4rem;
- margin-bottom: 10px;
- margin-top: 5px;
- padding: 15px;
-}
-
-#bpOutput::before {
- background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7' height='14' viewBox='0 0 7 14'%3E%3Cpath fill='%23fff' d='M6 11a1.371 1.371 0 011 1v1a1.371 1.371 0 01-1 1H1a1.371 1.371 0 01-1-1v-1a1.371 1.371 0 011-1h1V8H1a1.371 1.371 0 01-1-1V6a1.371 1.371 0 011-1h3a1.371 1.371 0 011 1v5h1zM3.5 0A1.5 1.5 0 112 1.5 1.5 1.5 0 013.5 0z'/%3E%3C/svg%3E") no-repeat center left;
- display: block;
- font-size: 1.8rem;
- text-indent: 15px;
-}
-
-#bpOutput.hidden { display: none; }
-#bpOutput.success { background: #00a65a; }
-#bpOutput.error { background: #dd4b39; }
-
-.blockMsg, .flagMsg {
- font: 700 1.8rem Consolas, Courier, monospace;
- padding: 5px 10px 10px;
- text-indent: 15px;
-}
-
-#bpHelpTxt { padding-bottom: 10px; }
-
-.buttons {
- border-spacing: 5px 0;
- display: table;
- width: 100%;
-}
-
-.buttons * {
- -moz-appearance: none;
- -webkit-appearance: none;
- border-radius: 3px;
- border: 1px solid rgba(0, 0, 0, 0.1);
- box-sizing: content-box;
- display: table-cell;
- font-size: 1.65rem;
- margin-right: 5px;
- min-height: 20px;
- padding: 6px 12px;
- position: relative;
- text-align: center;
- vertical-align: top;
- white-space: nowrap;
- width: auto;
-}
-
-.buttons a:hover { text-decoration: none; }
-
-/* Button hover dark overlay */
-.buttons *:not(input):not([disabled]):hover {
- background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1));
- color: #fff;
-}
-
-/* Button active shadow inset */
-.buttons *:not([disabled]):not(input):active {
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-
-/* Input border color */
-.buttons *:not([disabled]):hover, .buttons input:focus {
- border-color: rgba(0, 0, 0, 0.25);
-}
-
-#bpButtons * { width: 50%; color: #fff; }
-#bpBack { background-color: #00a65a; }
-#bpInfo { background-color: #3c8dbc; }
-#bpWhitelist { background-color: #dd4b39; }
-
-#blockpage .buttons [type="password"][disabled] { color: rgba(0, 0, 0, 1); }
-#blockpage .buttons [disabled] { color: rgba(0, 0, 0, 0.55); background-color: #e3e3e3; }
-#blockpage .buttons [type="password"]:-ms-input-placeholder { color: rgba(51, 51, 51, 0.8); }
-
-input[type="password"] { font-size: 1.5rem; }
-
-@-webkit-keyframes slidein { from { max-height: 0; opacity: 0; } to { max-height: 300px; opacity: 1; } }
-
-@keyframes slidein { from { max-height: 0; opacity: 0; } to { max-height: 300px; opacity: 1; } }
-#bpMoreToggle:checked ~ #bpMoreInfo { display: block; margin-top: 8px; -webkit-animation: slidein 0.05s linear; animation: slidein 0.05s linear; }
-#bpMoreInfo { display: none; margin-top: 10px; }
-
-#bpQueryOutput {
- font-size: 1.2rem;
- line-height: 1.65rem;
- margin: 5px 0 0;
- overflow: auto;
- padding: 0 5px;
- -webkit-overflow-scrolling: touch;
-}
-
-#bpQueryOutput span { margin-right: 4px; }
-
-#bpWLButtons { width: auto; margin-top: 10px; }
-#bpWLButtons * { display: inline-block; }
-#bpWLDomain { display: none; }
-#bpWLPassword { width: 160px; }
-#bpWhitelist { color: #fff; }
-
-footer {
- background: #fff;
- border-top: 1px solid #d2d6de;
- color: #444;
- font: 1.2rem Consolas, Courier, monospace;
- padding: 8px;
-}
-
-/* Responsive Content */
-@media only screen and (max-width: 500px) {
- h1 a {
- font-size: 1.8rem;
- min-width: 170px;
- }
-
- footer span::before {
- content: "Generated ";
- }
-
- footer span {
- display: block;
- }
-}
-
-@media only screen and (min-width: 1251px) {
- #bpWrapper, footer {
- border-radius: 0 0 5px 5px;
- }
-
- #bpAbout {
- border-right-width: 1px;
- }
-}
-
-@media only screen and (max-width: 400px) {
- #pihole_card {
- width: 100%;
- height: auto;
- }
-
- #pihole_card p, #pihole_card a {
- font-size: 100%;
- }
-}
-
-@media only screen and (max-width: 256px) {
- #pihole_logo_splash {
- width: 90% !important;
- height: auto;
- }
-}
diff --git a/advanced/index.php b/advanced/index.php
index cf0ab854..350eb602 100644
--- a/advanced/index.php
+++ b/advanced/index.php
@@ -11,15 +11,6 @@ $serverName = htmlspecialchars($_SERVER["SERVER_NAME"]);
// Remove external ipv6 brackets if any
$serverName = preg_replace('/^\[(.*)\]$/', '${1}', $serverName);
-if (!is_file("/etc/pihole/setupVars.conf"))
- die("[ERROR] File not found: /etc/pihole/setupVars.conf
");
-
-// Get values from setupVars.conf
-$setupVars = parse_ini_file("/etc/pihole/setupVars.conf");
-$svPasswd = !empty($setupVars["WEBPASSWORD"]);
-$svEmail = (!empty($setupVars["ADMIN_EMAIL"]) && filter_var($setupVars["ADMIN_EMAIL"], FILTER_VALIDATE_EMAIL)) ? $setupVars["ADMIN_EMAIL"] : "";
-unset($setupVars);
-
// Set landing page location, found within /var/www/html/
$landPage = "../landing.php";
@@ -34,21 +25,6 @@ if (!empty($_SERVER["FQDN"])) {
array_push($authorizedHosts, $_SERVER["VIRTUAL_HOST"]);
}
-// Set which extension types render as Block Page (Including "" for index.ext)
-$validExtTypes = array("asp", "htm", "html", "php", "rss", "xml", "");
-
-// Get extension of current URL
-$currentUrlExt = pathinfo($_SERVER["REQUEST_URI"], PATHINFO_EXTENSION);
-
-// Set mobile friendly viewport
-$viewPort = '';
-
-// Set response header
-function setHeader($type = "x") {
- header("X-Pi-hole: A black hole for Internet advertisements.");
- if (isset($type) && $type === "js") header("Content-Type: application/javascript");
-}
-
// Determine block page type
if ($serverName === "pi.hole"
|| (!empty($_SERVER["VIRTUAL_HOST"]) && $serverName === $_SERVER["VIRTUAL_HOST"])) {
@@ -71,347 +47,34 @@ if ($serverName === "pi.hole"
Pi-hole: Your black hole for Internet advertisements
- Did you mean to go to the admin panel? + EOT; exit($splashPage); -} elseif ($currentUrlExt === "js") { - // Serve Pi-hole JavaScript for blocked domains requesting JS - exit(setHeader("js").'var x = "Pi-hole: A black hole for Internet advertisements."'); -} elseif (strpos($_SERVER["REQUEST_URI"], "?") !== FALSE && isset($_SERVER["HTTP_REFERER"])) { - // Serve blank image upon receiving REQUEST_URI w/ query string & HTTP_REFERRER - // e.g: An iframe of a blocked domain - exit(setHeader().' - - - - - - - - '); -} elseif (!in_array($currentUrlExt, $validExtTypes) || substr_count($_SERVER["REQUEST_URI"], "?")) { - // Serve SVG upon receiving non $validExtTypes URL extension or query string - // e.g: Not an iframe of a blocked domain, such as when browsing to a file/query directly - // QoL addition: Allow the SVG to be clicked on in order to quickly show the full Block Page - $blockImg = ' - - '; - exit(setHeader()." - - - - $viewPort - - $blockImg - "); } -/* Start processing Block Page from here */ +exit(header("HTTP/1.1 404 Not Found")); -// Define admin email address text based off $svEmail presence -$bpAskAdmin = !empty($svEmail) ? '' : ""; - -// Get possible non-standard location of FTL's database -$FTLsettings = parse_ini_file("/etc/pihole/pihole-FTL.conf"); -if (isset($FTLsettings["GRAVITYDB"])) { - $gravityDBFile = $FTLsettings["GRAVITYDB"]; -} else { - $gravityDBFile = "/etc/pihole/gravity.db"; -} - -// Connect to gravity.db -try { - $db = new SQLite3($gravityDBFile, SQLITE3_OPEN_READONLY); -} catch (Exception $exception) { - die("[ERROR]: Failed to connect to gravity.db"); -} - -// Get all adlist addresses -$adlistResults = $db->query("SELECT address FROM vw_adlist"); -$adlistsUrls = array(); -while ($row = $adlistResults->fetchArray()) { - array_push($adlistsUrls, $row[0]); -} - -if (empty($adlistsUrls)) - die("[ERROR]: There are no adlists enabled"); - -// Get total number of blocklists (Including Whitelist, Blacklist & Wildcard lists) -$adlistsCount = count($adlistsUrls) + 3; - -// Set query timeout -ini_set("default_socket_timeout", 3); - -// Logic for querying blocklists -function queryAds($serverName) { - // Determine the time it takes while querying adlists - $preQueryTime = microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]; - - // Determine which protocol should be used - $protocol = "http"; - if ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') || - (isset($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] === 'https') || - (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') - ) { - $protocol = "https"; - } - - // Format the URL - $queryAdsURL = sprintf( - "%s://127.0.0.1:%s/admin/scripts/pi-hole/php/queryads.php?domain=%s&bp", - $protocol, - $_SERVER["SERVER_PORT"], - $serverName - ); - - // Request the file and receive the response - $queryAdsFile = file($queryAdsURL, FILE_IGNORE_NEW_LINES); - - // $queryAdsFile must be an array (to avoid PHP 8.0+ error) - if (is_array($queryAdsFile)) { - $queryAds = array_values(array_filter(preg_replace("/data:\s+/", "", $queryAdsFile))); - } else { - // if not an array, return an error message - return array("0" => "error", "1" => "$queryAds[0]
)");
- }
- return $queryAds;
- } catch (Exception $e) {
- // Return exception as array
- return array("0" => "error", "1" => $e->getMessage());
- }
-}
-
-// Get results of queryads.php exact search
-$queryAds = queryAds($serverName);
-
-// Pass error through to Block Page
-if ($queryAds[0] === "error")
- die("[ERROR]: Unable to parse results from queryads.php: ".$queryAds[1]."
");
-
-// Count total number of matching blocklists
-$featuredTotal = count($queryAds);
-
-// Place results into key => value array
-$queryResults = null;
-foreach ($queryAds as $str) {
- $value = explode(" ", $str);
- @$queryResults[$value[0]] .= "$value[1]";
-}
-
-// Determine if domain has been blacklisted, whitelisted, wildcarded or CNAME blocked
-if (strpos($queryAds[0], "blacklist") !== FALSE) {
- $notableFlagClass = "blacklist";
- $adlistsUrls = array("π" => substr($queryAds[0], 2));
-} elseif (strpos($queryAds[0], "whitelist") !== FALSE) {
- $notableFlagClass = "noblock";
- $adlistsUrls = array("π" => substr($queryAds[0], 2));
- $wlInfo = "recentwl";
-} elseif (strpos($queryAds[0], "wildcard") !== FALSE) {
- $notableFlagClass = "wildcard";
- $adlistsUrls = array("π" => substr($queryAds[0], 2));
-} elseif ($queryAds[0] === "none") {
- $featuredTotal = "0";
- $notableFlagClass = "noblock";
-
- // QoL addition: Determine appropriate info message if CNAME exists
- // Suggests to the user that $serverName has a CNAME (alias) that may be blocked
- $dnsRecord = dns_get_record("$serverName")[0];
- if (array_key_exists("target", $dnsRecord)) {
- $wlInfo = $dnsRecord['target'];
- } else {
- $wlInfo = "unknown";
- }
-}
-
-// Set #bpOutput notification
-$wlOutputClass = (isset($wlInfo) && $wlInfo === "recentwl") ? $wlInfo : "hidden";
-$wlOutput = (isset($wlInfo) && $wlInfo !== "recentwl") ? "$wlInfo" : "";
-
-// Get Pi-hole Core version
-$phVersion = exec("cd /etc/.pihole/ && git describe --long --tags");
-
-// Print $execTime on development branches
-// Testing for - is marginally faster than "git rev-parse --abbrev-ref HEAD"
-if (explode("-", $phVersion)[1] != "0")
- $execTime = microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"];
-
-// Please Note: Text is added via CSS to allow an admin to provide a localized
-// language without the need to edit this file
-
-setHeader();
?>
-
-
-
-
-
- =$viewPort ?>
-
-
-
-
-