ProviderIdentity::forceGet()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 24

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 24
rs 9.536
c 0
b 0
f 0
ccs 9
cts 9
cp 1
cc 2
nc 2
nop 2
crap 2
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: dsmrt
5
 * Date: 1/12/18
6
 * Time: 10:44 PM
7
 */
8
9
namespace flipbox\saml\sp\services;
10
11
use craft\elements\User;
12
use flipbox\saml\core\exceptions\InvalidMessage;
13
use flipbox\saml\core\helpers\MessageHelper;
14
use flipbox\saml\core\records\ProviderInterface;
15
use flipbox\saml\core\services\AbstractProviderIdentityService;
16
use flipbox\saml\sp\records\ProviderIdentityRecord;
17
use flipbox\saml\sp\records\ProviderRecord;
18
use flipbox\saml\sp\Saml;
19
use flipbox\saml\sp\services\login\AssertionTrait;
20
use flipbox\saml\sp\traits\SamlPluginEnsured;
21
use SAML2\Assertion;
22
use SAML2\Response as SamlResponse;
23
use yii\base\UserException;
24
25
/**
26
 * Class ProviderIdentity
27
 *
28
 * @package flipbox\saml\sp\services
29
 */
30
class ProviderIdentity extends AbstractProviderIdentityService
31
{
32
33
    use SamlPluginEnsured, AssertionTrait;
34
35
    /**
36
     * ACS Methods
37
     */
38
39
    /**
40
     * @param User $user
41
     * @param SamlResponse $response
42
     * @return ProviderIdentityRecord
43
     * @throws InvalidMessage
44
     * @throws UserException
45
     */
46 3
    public function getByUserAndResponse(
47
        User $user,
48
        SamlResponse $response,
49
        ProviderRecord $serviceProvider,
50
        ProviderRecord $idpProvider
51
    ) {
52
53 3
        $firstAssertion = $this->getFirstAssertion($response, $serviceProvider);
54
55
        // Get Identity
56 3
        $identity = $this->forceGet(
57 3
            $firstAssertion->getNameID()->getValue(),
58 1
            $idpProvider
59
        );
60
61
        // Get Session
62 3
        $sessionIndex = $firstAssertion->getSessionIndex();
63
64
        // Set Identity Properties
65 3
        $identity->userId = $user->id;
66 3
        $identity->enabled = true;
67 3
        $identity->sessionId = $sessionIndex;
68 3
        return $identity;
69
    }
70
71
72
    /**
73
     * @param string $nameId
74
     * @param ProviderInterface $provider
75
     * @return ProviderIdentityRecord
76
     * @throws UserException
77
     */
78 3
    protected function forceGet($nameId, ProviderInterface $provider)
79
    {
80
        // @var \flipbox\saml\sp\records\ProviderIdentityRecord $identity
81 3
        if (! $identity = $this->findByNameId(
82 3
            $nameId,
83 1
            $provider
84 3
        )->one()
85
        ) {
86
87
            /**
88
             * Create the new identity if one wasn't found above.
89
             * Since we now have the user id, and we might not have above,
90
             * do this last.
91
             */
92 3
            $identity = new ProviderIdentityRecord(
93
                [
94 3
                    'providerId' => $provider->id,
0 ignored issues
show
Bug introduced by
Accessing id on the interface flipbox\saml\core\records\ProviderInterface suggest that you code against a concrete implementation. How about adding an instanceof check?

If you access a property on an interface, you most likely code against a concrete implementation of the interface.

Available Fixes

  1. Adding an additional type check:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeInterface $object) {
        if ($object instanceof SomeClass) {
            $a = $object->a;
        }
    }
    
  2. Changing the type hint:

    interface SomeInterface { }
    class SomeClass implements SomeInterface {
        public $a;
    }
    
    function someFunction(SomeClass $object) {
        $a = $object->a;
    }
    
Loading history...
95 3
                    'nameId' => $nameId,
96
                ]
97
            );
98
        }
99
100 3
        return $identity;
101
    }
102
}
103