Passed
Pull Request — master (#17)
by Simon
01:27
created

BootstrapMFAProvider::verifyToken()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 21
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 11
nc 4
nop 2
dl 0
loc 21
rs 9.9
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A BootstrapMFAProvider::getMember() 0 3 1
1
<?php
2
3
namespace Firesphere\BootstrapMFA\Providers;
4
5
use Firesphere\BootstrapMFA\Models\BackupCode;
6
use SilverStripe\Control\Controller;
7
use SilverStripe\ORM\DataList;
8
use SilverStripe\ORM\ValidationException;
9
use SilverStripe\ORM\ValidationResult;
10
use SilverStripe\Security\Member;
11
12
class BootstrapMFAProvider implements MFAProvider
13
{
14
    protected $member;
15
16
    /**
17
     * @param string $token
18
     * @return null|BackupCode
19
     */
20
    public function fetchToken($token)
21
    {
22
        $member = $this->getMember();
23
24
        /** @var BackupCode $backupCode */
25
        $backupCode = BackupCode::getValidTokensForMember($member)
26
            ->filter(['Code' => $token])
27
            ->first();
28
29
        return $backupCode;
30
    }
31
32
    /**
33
     * @return Member|null
34
     */
35
    public function getMember()
36
    {
37
        return $this->member;
38
    }
39
40
    /**
41
     * @param Member $member
42
     */
43
    public function setMember($member)
44
    {
45
        $this->member = $member;
46
    }
47
48
    /**
49
     * @throws ValidationException
50
     */
51
    public function updateTokens()
52
    {
53
        // Clear any possible tokens in the session, just to be sure
54
        Controller::curr()->getRequest()->getSession()->clear('tokens');
55
56
        if ($member = $this->getMember()) {
57
            /** @var DataList|BackupCode[] $expiredCodes */
58
            $expiredCodes = BackupCode::get()->filter(['MemberID' => $member->ID]);
59
            $expiredCodes->removeAll();
60
61
            BackupCode::generateTokensForMember($member);
62
        }
63
        // Fail silently
64
    }
65
}
66