framework/src/Post/Floodgate.php

56 lines
1.2 KiB
PHP
Raw Normal View History

<?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.
*/
2017-06-24 19:43:33 +08:00
namespace Flarum\Post;
use DateTime;
use Flarum\Post\Event\CheckingForFlooding;
2017-06-24 19:43:33 +08:00
use Flarum\Post\Exception\FloodingException;
2017-06-24 18:55:22 +08:00
use Flarum\User\User;
use Illuminate\Contracts\Events\Dispatcher;
class Floodgate
{
/**
* @var Dispatcher
*/
protected $events;
public function __construct(Dispatcher $events)
{
$this->events = $events;
}
/**
* @param User $actor
* @throws FloodingException
*/
public function assertNotFlooding(User $actor)
{
if ($this->isFlooding($actor)) {
throw new FloodingException;
}
}
/**
* @param User $actor
* @return bool
*/
public function isFlooding(User $actor): bool
{
$isFlooding = $this->events->until(
new CheckingForFlooding($actor)
);
return $isFlooding ?? Post::where('user_id', $actor->id)->where('time', '>=', new DateTime('-10 seconds'))->exists();
}
}