-<?php namespace Tests;
+<?php namespace Tests\Auth;
+use BookStack\Auth\Access\LdapService;
use BookStack\Auth\Role;
use BookStack\Auth\Access\Ldap;
use BookStack\Auth\User;
use Mockery\MockInterface;
+use Tests\BrowserKitTest;
class LdapTest extends BrowserKitTest
{
{
parent::setUp();
if (!defined('LDAP_OPT_REFERRALS')) define('LDAP_OPT_REFERRALS', 1);
- app('config')->set([
+ config()->set([
'auth.method' => 'ldap',
'auth.defaults.guard' => 'ldap',
'services.ldap.base_dn' => 'dc=ldap,dc=local',
$resp = $this->post('/register');
$this->assertPermissionError($resp);
}
+
+ public function test_dump_user_details_option_works()
+ {
+ config()->set(['services.ldap.dump_user_details' => true]);
+
+ $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId);
+ $this->mockLdap->shouldReceive('setVersion')->once();
+ $this->mockLdap->shouldReceive('setOption')->times(1);
+ $this->mockLdap->shouldReceive('searchAndGetEntries')->times(1)
+ ->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')]
+ ]]);
+ $this->mockLdap->shouldReceive('bind')->times(1)->andReturn(true);
+ $this->mockEscapes(1);
+
+ $this->post('/login', [
+ 'username' => $this->mockUser->name,
+ 'password' => $this->mockUser->password,
+ ]);
+ $this->seeJsonStructure([
+ 'details_from_ldap' => [],
+ 'details_bookstack_parsed' => [],
+ ]);
+ }
+
+ public function test_ldap_attributes_can_be_binary_decoded_if_marked()
+ {
+ config()->set(['services.ldap.id_attribute' => 'BIN;uid']);
+ $ldapService = app()->make(LdapService::class);
+
+ $this->mockLdap->shouldReceive('connect')->once()->andReturn($this->resourceId);
+ $this->mockLdap->shouldReceive('setVersion')->once();
+ $this->mockLdap->shouldReceive('setOption')->times(1);
+ $this->mockLdap->shouldReceive('searchAndGetEntries')->times(1)
+ ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), ['cn', 'dn', 'uid', 'mail', 'cn'])
+ ->andReturn(['count' => 1, 0 => [
+ 'uid' => [hex2bin('FFF8F7')],
+ 'cn' => [$this->mockUser->name],
+ 'dn' => ['dc=test' . config('services.ldap.base_dn')]
+ ]]);
+ $this->mockLdap->shouldReceive('bind')->times(1)->andReturn(true);
+ $this->mockEscapes(1);
+
+ $details = $ldapService->getUserDetails('test');
+ $this->assertEquals('fff8f7', $details['uid']);
+ }
}