CredentialRepositoryProviderTrait   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 21
c 1
b 0
f 0
dl 0
loc 52
rs 10
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getUserEntity() 0 6 1
A getCredentialRepository() 0 33 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SilverStripe\WebAuthn;
6
7
use SilverStripe\MFA\Model\RegisteredMethod;
8
use SilverStripe\MFA\Service\RegisteredMethodManager;
9
use SilverStripe\MFA\Store\StoreInterface;
10
use SilverStripe\Security\Member;
11
use Webauthn\PublicKeyCredentialUserEntity;
12
13
trait CredentialRepositoryProviderTrait
14
{
15
    /**
16
     * @param StoreInterface $store
17
     * @param RegisteredMethod|null $registeredMethod
18
     * @return CredentialRepository
19
     */
20
    protected function getCredentialRepository(
21
        StoreInterface $store,
22
        RegisteredMethod $registeredMethod = null
23
    ): CredentialRepository {
24
        $state = $store->getState();
25
26
        // Check state from the store (session)
27
        if (isset($state['repository']) && $state['repository'] instanceof CredentialRepository) {
28
            return $state['repository'];
29
        }
30
31
        // Check if the member has an existing webauthn registered method to add to
32
        $member = $store->getMember();
33
        if (!$registeredMethod) {
34
            $registeredMethod = RegisteredMethodManager::singleton()->getFromMember(
35
                $member,
36
                new Method()
37
            );
38
        }
39
40
        if ($registeredMethod) {
41
            $credentialRepository = CredentialRepository::fromArray(
42
                (array) json_decode($registeredMethod->Data, true),
43
                (string) $member->ID
44
            );
45
        } else {
46
            $credentialRepository = new CredentialRepository((string) $member->ID);
47
        }
48
49
        // Persist the credential repository in the store
50
        $store->addState(['repository' => $credentialRepository]);
51
52
        return $credentialRepository;
53
    }
54
55
    /**
56
     * @param Member $member
57
     * @return PublicKeyCredentialUserEntity
58
     */
59
    protected function getUserEntity(Member $member): PublicKeyCredentialUserEntity
60
    {
61
        return new PublicKeyCredentialUserEntity(
62
            $member->getName(),
63
            (string) $member->ID,
64
            $member->getName()
65
        );
66
    }
67
}
68