Merge pull request #7431 from MrPetovan/task/server-blocklist-wildcard

Add shell wildcard patterns feature to server blocklist
This commit is contained in:
Philipp 2019-07-27 19:03:15 +02:00 committed by GitHub
commit a2d9a2865a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 1511 additions and 1376 deletions

View file

@ -23,15 +23,20 @@ class ServerBlock extends Console
protected function getHelp() protected function getHelp()
{ {
$help = <<<HELP $help = <<<HELP
console serverblock - Manage blocked servers console serverblock - Manage blocked server domain patterns
Usage Usage
bin/console serverblock [-h|--help|-?] [-v] bin/console serverblock [-h|--help|-?] [-v]
bin/console serverblock add <server> <reason> [-h|--help|-?] [-v] bin/console serverblock add <pattern> <reason> [-h|--help|-?] [-v]
bin/console serverblock remove <server> [-h|--help|-?] [-v] bin/console serverblock remove <pattern> [-h|--help|-?] [-v]
Description Description
With this tool, you can list the current blocked servers With this tool, you can list the current blocked server domain patterns
or you can add / remove a blocked server from the list or you can add / remove a blocked server domain pattern from the list.
Patterns are case-insensitive shell wildcard comprising the following special characters:
- * : Any number of characters
- ? : Any single character
- [<char1><char2>...] : char1 or char2 or...
Options Options
-h|--help|-? Show help information -h|--help|-? Show help information

View file

@ -28,7 +28,7 @@ class Server extends BaseAdminModule
'reason' => Strings::escapeTags(trim($_POST['newentry_reason'])) 'reason' => Strings::escapeTags(trim($_POST['newentry_reason']))
]; ];
Config::set('system', 'blocklist', $blocklist); Config::set('system', 'blocklist', $blocklist);
info(L10n::t('Server added to blocklist.') . EOL); info(L10n::t('Server domain pattern added to blocklist.') . EOL);
} else { } else {
// Edit the entries from blocklist // Edit the entries from blocklist
$blocklist = []; $blocklist = [];
@ -61,9 +61,9 @@ class Server extends BaseAdminModule
if (is_array($blocklist)) { if (is_array($blocklist)) {
foreach ($blocklist as $id => $b) { foreach ($blocklist as $id => $b) {
$blocklistform[] = [ $blocklistform[] = [
'domain' => ["domain[$id]", L10n::t('Blocked domain'), $b['domain'], '', L10n::t('The blocked domain'), 'required', '', ''], 'domain' => ["domain[$id]", L10n::t('Blocked server domain pattern'), $b['domain'], '', 'required', '', ''],
'reason' => ["reason[$id]", L10n::t("Reason for the block"), $b['reason'], L10n::t('The reason why you blocked this domain.') . '(' . $b['domain'] . ')', 'required', '', ''], 'reason' => ["reason[$id]", L10n::t("Reason for the block"), $b['reason'], '', 'required', '', ''],
'delete' => ["delete[$id]", L10n::t("Delete domain") . ' (' . $b['domain'] . ')', false, L10n::t("Check to delete this entry from the blocklist")] 'delete' => ["delete[$id]", L10n::t("Delete server domain pattern") . ' (' . $b['domain'] . ')', false, L10n::t("Check to delete this entry from the blocklist")]
]; ];
} }
} }
@ -71,16 +71,22 @@ class Server extends BaseAdminModule
$t = Renderer::getMarkupTemplate('admin/blocklist/server.tpl'); $t = Renderer::getMarkupTemplate('admin/blocklist/server.tpl');
return Renderer::replaceMacros($t, [ return Renderer::replaceMacros($t, [
'$title' => L10n::t('Administration'), '$title' => L10n::t('Administration'),
'$page' => L10n::t('Server Blocklist'), '$page' => L10n::t('Server Domain Pattern Blocklist'),
'$intro' => L10n::t('This page can be used to define a black list of servers from the federated network that are not allowed to interact with your node. For all entered domains you should also give a reason why you have blocked the remote server.'), '$intro' => L10n::t('This page can be used to define a blacklist of server domain patterns from the federated network that are not allowed to interact with your node. For each domain pattern you should also provide the reason why you block it.'),
'$public' => L10n::t('The list of blocked servers will be made publically available on the /friendica page so that your users and people investigating communication problems can find the reason easily.'), '$public' => L10n::t('The list of blocked server domain patterns will be made publically available on the <a href="/friendica">/friendica</a> page so that your users and people investigating communication problems can find the reason easily.'),
'$syntax' => L10n::t('<p>The server domain pattern syntax is case-insensitive shell wildcard, comprising the following special characters:</p>
<ul>
<li><code>*</code>: Any number of characters</li>
<li><code>?</code>: Any single character</li>
<li><code>[&lt;char1&gt;&lt;char2&gt;...]</code>: char1 or char2</li>
</ul>'),
'$addtitle' => L10n::t('Add new entry to block list'), '$addtitle' => L10n::t('Add new entry to block list'),
'$newdomain' => ['newentry_domain', L10n::t('Server Domain'), '', L10n::t('The domain of the new server to add to the block list. Do not include the protocol.'), 'required', '', ''], '$newdomain' => ['newentry_domain', L10n::t('Server Domain Pattern'), '', L10n::t('The domain pattern of the new server to add to the block list. Do not include the protocol.'), 'required', '', ''],
'$newreason' => ['newentry_reason', L10n::t('Block reason'), '', L10n::t('The reason why you blocked this domain.'), 'required', '', ''], '$newreason' => ['newentry_reason', L10n::t('Block reason'), '', L10n::t('The reason why you blocked this server domain pattern.'), 'required', '', ''],
'$submit' => L10n::t('Add Entry'), '$submit' => L10n::t('Add Entry'),
'$savechanges' => L10n::t('Save changes to the blocklist'), '$savechanges' => L10n::t('Save changes to the blocklist'),
'$currenttitle' => L10n::t('Current Entries in the Blocklist'), '$currenttitle' => L10n::t('Current Entries in the Blocklist'),
'$thurl' => L10n::t('Blocked domain'), '$thurl' => L10n::t('Blocked server domain pattern'),
'$threason' => L10n::t('Reason for the block'), '$threason' => L10n::t('Reason for the block'),
'$delentry' => L10n::t('Delete entry from blocklist'), '$delentry' => L10n::t('Delete entry from blocklist'),
'$entries' => $blocklistform, '$entries' => $blocklistform,

View file

@ -472,7 +472,7 @@ class Network
} }
foreach ($domain_blocklist as $domain_block) { foreach ($domain_blocklist as $domain_block) {
if (strcasecmp($domain_block['domain'], $host) === 0) { if (fnmatch(strtolower($domain_block['domain']), strtolower($host))) {
return true; return true;
} }
} }

View file

@ -316,15 +316,20 @@ CONS;
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
$help = <<<HELP $help = <<<HELP
console serverblock - Manage blocked servers console serverblock - Manage blocked server domain patterns
Usage Usage
bin/console serverblock [-h|--help|-?] [-v] bin/console serverblock [-h|--help|-?] [-v]
bin/console serverblock add <server> <reason> [-h|--help|-?] [-v] bin/console serverblock add <pattern> <reason> [-h|--help|-?] [-v]
bin/console serverblock remove <server> [-h|--help|-?] [-v] bin/console serverblock remove <pattern> [-h|--help|-?] [-v]
Description Description
With this tool, you can list the current blocked servers With this tool, you can list the current blocked server domain patterns
or you can add / remove a blocked server from the list or you can add / remove a blocked server domain pattern from the list.
Patterns are case-insensitive shell wildcard comprising the following special characters:
- * : Any number of characters
- ? : Any single character
- [<char1><char2>...] : char1 or char2 or...
Options Options
-h|--help|-? Show help information -h|--help|-? Show help information

File diff suppressed because it is too large Load diff

View file

@ -6,14 +6,17 @@
<div id="adminpage"> <div id="adminpage">
<h1>{{$title}} - {{$page}}</h1> <h1>{{$title}} - {{$page}}</h1>
<p>{{$intro}}</p> <p>{{$intro}}</p>
<p>{{$public}}</p> <p>{{$public nofilter}}</p>
{{$syntax nofilter}}
<h2>{{$addtitle}}</h2> <h2>{{$addtitle}}</h2>
<form action="{{$baseurl}}/admin/blocklist/server" method="post"> <form action="{{$baseurl}}/admin/blocklist/server" method="post">
<input type="hidden" name="form_security_token" value="{{$form_security_token}}"> <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
{{include file="field_input.tpl" field=$newdomain}} {{include file="field_input.tpl" field=$newdomain}}
{{include file="field_input.tpl" field=$newreason}} {{include file="field_input.tpl" field=$newreason}}
<div class="submit"><input type="submit" name="page_blocklist_save" value="{{$submit}}" /></div> <div class="submit">
<button type="submit" class="btn btn-primary" name="page_blocklist_save" value="{{$submit}}">{{$submit}}</button>
</div>
</form> </form>
{{if $entries}} {{if $entries}}
@ -26,8 +29,9 @@
{{include file="field_input.tpl" field=$e.reason}} {{include file="field_input.tpl" field=$e.reason}}
{{include file="field_checkbox.tpl" field=$e.delete}} {{include file="field_checkbox.tpl" field=$e.delete}}
{{/foreach}} {{/foreach}}
<div class="submit"><input type="submit" name="page_blocklist_edit" value="{{$savechanges}}" /></div> <div class="submit">
<button type="submit" class="btn btn-primary" name="page_blocklist_edit" value="{{$savechanges}}">{{$savechanges}}</button>
</div>
{{/if}} {{/if}}
</form> </form>
</div> </div>