diff --git a/mod/admin.php b/mod/admin.php index 3684e1144..e77780c08 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -114,9 +114,6 @@ function admin_post(App $a) case 'logs': admin_page_logs_post($a); break; - case 'blocklist': - admin_page_blocklist_post($a); - break; case 'deleteitem': admin_page_deleteitem_post($a); break; @@ -237,9 +234,6 @@ function admin_content(App $a) case 'workerqueue': $o = admin_page_workerqueue($a, false); break; - case 'blocklist': - $o = admin_page_blocklist($a); - break; case 'deleteitem': $o = admin_page_deleteitem($a); break; @@ -256,98 +250,6 @@ function admin_content(App $a) } } -/** - * @brief Subpage to modify the server wide block list via the admin panel. - * - * This function generates the subpage of the admin panel to allow the - * modification of the node wide block/black list to block entire - * remote servers from communication with this node. The page allows - * adding, removing and editing of entries from the blocklist. - * - * @param App $a - * @return string - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - */ -function admin_page_blocklist(App $a) -{ - $blocklist = Config::get('system', 'blocklist'); - $blocklistform = []; - if (is_array($blocklist)) { - foreach ($blocklist as $id => $b) { - $blocklistform[] = [ - 'domain' => ["domain[$id]", L10n::t('Blocked domain'), $b['domain'], '', L10n::t('The blocked 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', '', ''], - 'delete' => ["delete[$id]", L10n::t("Delete domain") . ' (' . $b['domain'] . ')', false, L10n::t("Check to delete this entry from the blocklist")] - ]; - } - } - $t = Renderer::getMarkupTemplate('admin/blocklist.tpl'); - return Renderer::replaceMacros($t, [ - '$title' => L10n::t('Administration'), - '$page' => L10n::t('Server 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.'), - '$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.'), - '$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', '', ''], - '$newreason' => ['newentry_reason', L10n::t('Block reason'), '', L10n::t('The reason why you blocked this domain.'), 'required', '', ''], - '$submit' => L10n::t('Add Entry'), - '$savechanges' => L10n::t('Save changes to the blocklist'), - '$currenttitle' => L10n::t('Current Entries in the Blocklist'), - '$thurl' => L10n::t('Blocked domain'), - '$threason' => L10n::t('Reason for the block'), - '$delentry' => L10n::t('Delete entry from blocklist'), - '$entries' => $blocklistform, - '$baseurl' => System::baseUrl(true), - '$confirm_delete' => L10n::t('Delete entry from blocklist?'), - '$form_security_token' => BaseModule::getFormSecurityToken("admin_blocklist") - ]); -} - -/** - * @brief Process send data from Admin Blocklist Page - * - * @param App $a - * @throws \Friendica\Network\HTTPException\InternalServerErrorException - */ -function admin_page_blocklist_post(App $a) -{ - if (empty($_POST['page_blocklist_save']) && empty($_POST['page_blocklist_edit'])) { - return; - } - - BaseModule::checkFormSecurityTokenRedirectOnError('/admin/blocklist', 'admin_blocklist'); - - if (!empty($_POST['page_blocklist_save'])) { - // Add new item to blocklist - $blocklist = Config::get('system', 'blocklist'); - $blocklist[] = [ - 'domain' => Strings::escapeTags(trim($_POST['newentry_domain'])), - 'reason' => Strings::escapeTags(trim($_POST['newentry_reason'])) - ]; - Config::set('system', 'blocklist', $blocklist); - info(L10n::t('Server added to blocklist.') . EOL); - } else { - // Edit the entries from blocklist - $blocklist = []; - foreach ($_POST['domain'] as $id => $domain) { - // Trimming whitespaces as well as any lingering slashes - $domain = Strings::escapeTags(trim($domain, "\x00..\x1F/")); - $reason = Strings::escapeTags(trim($_POST['reason'][$id])); - if (empty($_POST['delete'][$id])) { - $blocklist[] = [ - 'domain' => $domain, - 'reason' => $reason - ]; - } - } - Config::set('system', 'blocklist', $blocklist); - info(L10n::t('Site blocklist updated.') . EOL); - } - $a->internalRedirect('admin/blocklist'); - - return; // NOTREACHED -} - /** * @brief Subpage where the admin can delete an item from their node given the GUID * diff --git a/src/App/Router.php b/src/App/Router.php index 71b8ebe7a..1cf19c53d 100644 --- a/src/App/Router.php +++ b/src/App/Router.php @@ -125,6 +125,8 @@ class Router $collector->addRoute(['GET', 'POST'], '/addons/{addon}' , Module\Admin\Addons\Details::class); $collector->addRoute(['GET', 'POST'], '/blocklist/contact' , Module\Admin\Blocklist\Contact::class); + $collector->addRoute(['GET', 'POST'], '/blocklist/server' , Module\Admin\Blocklist\Server::class); + $collector->addRoute(['GET', 'POST'], '/features' , Module\Admin\Features::class); $collector->addRoute(['GET'] , '/federation' , Module\Admin\Federation::class); diff --git a/src/Module/Admin/Blocklist/Server.php b/src/Module/Admin/Blocklist/Server.php new file mode 100644 index 000000000..1d0dc1fb8 --- /dev/null +++ b/src/Module/Admin/Blocklist/Server.php @@ -0,0 +1,91 @@ + Strings::escapeTags(trim($_POST['newentry_domain'])), + 'reason' => Strings::escapeTags(trim($_POST['newentry_reason'])) + ]; + Config::set('system', 'blocklist', $blocklist); + info(L10n::t('Server added to blocklist.') . EOL); + } else { + // Edit the entries from blocklist + $blocklist = []; + foreach ($_POST['domain'] as $id => $domain) { + // Trimming whitespaces as well as any lingering slashes + $domain = Strings::escapeTags(trim($domain, "\x00..\x1F/")); + $reason = Strings::escapeTags(trim($_POST['reason'][$id])); + if (empty($_POST['delete'][$id])) { + $blocklist[] = [ + 'domain' => $domain, + 'reason' => $reason + ]; + } + } + Config::set('system', 'blocklist', $blocklist); + info(L10n::t('Site blocklist updated.') . EOL); + } + + self::getApp()->internalRedirect('admin/blocklist/server'); + } + + public static function content() + { + parent::content(); + + $blocklist = Config::get('system', 'blocklist'); + $blocklistform = []; + if (is_array($blocklist)) { + foreach ($blocklist as $id => $b) { + $blocklistform[] = [ + 'domain' => ["domain[$id]", L10n::t('Blocked domain'), $b['domain'], '', L10n::t('The blocked 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', '', ''], + 'delete' => ["delete[$id]", L10n::t("Delete domain") . ' (' . $b['domain'] . ')', false, L10n::t("Check to delete this entry from the blocklist")] + ]; + } + } + + $t = Renderer::getMarkupTemplate('admin/blocklist/server.tpl'); + return Renderer::replaceMacros($t, [ + '$title' => L10n::t('Administration'), + '$page' => L10n::t('Server 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.'), + '$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.'), + '$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', '', ''], + '$newreason' => ['newentry_reason', L10n::t('Block reason'), '', L10n::t('The reason why you blocked this domain.'), 'required', '', ''], + '$submit' => L10n::t('Add Entry'), + '$savechanges' => L10n::t('Save changes to the blocklist'), + '$currenttitle' => L10n::t('Current Entries in the Blocklist'), + '$thurl' => L10n::t('Blocked domain'), + '$threason' => L10n::t('Reason for the block'), + '$delentry' => L10n::t('Delete entry from blocklist'), + '$entries' => $blocklistform, + '$baseurl' => System::baseUrl(true), + '$confirm_delete' => L10n::t('Delete entry from blocklist?'), + '$form_security_token' => parent::getFormSecurityToken("admin_blocklist") + ]); + } +} \ No newline at end of file diff --git a/src/Module/BaseAdminModule.php b/src/Module/BaseAdminModule.php index 31f279bca..bc84ad887 100644 --- a/src/Module/BaseAdminModule.php +++ b/src/Module/BaseAdminModule.php @@ -61,6 +61,7 @@ abstract class BaseAdminModule extends BaseModule ]], 'tools' => [L10n::t('Tools'), [ 'contactblock' => ['admin/blocklist/contact', L10n::t('Contact Blocklist') , 'contactblock'], + 'blocklist' => ['admin/blocklist/server' , L10n::t('Server Blocklist') , 'blocklist'], ]], ]; diff --git a/view/templates/admin/blocklist.tpl b/view/templates/admin/blocklist/server.tpl similarity index 88% rename from view/templates/admin/blocklist.tpl rename to view/templates/admin/blocklist/server.tpl index 1484c987e..beea96fc5 100644 --- a/view/templates/admin/blocklist.tpl +++ b/view/templates/admin/blocklist/server.tpl @@ -9,7 +9,7 @@
{{$public}}