MemberExtension   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 19
dl 0
loc 59
rs 10
c 0
b 0
f 0
wmc 6

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getJWTData() 0 18 3
A updateCMSFields() 0 3 1
A destroyAuthTokens() 0 6 2
1
<?php declare(strict_types=1);
2
3
namespace Firesphere\GraphQLJWT\Extensions;
4
5
use Firesphere\GraphQLJWT\Model\JWTRecord;
6
use SilverStripe\Forms\FieldList;
7
use SilverStripe\ORM\DataExtension;
8
use SilverStripe\ORM\HasManyList;
9
use SilverStripe\Security\Member;
10
use stdClass;
11
12
/**
13
 * Class MemberExtension
14
 * Add a unique token to the Member for extra validation
15
 *
16
 * @property Member|MemberExtension $owner
17
 * @method HasManyList|JWTRecord[] AuthTokens()
18
 */
19
class MemberExtension extends DataExtension
20
{
21
    /**
22
     * List of names of extra subject fields to add to JWT token
23
     *
24
     * @config
25
     * @var array
26
     */
27
    private static $jwt_subject_fields = [];
28
29
    /**
30
     * @config
31
     * @var array
32
     */
33
    private static $has_many = [
34
        'AuthTokens' => JWTRecord::class,
35
    ];
36
37
    public function updateCMSFields(FieldList $fields)
38
    {
39
        $fields->removeByName('AuthTokens');
40
    }
41
42
    /**
43
     * Option to add data to the JWT Subject
44
     *
45
     * @return string
46
     */
47
    public function getJWTData(): string
48
    {
49
        $data = new stdClass();
50
        $identifier = Member::config()->get('unique_identifier_field');
51
        $extraFields = Member::config()->get('jwt_subject_fields');
52
53
        $data->type = 'member';
54
        $data->id = $this->owner->ID;
0 ignored issues
show
Bug Best Practice introduced by
The property ID does not exist on Firesphere\GraphQLJWT\Extensions\MemberExtension. Did you maybe forget to declare it?
Loading history...
55
        $data->userName = $this->owner->$identifier;
56
57
        if (is_array($extraFields)) {
58
            foreach ($extraFields as $field) {
59
                $dataField = lcfirst($field);
60
                $data->$dataField = $this->owner->$field;
61
            }
62
        }
63
64
        return json_encode($data);
65
    }
66
67
    /**
68
     * Destroy all JWT tokens
69
     *
70
     * @return Member
71
     */
72
    public function destroyAuthTokens(): Member
73
    {
74
        foreach ($this->owner->AuthTokens() as $token) {
75
            $token->delete();
76
        }
77
        return $this->owner;
78
    }
79
}
80