Make server domain pattern block reason mandatory

This commit is contained in:
Hypolite Petovan 2022-07-28 05:25:41 -04:00
parent e35651c44a
commit 97ccb4d2c4
3 changed files with 25 additions and 45 deletions

View File

@ -155,12 +155,12 @@ HELP;
*/ */
private function addBlockedServer(): int private function addBlockedServer(): int
{ {
if (count($this->args) < 2 || count($this->args) > 3) { if (count($this->args) != 3) {
throw new CommandArgsException('Add needs a domain pattern and optionally a reason.'); throw new CommandArgsException('Add needs a domain pattern and a reason.');
} }
$pattern = $this->getArgument(1); $pattern = $this->getArgument(1);
$reason = (count($this->args) === 3) ? $this->getArgument(2) : DomainPatternBlocklist::DEFAULT_REASON; $reason = $this->getArgument(2);
$result = $this->blocklist->addPattern($pattern, $reason); $result = $this->blocklist->addPattern($pattern, $reason);
if ($result) { if ($result) {

View File

@ -31,8 +31,6 @@ use Friendica\Util\Emailer;
class DomainPatternBlocklist class DomainPatternBlocklist
{ {
const DEFAULT_REASON = 'blocked';
/** @var IManageConfigValues */ /** @var IManageConfigValues */
private $config; private $config;
@ -73,11 +71,11 @@ class DomainPatternBlocklist
} }
/** /**
* @param string $pattern * @param string $pattern
* @param string|null $reason * @param string $reason
* @return int 0 if the block list couldn't be saved, 1 if the pattern was added, 2 if it was updated in place * @return int 0 if the block list couldn't be saved, 1 if the pattern was added, 2 if it was updated in place
*/ */
public function addPattern(string $pattern, string $reason = null): int public function addPattern(string $pattern, string $reason): int
{ {
$update = false; $update = false;
@ -86,7 +84,7 @@ class DomainPatternBlocklist
if ($blocked['domain'] === $pattern) { if ($blocked['domain'] === $pattern) {
$blocklist[] = [ $blocklist[] = [
'domain' => $pattern, 'domain' => $pattern,
'reason' => $reason ?? self::DEFAULT_REASON, 'reason' => $reason,
]; ];
$update = true; $update = true;
@ -98,7 +96,7 @@ class DomainPatternBlocklist
if (!$update) { if (!$update) {
$blocklist[] = [ $blocklist[] = [
'domain' => $pattern, 'domain' => $pattern,
'reason' => $reason ?? self::DEFAULT_REASON, 'reason' => $reason,
]; ];
} }
@ -179,18 +177,11 @@ class DomainPatternBlocklist
$blocklist = []; $blocklist = [];
while (($data = fgetcsv($fp, 1000)) !== false) { while (($data = fgetcsv($fp, 1000)) !== false) {
$domain = $data[0]; $item = [
if (count($data) == 0) { 'domain' => $data[0],
$reason = self::DEFAULT_REASON; 'reason' => $data[1] ?? '',
} else {
$reason = $data[1];
}
$data = [
'domain' => $domain,
'reason' => $reason
]; ];
if (!in_array($data, $blocklist)) { if (!in_array($item, $blocklist)) {
$blocklist[] = $data; $blocklist[] = $data;
} }
} }

View File

@ -93,25 +93,6 @@ CONS;
self::assertEquals('The domain pattern \'testme.now\' is now blocked. (Reason: \'I like it!\')' . "\n", $txt); self::assertEquals('The domain pattern \'testme.now\' is now blocked. (Reason: \'I like it!\')' . "\n", $txt);
} }
/**
* Test blockedservers add command with the default reason
*/
public function testAddBlockedServerWithDefaultReason()
{
$this->blocklistMock
->shouldReceive('addPattern')
->with('testme.now', DomainPatternBlocklist::DEFAULT_REASON)
->andReturn(1)
->once();
$console = new ServerBlock($this->blocklistMock, $this->consoleArgv);
$console->setArgument(0, 'add');
$console->setArgument(1, 'testme.now');
$txt = $this->dumpExecute($console);
self::assertEquals('The domain pattern \'testme.now\' is now blocked. (Reason: \'' . DomainPatternBlocklist::DEFAULT_REASON . '\')' . "\n", $txt);
}
/** /**
* Test blockedservers add command on existed domain * Test blockedservers add command on existed domain
*/ */
@ -170,16 +151,16 @@ CONS;
{ {
$this->blocklistMock $this->blocklistMock
->shouldReceive('removePattern') ->shouldReceive('removePattern')
->with('not.exiting') ->with('not.existing')
->andReturn(1) ->andReturn(1)
->once(); ->once();
$console = new ServerBlock($this->blocklistMock, $this->consoleArgv); $console = new ServerBlock($this->blocklistMock, $this->consoleArgv);
$console->setArgument(0, 'remove'); $console->setArgument(0, 'remove');
$console->setArgument(1, 'not.exiting'); $console->setArgument(1, 'not.existing');
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
self::assertEquals('The domain pattern \'not.exiting\' wasn\'t blocked.' . "\n", $txt); self::assertEquals('The domain pattern \'not.existing\' wasn\'t blocked.' . "\n", $txt);
} }
/** /**
@ -191,7 +172,14 @@ CONS;
$console->setArgument(0, 'add'); $console->setArgument(0, 'add');
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
self::assertStringStartsWith('[Warning] Add needs a domain pattern and optionally a reason.', $txt); self::assertStringStartsWith('[Warning] Add needs a domain pattern and a reason.', $txt);
$console = new ServerBlock($this->blocklistMock, $this->consoleArgv);
$console->setArgument(0, 'add');
$console->setArgument(1, 'testme.now');
$txt = $this->dumpExecute($console);
self::assertStringStartsWith('[Warning] Add needs a domain pattern and a reason.', $txt);
} }
/** /**
@ -201,13 +189,14 @@ CONS;
{ {
$this->blocklistMock $this->blocklistMock
->shouldReceive('addPattern') ->shouldReceive('addPattern')
->with('testme.now', DomainPatternBlocklist::DEFAULT_REASON) ->with('testme.now', 'I like it!')
->andReturn(0) ->andReturn(0)
->once(); ->once();
$console = new ServerBlock($this->blocklistMock, $this->consoleArgv); $console = new ServerBlock($this->blocklistMock, $this->consoleArgv);
$console->setArgument(0, 'add'); $console->setArgument(0, 'add');
$console->setArgument(1, 'testme.now'); $console->setArgument(1, 'testme.now');
$console->setArgument(2, 'I like it!');
$txt = $this->dumpExecute($console); $txt = $this->dumpExecute($console);
self::assertEquals('Couldn\'t save \'testme.now\' as blocked domain pattern' . "\n", $txt); self::assertEquals('Couldn\'t save \'testme.now\' as blocked domain pattern' . "\n", $txt);