mirror of
https://github.com/pi-hole/web.git
synced 2026-02-15 07:25:39 +00:00
- keep using inline SVG to allow color change via CSS; - Reuse the SVG icon in all instances, using SVG symbol; - Simplify/reduce inline SVG code; Signed-off-by: RD WebDesign <github@rdwebdesign.com.br>
236 lines
10 KiB
PHP
236 lines
10 KiB
PHP
<?php
|
|
/*
|
|
* 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.
|
|
*/
|
|
|
|
require 'scripts/pi-hole/php/password.php';
|
|
if (!$auth) {
|
|
$_SESSION['prev_url'] = $_SERVER['REQUEST_URI'];
|
|
header('Location: login.php');
|
|
exit;
|
|
}
|
|
|
|
require 'scripts/pi-hole/php/auth.php';
|
|
require_once 'scripts/pi-hole/php/FTL.php';
|
|
require_once 'scripts/pi-hole/php/func.php';
|
|
require 'scripts/pi-hole/php/theme.php';
|
|
|
|
// Retrieve layout setting from setupVars
|
|
if (isset($setupVars['WEBUIBOXEDLAYOUT']) && !$setupVars['WEBUIBOXEDLAYOUT'] === 'boxed') {
|
|
$boxedlayout = false;
|
|
} else {
|
|
$boxedlayout = true;
|
|
}
|
|
|
|
// Override layout setting if layout is changed via Settings page
|
|
if (isset($_POST['field'])) {
|
|
if ($_POST['field'] === 'webUI' && isset($_POST['boxedlayout'])) {
|
|
$boxedlayout = true;
|
|
} elseif ($_POST['field'] === 'webUI' && !isset($_POST['boxedlayout'])) {
|
|
$boxedlayout = false;
|
|
}
|
|
}
|
|
|
|
// Return memory usage to show on status block
|
|
function getMemUsage()
|
|
{
|
|
$data = explode("\n", file_get_contents('/proc/meminfo'));
|
|
$meminfo = array();
|
|
if (count($data) > 0) {
|
|
foreach ($data as $line) {
|
|
$expl = explode(':', $line);
|
|
if (count($expl) == 2) {
|
|
// remove " kB" from the end of the string and make it an integer
|
|
$meminfo[$expl[0]] = intval(trim(substr($expl[1], 0, -3)));
|
|
}
|
|
}
|
|
$memused = $meminfo['MemTotal'] - $meminfo['MemFree'] - $meminfo['Buffers'] - $meminfo['Cached'];
|
|
$memusage = $memused / $meminfo['MemTotal'];
|
|
} else {
|
|
$memusage = -1;
|
|
}
|
|
|
|
return $memusage;
|
|
}
|
|
|
|
// Try to get temperature value from different places (OS dependent)
|
|
// - return an array, containing the temperature and limit.
|
|
function getTemperature()
|
|
{
|
|
global $setupVars;
|
|
|
|
if (file_exists('/sys/class/thermal/thermal_zone0/temp')) {
|
|
$output = rtrim(file_get_contents('/sys/class/thermal/thermal_zone0/temp'));
|
|
} elseif (file_exists('/sys/class/hwmon/hwmon0/temp1_input')) {
|
|
$output = rtrim(file_get_contents('/sys/class/hwmon/hwmon0/temp1_input'));
|
|
} else {
|
|
$output = '';
|
|
}
|
|
|
|
// Test if we succeeded in getting the temperature
|
|
if (is_numeric($output)) {
|
|
// $output could be either 4-5 digits or 2-3, and we only divide by 1000 if it's 4-5
|
|
// ex. 39007 vs 39
|
|
$celsius = intval($output);
|
|
|
|
// If celsius is greater than 1 degree and is in the 4-5 digit format
|
|
if ($celsius > 1000) {
|
|
// Use multiplication to get around the division-by-zero error
|
|
$celsius *= 1e-3;
|
|
}
|
|
|
|
// Get user-defined temperature limit if set
|
|
if (isset($setupVars['TEMPERATURE_LIMIT'])) {
|
|
$limit = intval($setupVars['TEMPERATURE_LIMIT']);
|
|
} else {
|
|
$limit = 60;
|
|
}
|
|
} else {
|
|
// Nothing can be colder than -273.15 degree Celsius (= 0 Kelvin)
|
|
// This is the minimum temperature possible (AKA absolute zero)
|
|
$celsius = -273.16;
|
|
// Set templimit to null if no tempsensor was found
|
|
$limit = null;
|
|
}
|
|
|
|
return array($celsius, $limit);
|
|
}
|
|
|
|
check_cors();
|
|
|
|
// Generate CSRF token
|
|
if (empty($_SESSION['token'])) {
|
|
$_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32));
|
|
}
|
|
$token = $_SESSION['token'];
|
|
|
|
// For session timer
|
|
$maxlifetime = ini_get('session.gc_maxlifetime');
|
|
|
|
// Get temperature
|
|
list($celsius, $temperaturelimit) = getTemperature();
|
|
|
|
// Get CPU load
|
|
$loaddata = sys_getloadavg();
|
|
foreach ($loaddata as $key => $value) {
|
|
$loaddata[$key] = round($value, 2);
|
|
}
|
|
|
|
// Get number of processing units available to PHP
|
|
// (may be less than the number of online processors)
|
|
$nproc = shell_exec('nproc');
|
|
if (!is_numeric($nproc)) {
|
|
$cpuinfo = file_get_contents('/proc/cpuinfo');
|
|
preg_match_all('/^processor/m', $cpuinfo, $matches);
|
|
$nproc = count($matches[0]);
|
|
}
|
|
|
|
// Get memory usage
|
|
$memory_usage = getMemUsage();
|
|
|
|
$piholeFTLConf = piholeFTLConfig();
|
|
|
|
require 'header.php';
|
|
?>
|
|
<body class="hold-transition sidebar-mini<?php if ($boxedlayout) { ?> layout-boxed<?php } ?><?php if ($auth) { ?> logged-in<?php } ?>">
|
|
<noscript>
|
|
<!-- JS Warning -->
|
|
<div>
|
|
<input type="checkbox" id="js-hide">
|
|
<div class="js-warn" id="js-warn-exit"><h1>JavaScript Is Disabled</h1><p>JavaScript is required for the site to function.</p>
|
|
<p>To learn how to enable JavaScript click <a href="https://www.enable-javascript.com/" rel="noopener" target="_blank">here</a></p><label for="js-hide">Close</label>
|
|
</div>
|
|
</div>
|
|
<!-- /JS Warning -->
|
|
</noscript>
|
|
<?php
|
|
if ($auth) {
|
|
echo "<div id=\"token\" hidden>{$token}</div>";
|
|
}
|
|
?>
|
|
|
|
<!-- Send token to JS -->
|
|
<div id="enableTimer" hidden><?php if (file_exists('../custom_disable_timer')) {
|
|
echo file_get_contents('../custom_disable_timer');
|
|
} ?></div>
|
|
<!-- Pi-hole SVG icon - used in topmenu and sidebar -->
|
|
<svg display="none">
|
|
<symbol id="pihole-svg-logo" viewBox="0 0 200 200">
|
|
<path d="M88.387 61.745C63.6 59.101 38.632 40.367 36.66.728c38.462 0 59.03 22.769 61.017 58.846 7.273-43.275 41.366-38.203 41.366-38.203 1.619 24.526-18.52 39.394-41.366 40.632C91.26 48.48 52.813 15.305 52.813 15.305a.108.108 0 0 0-.169.122c0 .001 37.102 32.32 35.743 46.318" fill="currentcolor"/>
|
|
<path d="M100 199.272c-2.399-.137-24.785-.993-26.145-26.145-1.1-15.28 10.972-26.543 10.972-41.38-2.736-36.994-52.307-32.41-52.307 0a30.472 30.472 0 0 0 8.91 21.608l36.933 36.949a30.466 30.466 0 0 0 21.607 8.908" fill="currentColor"/>
|
|
<path d="M167.48 131.762c-.137 2.399-.994 24.785-26.146 26.145-15.28 1.1-26.558-10.972-41.38-10.972-36.996 2.736-32.41 52.292 0 52.292a30.468 30.468 0 0 0 21.607-8.91l36.965-36.933a30.466 30.466 0 0 0 8.908-21.607" fill="currentColor"/>
|
|
<path d="M100 64.282c2.399.137 24.786.992 26.146 26.145 1.1 15.281-10.972 26.543-10.972 41.38 2.735 36.995 52.292 32.41 52.292 0a30.465 30.465 0 0 0-8.91-21.607l-36.949-36.965A30.468 30.468 0 0 0 100 64.326" fill="currentColor"/>
|
|
<path d="M32.642 131.762c.137-2.4.994-24.786 26.145-26.146 15.28-1.101 26.558 10.972 41.38 10.972 36.996-2.781 32.411-52.292 0-52.292a30.468 30.468 0 0 0-21.607 8.91l-36.964 36.949a30.472 30.472 0 0 0-8.91 21.607" fill="currentColor"/>
|
|
</symbol>
|
|
</svg>
|
|
|
|
<div class="wrapper">
|
|
<header class="main-header">
|
|
<!-- Logo -->
|
|
<a href="index.php" class="logo">
|
|
<!-- mini logo for sidebar mini 50x50 pixels -->
|
|
<span class="logo-mini">P<strong>h</strong></span>
|
|
<!-- logo for regular state and mobile devices -->
|
|
<span class="logo-lg">Pi-<strong>hole</strong></span>
|
|
</a>
|
|
<!-- Header Navbar: style can be found in header.less -->
|
|
<nav class="navbar navbar-static-top">
|
|
<!-- Sidebar toggle button-->
|
|
<a href="#" class="sidebar-toggle-svg" data-toggle="push-menu" role="button">
|
|
<i aria-hidden="true" class="fa fa-angle-double-left"></i>
|
|
<span class="sr-only">Toggle navigation</span>
|
|
<span class="warning-count hidden" id="top-warning-count"></span>
|
|
</a>
|
|
<div class="navbar-custom-menu">
|
|
<ul class="nav navbar-nav">
|
|
<li<?php echo !$hostname ? ' class="hidden"' : ''; ?>>
|
|
<p class="navbar-text">
|
|
<span class="hidden-xs">hostname:</span>
|
|
<code><?php echo $hostname; ?></code>
|
|
</p>
|
|
</li>
|
|
<li class="dropdown user user-menu">
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
|
|
<i class="fa fa-bars"></i>
|
|
</a>
|
|
<ul class="dropdown-menu">
|
|
<!-- User image -->
|
|
<li class="user-header">
|
|
<img src="img/logo.svg" alt="Pi-hole Logo" style="border: 0" width="90" height="90">
|
|
<p>
|
|
Open Source Ad Blocker
|
|
</p>
|
|
</li>
|
|
<!-- Menu Body -->
|
|
<!-- <li class="user-body"></li> -->
|
|
<!-- Menu Footer -->
|
|
<li class="user-footer">
|
|
<a class="btn-link" href="https://pi-hole.net/" rel="noopener" target="_blank">
|
|
<svg class="svg-inline--fa fa-fw menu-icon" style="height: 1.25em"><use xlink:href="#pihole-svg-logo"/></svg>
|
|
Pi-hole Website
|
|
</a>
|
|
<hr>
|
|
<a class="btn-link" href="https://docs.pi-hole.net/" rel="noopener" target="_blank"><i class="fa fa-fw menu-icon fa-question-circle"></i> Documentation</a>
|
|
<a class="btn-link" href="https://discourse.pi-hole.net/" rel="noopener" target="_blank"><i class="fa fa-fw menu-icon fab fa-discourse"></i> Pi-hole Forum</a>
|
|
<a class="btn-link" href="https://github.com/pi-hole" rel="noopener" target="_blank"><i class="fa-fw menu-icon fab fa-github"></i> GitHub</a>
|
|
<a class="btn-link" href="https://discourse.pi-hole.net/c/announcements/5" rel="noopener" target="_blank"><i class="fa-fw menu-icon fa fa-regular fa-rocket"></i> Pi-hole Releases</a>
|
|
<hr>
|
|
<a class="btn-link" href="logout.php" rel="noopener"><i class="fa fa-fw menu-icon fa-sign-out-alt"></i> Log out</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
</header>
|
|
<?php require 'scripts/pi-hole/php/sidebar.php'; ?>
|
|
<!-- Content Wrapper. Contains page content -->
|
|
<div class="content-wrapper">
|
|
<!-- Main content -->
|
|
<section class="content">
|