Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/pi-hole/pi-hole.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Warner <me@adamwarner.co.uk>2021-10-05 17:42:06 +0300
committerAdam Warner <me@adamwarner.co.uk>2022-08-08 19:12:09 +0300
commitc78cf82fc6dc2f4d612ce4c27a36b2f3a26353fd (patch)
tree20f5c66c89217fb30a8ae45ff51506908265bfb1 /advanced
parentd38fcb05496e41fde9ca03c83f1a0221485b5e5e (diff)
no need to declare $viewPort
Signed-off-by: Adam Warner <me@adamwarner.co.uk>
Diffstat (limited to 'advanced')
-rw-r--r--advanced/index.php369
1 files changed, 12 insertions, 357 deletions
diff --git a/advanced/index.php b/advanced/index.php
index cf0ab854..3b320a3f 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: <code>/etc/pihole/setupVars.conf</code>");
-
-// 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 = '<meta name="viewport" content="width=device-width, initial-scale=1">';
-
-// 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,26 @@ if ($serverName === "pi.hole"
<html lang='en'>
<head>
<meta charset='utf-8'>
- $viewPort
+ <meta name='viewport' content='width=device-width, initial-scale=1'>
<title>● $serverName</title>
- <link rel='stylesheet' href='/pihole/blockingpage.css'>
- <link rel='shortcut icon' href='/admin/img/favicons/favicon.ico' type='image/x-icon'>
+ <link rel='shortcut icon' href='admin/img/favicons/favicon.ico' type='image/x-icon'>
+ <style>
+ #splashpage { background: #222; color: rgba(255, 255, 255, 0.7); text-align: center; }
+ #splashpage img { margin: 5px; width: 256px; }
+ #splashpage b { color: inherit; }
+ </style>
</head>
<body id='splashpage'>
- <div id="pihole_card">
- <img src='/admin/img/logo.svg' alt='Pi-hole logo' id="pihole_logo_splash" />
- <p>Pi-<strong>hole</strong>: Your black hole for Internet advertisements</p>
- <a href='/admin'>Did you mean to go to the admin panel?</a>
- </div>
+ <img src='admin/img/logo.svg' alt='Pi-hole logo' width='256' height='377'>
+ <br>
+ <p>Pi-<strong>hole</strong>: Your black hole for Internet advertisements</p>
+ <a href='/admin'>Did you mean to go to the admin panel?</a>
</body>
</html>
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().'<!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8"><script>window.close();</script>
- </head>
- <body>
- <img src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=">
- </body>
- </html>');
-} 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 = '<a href="/">
- <svg xmlns="http://www.w3.org/2000/svg" width="110" height="16">
- <circle cx="8" cy="8" r="7" fill="none" stroke="rgba(152,2,2,.5)" stroke-width="2"/>
- <path fill="rgba(152,2,2,.5)" d="M11.526 3.04l1.414 1.415-8.485 8.485-1.414-1.414z"/>
- <text x="19.3" y="12" opacity=".3" style="font:11px Arial">
- Blocked by Pi-hole
- </text>
- </svg>
- </a>';
- exit(setHeader()."<!doctype html>
- <html lang='en'>
- <head>
- <meta charset='utf-8'>
- $viewPort
- </head>
- <body>$blockImg</body>
- </html>");
}
-/* Start processing Block Page from here */
-
-// Define admin email address text based off $svEmail presence
-$bpAskAdmin = !empty($svEmail) ? '<a href="mailto:'.$svEmail.'?subject=Site Blocked: '.$serverName.'"></a>' : "<span/>";
-
-// 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" => "<br>(".gettype($queryAdsFile).")<br>".print_r($queryAdsFile, true));
- }
+exit(header("HTTP/1.1 404 Not Found"));
- $queryTime = sprintf("%.0f", (microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]) - $preQueryTime);
-
- // Exception Handling
- try {
- // Define Exceptions
- if (strpos($queryAds[0], "No exact results") !== FALSE) {
- // Return "none" into $queryAds array
- return array("0" => "none");
- } else if ($queryTime >= ini_get("default_socket_timeout")) {
- // Connection Timeout
- throw new Exception ("Connection timeout (".ini_get("default_socket_timeout")."s)");
- } elseif (!strpos($queryAds[0], ".") !== false) {
- // Unknown $queryAds output
- throw new Exception ("Unhandled error message (<code>$queryAds[0]</code>)");
- }
- 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 <i>queryads.php</i>: <code>".$queryAds[1]."</code>");
-
-// 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") ? "<a href='http://$wlInfo'>$wlInfo</a>" : "";
-
-// 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();
?>
-<!doctype html>
-<!-- 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. -->
-<html>
-<head>
- <meta charset="utf-8">
- <?=$viewPort ?>
- <meta name="robots" content="noindex,nofollow">
- <meta http-equiv="x-dns-prefetch-control" content="off">
- <link rel="stylesheet" href="pihole/blockingpage.css">
- <link rel="shortcut icon" href="admin/img/favicons/favicon.ico" type="image/x-icon">
- <title>● <?=$serverName ?></title>
- <script src="admin/scripts/vendor/jquery.min.js"></script>
- <script>
- window.onload = function () {
- <?php
- // Remove href fallback from "Back to safety" button
- if ($featuredTotal > 0) {
- echo '$("#bpBack").removeAttr("href");';
-
- // Enable whitelisting if JS is available
- echo '$("#bpWhitelist").prop("disabled", false);';
-
- // Enable password input if necessary
- if (!empty($svPasswd)) {
- echo '$("#bpWLPassword").attr("placeholder", "Password");';
- echo '$("#bpWLPassword").prop("disabled", false);';
- }
- // Otherwise hide the input
- else {
- echo '$("#bpWLPassword").hide();';
- }
- }
- ?>
- }
- </script>
-</head>
-<body id="blockpage"><div id="bpWrapper">
-<header>
- <h1 id="bpTitle">
- <a class="title" href="/"><?php //Website Blocked ?></a>
- </h1>
- <div class="spc"></div>
-
- <input id="bpAboutToggle" type="checkbox">
- <div id="bpAbout">
- <div class="aboutPH">
- <div class="aboutImg"></div>
- <p>Open Source Ad Blocker
- <small>Designed for Raspberry Pi</small>
- </p>
- </div>
- <div class="aboutLink">
- <a class="linkPH" href="https://docs.pi-hole.net/"><?php //About PH ?></a>
- <?php if (!empty($svEmail)) echo '<a class="linkEmail" href="mailto:'.$svEmail.'"></a>'; ?>
- </div>
- </div>
-
- <div id="bpAlt">
- <label class="altBtn" for="bpAboutToggle"><?php //Why am I here? ?></label>
- </div>
-</header>
-
-<main>
- <div id="bpOutput" class="<?=$wlOutputClass ?>"><?=$wlOutput ?></div>
- <div id="bpBlock">
- <p class="blockMsg"><?=$serverName ?></p>
- </div>
- <?php if(isset($notableFlagClass)) { ?>
- <div id="bpFlag">
- <p class="flagMsg <?=$notableFlagClass ?>"></p>
- </div>
- <?php } ?>
- <div id="bpHelpTxt"><?=$bpAskAdmin ?></div>
- <div id="bpButtons" class="buttons">
- <a id="bpBack" onclick="javascript:history.back()" href="about:home"></a>
- <?php if ($featuredTotal > 0) echo '<label id="bpInfo" for="bpMoreToggle"></label>'; ?>
- </div>
- <input id="bpMoreToggle" type="checkbox">
- <div id="bpMoreInfo">
- <span id="bpFoundIn"><span><?=$featuredTotal ?></span><?=$adlistsCount ?></span>
- <pre id='bpQueryOutput'><?php if ($featuredTotal > 0) foreach ($queryResults as $num => $value) { echo "<span>[$num]:</span>$adlistsUrls[$num]\n"; } ?></pre>
-
- <form id="bpWLButtons" class="buttons">
- <input id="bpWLDomain" type="text" value="<?=$serverName ?>" disabled>
- <input id="bpWLPassword" type="password" placeholder="JavaScript disabled" disabled>
- <button id="bpWhitelist" type="button" disabled></button>
- </form>
- </div>
-</main>
-
-<footer><span><?=date("l g:i A, F dS"); ?>.</span> Pi-hole <?=$phVersion ?> (<?=gethostname()."/".$_SERVER["SERVER_ADDR"]; if (isset($execTime)) printf("/%.2fs", $execTime); ?>)</footer>
-</div>
-
-<script>
- function add() {
- $("#bpOutput").removeClass("hidden error exception");
- $("#bpOutput").addClass("add");
- var domain = "<?=$serverName ?>";
- var pw = $("#bpWLPassword");
- if(domain.length === 0) {
- return;
- }
- $.ajax({
- url: "/admin/scripts/pi-hole/php/add.php",
- method: "post",
- data: {"domain":domain, "list":"white", "pw":pw.val()},
- success: function(response) {
- if(response.indexOf("Pi-hole blocking") !== -1) {
- setTimeout(function(){window.location.reload(1);}, 10000);
- $("#bpOutput").removeClass("add");
- $("#bpOutput").addClass("success");
- $("#bpOutput").html("");
- } else {
- $("#bpOutput").removeClass("add");
- $("#bpOutput").addClass("error");
- $("#bpOutput").html(""+response+"");
- }
- },
- error: function(jqXHR, exception) {
- $("#bpOutput").removeClass("add");
- $("#bpOutput").addClass("exception");
- $("#bpOutput").html("");
- }
- });
- }
- <?php if ($featuredTotal > 0) { ?>
- $(document).keypress(function(e) {
- if(e.which === 13 && $("#bpWLPassword").is(":focus")) {
- add();
- }
- });
- $("#bpWhitelist").on("click", function() {
- add();
- });
- <?php } ?>
-</script>
-</body></html>