OAuthProvider::loadUserByUsername()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace App\Security\User\Provider;
4
5
use Symfony\Component\Security\Core\User\UserProviderInterface;
6
use Symfony\Component\Security\Core\User\UserInterface;
7
8
use Symfony\Component\Security\Core\Exception\AuthenticationException;
9
10
use App\Entity\User\User;
11
use App\Entity\User\Member;
12
use App\Manager\UserManager;
13
14
use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthAwareUserProviderInterface;
15
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
16
17
use App\Utils\Slugger;
18
19
class OAuthProvider implements UserProviderInterface, OAuthAwareUserProviderInterface
20
{
21
    /** @var UserManager **/
22
    protected $userManager;
23
    /** @var Slugger **/
24
    protected $slugger;
25
    
26 8
    public function __construct(UserManager $userManager, Slugger $slugger)
27
    {
28 8
        $this->userManager = $userManager;
29 8
        $this->slugger = $slugger;
30 8
    }
31
    
32
    public function loadUserByUsername($username)
33
    {
34
        return $this->userManager->findUserByUsernameOrEmail($username);
35
    }
36
    
37
    public function loadUserByServiceId(string $service, int $id)
38
    {
39
        return $this->userManager->findUserByServiceId($service, $id);
40
    }
41
42
    public function refreshUser(UserInterface $user): UserInterface
43
    {
44
        return $this->loadUserByUsername($user->getUsername());
45
    }
46
47
    public function supportsClass($class)
48
    {
49
        return is_a($class, User::class, true);
50
    }
51
52
    public function loadUserByOAuthUserResponse(UserResponseInterface $response): UserInterface
53
    {
54
        $service = ucfirst($response->getResourceOwner()->getName());
55
        $serviceId = $response->getData()['id'];
56
        if (($user = $this->loadUserByServiceId($service, $serviceId)) !== null) {
57
            if (($id = $user->{"get{$service}Id"}()) !== $serviceId) {
0 ignored issues
show
Unused Code introduced by
The assignment to $id is dead and can be removed.
Loading history...
58
                throw new AuthenticationException('users.connection.account_already_bound');
59
            }
60
            return $user;
61
        }
62
        $user =
63
            (new Member())
64
            ->setUsername(
65
                ($this->userManager->checkUsername($response->getRealName()))
0 ignored issues
show
Bug introduced by
It seems like $this->userManager->chec...: $response->getEmail() can also be of type null; however, parameter $username of App\Model\User\User::setUsername() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

65
                /** @scrutinizer ignore-type */ ($this->userManager->checkUsername($response->getRealName()))
Loading history...
66
                ? $response->getRealName()
67
                : $response->getEmail()
68
            )
69
            ->setEmail($response->getEmail())
70
            ->{"set{$service}Id"}($serviceId)
71
            ->{"set{$service}AccessToken"}($response->getAccessToken())
72
        ;
73
//        if ($response->getProfilePicture() !== null) {
74
//            $this->setUserProfilePicture($user, $this->slugger->slugify($username), $response->getProfilePicture());
75
//        }
76
        $this->userManager->createOAuthUser($user);
77
        return $user;
78
    }
79
    
80
//    protected function setUserProfilePicture(User $user, string $pictureName, string $profilePicture)
81
//    {
82
//        $extension = pathinfo($profilePicture, PATHINFO_EXTENSION);
83
//        $path = "{$pictureName}.{$extension}";
84
//        file_put_contents(Avatar::UPLOAD_DIR . "/{$path}", file_get_contents($profilePicture));
85
//        $user->setAvatar(
86
//            (new Avatar())
87
//            ->setName($pictureName)
88
//            ->setPath($path)
89
//        );
90
//    }
91
}