+
+ public function test_new_ldap_user_login_with_already_used_email_address_shows_error_message_to_user()
+ {
+ $this->commonLdapMocks(1, 1, 2, 4, 2);
+ $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2)
+ ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array'))
+ ->andReturn(['count' => 1, 0 => [
+ 'uid' => [$this->mockUser->name],
+ 'cn' => [$this->mockUser->name],
+ 'dn' => ['dc=test' . config('services.ldap.base_dn')],
+ ]], ['count' => 1, 0 => [
+ 'uid' => ['Barry'],
+ 'cn' => ['Scott'],
+ 'dn' => ['dc=bscott' . config('services.ldap.base_dn')],
+ ]]);
+
+ // First user login
+ $this->mockUserLogin()->assertRedirect('/');
+
+ // Second user login
+ auth()->logout();
+ $resp = $this->followingRedirects()->post('/login', ['username' => 'bscott', 'password' => 'pass']);
+ $resp->assertSee('A user with the email
[email protected] already exists but with different credentials');
+ }
+
+ public function test_login_with_email_confirmation_required_maps_groups_but_shows_confirmation_screen()
+ {
+ $roleToReceive = Role::factory()->create(['display_name' => 'LdapTester']);
+ $user = User::factory()->make();
+ setting()->put('registration-confirmation', 'true');
+
+ app('config')->set([
+ 'services.ldap.user_to_groups' => true,
+ 'services.ldap.group_attribute' => 'memberOf',
+ 'services.ldap.remove_from_groups' => true,
+ ]);
+
+ $this->commonLdapMocks(1, 1, 6, 8, 6, 4);
+ $this->mockLdap->shouldReceive('searchAndGetEntries')
+ ->times(6)
+ ->andReturn(['count' => 1, 0 => [
+ 'uid' => [$user->name],
+ 'cn' => [$user->name],
+ 'dn' => ['dc=test' . config('services.ldap.base_dn')],
+ 'mail' => [$user->email],
+ 'memberof' => [
+ 'count' => 1,
+ 0 => 'cn=ldaptester,ou=groups,dc=example,dc=com',
+ ],
+ ]]);
+
+ $login = $this->followingRedirects()->mockUserLogin();
+ $login->assertSee('Thanks for registering!');
+ $this->assertDatabaseHas('users', [
+ 'email' => $user->email,
+ 'email_confirmed' => false,
+ ]);
+
+ $user = User::query()->where('email', '=', $user->email)->first();
+ $this->assertDatabaseHas('role_user', [
+ 'user_id' => $user->id,
+ 'role_id' => $roleToReceive->id,
+ ]);
+
+ $this->assertNull(auth()->user());
+
+ $homePage = $this->get('/');
+ $homePage->assertRedirect('/login');
+
+ $login = $this->followingRedirects()->mockUserLogin();
+ $login->assertSee('Email Address Not Confirmed');
+ }
+
+ public function test_failed_logins_are_logged_when_message_configured()
+ {
+ $log = $this->withTestLogger();
+ config()->set(['logging.failed_login.message' => 'Failed login for %u']);
+ $this->runFailedAuthLogin();
+ $this->assertTrue($log->hasWarningThatContains('Failed login for timmyjenkins'));
+ }
+
+ public function test_thumbnail_attribute_used_as_user_avatar_if_configured()
+ {
+ config()->set(['services.ldap.thumbnail_attribute' => 'jpegPhoto']);
+
+ $this->commonLdapMocks(1, 1, 1, 2, 1);
+ $ldapDn = 'cn=test-user,dc=test' . config('services.ldap.base_dn');
+ $this->mockLdap->shouldReceive('searchAndGetEntries')->times(1)
+ ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array'))
+ ->andReturn(['count' => 1, 0 => [
+ 'cn' => [$this->mockUser->name],
+ 'dn' => $ldapDn,
+ 'jpegphoto' => [base64_decode('/9j/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8Q
+EBEQCgwSExIQEw8QEBD/yQALCAABAAEBAREA/8wABgAQEAX/2gAIAQEAAD8A0s8g/9k=')],
+ 'mail' => [$this->mockUser->email],
+ ]]);
+
+ $this->mockUserLogin()
+ ->assertRedirect('/');
+
+ $user = User::query()->where('email', '=', $this->mockUser->email)->first();
+ $this->assertNotNull($user->avatar);
+ $this->assertEquals('8c90748342f19b195b9c6b4eff742ded', md5_file(public_path($user->avatar->path)));
+ }