AuthenticatorTest.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace fphammerle\yii2\auth\clientcert\tests;
  3. use \fphammerle\yii2\auth\clientcert\Authenticator;
  4. class AuthenticatorTest extends TestCase
  5. {
  6. protected $alice;
  7. protected $bob;
  8. protected function setUp()
  9. {
  10. $this->mockApplication();
  11. $this->createSubjectTable();
  12. $this->alice = $this->createUser('alice');
  13. $this->bob = $this->createUser('bob');
  14. $this->createSubject($this->alice, 'CN=Alice,C=AT');
  15. $this->createSubject($this->alice, 'CN=Alice,O=Office,C=AT');
  16. $this->createSubject($this->bob, 'CN=Bob,C=AT');
  17. $this->assertNull($this->getIdentity());
  18. }
  19. public function testLoginByDN()
  20. {
  21. $a = new Authenticator;
  22. $this->assertNull($this->getIdentity());
  23. $u = $a->loginByDistinguishedName('CN=Alice,C=AT');
  24. $this->assertEquals($this->alice->id, $u->id);
  25. $this->assertEquals($this->alice->id, $this->getIdentity()->id);
  26. $u = $a->loginByDistinguishedName('CN=Alice,O=Secret,C=AT');
  27. $this->assertNull($u);
  28. $this->assertEquals($this->alice->id, $this->getIdentity()->id);
  29. $u = $a->loginByDistinguishedName('CN=Bob,C=AT');
  30. $this->assertEquals($this->bob->id, $u->id);
  31. $this->assertEquals($this->bob->id, $this->getIdentity()->id);
  32. $u = $a->loginByDistinguishedName('');
  33. $this->assertNull($u);
  34. $this->assertEquals($this->bob->id, $this->getIdentity()->id);
  35. $u = $a->loginByDistinguishedName(NULL);
  36. $this->assertNull($u);
  37. $this->assertEquals($this->bob->id, $this->getIdentity()->id);
  38. }
  39. /**
  40. * @dataProvider loginByClientCertProvider
  41. */
  42. public function testLoginByClientCert($request_params, $username)
  43. {
  44. $_SERVER = $request_params;
  45. $a = new Authenticator;
  46. $this->assertNull($this->getIdentity());
  47. $u = $a->loginByClientCertficiate();
  48. if($username) {
  49. $this->assertEquals($username, $this->getIdentity()->username);
  50. $this->assertEquals($username, $u->username);
  51. } else {
  52. $this->assertNull($u);
  53. $this->assertNull($this->getIdentity());
  54. }
  55. }
  56. public function loginByClientCertProvider()
  57. {
  58. return [
  59. [[], null],
  60. [['SSL_CLIENT_S_DN' => 'CN=Alice,C=AT'], null],
  61. [['SSL_CLIENT_VERIFY' => 'FAILED', 'SSL_CLIENT_S_DN' => 'CN=Alice,C=AT'], null],
  62. [['SSL_CLIENT_VERIFY' => 'NONE', 'SSL_CLIENT_S_DN' => 'CN=Alice,C=AT'], null],
  63. [['SSL_CLIENT_VERIFY' => 'SUCCESS', 'SSL_CLIENT_S_DN' => null], null],
  64. [['SSL_CLIENT_VERIFY' => 'SUCCESS', 'SSL_CLIENT_S_DN' => ''], null],
  65. [['SSL_CLIENT_VERIFY' => 'SUCCESS', 'SSL_CLIENT_S_DN' => 'CN=Alice,C=AT'], 'alice'],
  66. [['SSL_CLIENT_VERIFY' => 'SUCCESS', 'SSL_CLIENT_S_DN' => 'CN=Alice,O=Office,C=AT'], 'alice'],
  67. [['SSL_CLIENT_VERIFY' => 'SUCCESS', 'SSL_CLIENT_S_DN' => 'CN=Bob,C=AT'], 'bob'],
  68. ];
  69. }
  70. }