Passed
Pull Request — master (#24)
by Damian
03:43
created

MemberExtension::getJWTData()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 11
nc 2
nop 0
dl 0
loc 18
rs 9.9
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace Firesphere\GraphQLJWT\Extensions;
4
5
use Firesphere\GraphQLJWT\Model\JWTRecord;
6
use SilverStripe\Core\Convert;
7
use SilverStripe\Forms\FieldList;
8
use SilverStripe\ORM\DataExtension;
9
use SilverStripe\ORM\HasManyList;
10
use SilverStripe\Security\Member;
11
use stdClass;
12
13
/**
14
 * Class MemberExtension
15
 * Add a unique token to the Member for extra validation
16
 *
17
 * @property Member|MemberExtension $owner
18
 * @method HasManyList|JWTRecord[] AuthTokens()
19
 */
20
class MemberExtension extends DataExtension
21
{
22
    /**
23
     * List of names of extra subject fields to add to JWT token
24
     *
25
     * @config
26
     * @var array
27
     */
28
    private static $jwt_subject_fields = [];
29
30
    /**
31
     * @config
32
     * @var array
33
     */
34
    private static $has_many = [
35
        'AuthTokens' => JWTRecord::class,
36
    ];
37
38
    public function updateCMSFields(FieldList $fields)
39
    {
40
        $fields->removeByName('AuthTokens');
41
    }
42
43
    /**
44
     * Option to add data to the JWT Subject
45
     *
46
     * @return string
47
     */
48
    public function getJWTData(): string
49
    {
50
        $data = new stdClass();
51
        $identifier = Member::config()->get('unique_identifier_field');
52
        $extraFields = Member::config()->get('jwt_subject_fields');
53
54
        $data->type = 'member';
55
        $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...
56
        $data->userName = $this->owner->$identifier;
57
58
        if (is_array($extraFields)) {
59
            foreach ($extraFields as $field) {
60
                $dataField = lcfirst($field);
61
                $data->$dataField = $this->owner->$field;
62
            }
63
        }
64
65
        return Convert::raw2json($data);
66
    }
67
68
    /**
69
     * Destroy all JWT tokens
70
     *
71
     * @return Member
72
     */
73
    public function DestroyAuthTokens(): Member
74
    {
75
        foreach ($this->owner->AuthTokens() as $token) {
76
            $token->delete();
77
        }
78
        return $this->owner;
79
    }
80
}
81