summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Auth/OpenID/Message.php63
-rw-r--r--Tests/Auth/OpenID/Consumer.php6
-rw-r--r--Tests/Auth/OpenID/Message.php2
3 files changed, 50 insertions, 21 deletions
diff --git a/Auth/OpenID/Message.php b/Auth/OpenID/Message.php
index b8fd8d8..a9a7d21 100644
--- a/Auth/OpenID/Message.php
+++ b/Auth/OpenID/Message.php
@@ -48,6 +48,40 @@ $Auth_OpenID_OPENID_PROTOCOL_FIELDS = array(
'invalidate_handle', 'op_endpoint', 'response_nonce', 'sig',
'assoc_handle', 'trust_root', 'openid');
+// Global namespace / alias registration map. See
+// Auth_OpenID_registerNamespaceAlias.
+global $Auth_OpenID_registered_aliases;
+$Auth_OpenID_registered_aliases = array();
+
+/**
+ * Registers a (namespace URI, alias) mapping in a global namespace
+ * alias map. Raises NamespaceAliasRegistrationError if either the
+ * namespace URI or alias has already been registered with a different
+ * value. This function is required if you want to use a namespace
+ * with an OpenID 1 message.
+ */
+function Auth_OpenID_registerNamespaceAlias($namespace_uri, $alias)
+{
+ global $Auth_OpenID_registered_aliases;
+
+ if (Auth_OpenID::arrayGet($Auth_OpenID_registered_aliases,
+ $alias) == $namespace_uri) {
+ return true;
+ }
+
+ if (in_array($namespace_uri,
+ array_values($Auth_OpenID_registered_aliases))) {
+ return false;
+ }
+
+ if (in_array($alias, $Auth_OpenID_registered_aliases)) {
+ return false;
+ }
+
+ $Auth_OpenID_registered_aliases[$alias] = $namespace_uri;
+ return true;
+}
+
/**
* An Auth_OpenID_Mapping maintains a mapping from arbitrary keys to
* arbitrary values. (This is unlike an ordinary PHP array, whose
@@ -202,7 +236,6 @@ class Auth_OpenID_Mapping {
class Auth_OpenID_NamespaceMap {
function Auth_OpenID_NamespaceMap()
{
- $this->default_aliases = array(Auth_OpenID_SREG_URI => 'sreg');
$this->alias_to_namespace = new Auth_OpenID_Mapping();
$this->namespace_to_alias = new Auth_OpenID_Mapping();
}
@@ -296,16 +329,6 @@ class Auth_OpenID_NamespaceMap {
return $alias;
}
- // See if there is a default alias for this namespace
- $default_alias = Auth_OpenID::arrayGet($this->default_aliases,
- $namespace_uri);
-
- if ($default_alias !== null) {
- if ($this->addAlias($namespace_uri, $default_alias) !== null) {
- return $default_alias;
- }
- }
-
// Fall back to generating a numerical alias
$i = 0;
while (1) {
@@ -345,10 +368,6 @@ class Auth_OpenID_Message {
Auth_OpenID_OPENID1_NS,
Auth_OpenID_OPENID2_NS);
- $this->default_namespaces = array(
- 'sreg' => Auth_OpenID_SREG_URI
- );
-
$this->args = new Auth_OpenID_Mapping();
$this->namespaces = new Auth_OpenID_NamespaceMap();
if ($openid_namespace === null) {
@@ -418,6 +437,8 @@ class Auth_OpenID_Message {
function _fromOpenIDArgs($openid_args)
{
+ global $Auth_OpenID_registered_aliases;
+
// Takes an Auth_OpenID_Mapping instance OR an array.
if (!Auth_OpenID_Mapping::isA($openid_args)) {
@@ -473,9 +494,13 @@ class Auth_OpenID_Message {
// Only try to map an alias to a default if it's an
// OpenID 1.x message.
if ($openid_ns_uri == Auth_OpenID_OPENID1_NS) {
- $ns_uri = Auth_OpenID::arrayGet(
- $this->default_namespaces,
- $ns_alias);
+ foreach ($Auth_OpenID_registered_aliases
+ as $alias => $uri) {
+ if ($alias == $ns_alias) {
+ $ns_uri = $uri;
+ break;
+ }
+ }
}
if ($ns_uri === null) {
@@ -751,7 +776,7 @@ class Auth_OpenID_Message {
return $stuff;
}
- return null;
+ return array();
}
function updateArgs($namespace, $updates)
diff --git a/Tests/Auth/OpenID/Consumer.php b/Tests/Auth/OpenID/Consumer.php
index 67e6d4f..249886a 100644
--- a/Tests/Auth/OpenID/Consumer.php
+++ b/Tests/Auth/OpenID/Consumer.php
@@ -23,6 +23,7 @@ require_once 'Auth/OpenID/KVForm.php';
require_once 'Auth/OpenID/Consumer.php';
require_once 'Auth/OpenID/Server.php';
require_once 'Auth/OpenID/Nonce.php';
+require_once 'Auth/OpenID/Message.php';
require_once 'Auth/OpenID/HMACSHA1.php';
require_once 'Tests/Auth/OpenID/MemStore.php';
require_once 'PHPUnit.php';
@@ -1449,12 +1450,15 @@ class Tests_Auth_OpenID_SuccessResponse extends PHPUnit_TestCase {
'openid.sreg.nickname' => 'j3h',
'openid.return_to' => 'return_to');
+ $temp_sreg_uri = 'bogus';
+ $this->assertTrue(Auth_OpenID_registerNamespaceAlias($temp_sreg_uri, 'sreg'));
+
$message = Auth_OpenID_Message::fromPostArgs($query);
$resp = new Auth_OpenID_SuccessResponse($this->endpoint, $message);
$utargs = $resp->extensionResponse($uri, false);
$this->assertEquals($utargs, array('one' => '1', 'two' => '2'));
- $sregargs = $resp->extensionResponse(Auth_OpenID_SREG_URI, false);
+ $sregargs = $resp->extensionResponse($temp_sreg_uri, false);
$this->assertEquals($sregargs, array('nickname' => 'j3h'));
}
diff --git a/Tests/Auth/OpenID/Message.php b/Tests/Auth/OpenID/Message.php
index d95f17e..cd26c52 100644
--- a/Tests/Auth/OpenID/Message.php
+++ b/Tests/Auth/OpenID/Message.php
@@ -126,7 +126,7 @@ class Tests_Auth_OpenID_EmptyMessage extends MessageTest {
function test_getArgs()
{
- $this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID_NS), null);
+ $this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID_NS), array());
}
function test_getArgsBARE()