Merge pull request #222 from php-curl-class/VolCh-master

Merge MultiCurl::setDigestAuthentication
This commit is contained in:
Zach Borboa
2015-08-11 20:50:56 -07:00
3 changed files with 90 additions and 1 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ namespace Curl;
class Curl
{
const VERSION = '4.6.7';
const VERSION = '4.6.8';
const DEFAULT_TIMEOUT = 30;
public $curl;
+13
View File
@@ -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
*
@@ -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');