. * */ namespace Friendica\Module\Admin\Blocklist\Server; use Friendica\App; use Friendica\Content\ContactSelector; use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Core\Worker; use Friendica\Model\Contact; use Friendica\Model\GServer; use Friendica\Moderation\DomainPatternBlocklist; use Friendica\Module\BaseAdmin; use Friendica\Module\Response; use Friendica\Navigation\SystemMessages; use Friendica\Util\Profiler; use GuzzleHttp\Psr7\Uri; use Psr\Log\LoggerInterface; class Add extends BaseAdmin { /** @var SystemMessages */ private $sysmsg; /** @var DomainPatternBlocklist */ private $blocklist; public function __construct(SystemMessages $sysmsg, DomainPatternBlocklist $blocklist, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); $this->sysmsg = $sysmsg; $this->blocklist = $blocklist; } /** * @param array $request * @return void * @throws \Friendica\Network\HTTPException\ForbiddenException * @throws \Friendica\Network\HTTPException\FoundException * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\MovedPermanentlyException * @throws \Friendica\Network\HTTPException\TemporaryRedirectException * @throws \Exception */ protected function post(array $request = []) { self::checkAdminAccess(); if (empty($request['page_blocklist_add'])) { return; } self::checkFormSecurityTokenRedirectOnError('/admin/blocklist/server/add', 'admin_blocklist_add'); $pattern = trim($request['pattern']); // Add new item to blocklist $this->blocklist->addPattern($pattern, trim($request['reason'])); $this->sysmsg->addInfo($this->l10n->t('Server domain pattern added to the blocklist.')); if (!empty($request['purge'])) { $gservers = GServer::listByDomainPattern($pattern); foreach (Contact::selectToArray(['id'], ['gsid' => array_column($gservers, 'id')]) as $contact) { Worker::add(PRIORITY_LOW, 'Contact\RemoveContent', $contact['id']); } $this->sysmsg->addInfo($this->l10n->tt('%s server scheduled to be purged.', '%s servers scheduled to be purged.', count($gservers))); } $this->baseUrl->redirect('admin/blocklist/server'); } /** * @param array $request * @return string * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\ServiceUnavailableException * @throws \Exception */ protected function content(array $request = []): string { parent::content(); $gservers = []; if ($pattern = trim($request['pattern'] ?? '')) { $gservers = GServer::listByDomainPattern($pattern); } array_walk($gservers, function (array &$gserver) { $gserver['domain'] = (new Uri($gserver['url']))->getHost(); $gserver['network_icon'] = ContactSelector::networkToIcon($gserver['network']); $gserver['network_name'] = ContactSelector::networkToName($gserver['network']); }); $t = Renderer::getMarkupTemplate('admin/blocklist/server/add.tpl'); return Renderer::replaceMacros($t, [ '$l10n' => [ 'return_list' => $this->l10n->t('← Return to the list'), 'title' => $this->l10n->t('Administration'), 'page' => $this->l10n->t('Block A New Server Domain Pattern'), 'syntax' => $this->l10n->t('
The server domain pattern syntax is case-insensitive shell wildcard, comprising the following special characters:
*
: Any number of characters?
: Any single character