summaryrefslogtreecommitdiffstats
path: root/Auth/OpenID
diff options
context:
space:
mode:
Diffstat (limited to 'Auth/OpenID')
-rw-r--r--Auth/OpenID/Message.php63
1 files changed, 44 insertions, 19 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)