Tracker.php 1.42 KB
<?php

namespace FootyRoom\Http\Middleware;

use Closure;
use Illuminate\Contracts\Cookie\Factory as CookieFactory;
use Illuminate\Http\Request;

class Tracker
{
    /**
     * Creates Tracker middleware instance.
     *
     * @param \Illuminate\Contracts\Cookie\Factory $cookies
     *
     * @return void
     */
    public function __construct(CookieFactory $cookies)
    {
        $this->cookies = $cookies;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     *
     * @return \Illuminate\Http\Response
     */
    public function handle(Request $request, Closure $next)
    {
        if (($tracker = $request->cookies->get($this->getTrackerName())) === null) {
            $tracker = md5(uniqid(rand(), true));
        }

        if ($request->session()->get($this->getTrackerName()) !== $tracker) {
            $request->session()->put($this->getTrackerName(), $tracker);
        }

        $response = $next($request);

        if ($request->cookies->get($this->getTrackerName()) === null) {
            $response->headers->setCookie(
                $this->cookies->forever($this->getTrackerName(), $tracker, '/')
            );
        }

        return $response;
    }

    /**
     * Returns the name of the "tracker" cookie and session.
     *
     * @return string
     */
    private function getTrackerName()
    {
        return 'tracker';
    }
}