summaryrefslogtreecommitdiffstats
path: root/Tests/Auth/OpenID/MemStore.php
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/Auth/OpenID/MemStore.php')
-rw-r--r--Tests/Auth/OpenID/MemStore.php110
1 files changed, 110 insertions, 0 deletions
diff --git a/Tests/Auth/OpenID/MemStore.php b/Tests/Auth/OpenID/MemStore.php
new file mode 100644
index 0000000..03c9eb2
--- /dev/null
+++ b/Tests/Auth/OpenID/MemStore.php
@@ -0,0 +1,110 @@
+<?php
+
+/**
+ * In-memory OpenID store implementation for testing only
+ */
+require_once "Auth/OpenID/Store/Interface.php";
+
+class Tests_Auth_OpenID_MemStore extends Auth_OpenID_OpenIDStore {
+ var $assocs = null;
+ var $nonces = null;
+
+ function Tests_Auth_OpenID_MemStore($auth_key=null)
+ {
+ $this->assocs = array();
+ $this->nonces = array();
+ $this->auth_key = $auth_key;
+ }
+
+ function getKey($server_url, $handle)
+ {
+ return serialize(array($server_url, $handle));
+ }
+
+ function getAssocPairs()
+ {
+ $pairs = array();
+ foreach ($this->assocs as $key => $assoc) {
+ list($assoc_url, $_) = unserialize($key);
+ $pairs[] = array($assoc_url, $assoc);
+ }
+ return $pairs;
+ }
+
+ function getServerAssocs($server_url)
+ {
+ $matches = array();
+ foreach ($this->getAssocPairs() as $pair) {
+ list($assoc_url, $assoc) = $pair;
+ if ($assoc_url == $server_url) {
+ $matches[] = $assoc;
+ }
+ }
+ return $matches;
+ }
+
+ function getAssociation($server_url, $handle=null)
+ {
+ $assocs = $this->getServerAssocs($server_url);
+ if ($handle === null) {
+ $best = null;
+ foreach ($assocs as $assoc) {
+ if (!isset($best) ||
+ $best->issued < $assoc->issued) {
+
+ $best = $assoc;
+ }
+ }
+ return $best;
+ } else {
+ foreach ($assocs as $assoc) {
+ if ($assoc->handle == $handle) {
+ return $assoc;
+ }
+ }
+ return null;
+ }
+ }
+
+ function storeAssociation($server_url, $association)
+ {
+ $key = $this->getKey($server_url, $association->handle);
+ $this->assocs[$key] = $association;
+ }
+
+ function removeAssociation($server_url, $handle)
+ {
+ $key = $this->getKey($server_url, $handle);
+ $present = isset($this->assocs[$key]);
+ unset($this->assocs[$key]);
+ return $present;
+ }
+
+ function storeNonce($nonce)
+ {
+ if (!in_array($nonce, $this->nonces)) {
+ $this->nonces[] = $nonce;
+ }
+ }
+
+ function useNonce($nonce)
+ {
+ $index = array_search($nonce, $this->nonces);
+ $present = $index !== false;
+ if ($present) {
+ unset($this->nonces[$index]);
+ }
+ return $present;
+ }
+
+ function reset()
+ {
+ $this->assocs = array();
+ $this->nonces = array();
+ }
+
+ function getAuthKey()
+ {
+ return $this->auth_key;
+ }
+} \ No newline at end of file