DigitalState/Platform-SSO-Bundle

View on GitHub
Security/Core/User/OAuthUserProvider.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Ds\Bundle\SSOBundle\Security\Core\User;

use Oro\Bundle\UserBundle\Entity\UserManager;
use Oro\Bundle\ConfigBundle\Config\ConfigManager;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Ds\Bundle\SSOBundle\Collection\OAuthUserProviderCollection;
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
use LogicException;

/**
 * Class OAuthUserProvider
 */
class OAuthUserProvider extends AbstractOAuthUserProvider
{
    /**
     * @var \Ds\Bundle\SSOBundle\Collection\OAuthUserProviderCollection
     */
    protected $oauthUserProviderCollection;

    /**
     * Constructor
     *
     * @param \Oro\Bundle\UserBundle\Entity\UserManager $userManager
     * @param \Oro\Bundle\ConfigBundle\Config\ConfigManager $configManager
     * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $dispatcher
     * @param \Ds\Bundle\SSOBundle\Collection\OAuthUserProviderCollection $oauthUserProviderCollection
     */
    public function __construct(UserManager $userManager, ConfigManager $configManager, EventDispatcherInterface $dispatcher, OAuthUserProviderCollection $oauthUserProviderCollection)
    {
        parent::__construct($userManager, $configManager, $dispatcher);

        $this->oauthUserProviderCollection = $oauthUserProviderCollection;
    }

    /**
     * {@inheritdoc}
     */
    public function loadUserByOAuthUserResponse(UserResponseInterface $response)
    {
        $alias = $response->getResourceOwner()->getName();

        foreach ($this->oauthUserProviderCollection as $item) {
            if ($item['alias'] === $alias) {
                return $item['provider']->loadUserByOAuthUserResponse($response);
            }
        }

        throw new LogicException('Provider does not exist.');
    }
}