mirror of
https://github.com/flarum/framework.git
synced 2025-03-04 06:47:40 +08:00
allowing configurable flood gate (#1411)
* allowing configurable flood gate * fixed review comments
This commit is contained in:
parent
49c643609c
commit
3c41011548
30
src/Post/Event/CheckingForFlooding.php
Normal file
30
src/Post/Event/CheckingForFlooding.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of Flarum.
|
||||||
|
*
|
||||||
|
* (c) Toby Zerner <toby.zerner@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Flarum\Post\Event;
|
||||||
|
|
||||||
|
use Flarum\User\User;
|
||||||
|
|
||||||
|
class CheckingForFlooding
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var User
|
||||||
|
*/
|
||||||
|
public $actor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User|null $actor
|
||||||
|
*/
|
||||||
|
public function __construct(User $actor = null)
|
||||||
|
{
|
||||||
|
$this->actor = $actor;
|
||||||
|
}
|
||||||
|
}
|
@ -12,14 +12,26 @@
|
|||||||
namespace Flarum\Post;
|
namespace Flarum\Post;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
use Flarum\Post\Event\CheckingForFlooding;
|
||||||
use Flarum\Post\Exception\FloodingException;
|
use Flarum\Post\Exception\FloodingException;
|
||||||
use Flarum\User\User;
|
use Flarum\User\User;
|
||||||
|
use Illuminate\Contracts\Events\Dispatcher;
|
||||||
|
|
||||||
class Floodgate
|
class Floodgate
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var Dispatcher
|
||||||
|
*/
|
||||||
|
protected $events;
|
||||||
|
|
||||||
|
public function __construct(Dispatcher $events)
|
||||||
|
{
|
||||||
|
$this->events = $events;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param User $actor
|
* @param User $actor
|
||||||
* @throws \Flarum\Post\Exception\FloodingException
|
* @throws FloodingException
|
||||||
*/
|
*/
|
||||||
public function assertNotFlooding(User $actor)
|
public function assertNotFlooding(User $actor)
|
||||||
{
|
{
|
||||||
@ -32,8 +44,12 @@ class Floodgate
|
|||||||
* @param User $actor
|
* @param User $actor
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function isFlooding(User $actor)
|
public function isFlooding(User $actor): bool
|
||||||
{
|
{
|
||||||
return Post::where('user_id', $actor->id)->where('time', '>=', new DateTime('-10 seconds'))->exists();
|
$isFlooding = $this->events->until(
|
||||||
|
new CheckingForFlooding($actor)
|
||||||
|
);
|
||||||
|
|
||||||
|
return $isFlooding ?? Post::where('user_id', $actor->id)->where('time', '>=', new DateTime('-10 seconds'))->exists();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user