for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
/* For licensing terms, see /license.txt */
declare(strict_types=1);
namespace Chamilo\CoreBundle\Security\Authenticator\OAuth2;
use Chamilo\CoreBundle\Entity\User;
use KnpU\OAuth2ClientBundle\Client\OAuth2ClientInterface;
use League\OAuth2\Client\Token\AccessToken;
use Stevenmaguire\OAuth2\Client\Provider\KeycloakResourceOwner;
use Symfony\Component\HttpFoundation\Request;
class KeycloakAuthenticator extends AbstractAuthenticator
{
protected string $providerName = 'keycloak';
public function supports(Request $request): ?bool
return 'chamilo.oauth2_keycloak_check' === $request->attributes->get('_route');
}
protected function userLoader(AccessToken $accessToken): User
/** @var KeycloakResourceOwner $resourceOwner */
$resourceOwner = $this->client->fetchUserFromToken($accessToken);
$user = $this->userRepository->findOneBy(['username' => $resourceOwner->getUsername()])
?:
$this->userRepository->findOneBy(['email' => $resourceOwner->getEmail()]);
if (!$user) {
$user = (new User())
->setCreatorId($this->userRepository->getRootUser()->getId())
;
$username = $user->getUsername() ?: $user->getEmail();
$user
->setFirstname($resourceOwner->getFirstName())
->setLastname($resourceOwner->getLastName())
->setEmail($resourceOwner->getEmail())
->setUsername($username)
->setPlainPassword('keycloak')
->setStatus(STUDENT)
->setAuthSource('keycloak')
->setRoleFromStatus(STUDENT)
$this->userRepository->updateUser($user);
// updateAccessUrls ?
return $user;