diff options
-rw-r--r-- | Auth/OpenID/Consumer.php | 31 | ||||
-rw-r--r-- | Tests/Auth/OpenID/Consumer.php | 40 |
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')) { |