diff options
author | Josh Hoyt <josh@janrain.com> | 2006-09-08 22:56:12 +0000 |
---|---|---|
committer | Josh Hoyt <josh@janrain.com> | 2006-09-08 22:56:12 +0000 |
commit | 9371604f7b7e4a1691afc90a4f3ba9e83777d2af (patch) | |
tree | 0c5c813bc69deec509045ca42c9bf8449987adc9 | |
parent | 9588223f3465c362171cdcab5101feca2a3b0412 (diff) | |
download | php-openid-9371604f7b7e4a1691afc90a4f3ba9e83777d2af.zip php-openid-9371604f7b7e4a1691afc90a4f3ba9e83777d2af.tar.gz php-openid-9371604f7b7e4a1691afc90a4f3ba9e83777d2af.tar.bz2 |
[project @ Make MySQL and PostGreSQL store tests work; make NO_MATH_SUPPORT work]
-rw-r--r-- | Auth/OpenID/Consumer.php | 6 | ||||
-rw-r--r-- | Auth/OpenID/PostgreSQLStore.php | 13 | ||||
-rw-r--r-- | Auth/OpenID/SQLStore.php | 9 | ||||
-rw-r--r-- | Auth/OpenID/Server.php | 12 | ||||
-rw-r--r-- | Tests/Auth/OpenID/Consumer.php | 89 | ||||
-rw-r--r-- | Tests/Auth/OpenID/Server.php | 40 | ||||
-rw-r--r-- | Tests/Auth/OpenID/StoreTest.php | 11 |
7 files changed, 130 insertions, 50 deletions
diff --git a/Auth/OpenID/Consumer.php b/Auth/OpenID/Consumer.php index 86a0e0d..1655bff 100644 --- a/Auth/OpenID/Consumer.php +++ b/Auth/OpenID/Consumer.php @@ -501,9 +501,7 @@ class Auth_OpenID_GenericConsumer { function Auth_OpenID_GenericConsumer(&$store) { $this->store =& $store; - $this->_use_assocs = - !(defined('Auth_OpenID_NO_MATH_SUPPORT') || - ($this->store && $this->store->isDumb())); + $this->_use_assocs = !($this->store && $this->store->isDumb()); $this->fetcher = Services_Yadis_Yadis::getHTTPFetcher(); } @@ -836,7 +834,7 @@ class Auth_OpenID_GenericConsumer { $proto = 'http'; } - if ($proto == 'https') { + if ($proto == 'https' || defined('Auth_OpenID_NO_MATH_SUPPORT')) { $assoc_session = new Auth_OpenID_PlainTextConsumerSession(); } else { $assoc_session = new Auth_OpenID_DiffieHellmanConsumerSession(); diff --git a/Auth/OpenID/PostgreSQLStore.php b/Auth/OpenID/PostgreSQLStore.php index a5baef1..71270b7 100644 --- a/Auth/OpenID/PostgreSQLStore.php +++ b/Auth/OpenID/PostgreSQLStore.php @@ -24,7 +24,7 @@ class Auth_OpenID_PostgreSQLStore extends Auth_OpenID_SQLStore { { $this->sql['nonce_table'] = "CREATE TABLE %s (server_url VARCHAR(2047), timestamp INTEGER, ". - "salt CHAR(40), UNIQUE (server_url, timestamp, salt)"; + "salt CHAR(40), UNIQUE (server_url, timestamp, salt))"; $this->sql['assoc_table'] = "CREATE TABLE %s (server_url VARCHAR(2047), handle VARCHAR(255), ". @@ -66,14 +66,9 @@ class Auth_OpenID_PostgreSQLStore extends Auth_OpenID_SQLStore { "DELETE FROM %s WHERE server_url = ? AND handle = ?"; $this->sql['add_nonce'] = - array( - 'insert_nonce' => "INSERT INTO %s (nonce, expires) VALUES ". - "(?, ?)", - 'update_nonce' => "UPDATE %s SET expires = ? WHERE nonce = ?" - ); - - $this->sql['get_nonce'] = - "SELECT * FROM %s WHERE nonce = ?"; + "INSERT INTO %s (server_url, timestamp, salt) VALUES ". + "(?, ?, ?)" + ; } /** diff --git a/Auth/OpenID/SQLStore.php b/Auth/OpenID/SQLStore.php index 4b4fceb..6c23932 100644 --- a/Auth/OpenID/SQLStore.php +++ b/Auth/OpenID/SQLStore.php @@ -371,6 +371,10 @@ class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore { $auth_key_s = $this->blobEncode($auth_key); $this->_create_auth($auth_key_s); + } elseif ($this->isError($value)) { + trigger_error("Database error: " . $value->userinfo, + E_USER_WARNING); + return null; } else { $auth_key_s = $value; $auth_key = $this->blobDecode($auth_key_s); @@ -530,6 +534,11 @@ class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore { $result = $this->connection->query($sql, array($server_url, $timestamp, $salt)); + if ($this->isError($result)) { + $this->connection->rollback(); + } else { + $this->connection->commit(); + } return $this->resultToBool($result); } diff --git a/Auth/OpenID/Server.php b/Auth/OpenID/Server.php index b82bb4a..0297156 100644 --- a/Auth/OpenID/Server.php +++ b/Auth/OpenID/Server.php @@ -377,6 +377,7 @@ class Auth_OpenID_PlainTextServerSession { * session type. */ var $session_type = 'plaintext'; + var $needs_math = false; function fromQuery($unused_request) { @@ -396,6 +397,7 @@ class Auth_OpenID_DiffieHellmanServerSession { */ var $session_type = 'DH-SHA1'; + var $needs_math = true; function Auth_OpenID_DiffieHellmanServerSession($dh, $consumer_pubkey) { @@ -506,9 +508,18 @@ class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request { } $session_cls = $session_classes[$session_type]; + + // Fall back to null session if there is no math support + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + $vars = get_class_vars($session_cls); + if ($vars['needs_math']) { + $session_cls = $session_classes[null]; + } + } $session = call_user_func_array(array($session_cls, 'fromQuery'), array($query)); + if (($session === null) || (_isError($session))) { return new Auth_OpenID_ServerError($query, "Error parsing $session_type session"); @@ -519,7 +530,6 @@ class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request { function answer($assoc) { - $ml =& Auth_OpenID_getMathLib(); $response = new Auth_OpenID_ServerResponse($this); $response->fields = array('expires_in' => $assoc->getExpiresIn(), diff --git a/Tests/Auth/OpenID/Consumer.php b/Tests/Auth/OpenID/Consumer.php index 1e9311c..190b23a 100644 --- a/Tests/Auth/OpenID/Consumer.php +++ b/Tests/Auth/OpenID/Consumer.php @@ -57,22 +57,30 @@ function Auth_OpenID_associate($qs, $assoc_secret, $assoc_handle) { $query_data = Auth_OpenID_parse($qs); - assert((count($query_data) == 6) || (count($query_data) == 4)); assert($query_data['openid.mode'] == 'associate'); assert($query_data['openid.assoc_type'] == 'HMAC-SHA1'); - assert($query_data['openid.session_type'] == 'DH-SHA1'); $reply_dict = array( - 'assoc_type' => 'HMAC-SHA1', - 'assoc_handle' => $assoc_handle, - 'expires_in' => '600', - ); - - $dh_args = Auth_OpenID_DiffieHellman:: - serverAssociate($query_data, $assoc_secret); - - $reply_dict = array_merge($reply_dict, $dh_args); - + 'assoc_type' => 'HMAC-SHA1', + 'assoc_handle' => $assoc_handle, + 'expires_in' => '600', + ); + + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + assert(count($query_data) == 2); + $reply_dict['mac_key'] = $assoc_secret; + } else { + assert((count($query_data) == 6) || (count($query_data) == 4)); + assert($query_data['openid.mode'] == 'associate'); + assert($query_data['openid.session_type'] == 'DH-SHA1'); + $dh_args = Auth_OpenID_DiffieHellman:: + serverAssociate($query_data, $assoc_secret); + + $reply_dict = array_merge($reply_dict, $dh_args); + + } + + return Auth_OpenID_KVForm::fromArray($reply_dict); } @@ -870,8 +878,27 @@ class Tests_Auth_OpenID_ParseAssociation extends _TestIdRes { return array($sess, $server_resp); } - function test_success() + function test_plainSuccess() + { + $sess = new Auth_OpenID_PlainTextConsumerSession(); + $server_resp = array('mac_key' => 'AAAAAAAAAAAAAAAAAAAAAAAAAAA=', + 'assoc_type' => 'HMAC-SHA1', + 'assoc_handle' => 'ahandle', + 'expires_in' => '1000' + ); + $ret = $this->consumer->_parseAssociation($server_resp, $sess, + 'server_url'); + $this->assertEquals($ret->secret, + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" . + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"); + } + + function test_DHSuccess() { + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + print "No math support: not running test_DHSuccess\n"; + return; + } list($sess, $server_resp) = $this->_setUpDH(); $ret = $this->consumer->_parseAssociation($server_resp, $sess, 'server_url'); @@ -884,8 +911,12 @@ class Tests_Auth_OpenID_ParseAssociation extends _TestIdRes { function test_badAssocType() { - list($sess, $server_resp) = $this->_setUpDH(); - $server_resp['assoc_type'] = 'Crazy Low Prices!!!'; + $sess = new Auth_OpenID_PlainTextConsumerSession(); + $server_resp = array('mac_key' => 'XXXXXXXXXXXXXXXXXXXX', + 'assoc_handle' => 'ahandle', + 'assoc_type' => 'Crazy Low Prices!!!', + 'expires_in' => '1000' + ); $ret = $this->consumer->_parseAssociation($server_resp, $sess, 'server_url'); $this->assertTrue($ret === null); @@ -893,8 +924,12 @@ class Tests_Auth_OpenID_ParseAssociation extends _TestIdRes { function test_badExpiresIn() { - list($sess, $server_resp) = $this->_setUpDH(); - $server_resp['expires_in'] = 'Crazy Low Prices!!!'; + $sess = new Auth_OpenID_PlainTextConsumerSession(); + $server_resp = array('mac_key' => 'XXXXXXXXXXXXXXXXXXXX', + 'assoc_handle' => 'ahandle', + 'assoc_type' => 'HMAC-SHA1', + 'expires_in' => 'Crazy Low Prices!!!' + ); $ret = $this->consumer->_parseAssociation($server_resp, $sess, 'server_url'); $this->assertTrue($ret === null); @@ -902,8 +937,13 @@ class Tests_Auth_OpenID_ParseAssociation extends _TestIdRes { function test_badSessionType() { - list($sess, $server_resp) = $this->_setUpDH(); - $server_resp['session_type'] = '|/iA6rA'; + $sess = new Auth_OpenID_PlainTextConsumerSession(); + $server_resp = array('mac_key' => 'XXXXXXXXXXXXXXXXXXXX', + 'assoc_handle' => 'ahandle', + 'assoc_type' => 'HMAC-SHA1', + 'expires_in' => '1000', + 'session_type' => '|/iA6rA' + ); $ret = $this->consumer->_parseAssociation($server_resp, $sess, 'server_url'); $this->assertTrue($ret === null); @@ -911,6 +951,10 @@ class Tests_Auth_OpenID_ParseAssociation extends _TestIdRes { function test_plainFallback() { + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + print "No math support: not running test_plainFallback\n"; + return; + } $sess = new Auth_OpenID_DiffieHellmanConsumerSession(); $server_resp = array( 'assoc_type' => 'HMAC-SHA1', @@ -929,6 +973,10 @@ class Tests_Auth_OpenID_ParseAssociation extends _TestIdRes { function test_plainFallbackFailure() { + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + print "No math support: not running test_plainFallbackFailure\n"; + return; + } $sess = new Auth_OpenID_DiffieHellmanConsumerSession(); // missing mac_key $server_resp = array( @@ -943,6 +991,9 @@ class Tests_Auth_OpenID_ParseAssociation extends _TestIdRes { function test_badDHValues() { + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + return; + } list($sess, $server_resp) = $this->_setUpDH(); $server_resp['enc_mac_key'] = "\x00\x00\x00"; $ret = $this->consumer->_parseAssociation($server_resp, $sess, diff --git a/Tests/Auth/OpenID/Server.php b/Tests/Auth/OpenID/Server.php index 231272b..452a663 100644 --- a/Tests/Auth/OpenID/Server.php +++ b/Tests/Auth/OpenID/Server.php @@ -293,23 +293,29 @@ class Tests_Auth_OpenID_Test_Decode extends PHPUnit_TestCase { function test_associateDH() { - if (!defined('Auth_OpenID_NO_MATH_SUPPORT')) { - $args = array( - 'openid.mode' => 'associate', - 'openid.session_type' => 'DH-SHA1', - 'openid.dh_consumer_public' => "Rzup9265tw=="); - - $r = $this->decoder->decode($args); - $this->assertTrue(is_a($r, 'Auth_OpenID_AssociateRequest')); - $this->assertEquals($r->mode, "associate"); - $this->assertEquals($r->session->session_type, "DH-SHA1"); - $this->assertEquals($r->assoc_type, "HMAC-SHA1"); - $this->assertTrue($r->session->consumer_pubkey); + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + print "Warning: not testing associateDH\n"; + return; } + $args = array( + 'openid.mode' => 'associate', + 'openid.session_type' => 'DH-SHA1', + 'openid.dh_consumer_public' => "Rzup9265tw=="); + + $r = $this->decoder->decode($args); + $this->assertTrue(is_a($r, 'Auth_OpenID_AssociateRequest')); + $this->assertEquals($r->mode, "associate"); + $this->assertEquals($r->session->session_type, "DH-SHA1"); + $this->assertEquals($r->assoc_type, "HMAC-SHA1"); + $this->assertTrue($r->session->consumer_pubkey); } function test_associateDHMissingKey() { + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + print "Warning: not testing associateDHMissingKey\n"; + return; + } $args = array( 'openid.mode' => 'associate', 'openid.session_type' => 'DH-SHA1'); @@ -338,6 +344,11 @@ class Tests_Auth_OpenID_Test_Decode extends PHPUnit_TestCase { function test_associateDHModGen() { + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + print "No math support: not running test_associateDHModGen\n"; + return; + } + global $ALT_GEN; // test dh with non-default but valid values for dh_modulus @@ -385,6 +396,11 @@ class Tests_Auth_OpenID_Test_Decode extends PHPUnit_TestCase { function test_associateDHMissingModGen() { + if (defined('Auth_OpenID_NO_MATH_SUPPORT')) { + print "No math support: not running test_associateDHModGen\n"; + return; + } + // test dh with non-default but valid values for dh_modulus // and dh_gen $args = array( diff --git a/Tests/Auth/OpenID/StoreTest.php b/Tests/Auth/OpenID/StoreTest.php index 57f5be7..e27b726 100644 --- a/Tests/Auth/OpenID/StoreTest.php +++ b/Tests/Auth/OpenID/StoreTest.php @@ -308,15 +308,13 @@ explicitly'); // Random nonce (not in store) $nonce1 = Auth_OpenID_mkNonce(); - // A nonce is not allowed by default + // A nonce is not by default $this->_checkUseNonce($store, $nonce1, true, $url, 1); - // Storing once causes useNonce to return true the first, - // and only the first, time it is called after the - // $store-> + // Once stored, cannot be stored again $this->_checkUseNonce($store, $nonce1, false, $url, 2); - // Storing twice has the same effect as storing once. + // And using again has the same effect $this->_checkUseNonce($store, $nonce1, false, $url, 3); } @@ -366,6 +364,7 @@ explicitly'); // because we can't run the test. if (!(extension_loaded('pgsql') || @dl('pgsql.' . PHP_SHLIB_SUFFIX))) { + print "Warning: not testing PostGreSQL store"; $this->pass(); return; } @@ -475,6 +474,7 @@ explicitly'); // because we can't run the test. if (!(extension_loaded('sqlite') || @dl('sqlite.' . PHP_SHLIB_SUFFIX))) { + print "Warning: not testing SQLite store"; $this->pass(); return; } @@ -517,6 +517,7 @@ explicitly'); // because we can't run the test. if (!(extension_loaded('mysql') || @dl('mysql.' . PHP_SHLIB_SUFFIX))) { + print "Warning: not testing MySQL store"; $this->pass(); return; } |