]> BookStack Code Mirror - bookstack/commitdiff
Made ldap auth use the 'dn' if a 'uid' is not present.
authorDan Brown <redacted>
Mon, 8 Feb 2016 19:45:01 +0000 (19:45 +0000)
committerDan Brown <redacted>
Mon, 8 Feb 2016 19:45:01 +0000 (19:45 +0000)
Fixes #56

app/Services/LdapService.php
database/migrations/2016_01_11_210908_add_external_auth_to_users.php
tests/Auth/LdapTest.php

index 84883b09a20fa9422956578fa48d6909e7f14682..3d89e1e44c7c33f1d97b5591a9342766dd6e41d0 100644 (file)
@@ -46,7 +46,7 @@ class LdapService
 
         $user = $users[0];
         return [
-            'uid'   => $user['uid'][0],
+            'uid'   => (isset($user['uid'])) ? $user['uid'][0] : $user['dn'],
             'name'  => $user['cn'][0],
             'dn'    => $user['dn'],
             'email' => (isset($user['mail'])) ? $user['mail'][0] : null
index dda8f3d7435ff1a08f6339579cefa0fb04bc529c..b7663054c2842bf20847846b46a9083f4776883f 100644 (file)
@@ -28,4 +28,4 @@ class AddExternalAuthToUsers extends Migration
             $table->dropColumn('external_auth_id');
         });
     }
-}
+}
\ No newline at end of file
index 14f2f8196d693834192f1285b1ee2adb379bf6f1..d80b8d50d03cbad6b2498f39417e2401eb99e148 100644 (file)
@@ -28,7 +28,7 @@ class LdapTest extends \TestCase
             ->andReturn(['count' => 1, 0 => [
                 'uid' => [$this->mockUser->name],
                 'cn' => [$this->mockUser->name],
-                'dn'    => ['dc=test'.config('services.ldap.base_dn')]
+                'dn' => ['dc=test' . config('services.ldap.base_dn')]
             ]]);
         $this->mockLdap->shouldReceive('bind')->times(6)->andReturn(true);
 
@@ -46,6 +46,30 @@ class LdapTest extends \TestCase
             ->seeInDatabase('users', ['email' => $this->mockUser->email, 'email_confirmed' => 1, 'external_auth_id' => $this->mockUser->name]);
     }
 
+    public function test_login_works_when_no_uid_provided_by_ldap_server()
+    {
+        $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId);
+        $this->mockLdap->shouldReceive('setOption')->once();
+        $ldapDn = 'cn=test-user,dc=test' . config('services.ldap.base_dn');
+        $this->mockLdap->shouldReceive('searchAndGetEntries')->times(2)
+            ->with($this->resourceId, config('services.ldap.base_dn'), Mockery::type('string'), Mockery::type('array'))
+            ->andReturn(['count' => 1, 0 => [
+                'cn' => [$this->mockUser->name],
+                'dn' => $ldapDn,
+                'mail' => [$this->mockUser->email]
+            ]]);
+        $this->mockLdap->shouldReceive('bind')->times(3)->andReturn(true);
+
+        $this->visit('/login')
+            ->see('Username')
+            ->type($this->mockUser->name, '#username')
+            ->type($this->mockUser->password, '#password')
+            ->press('Sign In')
+            ->seePageIs('/')
+            ->see($this->mockUser->name)
+            ->seeInDatabase('users', ['email' => $this->mockUser->email, 'email_confirmed' => 1, 'external_auth_id' => $ldapDn]);
+    }
+
     public function test_initial_incorrect_details()
     {
         $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId);
@@ -55,7 +79,7 @@ class LdapTest extends \TestCase
             ->andReturn(['count' => 1, 0 => [
                 'uid' => [$this->mockUser->name],
                 'cn' => [$this->mockUser->name],
-                'dn'    => ['dc=test'.config('services.ldap.base_dn')]
+                'dn' => ['dc=test' . config('services.ldap.base_dn')]
             ]]);
         $this->mockLdap->shouldReceive('bind')->times(3)->andReturn(true, true, false);
 
Morty Proxy This is a proxified and sanitized view of the page, visit original site.