WindowsAuthenticateTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace Adldap\Laravel\Tests;
  3. use Adldap\Laravel\Facades\Resolver;
  4. use Adldap\Laravel\Middleware\WindowsAuthenticate;
  5. use Adldap\Laravel\Tests\Models\TestUser;
  6. use Adldap\Laravel\Validation\Rules\DenyTrashed;
  7. use Adldap\Query\Builder;
  8. use Mockery as m;
  9. class WindowsAuthenticateTest extends DatabaseTestCase
  10. {
  11. /** @test */
  12. public function middleware_authenticates_users()
  13. {
  14. $request = app('request');
  15. $request->server->set('AUTH_USER', 'jdoe');
  16. $user = $this->makeLdapUser([
  17. 'objectguid' => ['cc07cacc-5d9d-fa40-a9fb-3a4d50a172b0'],
  18. 'cn' => ['John Doe'],
  19. 'userprincipalname' => ['jdoe@email.com'],
  20. 'samaccountname' => ['jdoe'],
  21. ]);
  22. $query = m::mock(Builder::class);
  23. $query
  24. ->shouldReceive('whereEquals')->once()->withArgs(['samaccountname', 'jdoe'])->andReturn($query)
  25. ->shouldReceive('first')->once()->andReturn($user);
  26. Resolver::shouldReceive('query')->once()->andReturn($query)
  27. ->shouldReceive('getDatabaseIdColumn')->twice()->andReturn('objectguid')
  28. ->shouldReceive('getDatabaseUsernameColumn')->once()->andReturn('email')
  29. ->shouldReceive('getLdapDiscoveryAttribute')->once()->andReturn('userprincipalname')
  30. ->shouldReceive('byModel')->once()->andReturn($user);
  31. app(WindowsAuthenticate::class)->handle($request, function () {
  32. });
  33. $authenticated = auth()->user();
  34. $this->assertEquals($user, $authenticated->ldap);
  35. $this->assertEquals('John Doe', $authenticated->name);
  36. $this->assertEquals('jdoe@email.com', $authenticated->email);
  37. $this->assertNotEmpty($authenticated->remember_token);
  38. }
  39. /** @test */
  40. public function middleware_continues_request_when_user_is_not_found()
  41. {
  42. $request = app('request');
  43. $request->server->set('AUTH_USER', 'jdoe');
  44. $query = m::mock(Builder::class);
  45. $query
  46. ->shouldReceive('whereEquals')->once()->withArgs(['samaccountname', 'jdoe'])->andReturn($query)
  47. ->shouldReceive('first')->once()->andReturn(null);
  48. Resolver::shouldReceive('query')->once()->andReturn($query);
  49. app(WindowsAuthenticate::class)->handle($request, function () {
  50. });
  51. $this->assertNull(auth()->user());
  52. }
  53. /** @test */
  54. public function middleware_validates_authenticating_users()
  55. {
  56. // Deny deleted users from authenticating.
  57. config()->set('ldap_auth.rules', [DenyTrashed::class]);
  58. // Create the deleted user.
  59. tap(new TestUser(), function ($user) {
  60. $user->name = 'John Doe';
  61. $user->email = 'jdoe@email.com';
  62. $user->password = 'secret';
  63. $user->deleted_at = now();
  64. $user->save();
  65. });
  66. $request = app('request');
  67. $request->server->set('AUTH_USER', 'jdoe');
  68. $user = $this->makeLdapUser([
  69. 'objectguid' => ['cc07cacc-5d9d-fa40-a9fb-3a4d50a172b0'],
  70. 'cn' => ['John Doe'],
  71. 'userprincipalname' => ['jdoe@email.com'],
  72. 'samaccountname' => ['jdoe'],
  73. ]);
  74. $query = m::mock(Builder::class);
  75. $query
  76. ->shouldReceive('whereEquals')->once()->withArgs(['samaccountname', 'jdoe'])->andReturn($query)
  77. ->shouldReceive('first')->once()->andReturn($user);
  78. Resolver::shouldReceive('query')->once()->andReturn($query)
  79. ->shouldReceive('getDatabaseIdColumn')->twice()->andReturn('objectguid')
  80. ->shouldReceive('getDatabaseUsernameColumn')->once()->andReturn('email')
  81. ->shouldReceive('getLdapDiscoveryAttribute')->once()->andReturn('userprincipalname');
  82. app(WindowsAuthenticate::class)->handle($request, function () {
  83. });
  84. $this->assertNull(auth()->user());
  85. }
  86. }