AuthenticatorTest.php 3.3 KB

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