mirror of
https://github.com/DanielSiepmann/tracking.git
synced 2024-11-22 05:56:08 +01:00
Add rules to prevent tracking of certain requests
This commit is contained in:
parent
27819c73ef
commit
6a2cd9bc50
2 changed files with 42 additions and 8 deletions
|
@ -27,6 +27,8 @@ use Psr\Http\Message\ResponseInterface;
|
|||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
|
||||
use TYPO3\CMS\Core\Context\Context;
|
||||
|
||||
class Pageview implements MiddlewareInterface
|
||||
{
|
||||
|
@ -35,17 +37,41 @@ class Pageview implements MiddlewareInterface
|
|||
*/
|
||||
private $repository;
|
||||
|
||||
public function __construct(Repository $repository)
|
||||
/**
|
||||
* @var Context
|
||||
*/
|
||||
private $context;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $rule = '';
|
||||
|
||||
public function __construct(Repository $repository, Context $context, string $rule)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
$this->context = $context;
|
||||
$this->rule = $rule;
|
||||
}
|
||||
|
||||
public function process(
|
||||
ServerRequestInterface $request,
|
||||
RequestHandlerInterface $handler
|
||||
): ResponseInterface {
|
||||
if ($this->shouldTrack($request, $this->context)) {
|
||||
$this->repository->add(Factory::fromRequest($request));
|
||||
}
|
||||
|
||||
return $handler->handle($request);
|
||||
}
|
||||
|
||||
private function shouldTrack(
|
||||
ServerRequestInterface $request,
|
||||
Context $context
|
||||
): bool {
|
||||
return (bool) (new ExpressionLanguage())->evaluate($this->rule, [
|
||||
'request' => $request,
|
||||
'context' => $context,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,3 +18,11 @@ services:
|
|||
public: true
|
||||
arguments:
|
||||
- '@DanielSiepmann\DI\DatabaseConnection\Pageview'
|
||||
|
||||
DanielSiepmann\Tracking\Middleware\Pageview:
|
||||
public: true
|
||||
arguments:
|
||||
$rule: >
|
||||
not (context.getAspect("backend.user").isLoggedIn())
|
||||
and not (request.getHeader("User-Agent")[0] matches "/^Wget/")
|
||||
and not (request.getHeader("User-Agent")[0] matches "/Googlebot|Bingbot|Slurp|DuckDuckBot|Baiduspider|YandexBot|Sogou|Exabot/")
|
||||
|
|
Loading…
Reference in a new issue