8000 Fix refresh method of LdapUserProvider · symfony/symfony@75a3d59 · GitHub
[go: up one dir, main page]

Skip to content

Commit 75a3d59

Browse files
committed
Fix refresh method of LdapUserProvider
1 parent b681e93 commit 75a3d59

File tree

3 files changed

+69
-20
lines changed

3 files changed

+69
-20
lines changed

src/Symfony/Component/Ldap/Security/LdapUserProvider.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212 10000
namespace Symfony\Component\Ldap\Security;
1313

14+
use Doctrine\Common\Persistence\ManagerRegistry;
1415
use Symfony\Component\Ldap\Entry;
1516
use Symfony\Component\Ldap\Exception\ConnectionException;
1617
use Symfony\Component\Ldap\Exception\ExceptionInterface;
@@ -31,6 +32,9 @@
3132
*/
3233
class LdapUserProvider implements UserProviderInterface, PasswordUpgraderInterface
3334
{
35+
const IDENTIFIER = 'username';
36+
37+
private $managerRegistry;
3438
private $ldap;
3539
private $baseDn;
3640
private $searchDn;
@@ -41,7 +45,7 @@ class LdapUserProvider implements UserProviderInterface, PasswordUpgraderInterfa
4145
private $passwordAttribute;
4246
private $extraFields;
4347

44-
public function __construct(LdapInterface $ldap, string $baseDn, string $searchDn = null, string $searchPassword = null, array $defaultRoles = [], string $uidKey = null, string $filter = null, string $passwordAttribute = null, array $extraFields = [])
48+
public function __construct(ManagerRegistry $managerRegistry, LdapInterface $ldap, string $baseDn, string $searchDn = null, string $searchPassword = null, array $defaultRoles = [], string $uidKey = null, string $filter = null, string $passwordAttribute = null, array $extraFields = [])
4549
{
4650
if (null === $uidKey) {
4751
$uidKey = 'sAMAccountName';
@@ -51,6 +55,7 @@ public function __construct(LdapInterface $ldap, string $baseDn, string $searchD
5155
$filter = '({uid_key}={username})';
5256
}
5357

58+
$this->managerRegistry = $managerRegistry;
5459
$this->ldap = $ldap;
5560
$this->baseDn = $baseDn;
5661
$this->searchDn = $searchDn;
@@ -108,7 +113,10 @@ public function refreshUser(UserInterface $user)
108113
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', \get_class($user)));
109114
}
110115

111-
return new LdapUser($user->getEntry(), $user->getUsername(), $user->getPassword(), $user->getRoles());
116+
return $this
117+
->managerRegistry
118+
->getRepository(\get_class($user))
119+
->findOneBy([self::IDENTIFIER => $user->getUsername()]);
112120
}
113121

114122
/**

src/Symfony/Component/Ldap/Tests/Security/LdapUserProviderTest.php

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public function testLoadUserByUsernameFailsIfCantConnectToLdap()
3636
->willThrowException(new ConnectionException())
3737
;
3838

39-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
39+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
40+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
4041
$provider->loadUserByUsername('foo');
4142
}
4243

@@ -68,7 +69,8 @@ public function testLoadUserByUsernameFailsIfNoLdapEntries()
6869
->willReturn($query)
6970
;
7071

71-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
72+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
73+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
7274
$provider->loadUserByUsername('foo');
7375
}
7476

@@ -100,7 +102,8 @@ public function testLoadUserByUsernameFailsIfMoreThanOneLdapEntry()
100102
->willReturn($query)
101103
;
102104

103-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
105+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
106+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
104107
$provider->loadUserByUsername('foo');
105108
}
106109

@@ -141,7 +144,8 @@ public function testLoadUserByUsernameFailsIfMoreThanOneLdapPasswordsInEntry()
141144
->willReturn($query)
142145
;
143146

144-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword');
147+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
148+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword');
145149
$this->assertInstanceOf(LdapUser::class, $provider->loadUserByUsername('foo'));
146150
}
147151

@@ -177,7 +181,8 @@ public function testLoadUserByUsernameShouldNotFailIfEntryHasNoUidKeyAttribute()
177181
->willReturn($query)
178182
;
179183

180-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})');
184+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
185+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})');
181186
$this->assertInstanceOf(LdapUser::class, $provider->loadUserByUsername('foo'));
182187
}
183188

@@ -215,7 +220,8 @@ public function testLoadUserByUsernameFailsIfEntryHasNoPasswordAttribute()
215220
->willReturn($query)
216221
;
217222

218-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword');
223+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
224+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword');
219225
$this->assertInstanceOf(LdapUser::class, $provider->loadUserByUsername('foo'));
220226
}
221227

@@ -251,7 +257,8 @@ public function testLoadUserByUsernameIsSuccessfulWithoutPasswordAttribute()
251257
->willReturn($query)
252258
;
253259

254-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
260+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
261+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
255262
$this->assertInstanceOf(LdapUser::class, $provider->loadUserByUsername('foo'));
256263
}
257264

@@ -287,7 +294,8 @@ public function testLoadUserByUsernameIsSuccessfulWithoutPasswordAttributeAndWro
287294
->willReturn($query)
288295
;
289296

290-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
297+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
298+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
291299
$this->assertSame('foo', $provider->loadUserByUsername('Foo')->getUsername());
292300
}
293301

@@ -327,7 +335,31 @@ public function testLoadUserByUsernameIsSuccessfulWithPasswordAttribute()
327335
->willReturn($query)
328336
;
329337

330-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword', ['email']);
338+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
339+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword', ['email']);
331340
$this->assertInstanceOf(LdapUser::class, $provider->loadUserByUsername('foo'));
332341
}
342+
343+
private function getManager($em, $name = null)
344+
{
345+
$manager = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
346+
$manager->expects($this->any())
347+
->method('getManager')
348+
->with($this->equalTo($name))
349+
->willReturn($em);
350+
351+
return $manager;
352+
}
353+
354+
private function getObjectManager($repository)
355+
{
356+
$em = $this->getMockBuilder('\Doctrine\Common\Persistence\ObjectManager')
357+
->setMethods(['getClassMetadata', 'getRepository'])
358+
->getMockForAbstractClass();
359+
$em->expects($this->any())
360+
->method('getRepository')
361+
->willReturn($repository);
362+
363+
return $em;
364+
}
333365
}

src/Symfony/Component/Security/Core/Tests/User/LdapUserProviderTest.php

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public function testLoadUserByUsernameFailsIfCantConnectToLdap()
3535
->willThrowException(new ConnectionException())
3636
;
3737

38-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
38+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
39+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
3940
$provider->loadUserByUsername('foo');
4041
}
4142

@@ -66,7 +67,8 @@ public function testLoadUserByUsernameFailsIfNoLdapEntries()
6667
->willReturn($query)
6768
;
6869

69-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
70+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
71+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
7072
$provider->loadUserByUsername('foo');
7173
}
7274

@@ -97,7 +99,8 @@ public function testLoadUserByUsernameFailsIfMoreThanOneLdapEntry()
9799
->willReturn($query)
98100
;
99101

100-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
102+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
103+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
101104
$provider->loadUserByUsername('foo');
102105
}
103106

@@ -138,7 +141,8 @@ public function testLoadUserByUsernameFailsIfMoreThanOneLdapPasswordsInEntry()
138141
->willReturn($query)
139142
;
140143

141-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword');
144+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
145+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword');
142146
$this->assertInstanceOf(
143147
'Symfony\Component\Security\Core\User\User',
144148
$provider->loadUserByUsername('foo')
@@ -177,7 +181,8 @@ public function testLoadUserByUsernameShouldNotFailIfEntryHasNoUidKeyAttribute()
177181
->willReturn($query)
178182
;
179183

180-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})');
184+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
185+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})');
181186
$this->assertInstanceOf(
182187
'Symfony\Component\Security\Core\User\User',
183188
$provider->loadUserByUsername('foo')
@@ -220,7 +225,8 @@ public function testLoadUserByUsernameFailsIfEntryHasNoPasswordAttribute()
220225
->willReturn($query)
221226
;
222227

223-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword');
228+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
229+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword');
224230
$this->assertInstanceOf(
225231
'Symfony\Component\Security\Core\User\User',
226232
$provider->loadUserByUsername('foo')
@@ -262,7 +268,8 @@ public function testLoadUserByUsernameIsSuccessfulWithoutPasswordAttribute()
262268
->willReturn($query)
263269
;
264270

265-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
271+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
272+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
266273
$this->assertInstanceOf(
267274
'Symfony\Component\Security\Core\User\User',
268275
$provider->loadUserByUsername('foo')
@@ -304,7 +311,8 @@ public function testLoadUserByUsernameIsSuccessfulWithoutPasswordAttributeAndWro
304311
->willReturn($query)
305312
;
306313

307-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com');
314+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
315+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com');
308316
$this->assertSame('foo', $provider->loadUserByUsername('Foo')->getUsername());
309317
}
310318

@@ -345,7 +353,8 @@ public function testLoadUserByUsernameIsSuccessfulWithPasswordAttribute()
345353
->willReturn($query)
346354
;
347355

348-
$provider = new LdapUserProvider($ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword', ['email']);
356+
$managerRegistry = $this->getMockBuilder('Doctrine\Common\Persistence\ManagerRegistry')->getMock();
357+
$provider = new LdapUserProvider($managerRegistry, $ldap, 'ou=MyBusiness,dc=symfony,dc=com', null, null, [], 'sAMAccountName', '({uid_key}={username})', 'userpassword', ['email']);
349358
$this->assertInstanceOf(
350359
'Symfony\Component\Security\Core\User\User',
351360
$provider->loadUserByUsername('foo')

0 commit comments

Comments
 (0)
0