Passed
Push — master ( 885677...7a0915 )
by Simon
08:10
created

MemberExtension::onBeforeWrite()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 0
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Firesphere\BootstrapMFA\Extensions;
4
5
use Firesphere\BootstrapMFA\Config\MFAEnabledFields;
6
use Firesphere\BootstrapMFA\Models\BackupCode;
7
use Firesphere\BootstrapMFA\Providers\BootstrapMFAProvider;
8
use SilverStripe\Control\Controller;
9
use SilverStripe\Core\Config\Config;
10
use SilverStripe\Core\Config\Configurable;
11
use SilverStripe\Core\Injector\Injector;
12
use SilverStripe\Forms\CheckboxField;
13
use SilverStripe\Forms\FieldList;
14
use SilverStripe\Forms\LiteralField;
15
use SilverStripe\Forms\Tab;
16
use SilverStripe\ORM\DataExtension;
17
use SilverStripe\SiteConfig\SiteConfig;
18
19
/**
20
 * Class MemberExtension
21
 *
22
 * @package Firesphere\BootstrapMFA
23
 * @property \Firesphere\BootstrapMFA\Extensions\MemberExtension $owner
24
 * @property boolean $MFAEnabled
25
 * @method \SilverStripe\ORM\DataList|\Firesphere\BootstrapMFA\Models\BackupCode[] Backupcodes()
26
 */
27
class MemberExtension extends DataExtension
28
{
29
    use Configurable;
30
31
    private static $db = [
0 ignored issues
show
introduced by
The private property $db is not used, and could be removed.
Loading history...
32
        'MFAEnabled' => 'Boolean(false)',
33
    ];
34
    private static $has_many = [
0 ignored issues
show
introduced by
The private property $has_many is not used, and could be removed.
Loading history...
35
        'Backupcodes' => BackupCode::class
36
    ];
37
38
    protected $updateMFA = false;
39
40
    public function updateCMSFields(FieldList $fields)
41
    {
42
        $fields->addFieldToTab('Root.Main', $enabled = CheckboxField::create('MFAEnabled', 'MFA Enabled'));
43
        $fields->addFieldToTab('Root.Main', CheckboxField::create('updateMFA', 'Reset MFA codes'));
44
        $fields->removeByName(['Backupcodes']);
45
        $session = Controller::curr()->getRequest()->getSession();
46
        if ($session->get('tokens')) {
47
            $rootTabSet = $fields->fieldByName("Root");
48
            $field = LiteralField::create('tokens', $session->get('tokens'));
49
            $tab = Tab::create(
50
                'BackupTokens',
51
                'Backup Tokens'
52
            );
53
            $rootTabSet->push(
54
                $tab
55
            );
56
            $fields->addFieldToTab('Root.BackupTokens', $field);
57
            $session->clear('tokens');
58
        }
59
    }
60
61
    public function onBeforeWrite()
62
    {
63
        if (SiteConfig::current_site_config()->ForceMFA) {
64
            $this->MFAEnabled = true;
65
            $this->updateMFA = true;
66
        }
67
    }
68
69
    public function onAfterWrite()
70
    {
71
        parent::onAfterWrite();
72
        if ($this->owner->updateMFA) {
73
            $provider = Injector::inst()->get(BootstrapMFAProvider::class);
74
            $provider->setMember($this->owner);
75
            $provider->updateTokens();
76
        }
77
    }
78
}
79