Merge pull request #671 from billz/adblock-custom

Support for Adblock custom blocklists
This commit is contained in:
Bill Zimmerman 2020-09-20 12:59:58 +02:00 committed by GitHub
commit 893bca55e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 97 additions and 7 deletions

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

@ -452,3 +452,8 @@ function getBridgedState()
return $arrHostapdConf['BridgedEnable'];
}
// 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

@ -36,5 +36,6 @@ www-data ALL=(ALL) NOPASSWD:/etc/raspap/openvpn/configauth.sh
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/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:/etc/raspap/adblock/update_blocklist.sh

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 -->