X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FConsole%2FServerBlock.php;h=46e7b89eb99deb8f48a280768f27c376811f39ad;hb=af2a38c5b3724d140700316f3a0251e82692de38;hp=c25b57ae79f2378797298281c69cf8cf20e01747;hpb=121607b8d943fd57e6fe3f6219c8d925f1be423d;p=friendica.git diff --git a/src/Console/ServerBlock.php b/src/Console/ServerBlock.php index c25b57ae79..46e7b89eb9 100644 --- a/src/Console/ServerBlock.php +++ b/src/Console/ServerBlock.php @@ -1,6 +1,6 @@ config = $config; + $this->blocklist = $blocklist; } protected function doExecute(): int { if (count($this->args) == 0) { - $this->printBlockedServers($this->config); + $this->printBlockedServers(); return 0; } switch ($this->getArgument(0)) { case 'add': - return $this->addBlockedServer($this->config); + return $this->addBlockedServer(); case 'remove': - return $this->removeBlockedServer($this->config); + return $this->removeBlockedServer(); case 'export': - return $this->exportBlockedServers($this->config); + return $this->exportBlockedServers(); case 'import': - return $this->importBlockedServers($this->config); + return $this->importBlockedServers(); default: throw new CommandArgsException('Unknown command.'); - break; } } /** - * Exports the list of blocked domains including the reason for the + * Exports the list of blocked domain patterns including the reason for the * block to a CSV file. * - * @param IManageConfigValues $config + * @return int + * @throws \Exception */ - private function exportBlockedServers(IManageConfigValues $config) + private function exportBlockedServers(): int { $filename = $this->getArgument(1); - $blocklist = $config->get('system', 'blocklist', []); - $fp = fopen($filename, 'w'); - if (!$fp) { - throw new Exception(sprintf('The file "%s" could not be created.', $filename)); - } - foreach ($blocklist as $domain) { - fputcsv($fp, $domain); - } + + $this->blocklist->exportToFile($filename); // Success return 0; } + /** - * Imports a list of domains and a reason for the block from a CSV + * Imports a list of domain patterns and a reason for the block from a CSV * file, e.g. created with the export function. * - * @param IManageConfigValues $config + * @return int + * @throws \Exception */ - private function importBlockedServers(IManageConfigValues $config) + private function importBlockedServers(): int { $filename = $this->getArgument(1); - $currBlockList = $config->get('system', 'blocklist', []); - $newBlockList = []; - if (($fp = fopen($filename, 'r')) !== false) { - while (($data = fgetcsv($fp, 1000, ',')) !== false) { - $domain = $data[0]; - if (count($data) == 0) { - $reason = self::DEFAULT_REASON; - } else { - $reason = $data[1]; - } - $data = [ - 'domain' => $domain, - 'reason' => $reason - ]; - if (!in_array($data, $newBlockList)) { - $newBlockList[] = $data; - } - } - - foreach ($currBlockList as $blocked) { - if (!in_array($blocked, $newBlockList)) { - $newBlockList[] = $blocked; - } - } + $newBlockList = $this->blocklist::extractFromCSVFile($filename); - if ($config->set('system', 'blocklist', $newBlockList)) { - $this->out(sprintf("Entries from %s that were not blocked before are now blocked", $filename)); - return 0; - } else { - $this->out(sprintf("Couldn't save '%s' as blocked server", $domain)); - return 1; - } + if ($this->blocklist->append($newBlockList)) { + $this->out(sprintf("Entries from %s that were not blocked before are now blocked", $filename)); + return 0; } else { - throw new Exception(sprintf('The file "%s" could not be opened for importing', $filename)); + $this->out("Couldn't save the block list"); + return 1; } } /** - * Prints the whole list of blocked domains including the reason - * - * @param IManageConfigValues $config + * Prints the whole list of blocked domain patterns including the reason */ - private function printBlockedServers(IManageConfigValues $config) + private function printBlockedServers(): void { $table = new Console_Table(); - $table->setHeaders(['Domain', 'Reason']); - $blocklist = $config->get('system', 'blocklist', []); - foreach ($blocklist as $domain) { - $table->addRow($domain); + $table->setHeaders(['Pattern', 'Reason']); + foreach ($this->blocklist->get() as $pattern) { + $table->addRow($pattern); } - $this->out($table->getTable()); - // Success - return 0; + $this->out($table->getTable()); } /** - * Adds a server to the blocked list - * - * @param IManageConfigValues $config + * Adds a domain pattern to the block list * * @return int The return code (0 = success, 1 = failed) */ - private function addBlockedServer(IManageConfigValues $config) + private function addBlockedServer(): int { - if (count($this->args) < 2 || count($this->args) > 3) { - throw new CommandArgsException('Add needs a domain and optional a reason.'); - } - - $domain = $this->getArgument(1); - $reason = (count($this->args) === 3) ? $this->getArgument(2) : self::DEFAULT_REASON; - - $update = false; - - $currBlockList = $config->get('system', 'blocklist', []); - $newBlockList = []; - foreach ($currBlockList as $blocked) { - if ($blocked['domain'] === $domain) { - $update = true; - $newBlockList[] = [ - 'domain' => $domain, - 'reason' => $reason, - ]; - } else { - $newBlockList[] = $blocked; - } + if (count($this->args) != 3) { + throw new CommandArgsException('Add needs a domain pattern and a reason.'); } - if (!$update) { - $newBlockList[] = [ - 'domain' => $domain, - 'reason' => $reason, - ]; - } + $pattern = $this->getArgument(1); + $reason = $this->getArgument(2); - if ($config->set('system', 'blocklist', $newBlockList)) { - if ($update) { - $this->out(sprintf("The domain '%s' is now updated. (Reason: '%s')", $domain, $reason)); + $result = $this->blocklist->addPattern($pattern, $reason); + if ($result) { + if ($result == 2) { + $this->out(sprintf("The domain pattern '%s' is now updated. (Reason: '%s')", $pattern, $reason)); } else { - $this->out(sprintf("The domain '%s' is now blocked. (Reason: '%s')", $domain, $reason)); + $this->out(sprintf("The domain pattern '%s' is now blocked. (Reason: '%s')", $pattern, $reason)); } return 0; } else { - $this->out(sprintf("Couldn't save '%s' as blocked server", $domain)); + $this->out(sprintf("Couldn't save '%s' as blocked domain pattern", $pattern)); return 1; } } /** - * Removes a server from the blocked list - * - * @param IManageConfigValues $config + * Removes a domain pattern from the block list * * @return int The return code (0 = success, 1 = failed) */ - private function removeBlockedServer(IManageConfigValues $config) + private function removeBlockedServer(): int { if (count($this->args) !== 2) { throw new CommandArgsException('Remove needs a second parameter.'); } - $domain = $this->getArgument(1); + $pattern = $this->getArgument(1); - $found = false; - - $currBlockList = $config->get('system', 'blocklist', []); - $newBlockList = []; - foreach ($currBlockList as $blocked) { - if ($blocked['domain'] === $domain) { - $found = true; + $result = $this->blocklist->removePattern($pattern); + if ($result) { + if ($result == 2) { + $this->out(sprintf("The domain pattern '%s' isn't blocked anymore", $pattern)); + return 0; } else { - $newBlockList[] = $blocked; + $this->out(sprintf("The domain pattern '%s' wasn't blocked.", $pattern)); + return 1; } - } - - if (!$found) { - $this->out(sprintf("The domain '%s' is not blocked.", $domain)); - return 1; - } - - if ($config->set('system', 'blocklist', $newBlockList)) { - $this->out(sprintf("The domain '%s' is not more blocked", $domain)); - return 0; } else { - $this->out(sprintf("Couldn't remove '%s' from blocked servers", $domain)); + $this->out(sprintf("Couldn't remove '%s' from blocked domain patterns", $pattern)); return 1; } }