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