Passed
Push — master ( 39865c...391fc3 )
by Simon
01:49
created

YubikeyAuthProviderTest   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 161
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 161
rs 10
c 0
b 0
f 0
wmc 10

10 Methods

Rating   Name   Duplication   Size   Complexity  
A testvalidateTokenDuplicate() 0 19 1
A testCheckNoYubikeyDaysError() 0 10 1
A testvalidateTokenNotMatchesMember() 0 13 1
A testCheckNoYubikeyDaysZero() 0 11 1
A testvalidateTokenID() 0 19 1
A testHost() 0 10 1
A testvalidateTokenResultSet() 0 13 1
A testSingleHost() 0 10 1
A testvalidateTokenUnique() 0 19 1
A setUp() 0 6 1
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 ValidationResult
18
     */
19
    protected $result;
20
    /**
21
     * @var YubikeyAuthProvider
22
     */
23
    protected $provider;
24
25
    public function testCheckNoYubikeyDaysZero()
26
    {
27
        Config::modify()->set(YubikeyAuthProvider::class, 'MaxNoYubiLoginDays', 0);
28
        /** @var Member $member */
29
        $member = Member::get()->filter(['Email' => '[email protected]'])->first();
30
        $member->Created = date('Y-m-d', strtotime('-1 year'));
31
        $member->MFAEnabled = false;
32
        $member->write();
33
34
        $result = $this->provider->checkNoYubiDays($member);
35
        $this->assertInstanceOf(Member::class, $result);
36
    }
37
38
    public function testCheckNoYubikeyDaysError()
39
    {
40
        /** @var Member $member */
41
        $member = Member::get()->filter(['Email' => '[email protected]'])->first();
42
        $member->Created = date('Y-m-d', strtotime('-1 year'));
43
        $member->MFAEnabled = false;
44
        $member->write();
45
46
        $result = $this->provider->checkNoYubiDays($member);
47
        $this->assertInstanceOf(ValidationResult::class, $result);
48
    }
49
50
    public function testvalidateTokenDuplicate()
51
    {
52
        $member1 = Member::create([
53
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
54
            'Yubikey'    => '1234567890',
55
            'MFAEnabled' => true
56
        ]);
57
        $member1->write();
58
        $member2 = Member::create([
59
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
60
            'Yubikey'    => '1234567890',
61
            'MFAEnabled' => true
62
        ]);
63
        $member2->write();
64
65
        $this->provider->validateToken($member1, '1234567890', $this->result);
66
67
        $this->assertInstanceOf(ValidationResult::class, $this->result);
68
        $this->assertFalse($this->result->isValid());
69
    }
70
71
    public function testvalidateTokenID()
72
    {
73
        $member1 = Member::create([
74
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
75
            'Yubikey'    => '0987654321',
76
            'MFAEnabled' => true
77
        ]);
78
        $member1->write();
79
        $member2 = Member::create([
80
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
81
            'Yubikey'    => '1234567890',
82
            'MFAEnabled' => true
83
        ]);
84
        $member2->write();
85
86
        $this->provider->validateToken($member1, '1234567890', $this->result);
87
88
        $this->assertInstanceOf(ValidationResult::class, $this->result);
89
        $this->assertFalse($this->result->isValid());
90
    }
91
92
    public function testvalidateTokenNotMatchesMember()
93
    {
94
        $member1 = Member::create([
95
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
96
            'Yubikey'    => 'abcdefghij',
97
            'MFAEnabled' => true
98
        ]);
99
        $member1->write();
100
101
        $this->provider->validateToken($member1, '1234567890', $this->result);
102
103
        $this->assertInstanceOf(ValidationResult::class, $this->result);
104
        $this->assertFalse($this->result->isValid());
105
    }
106
107
    public function testvalidateTokenResultSet()
108
    {
109
        $member1 = Member::create([
110
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
111
            'Yubikey'    => 'abcdefghij',
112
        ]);
113
        $member1->write();
114
115
        $result = null;
116
        $this->provider->validateToken($member1, '1234567890', $result);
0 ignored issues
show
Bug introduced by
$result of type null is incompatible with the type SilverStripe\ORM\ValidationResult expected by parameter $validationResult of Firesphere\YubiAuth\Prov...ovider::validateToken(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

116
        $this->provider->validateToken($member1, '1234567890', /** @scrutinizer ignore-type */ $result);
Loading history...
117
118
        $this->assertInstanceOf(ValidationResult::class, $result);
119
        $this->assertFalse($result->isValid());
120
    }
121
122
    public function testvalidateTokenUnique()
123
    {
124
        $member1 = Member::create([
125
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
126
            'Yubikey'    => 'abcdefghij',
127
            'MFAEnabled' => true
128
        ]);
129
        $member1->write();
130
        $member2 = Member::create([
131
            'Email'      => 'user' . uniqid('', false) . '[email protected]',
132
            'Yubikey'    => '1234567890',
133
            'MFAEnabled' => true
134
        ]);
135
        $member2->write();
136
137
        $this->provider->validateToken($member1, 'abcdefghij', $this->result);
138
139
        $this->assertInstanceOf(ValidationResult::class, $this->result);
140
        $this->assertTrue($this->result->isValid());
141
    }
142
143
    public function testSingleHost()
144
    {
145
        Config::modify()->set(YubikeyAuthProvider::class, 'AuthURL', 'localhost');
146
147
        /** @var YubikeyAuthProvider $provider */
148
        $provider = Injector::inst()->get(YubikeyAuthProvider::class, false);
149
150
        $url = $provider->getService()->getHost();
151
152
        $this->assertEquals('localhost', $url);
153
    }
154
155
    public function testHost()
156
    {
157
        Config::modify()->set(YubikeyAuthProvider::class, 'AuthURL', ['localhost-1', 'localhost-2']);
158
159
        /** @var YubikeyAuthProvider $provider */
160
        $provider = Injector::inst()->get(YubikeyAuthProvider::class, false);
161
162
        $url = $provider->getService()->getHost();
163
164
        $this->assertContains('localhost', $url);
165
    }
166
167
    protected function setUp()
168
    {
169
        $this->provider = Injector::inst()->get(YubikeyAuthProvider::class);
170
        $this->result = Injector::inst()->get(ValidationResult::class);
171
172
        return parent::setUp();
173
    }
174
}
175