Merge branch 'master' into feature/wireguard

This commit is contained in:
billz 2020-09-22 18:23:36 +01:00
commit f8b5f8fdfc
8 changed files with 97 additions and 10 deletions

View File

@ -68,7 +68,7 @@ Please [read this](https://github.com/billz/raspap-webgui/wiki/Reporting-issues)
## Ad Blocking
This feature uses DNS blacklisting to block requests for ads, trackers and other undesirable hosts. To enable ad blocking, simply respond to the prompt during the installation. As a beta release, we encourage testing and feedback from users of RaspAP.
Details are [provided here](https://github.com/billz/raspap-webgui/wiki/Ad-blocking-(Beta)).
Details are [provided here](https://github.com/billz/raspap-webgui/wiki/Ad-blocking).
## Bridged AP
By default RaspAP configures a routed AP for your clients to connect to. A bridged AP configuration is also possible. Slide the **Bridged AP mode** toggle under the **Advanced** tab of **Configure hotspot**, then save and restart the hotspot.

View File

@ -11,6 +11,7 @@ function DisplayAdBlockConfig()
{
$status = new StatusMessages();
$enabled = false;
$custom_enabled = false;
if (!RASPI_MONITOR_ENABLED) {
if (isset($_POST['saveadblocksettings'])) {
@ -20,13 +21,39 @@ function DisplayAdBlockConfig()
} elseif ($_POST['adblock-enable'] == "0") {
$config = null;
}
file_put_contents("/tmp/dnsmasqdata", $config);
system('sudo cp /tmp/dnsmasqdata '.RASPI_ADBLOCK_CONFIG, $return);
if ($_POST['adblock-custom-enable'] == "1") {
// validate custom hosts input
$lines = preg_split('/\r\n|\n|\r/', trim($_POST['adblock-custom-hosts']));
if (!in_array("", $lines, true)) {
foreach ($lines as $line) {
$ip_host = preg_split('/\s+/', $line);
$index++;
if (!filter_var($ip_host[0], FILTER_VALIDATE_IP)) {
$errors .= _('Invalid custom IP address found on line '.$index);
break;
}
if (!validate_host($ip_host[1])) {
$errors .= _('Invalid custom host found on line '.$index);
break;
}
}
}
file_put_contents("/tmp/dnsmasq_custom", $_POST['adblock-custom-hosts'].PHP_EOL);
system("sudo cp /tmp/dnsmasq_custom " .RASPI_ADBLOCK_LISTPATH .'custom.txt', $return);
$config.= 'addn-hosts=' .RASPI_ADBLOCK_LISTPATH .'custom.txt'.PHP_EOL;
$custom_enabled = true;
}
if ($return == 0) {
$status->addMessage('Adblock configuration updated successfully', 'success');
if (empty($errors)) {
file_put_contents("/tmp/dnsmasqdata", $config);
system('sudo cp /tmp/dnsmasqdata '.RASPI_ADBLOCK_CONFIG, $return);
if ($return == 0) {
$status->addMessage('Adblock configuration updated successfully', 'success');
} else {
$status->addMessage('Adblock configuration failed to be updated.', 'danger');
}
} else {
$status->addMessage('Adblock configuration failed to be updated.', 'danger');
$status->addMessage($errors, 'danger');
}
} elseif (isset($_POST['restartadblock']) || isset($_POST['startadblock'])) {
exec('sudo /bin/systemctl restart dnsmasq.service', $dnsmasq, $return);
@ -53,7 +80,8 @@ function DisplayAdBlockConfig()
"status",
"serviceStatus",
"dnsmasq_state",
"enabled"
"enabled",
"custom_enabled"
)
);
}

View File

@ -477,5 +477,9 @@ function validateCidr($cidr)
return $netmask <= 128;
}
return false;
// Validates a host or FQDN
function validate_host($host) {
return preg_match('/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i', $host);
}

View File

@ -37,6 +37,7 @@ www-data ALL=(ALL) NOPASSWD:/bin/chmod o+r /tmp/hostapd.log
www-data ALL=(ALL) NOPASSWD:/bin/chmod o+r /tmp/dnsmasq.log
www-data ALL=(ALL) NOPASSWD:/bin/chmod o+r /tmp/wireguard.log
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasqdata /etc/dnsmasq.d/090_adblock.conf
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/dnsmasq_custom /etc/raspap/adblock/custom.txt
www-data ALL=(ALL) NOPASSWD:/bin/cp /tmp/wgdata /etc/wireguard/wg0.conf
www-data ALL=(ALL) NOPASSWD:/etc/raspap/adblock/update_blocklist.sh
www-data ALL=(ALL) NOPASSWD:/usr/bin/tee /tmp/wireguard.log
@ -46,5 +47,3 @@ www-data ALL=(ALL) NOPASSWD:/usr/bin/wg-quick down wg0
www-data ALL=(ALL) NOPASSWD:/usr/bin/wg
www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wireguard/wg0.conf

Binary file not shown.

View File

@ -760,3 +760,24 @@ msgstr "Statistics"
msgid "Information provided by adblock"
msgstr "Information provided by adblock"
msgid "Enable custom blocklist"
msgstr "Enable custom blocklist"
msgid "Define custom hosts to be blocked by entering an IPv4 or IPv6 address followed by any whitespace (spaces or tabs) and the host name."
msgstr "Define custom hosts to be blocked by entering an IPv4 or IPv6 address followed by any whitespace (spaces or tabs) and the host name."
msgid "<b>IPv4 example:</b> 0.0.0.0 badhost.com"
msgstr "<b>IPv4 example:</b> 0.0.0.0 badhost.com"
msgid "This option adds an <code>addn-hosts</code> directive to the dnsmasq configuration."
msgstr "This option adds an <code>addn-hosts</code> directive to the dnsmasq configuration."
msgid "Custom blocklist not defined"
msgstr "Custom blocklist not defined"
msgid "Invalid custom IP address found on line "
msgstr "Invalid custom IP address found on line "
msgid "Invalid custom host found on line "
msgstr "Invalid custom host found on line "

View File

@ -31,7 +31,8 @@
<?php echo CSRFTokenFieldTag() ?>
<!-- Nav tabs -->
<ul class="nav nav-tabs">
<li class="nav-item"><a class="nav-link active" id="clienttab" href="#adblocklistsettings" data-toggle="tab"><?php echo _("Blocklist settings"); ?></a></li>
<li class="nav-item"><a class="nav-link active" id="blocklisttab" href="#adblocklistsettings" data-toggle="tab"><?php echo _("Blocklist settings"); ?></a></li>
<li class="nav-item"><a class="nav-link" id="customtab" href="#adblockcustom" data-toggle="tab"><?php echo _("Custom blocklist"); ?></a></li>
<li class="nav-item"><a class="nav-link" id="logoutputtab" href="#adblocklogfileoutput" data-toggle="tab"><?php echo _("Logging"); ?></a></li>
</ul>
@ -39,6 +40,7 @@
<div class="tab-content">
<?php echo renderTemplate("adblock/general", $__template_data) ?>
<?php echo renderTemplate("adblock/stats", $__template_data) ?>
<?php echo renderTemplate("adblock/custom", $__template_data) ?>
<?php echo renderTemplate("adblock/logging", $__template_data) ?>
</div><!-- /.tab-content -->

View File

@ -0,0 +1,33 @@
<!-- logging tab -->
<div class="tab-pane fade" id="adblockcustom">
<h4 class="mt-3"><?php echo _("Custom blocklist"); ?></h4>
<div class="row">
<div class="col-md-6">
<div class="input-group">
<input type="hidden" name="adblock-custom-enable" value="0">
<div class="custom-control custom-switch">
<input class="custom-control-input" id="adblock-custom-enable" type="checkbox" name="adblock-custom-enable" value="1" <?php echo $custom_enabled ? ' checked="checked"' : "" ?> aria-describedby="adblock-description">
<label class="custom-control-label" for="adblock-custom-enable"><?php echo _("Enable custom blocklist") ?></label>
</div>
</div>
<p id="adblock-description">
<small><?php echo _("Define custom hosts to be blocked by entering an IPv4 or IPv6 address followed by any whitespace (spaces or tabs) and the host name.") ?></small>
<small><?php echo _("<b>IPv4 example:</b> 0.0.0.0 badhost.com") ?></small>
<div>
<small class="text-muted"><?php echo _("This option adds an <code>addn-hosts</code> directive to the dnsmasq configuration.") ?></small>
</div>
</p>
</div>
</div>
<div class="row">
<div class="form-group col-md-8">
<?php
$adblock_custom = file_get_contents(RASPI_ADBLOCK_LISTPATH .'custom.txt');
if (strlen($adblock_custom) == 0) {
$adblock_custom = _("Custom blocklist not defined");
}
echo '<textarea class="logoutput" name="adblock-custom-hosts">'.htmlspecialchars($adblock_custom, ENT_QUOTES).'</textarea>';
?>
</div>
</div>
</div><!-- /.tab-pane -->