pull/5753/head
parent
21d5f05b0d
commit
007d59dc65
@ -0,0 +1,26 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace Chamilo\CoreBundle\Controller\OAuth2; |
||||
|
||||
use Chamilo\CoreBundle\ServiceHelper\AuthenticationConfigHelper; |
||||
use KnpU\OAuth2ClientBundle\Client\ClientRegistry; |
||||
use Symfony\Component\HttpFoundation\Response; |
||||
use Symfony\Component\Routing\Attribute\Route; |
||||
|
||||
class FacebookProviderController extends AbstractProviderController |
||||
{ |
||||
#[Route('/connect/facebook', name: 'chamilo.oauth2_facebook_start')] |
||||
public function connect( |
||||
ClientRegistry $clientRegistry, |
||||
AuthenticationConfigHelper $authenticationConfigHelper, |
||||
): Response { |
||||
return $this->getStartResponse('facebook', $clientRegistry, $authenticationConfigHelper); |
||||
} |
||||
|
||||
#[Route('/connect/facebook/check', name: 'chamilo.oauth2_facebook_check')] |
||||
public function connectCheck(): void {} |
||||
} |
@ -0,0 +1,74 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
namespace Chamilo\CoreBundle\Security\Authenticator\OAuth2; |
||||
|
||||
use Chamilo\CoreBundle\Entity\User; |
||||
use Chamilo\CoreBundle\Repository\Node\UserRepository; |
||||
use Chamilo\CoreBundle\ServiceHelper\AuthenticationConfigHelper; |
||||
use Cocur\Slugify\SlugifyInterface; |
||||
use KnpU\OAuth2ClientBundle\Client\ClientRegistry; |
||||
use KnpU\OAuth2ClientBundle\Client\OAuth2ClientInterface; |
||||
use League\OAuth2\Client\Provider\FacebookUser; |
||||
use League\OAuth2\Client\Token\AccessToken; |
||||
use Symfony\Component\HttpFoundation\Request; |
||||
use Symfony\Component\Routing\RouterInterface; |
||||
|
||||
class FacebookAuthenticator extends AbstractAuthenticator |
||||
{ |
||||
protected string $providerName = 'facebook'; |
||||
|
||||
public function __construct( |
||||
ClientRegistry $clientRegistry, |
||||
RouterInterface $router, |
||||
UserRepository $userRepository, |
||||
AuthenticationConfigHelper $authenticationConfigHelper, |
||||
protected readonly SlugifyInterface $slugify, |
||||
) { |
||||
parent::__construct($clientRegistry, $router, $userRepository, $authenticationConfigHelper); |
||||
} |
||||
|
||||
public function supports(Request $request): ?bool |
||||
{ |
||||
return 'chamilo.oauth2_facebook_check' === $request->attributes->get('_route'); |
||||
} |
||||
|
||||
protected function userLoader(AccessToken $accessToken): User |
||||
{ |
||||
/** @var FacebookUser $resourceOwner */ |
||||
$resourceOwner = $this->client->fetchUserFromToken($accessToken); |
||||
|
||||
$user = $this->userRepository->findOneBy(['email' => $resourceOwner->getEmail()]); |
||||
|
||||
if (!$user) { |
||||
$user = (new User()) |
||||
->setCreatorId($this->userRepository->getRootUser()->getId()) |
||||
; |
||||
} |
||||
|
||||
$user |
||||
->setFirstname($resourceOwner->getFirstName()) |
||||
->setLastname($resourceOwner->getLastName()) |
||||
//->setLocale($resourceOwner->getLocale()) |
||||
->setEmail($resourceOwner->getEmail()) |
||||
->setUsername($this->changeToValidChamiloLogin($resourceOwner->getEmail())) |
||||
->setPlainPassword('facebook') |
||||
->setStatus(STUDENT) |
||||
->setAuthSource('facebook') |
||||
->setRoleFromStatus(STUDENT) |
||||
; |
||||
|
||||
$this->userRepository->updateUser($user); |
||||
// updateAccessUrls ? |
||||
|
||||
return $user; |
||||
} |
||||
|
||||
private function changeToValidChamiloLogin(string $email): string |
||||
{ |
||||
return $this->slugify->slugify($email); |
||||
} |
||||
} |
Loading…
Reference in new issue