Firesphere/silverstripe-yubiauth

View on GitHub
src/Extensions/MemberExtension.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Firesphere\YubiAuth\Extensions;

use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\NumericField;
use SilverStripe\ORM\DataExtension;

/**
 * Class YubiAuthMemberExtension
 *
 * Enable yubikey authentication disabling temporarily
 *
 * @property MemberExtension $owner
 * @property string $Yubikey
 * @property int $NoYubikeyCount
 */
class MemberExtension extends DataExtension
{
    private static $db = [
        'Yubikey'        => 'Varchar(255)',
        'NoYubikeyCount' => 'Int'
    ];

    /**
     * @inheritdoc
     * @param array $labels
     */
    public function updateFieldLabels(&$labels)
    {
        $labels['Yubikey'] = _t(self::class . '.YUBIKEY', 'Yubikey code');
        $labels['NoYubikeyCount'] = _t(self::class . '.NOYUBIKEYCOUNT', 'Login count without yubikey');
    }

    /**
     * @inheritdoc
     * @param FieldList $fields
     */
    public function updateCMSFields(FieldList $fields)
    {
        $fields->removeByName(['NoYubikeyCount', 'Yubikey']);
        $yubiCount = NumericField::create('NoYubikeyCount');

        $fields->addFieldsToTab('Root.MFA', [$yubiCount]);

        return $fields;
    }

    /**
     * @inheritdoc
     */
    public function onBeforeWrite()
    {
        // Empty the yubikey field on member write, if the yubiauth is not required
        // Maybe the user lost the key? So a new one will be set next time it's logged in with key
        if (!$this->owner->MFAEnabled) {
            $this->owner->Yubikey = '';
        }
    }
}