]> git.mxchange.org Git - friendica.git/blobdiff - mod/admin.php
Renamed check_domain_blocklist to blocked_url
[friendica.git] / mod / admin.php
index 6be08f45a7c9f3bfb210850db25e0334ef6c9348..97d52f14f49365c4933f9814cf7cd9490179cc73 100644 (file)
@@ -109,6 +109,9 @@ function admin_post(App $a) {
                        case 'dbsync':
                                admin_page_dbsync_post($a);
                                break;
+                       case 'blocklist':
+                               admin_page_blocklist_post($a);
+                               break;
                }
        }
 
@@ -166,6 +169,7 @@ function admin_content(App $a) {
                'features' =>   array("admin/features/", t("Additional features") , "features"),
                'dbsync' =>     array("admin/dbsync/", t('DB updates'), "dbsync"),
                'queue'  =>     array("admin/queue/", t('Inspect Queue'), "queue"),
+               'blocklist' => array("admin/blocklist/", t('Server Blocklist'), "blocklist"),
                'federation' => array("admin/federation/", t('Federation Statistics'), "federation"),
        );
 
@@ -236,6 +240,9 @@ function admin_content(App $a) {
                        case 'federation':
                                $o = admin_page_federation($a);
                                break;
+                       case 'blocklist':
+                               $o = admin_page_blocklist($a);
+                               break;
                        default:
                                notice(t("Item not found."));
                }
@@ -252,6 +259,94 @@ 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
+ */
+function admin_page_blocklist(App $a) {
+       $blocklist = Config::get('system', 'blocklist');
+       $blocklistform = array();
+       if (is_array($blocklist)) {
+               foreach($blocklist as $id => $b) {
+                       $blocklistform[] = array(
+                               'domain' => array("domain[$id]", t('Blocked domain'), $b['domain'], '', t('The blocked domain'), 'required', '', ''),
+                               'reason' => array("reason[$id]", t("Reason for the block"), $b['reason'], t('The reason why you blocked this domain.').'('.$b['domain'].')', 'required', '', ''),
+                               'delete' => array("delete[$id]", t("Delete domain").' ('.$b['domain'].')', False , "Check to delete this entry from the blocklist")
+                       );
+               }
+       }
+       $t = get_markup_template("admin_blocklist.tpl");
+       return replace_macros($t, array(
+               '$title' => t('Administration'),
+               '$page' => t('Server Blocklist'),
+               '$intro' => 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' => 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' => t('Add new entry to block list'),
+               '$newdomain' => array('newentry_domain', t('Server Domain'), '', t('The domain of the new server to add to the block list. Do not include the protocol.'), 'required', '', ''),
+               '$newreason' => array('newentry_reason', t('Block reason'), '', t('The reason why you blocked this domain.'), 'required', '', ''),
+               '$submit' => t('Add Entry'),
+               '$savechanges' => t('Save changes to the blocklist'),
+               '$currenttitle' => t('Current Entries in the Blocklist'),
+               '$thurl' => t('Blocked domain'),
+               '$threason' => t('Reason for the block'),
+               '$delentry' => t('Delete entry from blocklist'),
+               '$entries' => $blocklistform,
+               '$baseurl' => App::get_baseurl(true),
+               '$confirm_delete' => t('Delete entry from blocklist?'),
+               '$form_security_token'  => get_form_security_token("admin_blocklist")
+       ));
+}
+
+/**
+ * @brief Process send data from Admin Blocklist Page
+ *
+ * @param App $a
+ */
+function admin_page_blocklist_post(App $a) {
+       if (!x($_POST,"page_blocklist_save") && (!x($_POST['page_blocklist_edit']))) {
+               return;
+       }
+
+       check_form_security_token_redirectOnErr('/admin/blocklist', 'admin_blocklist');
+
+       if (x($_POST['page_blocklist_save'])) {
+               //  Add new item to blocklist
+               $blocklist = get_config('system', 'blocklist');
+               $blocklist[] = array(
+                       'domain' => notags(trim($_POST['newentry_domain'])),
+                       'reason' => notags(trim($_POST['newentry_reason']))
+               );
+               Config::set('system', 'blocklist', $blocklist);
+               info(t('Server added to blocklist.').EOL);
+       } else {
+               // Edit the entries from blocklist
+               $blocklist = array();
+               foreach ($_POST['domain'] as $id => $domain) {
+                       // Trimming whitespaces as well as any lingering slashes
+                       $domain = notags(trim($domain, "\x00..\x1F/"));
+                       $reason = notags(trim($_POST['reason'][$id]));
+                       if (!x($_POST['delete'][$id])) {
+                               $blocklist[] = array(
+                                       'domain' => $domain,
+                                       'reason' => $reason
+                               );
+                       }
+               }
+               Config::set('system', 'blocklist', $blocklist);
+               info(t('Site blocklist updated.').EOL);
+       }
+       goaway('admin/blocklist');
+
+       return; // NOTREACHED
+}
+
 /**
  * @brief Subpage with some stats about "the federation" network
  *