diff options
-rw-r--r-- | Auth/OpenID/Store/SQLStore.php | 53 | ||||
-rw-r--r-- | Tests/Auth/OpenID/StoreTest.php | 32 |
2 files changed, 85 insertions, 0 deletions
diff --git a/Auth/OpenID/Store/SQLStore.php b/Auth/OpenID/Store/SQLStore.php index 726f948..1fcaca2 100644 --- a/Auth/OpenID/Store/SQLStore.php +++ b/Auth/OpenID/Store/SQLStore.php @@ -644,4 +644,57 @@ class Auth_OpenID_SQLiteStore extends Auth_OpenID_SQLStore { } } +class Auth_OpenID_MySQLStore extends Auth_OpenID_SQLStore { + function setSQL() + { + $this->sql['nonce_table'] = + "CREATE TABLE %s (nonce CHAR(8) UNIQUE PRIMARY KEY, ". + "expires INTEGER) TYPE=InnoDB"; + + $this->sql['assoc_table'] = + "CREATE TABLE %s (server_url VARCHAR(255), handle VARCHAR(255), ". + "secret BLOB, issued INTEGER, lifetime INTEGER, ". + "assoc_type VARCHAR(64), PRIMARY KEY (server_url, handle)) ". + "TYPE=InnoDB"; + + $this->sql['settings_table'] = + "CREATE TABLE %s (setting VARCHAR(128) UNIQUE PRIMARY KEY, ". + "value BLOB) TYPE=InnoDB"; + + $this->sql['create_auth'] = + "INSERT INTO %s VALUES ('auth_key', !)"; + + $this->sql['get_auth'] = + "SELECT value FROM %s WHERE setting = 'auth_key'"; + + $this->sql['set_assoc'] = + "REPLACE INTO %s VALUES (?, ?, !, ?, ?, ?)"; + + $this->sql['get_assocs'] = + "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ". + "WHERE server_url = ?"; + + $this->sql['get_assoc'] = + "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ". + "WHERE server_url = ? AND handle = ?"; + + $this->sql['remove_assoc'] = + "DELETE FROM %s WHERE server_url = ? AND handle = ?"; + + $this->sql['add_nonce'] = + "REPLACE INTO %s (nonce, expires) VALUES (?, ?)"; + + $this->sql['get_nonce'] = + "SELECT * FROM %s WHERE nonce = ?"; + + $this->sql['remove_nonce'] = + "DELETE FROM %s WHERE nonce = ?"; + } + + function blobEncode($blob) + { + return "0x" . bin2hex($blob); + } +} + ?> diff --git a/Tests/Auth/OpenID/StoreTest.php b/Tests/Auth/OpenID/StoreTest.php index 8243d90..bfbf911 100644 --- a/Tests/Auth/OpenID/StoreTest.php +++ b/Tests/Auth/OpenID/StoreTest.php @@ -330,6 +330,38 @@ explicitly'); $this->_testStore($store); $this->_testNonce($store); } + + function test_mysqlstore() + { + require_once('Auth/OpenID/Store/SQLStore.php'); + require_once('DB.php'); + + $dsn = array( + 'phptype' => 'mysql', + 'username' => 'openid_test', + 'password' => '', + 'hostspec' => 'dbtest.janrain.com' + ); + + $db =& DB::connect($dsn); + + if (PEAR::isError($db)) { + $this->fail("MySQL database connection failed: " . + $db->getMessage()); + return; + } + + $db->query("CREATE DATABASE openid_test"); + $db->query("USE openid_test"); + + $store =& new Auth_OpenID_MySQLStore($db); + $store->createTables(); + // Once unique database names are used, this won't be + // necessary. + $store->reset(); + $this->_testStore($store); + $this->_testNonce($store); + } } ?> |