Update UserBundle with new changes in order to work with Symfony

pull/2487/head
jmontoyaa 7 years ago
parent 929f1b13bd
commit 43cb96a4f0
  1. 4
      src/UserBundle/Admin/GroupAdmin.php
  2. 4
      src/UserBundle/Admin/UserAdmin.php
  3. 5
      src/UserBundle/Admin/UserField.php
  4. 5
      src/UserBundle/Admin/UserFieldValuesAdmin.php
  5. 1
      src/UserBundle/DependencyInjection/ChamiloUserExtension.php
  6. 28
      src/UserBundle/Entity/User.php
  7. 5
      src/UserBundle/Resources/config/services.yml
  8. 49
      src/UserBundle/Security/Encoder.php
  9. 69
      src/UserBundle/Security/FOSUBUserProvider.php

@ -3,7 +3,7 @@
namespace Chamilo\UserBundle\Admin;
use Sonata\UserBundle\Admin\Model\GroupAdmin as BaseGroupAdmin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
@ -13,7 +13,7 @@ class GroupAdmin extends BaseGroupAdmin
/**
* {@inheritdoc}
*/
protected function configureListFields(ListMapper $listMapper)
protected function configureListFields(ListMapper $listMapper):void
{
$listMapper
->addIdentifier('name')

@ -16,7 +16,7 @@ class UserAdmin extends BaseUserAdmin
/**
* {@inheritdoc}
*/
protected function configureFormFields(FormMapper $formMapper)
protected function configureFormFields(FormMapper $formMapper): void
{
// define group zoning
$formMapper
@ -176,7 +176,7 @@ class UserAdmin extends BaseUserAdmin
/**
* @param DatagridMapper $datagridMapper
*/
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
{
$datagridMapper
->add('username')

@ -2,18 +2,17 @@
namespace Chamilo\UserBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
/**
* Class UserAdmin
* @package Chamilo\UserBundle\Admin
*/
class UserField extends Admin
class UserField extends AbstractAdmin
{
/**
* @param FormMapper $formMapper

@ -2,18 +2,17 @@
namespace Chamilo\UserBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
/**
* Class UserAdmin
* @package Chamilo\UserBundle\Admin
*/
class UserFieldValuesAdmin extends Admin
class UserFieldValuesAdmin extends AbstractAdmin
{
/**
* @param FormMapper $formMapper

@ -22,5 +22,6 @@ class ChamiloUserExtension extends Extension
{
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('admin.yml');
$loader->load('services.yml');
}
}

@ -3,14 +3,16 @@
namespace Chamilo\UserBundle\Entity;
//use Chamilo\CoreBundle\Entity\UserFieldValues;
use Chamilo\CoreBundle\Entity\AccessUrl;
use Chamilo\CoreBundle\Entity\AccessUrlRelUser;
use Chamilo\CoreBundle\Entity\ExtraFieldValues;
use Chamilo\CoreBundle\Entity\UsergroupRelUser;
use Chamilo\CoreBundle\Entity\Skill;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Doctrine\ORM\Mapping as ORM;
//use Sonata\UserBundle\Entity\BaseUser as BaseUser;
use Doctrine\ORM\Query\Expr\Join;
use Sonata\UserBundle\Model\User as BaseUser;
use Sonata\UserBundle\Entity\BaseUser as BaseUser;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\HttpFoundation\File\File;
//use Symfony\Component\Security\Core\User\UserInterface;
@ -18,7 +20,6 @@ use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use FOS\UserBundle\Model\UserInterface;
use FOS\UserBundle\Model\GroupInterface;
use Chamilo\CoreBundle\Entity\Skill;
use Chamilo\ThemeBundle\Model\UserInterface as ThemeUser;
//use Chamilo\CoreBundle\Component\Auth;
@ -45,6 +46,25 @@ use Chamilo\ThemeBundle\Model\UserInterface as ThemeUser;
* @UniqueEntity("username")
* @ORM\Entity(repositoryClass="Chamilo\UserBundle\Entity\Repository\UserRepository")
*
* @ORM\AttributeOverrides({
* @ORM\AttributeOverride(name="email",
* column=@ORM\Column(
* name="email",
* type="string",
* length=255,
* unique=false
* )
* ),
* @ORM\AttributeOverride(name="emailCanonical",
* column=@ORM\Column(
* name="email_canonical",
* type="string",
* length=255,
* unique=false
* )
* )
* })
*
*/
class User extends BaseUser implements ThemeUser //implements ParticipantInterface, ThemeUser
{

@ -0,0 +1,5 @@
services:
chamilo_user_provider:
class: Chamilo\UserBundle\Security\FOSUBUserProvider
#this is the place where the properties are passed to the UserProvider - see config.yml
arguments: ['@sonata.user.orm.user_manager', {facebook: facebookId, google: googleId, github: githubId} ]

@ -3,9 +3,8 @@
namespace Chamilo\UserBundle\Security;
use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;
use Symfony\Component\Security\Core\Encoder\BasePasswordEncoder;
use Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder;
use Symfony\Component\Security\Core\Encoder\EncoderFactory;
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
use Symfony\Component\Security\Core\Encoder\PlaintextPasswordEncoder;
@ -13,10 +12,9 @@ use Symfony\Component\Security\Core\Encoder\PlaintextPasswordEncoder;
* Class Encoder
* @package Chamilo\UserBundle\Security
*/
class Encoder implements PasswordEncoderInterface
class Encoder extends BasePasswordEncoder
{
protected $method;
protected $defaultEncoder;
/**
* @param $method
@ -24,6 +22,26 @@ class Encoder implements PasswordEncoderInterface
public function __construct($method)
{
$this->method = $method;
}
/**
* @param string $raw
* @param string $salt
* @return string
*/
public function encodePassword($raw, $salt)
{
$defaultEncoder = $this->getEncoder();
$encoded = $defaultEncoder->encodePassword($raw, $salt);
return $encoded;
}
/**
* @return BCryptPasswordEncoder|MessageDigestPasswordEncoder|PlaintextPasswordEncoder
*/
private function getEncoder()
{
switch ($this->method) {
case 'none':
$defaultEncoder = new PlaintextPasswordEncoder();
@ -36,22 +54,8 @@ class Encoder implements PasswordEncoderInterface
$defaultEncoder = new MessageDigestPasswordEncoder($this->method, false, 1);
break;
}
$this->defaultEncoder = $defaultEncoder;
}
/**
* @param string $raw
* @param string $salt
*
* @return string
*/
public function encodePassword($raw, $salt)
{
if ($this->method === 'bcrypt') {
$salt = null;
}
return $this->defaultEncoder->encodePassword($raw, $salt);
return $defaultEncoder;
}
/**
@ -62,10 +66,11 @@ class Encoder implements PasswordEncoderInterface
*/
public function isPasswordValid($encoded, $raw, $salt)
{
if ($this->method === 'bcrypt') {
$salt = null;
if ($this->isPasswordTooLong($raw)) {
return false;
}
return $this->defaultEncoder->isPasswordValid($encoded, $raw, $salt);
$encoder = $this->getEncoder();
return $encoder->isPasswordValid($encoded, $raw, $salt);
}
}

@ -0,0 +1,69 @@
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\UserBundle\Security;
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseFOSUBProvider;
use Symfony\Component\Security\Core\User\UserInterface;
class FOSUBUserProvider extends BaseFOSUBProvider
{
/**
* {@inheritDoc}
*/
public function connect(UserInterface $user, UserResponseInterface $response)
{
$property = $this->getProperty($response);
$username = $response->getUsername();
//on connect - get the access token and the user ID
$service = $response->getResourceOwner()->getName();
$setter = 'set'.ucfirst($service);
$setterId = $setter.'Id';
$setter_token = $setter.'AccessToken';
//we "disconnect" previously connected users
if (null !== $previousUser = $this->userManager->findUserBy(array($property => $username))) {
$previousUser->$setterId(null);
$previousUser->$setter_token(null);
$this->userManager->updateUser($previousUser);
}
// We connect current user
$user->$setterId($username);
$user->$setter_token($response->getAccessToken());
$this->userManager->updateUser($user);
}
/**
* {@inheritdoc}
*/
public function loadUserByOAuthUserResponse(UserResponseInterface $response)
{
$username = $response->getUsername();
$user = $this->userManager->findUserBy(array($this->getProperty($response) => $username));
// User creation
if (null === $user) {
$service = $response->getResourceOwner()->getName();
$setter = 'set'.ucfirst($service);
$setterId = $setter.'Id';
$setterToken = $setter.'AccessToken';
// create new user here
$user = $this->userManager->createUser();
$user->$setterId($username);
$user->$setterToken($response->getAccessToken());
//I have set all requested data with the user's username
//modify here with relevant data
$user->setUsername($username);
$user->setEmail($username);
$user->setPassword($username);
$user->setEnabled(true);
$this->userManager->updateUser($user);
return $user;
}
//if user exists - go with the HWIOAuth way
$user = parent::loadUserByOAuthUserResponse($response);
$serviceName = $response->getResourceOwner()->getName();
$setter = 'set' . ucfirst($serviceName) . 'AccessToken';
//update access token
$user->$setter($response->getAccessToken());
return $user;
}
}
Loading…
Cancel
Save