Failed Conditions
Push — master ( 2436f4...03b798 )
by Arnold
02:53
created

SessionObject::forRequest()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 6
dl 0
loc 12
ccs 7
cts 7
cp 1
rs 10
c 1
b 0
f 0
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Jasny\Auth\Session;
6
7
use Psr\Http\Message\ServerRequestInterface;
8
9
/**
10
 * Use OOP abstracted sessions to store auth session info.
11
 */
12
class SessionObject implements SessionInterface
13
{
14
    protected string $key;
15
16
    /** @var \ArrayAccess<string,mixed>|null */
17
    protected \ArrayAccess $session;
0 ignored issues
show
introduced by
PHPDoc tag @var for property Jasny\Auth\Session\SessionObject::$session with type ArrayAccess<string, mixed>|null is not subtype of native type ArrayAccess.
Loading history...
18
19
    /**
20
     * Service constructor.
21
     *
22
     * @param \ArrayAccess<string,mixed>|null $session
23
     * @param string                          $key
24
     */
25 8
    public function __construct(\ArrayAccess $session, string $key = 'auth')
0 ignored issues
show
introduced by
PHPDoc tag @param for parameter $session with type ArrayAccess<string, mixed>|null is not subtype of native type ArrayAccess.
Loading history...
26
    {
27 8
        $this->session = $session;
28 8
        $this->key = $key;
29 8
    }
30
31
    /**
32
     * Use the `session` attribute if it's an object that implements ArrayAccess.
33
     *
34
     * @return self
35
     */
36 4
    public function forRequest(ServerRequestInterface $request): self
37
    {
38 4
        $session = $request->getAttribute('session');
39
40 4
        if (!$session instanceof \ArrayAccess) {
41 1
            return $this;
42
        }
43
44 3
        $copy = clone $this;
45 3
        $copy->session = $session;
46
47 3
        return $copy;
48
    }
49
50
51
    /**
52
     * Get auth information from session.
53
     *
54
     * @return array{uid:mixed,context:mixed,checksum:string|null}
55
     */
56 4
    public function getInfo(): array
57
    {
58 4
        $data = $this->session[$this->key] ?? [];
59
60
        return [
61 4
            'uid' => $data['uid'] ?? null,
62 4
            'context' => $data['context'] ?? null,
63 4
            'checksum' => $data['checksum'] ?? null,
64
        ];
65
    }
66
67
    /**
68
     * Persist auth information to session.
69
     *
70
     * @param string|int  $uid
71
     * @param mixed       $context
72
     * @param string|null $checksum
73
     */
74 2
    public function persist($uid, $context, ?string $checksum): void
75
    {
76 2
        $this->session[$this->key] = compact('uid', 'context', 'checksum');
77 2
    }
78
79
    /**
80
     * Remove auth information from session.
81
     */
82 2
    public function clear(): void
83
    {
84 2
        if (isset($this->session[$this->key])) {
85 1
            unset($this->session[$this->key]);
86
        }
87 2
    }
88
}
89