. * */ namespace Friendica\Module\Blocklist\Domain; use Friendica\App; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\L10n; use Friendica\Core\System; use Friendica\Module\Response; use Friendica\Util\Profiler; use Psr\Log\LoggerInterface; class Download extends \Friendica\BaseModule { /** @var IManageConfigValues */ private $config; public function __construct(IManageConfigValues $config, 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->config = $config; } protected function rawContent(array $request = []) { $blocklist = $this->config->get('system', 'blocklist'); $blocklistJson = json_encode($blocklist, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); $hash = md5($blocklistJson); $etag = 'W/"' . $hash . '"'; if (trim($_SERVER['HTTP_IF_NONE_MATCH'] ?? '') == $etag) { header("HTTP/1.1 304 Not Modified"); } header('Content-Type: text/csv'); header('Content-Transfer-Encoding: Binary'); header('Content-disposition: attachment; filename="' . $this->baseUrl->getHostname() . '_domain_blocklist_' . substr($hash, 0, 6) . '.csv"'); header("Etag: $etag"); $fp = fopen('php://output', 'w'); foreach ($blocklist as $domain) { fputcsv($fp, $domain); } fclose($fp); System::exit(); } }