Passed
Branch master (1ad6c0)
by Simon
03:19
created

YubikeyAuthProviderTest::testvalidateTokenUnique()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 13
nc 1
nop 0
1
<?php
2
3
namespace Firesphere\YubiAuth\Tests;
4
5
use Firesphere\YubiAuth\Providers\YubikeyAuthProvider;
6
use SilverStripe\Core\Config\Config;
7
use SilverStripe\Core\Injector\Injector;
8
use SilverStripe\Dev\SapphireTest;
9
use SilverStripe\ORM\ValidationResult;
10
use SilverStripe\Security\Member;
11
12
class YubikeyAuthProviderTest extends SapphireTest
13
{
14
    protected static $fixture_file = '../fixtures/Member.yml';
15
16
    /**
17
     * @var YubikeyAuthProvider
18
     */
19
    protected $provider;
20
21
    public function testCheckNoYubikeyDaysZero()
22
    {
23
        Config::modify()->set(YubikeyAuthProvider::class, 'MaxNoYubiLoginDays', 0);
24
        /** @var Member $member */
25
        $member = Member::get()->filter(['Email' => '[email protected]'])->first();
26
        $member->Created = date('Y-m-d', strtotime('-1 year'));
27
        $member->MFAEnabled = false;
28
        $member->write();
29
30
        $result = $this->provider->checkNoYubiDays($member);
31
        $this->assertInstanceOf(Member::class, $result);
32
    }
33
34
    public function testCheckNoYubikeyDaysError()
35
    {
36
        /** @var Member $member */
37
        $member = Member::get()->filter(['Email' => '[email protected]'])->first();
38
        $member->Created = date('Y-m-d', strtotime('-1 year'));
39
        $member->MFAEnabled = false;
40
        $member->write();
41
42
        $result = $this->provider->checkNoYubiDays($member);
43
        $this->assertInstanceOf(ValidationResult::class, $result);
44
    }
45
46
    public function testvalidateTokenDuplicate()
47
    {
48
        $member1 = Member::create([
49
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
50
            'Yubikey'    => '1234567890',
51
            'MFAEnabled' => true
52
        ]);
53
        $member1->write();
54
        $member2 = Member::create([
55
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
56
            'Yubikey'    => '1234567890',
57
            'MFAEnabled' => true
58
        ]);
59
        $member2->write();
60
61
        $result = $this->provider->validateToken($member1, '1234567890');
62
63
        $this->assertInstanceOf(ValidationResult::class, $result);
64
        $this->assertFalse($result->isValid());
65
    }
66
67
    public function testvalidateTokenID()
68
    {
69
        $member1 = Member::create([
70
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
71
            'Yubikey'    => '0987654321',
72
            'MFAEnabled' => true
73
        ]);
74
        $member1->write();
75
        $member2 = Member::create([
76
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
77
            'Yubikey'    => '1234567890',
78
            'MFAEnabled' => true
79
        ]);
80
        $member2->write();
81
82
        $result = $this->provider->validateToken($member1, '1234567890');
83
84
        $this->assertInstanceOf(ValidationResult::class, $result);
85
        $this->assertFalse($result->isValid());
86
    }
87
88
    public function testvalidateTokenNotMatchesMember()
89
    {
90
        $member1 = Member::create([
91
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
92
            'Yubikey'    => 'abcdefghij',
93
            'MFAEnabled' => true
94
        ]);
95
        $member1->write();
96
97
        $result = $this->provider->validateToken($member1, '1234567890');
98
99
        $this->assertInstanceOf(ValidationResult::class, $result);
100
        $this->assertFalse($result->isValid());
101
    }
102
103
    public function testvalidateTokenUnique()
104
    {
105
        $member1 = Member::create([
106
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
107
            'Yubikey'    => 'abcdefghij',
108
            'MFAEnabled' => true
109
        ]);
110
        $member1->write();
111
        $member2 = Member::create([
112
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
113
            'Yubikey'    => '1234567890',
114
            'MFAEnabled' => true
115
        ]);
116
        $member2->write();
117
118
        $result = $this->provider->validateToken($member1, 'abcdefghij');
119
120
        $this->assertInstanceOf(ValidationResult::class, $result);
121
        $this->assertTrue($result->isValid());
122
    }
123
124
    protected function setUp()
125
    {
126
        $this->provider = Injector::inst()->get(YubikeyAuthProvider::class);
127
128
        return parent::setUp();
129
    }
130
}
131