summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Auth/OpenID/Consumer.php31
-rw-r--r--Tests/Auth/OpenID/Consumer.php40
2 files changed, 61 insertions, 10 deletions
diff --git a/Auth/OpenID/Consumer.php b/Auth/OpenID/Consumer.php
index e3a6334..7aa897b 100644
--- a/Auth/OpenID/Consumer.php
+++ b/Auth/OpenID/Consumer.php
@@ -1319,6 +1319,26 @@ class Auth_OpenID_GenericConsumer {
return false;
}
+ /*
+ * Adapt a POST response to a Message.
+ *
+ * @param $response Result of a POST to an OpenID endpoint.
+ */
+ function _httpResponseToMessage($response, $server_url)
+ {
+ // Should this function be named Message.fromHTTPResponse instead?
+ $response_message = Auth_OpenID_Message::fromKVForm($response->body);
+
+ if ($response->status == 400) {
+ return Auth_OpenID_ServerErrorContainer::fromMessage(
+ $response_message);
+ } else if ($response->status != 200) {
+ return null;
+ }
+
+ return $response_message;
+ }
+
/**
* @access private
*/
@@ -1331,16 +1351,7 @@ class Auth_OpenID_GenericConsumer {
return null;
}
- $response_message = Auth_OpenID_Message::fromKVForm($resp->body);
-
- if ($resp->status == 400) {
- return Auth_OpenID_ServerErrorContainer::fromMessage(
- $response_message);
- } else if ($resp->status != 200) {
- return null;
- }
-
- return $response_message;
+ return $this->_httpResponseToMessage($resp, $server_url);
}
/**
diff --git a/Tests/Auth/OpenID/Consumer.php b/Tests/Auth/OpenID/Consumer.php
index 192fbdf..1bfecb2 100644
--- a/Tests/Auth/OpenID/Consumer.php
+++ b/Tests/Auth/OpenID/Consumer.php
@@ -2104,6 +2104,45 @@ if (!defined('Auth_OpenID_NO_MATH_SUPPORT') &&
}
}
+class Tests_Auth_OpenID_KVPost extends PHPUnit_TestCase {
+ function setUp()
+ {
+ $this->server_url = 'http://unittest/bogus';
+ }
+
+ function test_200()
+ {
+ $response = new Auth_Yadis_HTTPResponse();
+ $response->status = 200;
+ $response->body = "foo:bar\nbaz:quux\n";
+ $r = Auth_OpenID_GenericConsumer::_httpResponseToMessage($response, $this->server_url);
+ $expected_msg = Auth_OpenID_Message::fromOpenIDArgs(array('foo' => 'bar', 'baz' => 'quux'));
+ $this->assertEquals($expected_msg, $r);
+ }
+
+ function test_400()
+ {
+ $response = new Auth_Yadis_HTTPResponse();
+ $response->status = 400;
+ $response->body = "error:bonk\nerror_code:7\n";
+ $result = Auth_OpenID_GenericConsumer::_httpResponseToMessage($response, $this->server_url);
+
+ $this->assertTrue(is_a($result, 'Auth_OpenID_ServerErrorContainer'));
+ $this->assertEquals($result->error_text, 'bonk');
+ $this->assertEquals($result->error_code, '7');
+ }
+
+ function test_500()
+ {
+ // 500 as an example of any non-200, non-400 code.
+ $response = new Auth_Yadis_HTTPResponse();
+ $response->status = 500;
+ $response->body = "foo:bar\nbaz:quux\n";
+ $result = Auth_OpenID_GenericConsumer::_httpResponseToMessage($response, $this->server_url);
+ $this->assertTrue($result === null);
+ }
+}
+
// Add other test cases to be run.
global $Tests_Auth_OpenID_Consumer_other;
$Tests_Auth_OpenID_Consumer_other = array(
@@ -2123,6 +2162,7 @@ $Tests_Auth_OpenID_Consumer_other = array(
new TestReturnToArgs(),
new IDPDrivenTest(),
new TestDiscoveryVerification(),
+ new Tests_Auth_OpenID_KVPost(),
);
if (!defined('Auth_OpenID_NO_MATH_SUPPORT')) {