From 5750623b48d9e681a02b0b0bcb3d7c02c62b6c05 Mon Sep 17 00:00:00 2001
From: Hypolite Petovan <hypolite@mrpetovan.com>
Date: Sun, 21 Apr 2019 21:40:05 -0400
Subject: [PATCH] Move admin/blocklist/server to src/Module

- Add Module\Admin\Blocklist\Server class
- Add route for admin/blocklist/server
- Add server blocklist admin aside menu entry
- Move templates/admin/blocklist.tpl to templates/admin/blocklist/server.tpl
- Remove admin_page_blocklist and admin_page_blocklist_post from mod/admin.php
---
 mod/admin.php                                 | 98 -------------------
 src/App/Router.php                            |  2 +
 src/Module/Admin/Blocklist/Server.php         | 91 +++++++++++++++++
 src/Module/BaseAdminModule.php                |  1 +
 .../{blocklist.tpl => blocklist/server.tpl}   |  4 +-
 5 files changed, 96 insertions(+), 100 deletions(-)
 create mode 100644 src/Module/Admin/Blocklist/Server.php
 rename view/templates/admin/{blocklist.tpl => blocklist/server.tpl} (88%)

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 @@
+<?php
+
+namespace Friendica\Module\Admin\Blocklist;
+
+use Friendica\Core\Config;
+use Friendica\Core\L10n;
+use Friendica\Core\Renderer;
+use Friendica\Core\System;
+use Friendica\Module\BaseAdminModule;
+use Friendica\Util\Strings;
+
+class Server extends BaseAdminModule
+{
+	public static function post()
+	{
+		parent::post();
+
+		if (empty($_POST['page_blocklist_save']) && empty($_POST['page_blocklist_edit'])) {
+			return;
+		}
+
+		parent::checkFormSecurityTokenRedirectOnError('/admin/blocklist/server', '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);
+		}
+
+		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 @@
 	<p>{{$public}}</p>
 
 	<h2>{{$addtitle}}</h2>
-	<form action="{{$baseurl}}/admin/blocklist" method="post">
+	<form action="{{$baseurl}}/admin/blocklist/server" method="post">
 		<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
 		{{include file="field_input.tpl" field=$newdomain}}
 		{{include file="field_input.tpl" field=$newreason}}
@@ -19,7 +19,7 @@
 	{{if $entries}}
 	<h2>{{$currenttitle}}</h2>
 	<p>{{$currentintro}}</p>
-	<form action="{{$baseurl}}/admin/blocklist" method="post">
+	<form action="{{$baseurl}}/admin/blocklist/server" method="post">
 		<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
 		{{foreach $entries as $e}}
 			{{include file="field_input.tpl" field=$e.domain}}