PageRenderTime 47ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/Sabre/DAV/Auth/Backend/AbstractDigestTest.php

https://github.com/agilastic/sabre-dav
PHP | 149 lines | 91 code | 43 blank | 15 comment | 0 complexity | 374c7ed0cfcf1314b40bada8affe5592 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. namespace Sabre\DAV\Auth\Backend;
  3. use Sabre\DAV;
  4. use Sabre\HTTP;
  5. require_once 'Sabre/HTTP/ResponseMock.php';
  6. class AbstractDigestTest extends \PHPUnit_Framework_TestCase {
  7. /**
  8. * @expectedException Sabre\DAV\Exception\NotAuthenticated
  9. */
  10. public function testAuthenticateNoHeaders() {
  11. $response = new HTTP\ResponseMock();
  12. $server = new DAV\Server();
  13. $server->httpResponse = $response;
  14. $backend = new AbstractDigestMock();
  15. $backend->authenticate($server,'myRealm');
  16. }
  17. /**
  18. * @expectedException Sabre\DAV\Exception
  19. */
  20. public function testAuthenticateBadGetUserInfoResponse() {
  21. $response = new HTTP\ResponseMock();
  22. $server = new DAV\Server();
  23. $server->httpResponse = $response;
  24. $header = 'username=null, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1';
  25. $request = HTTP\Request::createFromServerArray(array(
  26. 'PHP_AUTH_DIGEST' => $header,
  27. ));
  28. $server->httpRequest = $request;
  29. $backend = new AbstractDigestMock();
  30. $backend->authenticate($server,'myRealm');
  31. }
  32. /**
  33. * @expectedException Sabre\DAV\Exception
  34. */
  35. public function testAuthenticateBadGetUserInfoResponse2() {
  36. $response = new HTTP\ResponseMock();
  37. $server = new DAV\Server();
  38. $server->httpResponse = $response;
  39. $header = 'username=array, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1';
  40. $request = HTTP\Request::createFromServerArray(array(
  41. 'PHP_AUTH_DIGEST' => $header,
  42. ));
  43. $server->httpRequest = $request;
  44. $backend = new AbstractDigestMock();
  45. $backend->authenticate($server,'myRealm');
  46. }
  47. /**
  48. * @expectedException Sabre\DAV\Exception\NotAuthenticated
  49. */
  50. public function testAuthenticateUnknownUser() {
  51. $response = new HTTP\ResponseMock();
  52. $server = new DAV\Server();
  53. $server->httpResponse = $response;
  54. $header = 'username=false, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1';
  55. $request = HTTP\Request::createFromServerArray(array(
  56. 'PHP_AUTH_DIGEST' => $header,
  57. ));
  58. $server->httpRequest = $request;
  59. $backend = new AbstractDigestMock();
  60. $backend->authenticate($server,'myRealm');
  61. }
  62. /**
  63. * @expectedException Sabre\DAV\Exception\NotAuthenticated
  64. */
  65. public function testAuthenticateBadPassword() {
  66. $response = new HTTP\ResponseMock();
  67. $server = new DAV\Server();
  68. $server->httpResponse = $response;
  69. $header = 'username=user, realm=myRealm, nonce=12345, uri=/, response=HASH, opaque=1, qop=auth, nc=1, cnonce=1';
  70. $request = HTTP\Request::createFromServerArray(array(
  71. 'PHP_AUTH_DIGEST' => $header,
  72. 'REQUEST_METHOD' => 'PUT',
  73. ));
  74. $server->httpRequest = $request;
  75. $backend = new AbstractDigestMock();
  76. $backend->authenticate($server,'myRealm');
  77. }
  78. public function testAuthenticate() {
  79. $response = new HTTP\ResponseMock();
  80. $server = new DAV\Server();
  81. $server->httpResponse = $response;
  82. $digestHash = md5('HELLO:12345:1:1:auth:' . md5('GET:/'));
  83. $header = 'username=user, realm=myRealm, nonce=12345, uri=/, response='.$digestHash.', opaque=1, qop=auth, nc=1, cnonce=1';
  84. $request = HTTP\Request::createFromServerArray(array(
  85. 'REQUEST_METHOD' => 'GET',
  86. 'PHP_AUTH_DIGEST' => $header,
  87. 'REQUEST_URI' => '/',
  88. ));
  89. $server->httpRequest = $request;
  90. $backend = new AbstractDigestMock();
  91. $this->assertTrue($backend->authenticate($server,'myRealm'));
  92. $result = $backend->getCurrentUser();
  93. $this->assertEquals('user', $result);
  94. $this->assertEquals('HELLO', $backend->getDigestHash('myRealm', $result));
  95. }
  96. }
  97. class AbstractDigestMock extends AbstractDigest {
  98. function getDigestHash($realm, $userName) {
  99. switch($userName) {
  100. case 'null' : return null;
  101. case 'false' : return false;
  102. case 'array' : return array();
  103. case 'user' : return 'HELLO';
  104. }
  105. }
  106. }