diff --git a/src/Curl/Curl.php b/src/Curl/Curl.php index 0ae256a..1f3a76f 100644 --- a/src/Curl/Curl.php +++ b/src/Curl/Curl.php @@ -4,7 +4,7 @@ namespace Curl; class Curl { - const VERSION = '4.6.7'; + const VERSION = '4.6.8'; const DEFAULT_TIMEOUT = 30; public $curl; diff --git a/src/Curl/MultiCurl.php b/src/Curl/MultiCurl.php index e07d43c..806a88f 100644 --- a/src/Curl/MultiCurl.php +++ b/src/Curl/MultiCurl.php @@ -310,6 +310,19 @@ class MultiCurl $this->setOpt(CURLOPT_USERPWD, $username . ':' . $password); } + /** + * Set Digest Authentication + * + * @access public + * @param $username + * @param $password + */ + public function setDigestAuthentication($username, $password = '') + { + $this->setOpt(CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); + $this->setOpt(CURLOPT_USERPWD, $username . ':' . $password); + } + /** * Set Cookie * diff --git a/tests/PHPCurlClass/PHPMultiCurlClassTest.php b/tests/PHPCurlClass/PHPMultiCurlClassTest.php index 352bc44..7fc7b54 100644 --- a/tests/PHPCurlClass/PHPMultiCurlClassTest.php +++ b/tests/PHPCurlClass/PHPMultiCurlClassTest.php @@ -1612,6 +1612,82 @@ class MultiCurlTest extends PHPUnit_Framework_TestCase $this->assertEquals($password2, $get_2->response->password); } + public function testDigestHttpAuthSuccess() + { + $username = 'myusername'; + $password = 'mypassword'; + $invalid_password = 'anotherpassword'; + + // Ensure that http digest returns canceled when not using any http digest authentication. + $multi_curl = new MultiCurl(); + $multi_curl->setHeader('X-DEBUG-TEST', 'http_digest_auth'); + + $get_1 = $multi_curl->addGet(Test::TEST_URL); + $get_1->complete(function ($instance) { + PHPUnit_Framework_Assert::assertEquals('canceled', $instance->response); + PHPUnit_Framework_Assert::assertEquals(401, $instance->httpStatusCode); + }); + + $multi_curl->start(); + + // Ensure that http digest returns invalid when using incorrect http digest authentication. + $multi_curl = new MultiCurl(); + $multi_curl->setHeader('X-DEBUG-TEST', 'http_digest_auth'); + $multi_curl->setDigestAuthentication($username, $invalid_password); + $this->assertEquals(CURLAUTH_DIGEST, $multi_curl->getOpt(CURLOPT_HTTPAUTH)); + + $get_1 = $multi_curl->addGet(Test::TEST_URL); + $get_1->complete(function ($instance) { + PHPUnit_Framework_Assert::assertEquals(CURLAUTH_DIGEST, $instance->getOpt(CURLOPT_HTTPAUTH)); + PHPUnit_Framework_Assert::assertEquals('invalid', $instance->response); + PHPUnit_Framework_Assert::assertEquals(401, $instance->httpStatusCode); + }); + + $multi_curl->start(); + + // Ensure that http digest returns valid when using correct http digest authentication. + $multi_curl = new MultiCurl(); + $multi_curl->setHeader('X-DEBUG-TEST', 'http_digest_auth'); + $multi_curl->setDigestAuthentication($username, $password); + $this->assertEquals(CURLAUTH_DIGEST, $multi_curl->getOpt(CURLOPT_HTTPAUTH)); + + $get_1 = $multi_curl->addGet(Test::TEST_URL); + $get_1->complete(function ($instance) { + PHPUnit_Framework_Assert::assertEquals(CURLAUTH_DIGEST, $instance->getOpt(CURLOPT_HTTPAUTH)); + PHPUnit_Framework_Assert::assertEquals('valid', $instance->response); + PHPUnit_Framework_Assert::assertEquals(200, $instance->httpStatusCode); + }); + + $multi_curl->start(); + + // Ensure that http digest can return both invalid and valid when using + // incorrect and correct authentication in the same MultiCurl. + $multi_curl = new MultiCurl(); + $multi_curl->setHeader('X-DEBUG-TEST', 'http_digest_auth'); + $multi_curl->setDigestAuthentication($username, $password); + $this->assertEquals(CURLAUTH_DIGEST, $multi_curl->getOpt(CURLOPT_HTTPAUTH)); + + $get_1 = $multi_curl->addGet(Test::TEST_URL); + $get_1->beforeSend(function ($instance) use ($username, $invalid_password) { + $instance->setDigestAuthentication($username, $invalid_password); + PHPUnit_Framework_Assert::assertEquals(CURLAUTH_DIGEST, $instance->getOpt(CURLOPT_HTTPAUTH)); + }); + $get_1->complete(function ($instance) { + PHPUnit_Framework_Assert::assertEquals(CURLAUTH_DIGEST, $instance->getOpt(CURLOPT_HTTPAUTH)); + PHPUnit_Framework_Assert::assertEquals('invalid', $instance->response); + PHPUnit_Framework_Assert::assertEquals(401, $instance->httpStatusCode); + }); + + $get_2 = $multi_curl->addGet(Test::TEST_URL); + $get_2->complete(function ($instance) { + PHPUnit_Framework_Assert::assertEquals(CURLAUTH_DIGEST, $instance->getOpt(CURLOPT_HTTPAUTH)); + PHPUnit_Framework_Assert::assertEquals('valid', $instance->response); + PHPUnit_Framework_Assert::assertEquals(200, $instance->httpStatusCode); + }); + + $multi_curl->start(); + } + public function testCookies() { $data = array('key' => 'mycookie');