|
|
|
@@ -2,19 +2,11 @@
|
|
|
|
|
|
|
|
|
|
namespace AppBundle\Security\Core\User;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
use FOS\UserBundle\Model\UserInterface as FOSUserInterface;
|
|
|
|
|
use AppBundle\Entity\Company;
|
|
|
|
|
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
|
|
|
|
|
use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseFOSUBProvider;
|
|
|
|
|
use AppBundle\Entity\Company;
|
|
|
|
|
use AppBundle\Entity\Answer;
|
|
|
|
|
use AppBundle\Entity\Media;
|
|
|
|
|
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
|
|
|
|
|
use Symfony\Component\Security\Core\User\UserInterface;
|
|
|
|
|
use Symfony\Component\HttpFoundation\Session\Session;
|
|
|
|
|
|
|
|
|
|
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
|
|
|
|
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
|
|
|
|
|
use Symfony\Component\Security\Core\User\UserInterface;
|
|
|
|
|
|
|
|
|
|
class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
{
|
|
|
|
@@ -22,20 +14,19 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
|
|
|
|
|
public function __construct($userManager, $em, $slug, $container, array $properties)
|
|
|
|
|
{
|
|
|
|
|
parent::__construct($userManager,$properties);
|
|
|
|
|
parent::__construct($userManager, $properties);
|
|
|
|
|
$this->em = $em;
|
|
|
|
|
$this->slugService = $slug;
|
|
|
|
|
$this->container = $container;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* {@inheritdoc}
|
|
|
|
|
*/
|
|
|
|
|
public function connect(UserInterface $user, UserResponseInterface $response)
|
|
|
|
|
{
|
|
|
|
|
$isTmpUser = false;
|
|
|
|
|
if($this->container->get('security.token_storage')->getToken()){
|
|
|
|
|
if ($this->container->get('security.token_storage')->getToken()) {
|
|
|
|
|
$userConnected = $this->container->get('security.token_storage')->getToken()->getUser();
|
|
|
|
|
if ($userConnected->hasRole('ROLE_TALENT_TMP')) {
|
|
|
|
|
$isTmpUser = true;
|
|
|
|
@@ -46,7 +37,7 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
$property = $this->getProperty($response);
|
|
|
|
|
$username = $response->getUsername(); // get the unique user identifier
|
|
|
|
|
$serviceName = $response->getResourceOwner()->getName();
|
|
|
|
|
$propertyQuery = str_replace('_', '', lcfirst(ucwords($property, '_')));
|
|
|
|
|
$propertyQuery = str_replace('_', '', lcfirst(ucwords($property, '_')));
|
|
|
|
|
$setter = 'set' . ucfirst($serviceName) . 'Id';
|
|
|
|
|
$setterToken = 'set' . ucfirst($serviceName) . 'AccessToken';
|
|
|
|
|
$existingUser = $this->userManager->findUserBy(array($propertyQuery => $username));
|
|
|
|
@@ -56,7 +47,7 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
}
|
|
|
|
|
if (null !== $existingUser) {
|
|
|
|
|
$this->disconnect($existingUser, $response);
|
|
|
|
|
if($isTmpUser){
|
|
|
|
|
if ($isTmpUser) {
|
|
|
|
|
$this->assignToRealAccount($userConnected, $existingUser);
|
|
|
|
|
$user = $existingUser;
|
|
|
|
|
$token = new UsernamePasswordToken($user, null, "main", $user->getRoles());
|
|
|
|
@@ -66,7 +57,7 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
$existingUser->$setterToken($response->getAccessToken());
|
|
|
|
|
$this->userManager->updateUser($existingUser);
|
|
|
|
|
} else {
|
|
|
|
|
if($isTmpUser){
|
|
|
|
|
if ($isTmpUser) {
|
|
|
|
|
$existingUser = $this->loadUserByOAuthUserResponse($response);
|
|
|
|
|
$this->assignToRealAccount($userConnected, $existingUser);
|
|
|
|
|
$existingUser->$setter($username);
|
|
|
|
@@ -81,9 +72,17 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function assignToRealAccount($userConnected, $existingUser) {
|
|
|
|
|
/**
|
|
|
|
|
* This function is meant to reassign data from a temporary account to a real account
|
|
|
|
|
*
|
|
|
|
|
* @param $userConnected
|
|
|
|
|
* @param $existingUser
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function assignToRealAccount($userConnected, $existingUser)
|
|
|
|
|
{
|
|
|
|
|
$answers = $this->em->getRepository('AppBundle:Answer')->findBy(array('user' => $userConnected));
|
|
|
|
|
$medias = $this->em->getRepository('AppBundle:Media')->findBy(array('creator'=> $userConnected));
|
|
|
|
|
$medias = $this->em->getRepository('AppBundle:Media')->findBy(array('creator' => $userConnected));
|
|
|
|
|
foreach ($medias as $key => $media) {
|
|
|
|
|
$media->setCreator($existingUser);
|
|
|
|
|
}
|
|
|
|
@@ -95,41 +94,54 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
$this->userManager->deleteUser($userConnected);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Load a user by username.
|
|
|
|
|
*
|
|
|
|
|
* @param string $username
|
|
|
|
|
*
|
|
|
|
|
* @return UserInterface|null
|
|
|
|
|
*/
|
|
|
|
|
public function loadUserByUsername($username)
|
|
|
|
|
{
|
|
|
|
|
$existingUser = $this->userManager->findUserByEmail($username);
|
|
|
|
|
if($this->container->get('security.token_storage')->getToken()){
|
|
|
|
|
$existingUser = $this->userManager->findUserByUsername($username);
|
|
|
|
|
if($existingUser == null){
|
|
|
|
|
$existingUser = $this->userManager->findUserByEmail($username);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Used to assign data from temporry account to real account
|
|
|
|
|
if ($this->container->get('security.token_storage')->getToken()) {
|
|
|
|
|
$userConnected = $this->container->get('security.token_storage')->getToken()->getUser();
|
|
|
|
|
if ($userConnected->hasRole('ROLE_TALENT_TMP')) {
|
|
|
|
|
|
|
|
|
|
$this->assignToRealAccount($userConnected, $existingUser);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $existingUser;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* {@inheritDoc}
|
|
|
|
|
*/
|
|
|
|
|
* Used to create or load user when linkedin or Facebook Oauth is used
|
|
|
|
|
*
|
|
|
|
|
* @param UserResponseInterface $response
|
|
|
|
|
* @return $user
|
|
|
|
|
*/
|
|
|
|
|
public function loadUserByOAuthUserResponse(UserResponseInterface $response)
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
$serviceName = $response->getResourceOwner()->getName();
|
|
|
|
|
$data = $response->getData();
|
|
|
|
|
$userConnected = null;
|
|
|
|
|
if($this->container->get('security.token_storage')->getToken()){
|
|
|
|
|
if ($this->container->get('security.token_storage')->getToken()) {
|
|
|
|
|
$userConnected = $this->container->get('security.token_storage')->getToken()->getUser();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
$userEmail = $response->getEmail();
|
|
|
|
|
$user = $this->userManager->findUserByEmail($userEmail);
|
|
|
|
|
|
|
|
|
|
if($serviceName == "linkedin"){
|
|
|
|
|
if ($serviceName == "linkedin") {
|
|
|
|
|
$id = $data['id'];
|
|
|
|
|
$birthday = null;
|
|
|
|
|
$gender = null;
|
|
|
|
|
$userPhoto = $data['pictureUrls']['values'][0];
|
|
|
|
|
$username = $data['firstName']."-".$data['lastName'];
|
|
|
|
|
$username = $data['firstName'] . "-" . $data['lastName'];
|
|
|
|
|
$firstname = $data['firstName'];
|
|
|
|
|
$lastname = $data['lastName'];
|
|
|
|
|
|
|
|
|
@@ -150,9 +162,9 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
$lastname = $data['last_name'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (null === $user) {
|
|
|
|
|
if (null === $user) {
|
|
|
|
|
$user = $this->userManager->createUser();
|
|
|
|
|
$user->setUsername($firstname."-".$lastname);
|
|
|
|
|
$user->setUsername($firstname . "-" . $lastname);
|
|
|
|
|
$user->setFirstname($firstname);
|
|
|
|
|
$user->setLastname($lastname);
|
|
|
|
|
$user->setEmail($userEmail);
|
|
|
|
@@ -162,10 +174,10 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
$user->setRoles(array('ROLE_TALENT'));
|
|
|
|
|
$user->setBirthday($birthday);
|
|
|
|
|
$user->setGender($gender);
|
|
|
|
|
if($serviceName == "linkedin"){
|
|
|
|
|
if ($serviceName == "linkedin") {
|
|
|
|
|
$user->setLinkedinId($id);
|
|
|
|
|
}
|
|
|
|
|
if($serviceName == "facebook"){
|
|
|
|
|
if ($serviceName == "facebook") {
|
|
|
|
|
$user->setFacebookId($id);
|
|
|
|
|
}
|
|
|
|
|
$this->userManager->updateUser($user);
|
|
|
|
@@ -184,10 +196,10 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
|
|
|
|
|
return $user;
|
|
|
|
|
} else {
|
|
|
|
|
if($userConnected) {
|
|
|
|
|
if ($userConnected) {
|
|
|
|
|
$userConnected->hasRole('ROLE_TALENT_TMP');
|
|
|
|
|
if ($userConnected->hasRole('ROLE_TALENT_TMP')) {
|
|
|
|
|
$user->setUsername($firstname."-".$lastname);
|
|
|
|
|
$user->setUsername($firstname . "-" . $lastname);
|
|
|
|
|
$user->setFirstname($firstname);
|
|
|
|
|
$user->setLastname($lastname);
|
|
|
|
|
$user->setEmail($userEmail);
|
|
|
|
@@ -197,10 +209,10 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
$user->setRoles(array('ROLE_TALENT'));
|
|
|
|
|
$user->setBirthday($birthday);
|
|
|
|
|
$user->setGender($gender);
|
|
|
|
|
if($serviceName == "linkedin"){
|
|
|
|
|
if ($serviceName == "linkedin") {
|
|
|
|
|
$user->setLinkedinId($id);
|
|
|
|
|
}
|
|
|
|
|
if($serviceName == "facebook"){
|
|
|
|
|
if ($serviceName == "facebook") {
|
|
|
|
|
$user->setFacebookId($id);
|
|
|
|
|
}
|
|
|
|
|
$token = new UsernamePasswordToken($user, null, "main", $user->getRoles());
|
|
|
|
@@ -213,7 +225,6 @@ class FOSUBUserProvider extends BaseFOSUBProvider
|
|
|
|
|
$serviceName = $response->getResourceOwner()->getName();
|
|
|
|
|
$setter = 'set' . ucfirst($serviceName) . 'AccessToken';
|
|
|
|
|
$user->$setter($response->getAccessToken());
|
|
|
|
|
|
|
|
|
|
return $user;
|
|
|
|
|
return $user;
|
|
|
|
|
}
|
|
|
|
|
}
|