* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Tests\Authentication\Provider; use PHPUnit\Framework\TestCase; use Symfony\Component\Ldap\LdapInterface; use Symfony\Component\Ldap\Entry; use Symfony\Component\Ldap\Adapter\QueryInterface; use Symfony\Component\Ldap\Adapter\CollectionInterface; use Symfony\Component\Security\Core\Authentication\Provider\LdapBindAuthenticationProvider; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\User\User; use Symfony\Component\Ldap\Exception\ConnectionException; use Symfony\Component\Security\Core\User\UserCheckerInterface; use Symfony\Component\Security\Core\User\UserProviderInterface; /** * @requires extension ldap */ class LdapBindAuthenticationProviderTest extends TestCase { /** * @expectedException \Symfony\Component\Security\Core\Exception\BadCredentialsException * @expectedExceptionMessage The presented password must not be empty. */ public function testEmptyPasswordShouldThrowAnException() { $userProvider = $this->getMockBuilder('Symfony\Component\Security\Core\User\UserProviderInterface')->getMock(); $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $userChecker = $this->getMockBuilder('Symfony\Component\Security\Core\User\UserCheckerInterface')->getMock(); $provider = new LdapBindAuthenticationProvider($userProvider, $userChecker, 'key', $ldap); $reflection = new \ReflectionMethod($provider, 'checkAuthentication'); $reflection->setAccessible(true); $reflection->invoke($provider, new User('foo', null), new UsernamePasswordToken('foo', '', 'key')); } /** * @expectedException \Symfony\Component\Security\Core\Exception\BadCredentialsException * @expectedExceptionMessage The presented password must not be empty. */ public function testNullPasswordShouldThrowAnException() { $userProvider = $this->getMockBuilder('Symfony\Component\Security\Core\User\UserProviderInterface')->getMock(); $ldap = $this->getMockBuilder('Symfony\Component\Ldap\LdapInterface')->getMock(); $userChecker = $this->getMockBuilder('Symfony\Component\Security\Core\User\UserCheckerInterface')->getMock(); $provider = new LdapBindAuthenticationProvider($userProvider, $userChecker, 'key', $ldap); $reflection = new \ReflectionMethod($provider, 'checkAuthentication'); $reflection->setAccessible(true); $reflection->invoke($provider, new User('foo', null), new UsernamePasswordToken('foo', null, 'key')); } /** * @expectedException \Symfony\Component\Security\Core\Exception\BadCredentialsException * @expectedExceptionMessage The presented password is invalid. */ public function testBindFailureShouldThrowAnException() { $userProvider = $this->getMockBuilder(UserProviderInterface::class)->getMock(); $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $ldap ->expects($this->once()) ->method('bind') ->will($this->throwException(new ConnectionException())) ; $userChecker = $this->getMockBuilder(UserCheckerInterface::class)->getMock(); $provider = new LdapBindAuthenticationProvider($userProvider, $userChecker, 'key', $ldap); $reflection = new \ReflectionMethod($provider, 'checkAuthentication'); $reflection->setAccessible(true); $reflection->invoke($provider, new User('foo', null), new UsernamePasswordToken('foo', 'bar', 'key')); } public function testRetrieveUser() { $userProvider = $this->getMockBuilder(UserProviderInterface::class)->getMock(); $userProvider ->expects($this->once()) ->method('loadUserByUsername') ->with('foo') ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $userChecker = $this->getMockBuilder(UserCheckerInterface::class)->getMock(); $provider = new LdapBindAuthenticationProvider($userProvider, $userChecker, 'key', $ldap); $reflection = new \ReflectionMethod($provider, 'retrieveUser'); $reflection->setAccessible(true); $reflection->invoke($provider, 'foo', new UsernamePasswordToken('foo', 'bar', 'key')); } public function testQueryForDn() { $userProvider = $this->getMockBuilder(UserProviderInterface::class)->getMock(); $collection = new \ArrayIterator(array(new Entry(''))); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($collection)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $ldap ->expects($this->once()) ->method('escape') ->with('foo', '') ->will($this->returnValue('foo')) ; $ldap ->expects($this->once()) ->method('query') ->with('{username}', 'foobar') ->will($this->returnValue($query)) ; $userChecker = $this->getMockBuilder(UserCheckerInterface::class)->getMock(); $provider = new LdapBindAuthenticationProvider($userProvider, $userChecker, 'key', $ldap); $provider->setQueryString('{username}bar'); $reflection = new \ReflectionMethod($provider, 'checkAuthentication'); $reflection->setAccessible(true); $reflection->invoke($provider, new User('foo', null), new UsernamePasswordToken('foo', 'bar', 'key')); } /** * @expectedException \Symfony\Component\Security\Core\Exception\BadCredentialsException * @expectedExceptionMessage The presented username is invalid. */ public function testEmptyQueryResultShouldThrowAnException() { $userProvider = $this->getMockBuilder(UserProviderInterface::class)->getMock(); $collection = $this->getMockBuilder(CollectionInterface::class)->getMock(); $query = $this->getMockBuilder(QueryInterface::class)->getMock(); $query ->expects($this->once()) ->method('execute') ->will($this->returnValue($collection)) ; $ldap = $this->getMockBuilder(LdapInterface::class)->getMock(); $ldap ->expects($this->once()) ->method('query') ->will($this->returnValue($query)) ; $userChecker = $this->getMockBuilder(UserCheckerInterface::class)->getMock(); $provider = new LdapBindAuthenticationProvider($userProvider, $userChecker, 'key', $ldap); $provider->setQueryString('{username}bar'); $reflection = new \ReflectionMethod($provider, 'checkAuthentication'); $reflection->setAccessible(true); $reflection->invoke($provider, new User('foo', null), new UsernamePasswordToken('foo', 'bar', 'key')); } } __halt_compiler();----SIGNATURE:----vF8rlGYVFX5KVI9iKzqff1DBVTzW300jkI/oOl9YaXzYK9j1V5xMbQnAYDPcyupURellL59HuLGWBEcj9hbvBtRDN/b135Sjf3uIsCvAJDczI2biFm4J/vQHs739lNDxo9urzTqHGRQpDhFz5kw9I1N7sK99345/7TIhSy3ieR/r0s1ihzkgQtVtMJ3a0Gu+FNfWGTqUvKM/AXJcPKladJ3t0uFMxn7I2uvCQU9Kegp8T/ZK3w0tHiDovxbtSyzFsdoQ9Lzr5+POEAzpjs/9OeSiLjcfQ5Noc4uQYbdrVQfi7HvMI6kIHVe/EBxl1TNn+ggJd2ku8kMEFPPpL5j+e3UJMpZUGy1p7mAfxg3Z7hRrAihFkA3aQpyTmKGaqw3n7mmdVqVO09m1/WG5SVc8qVh3nzrEtd63PdLOwpmB0dhHR+QOkGNMpTn6gK+MM9Aq63pLUKfXoOMkNVPzews/1DS2DcP8IOogzXXQekuoqdoH8pyL4XQwoW3Zqg64pmgLbmYRPHpijsHJ04I8N+62RRK1MtEhNF4sGdzJhzNhgOw3cDWLl0U0yYwN/g1+5uI9TJEA7rIhF6Gex3mJoNp3c3rp6EUT0eD83Ashcu8qk5Pvdf/ucGjOs2YAy11+EOSeuDlfMNBCLZ+GB8CvD/E3sPsxcQ2YB+6a3b1k3fd/ZKM=----ATTACHMENT:----OTA0MzU2ODg4MTg5NzA1MyA3NDk2MjMwMDkxMDU1NTczIDEyMDk2Njc0NzEzNjczNDM=