summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Auth/OpenID/Store/SQLStore.php53
-rw-r--r--Tests/Auth/OpenID/StoreTest.php32
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);
+ }
}
?>