Referer   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 1
dl 0
loc 57
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 2
A get() 0 4 1
A forget() 0 4 1
A put() 0 4 1
A putFromRequest() 0 8 2
A determineFromRequest() 0 10 3
1
<?php
2
3
namespace Spatie\Referer;
4
5
use Illuminate\Contracts\Session\Session;
6
use Illuminate\Http\Request;
7
use Spatie\Referer\Exceptions\InvalidConfiguration;
8
9
class Referer
10
{
11
    /** @var string */
12
    protected $sessionKey;
13
14
    /** @var array */
15
    protected $sources;
16
17
    /** @var \Illuminate\Contracts\Session\Session */
18
    protected $session;
19
20
    public function __construct(?string $sessionKey, array $sources, Session $session)
21
    {
22
        if (empty($sessionKey)) {
23
            throw InvalidConfiguration::emptySessionKey();
24
        }
25
26
        $this->sessionKey = $sessionKey;
27
        $this->sources = $sources;
28
        $this->session = $session;
29
    }
30
31
    public function get(): string
32
    {
33
        return $this->session->get($this->sessionKey, '');
34
    }
35
36
    public function forget()
37
    {
38
        $this->session->forget($this->sessionKey);
39
    }
40
41
    public function put(string $referer)
42
    {
43
        return $this->session->put($this->sessionKey, $referer);
44
    }
45
46
    public function putFromRequest(Request $request)
47
    {
48
        $referer = $this->determineFromRequest($request);
49
50
        if (! empty($referer)) {
51
            $this->put($referer);
52
        }
53
    }
54
55
    protected function determineFromRequest(Request $request): string
56
    {
57
        foreach ($this->sources as $source) {
58
            if ($referer = (new $source)->getReferer($request)) {
59
                return $referer;
60
            }
61
        }
62
63
        return '';
64
    }
65
}
66