1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Firesphere\BootstrapMFA\Tests; |
4
|
|
|
|
5
|
|
|
use Firesphere\BootstrapMFA\Models\BackupCode; |
6
|
|
|
use Firesphere\BootstrapMFA\Providers\BootstrapMFAProvider; |
7
|
|
|
use Firesphere\BootstrapMFA\Tests\Helpers\CodeHelper; |
8
|
|
|
use SilverStripe\Core\Injector\Injector; |
9
|
|
|
use SilverStripe\Dev\SapphireTest; |
10
|
|
|
use SilverStripe\Security\Member; |
11
|
|
|
use SilverStripe\Security\Security; |
12
|
|
|
|
13
|
|
|
class BootstrapMFAProviderTest extends SapphireTest |
14
|
|
|
{ |
15
|
|
|
protected static $fixture_file = '../fixtures/member.yml'; |
16
|
|
|
|
17
|
|
|
public function testUpdateTokens() |
18
|
|
|
{ |
19
|
|
|
$member = $this->objFromFixture(Member::class, 'member1'); |
20
|
|
|
Security::setCurrentUser($member); |
21
|
|
|
/** @var BootstrapMFAProvider $provider */ |
22
|
|
|
$provider = Injector::inst()->get(BootstrapMFAProvider::class); |
23
|
|
|
$provider->setMember($member); |
24
|
|
|
$provider->updateTokens(); |
25
|
|
|
|
26
|
|
|
$this->assertCount(15, CodeHelper::getCodesFromSession()); |
27
|
|
|
} |
28
|
|
|
|
29
|
|
|
public function testUpdateTokensWithoutMember() |
30
|
|
|
{ |
31
|
|
|
/** @var BootstrapMFAProvider $provider */ |
32
|
|
|
$provider = Injector::inst()->get(BootstrapMFAProvider::class); |
33
|
|
|
$provider->updateTokens(); |
34
|
|
|
|
35
|
|
|
$this->assertCount(0, CodeHelper::getCodesFromSession()); |
36
|
|
|
} |
37
|
|
|
|
38
|
|
|
public function testResultFound() |
39
|
|
|
{ |
40
|
|
|
/** @var Member $member */ |
41
|
|
|
$member = $this->objFromFixture(Member::class, 'member1'); |
42
|
|
|
/** @var BootstrapMFAProvider $provider */ |
43
|
|
|
$provider = Injector::inst()->get(BootstrapMFAProvider::class); |
44
|
|
|
$provider->setMember($member); |
45
|
|
|
$token = $member->encryptWithUserSettings('123345'); |
46
|
|
|
$result = $provider->fetchToken($token); |
47
|
|
|
|
48
|
|
|
// No backupcodes generated yet |
49
|
|
|
$this->assertNull($result); |
50
|
|
|
|
51
|
|
|
Security::setCurrentUser($member); |
52
|
|
|
$provider->updateTokens(); |
53
|
|
|
|
54
|
|
|
$tokens = CodeHelper::getCodesFromSession(); |
55
|
|
|
|
56
|
|
|
$token = $member->encryptWithUserSettings($tokens[0]); |
57
|
|
|
$result = $provider->fetchToken($token); |
58
|
|
|
|
59
|
|
|
// New backupcodes |
60
|
|
|
$this->assertInstanceOf(BackupCode::class, $result); |
61
|
|
|
} |
62
|
|
|
|
63
|
|
|
/** |
64
|
|
|
* Somehow, setUp is required otherwise the fixtures aren't loaded |
65
|
|
|
*/ |
66
|
|
|
public function setUp() |
67
|
|
|
{ |
68
|
|
|
return parent::setUp(); |
69
|
|
|
} |
70
|
|
|
} |
71
|
|
|
|