NAME

Net::OpenID::IndirectMessage - Class representing a collection of namespaced arguments

DESCRIPTION

This class acts as an abstraction layer over a collection of flat URL arguments which supports namespaces as defined by the OpenID Auth 2.0 specification.

It also recognises when its is given OpenID 1.1 non-namespaced arguments and acts as if the relevant namespaces were present. In this case, it only supports the basic OpenID 1.1 arguments and the extension arguments for Simple Registration.

This class can operate on a normal hashref, a CGI object, an Apache object, an Apache::Request object or an arbitrary CODE ref that takes a key name as its first parameter and returns a value. However, if you use a coderef then extension arguments are not supported.

If you pass in a hashref or a coderef it is your responsibility as the caller to check the HTTP request method and pass in the correct set of arguments. If you use an Apache, Apache::Request or CGI object then this module will do the right thing automatically.

SYNOPSIS

use Net::OpenID::IndirectMessage;

# Pass in something suitable for the underlying flat dictionary.
# Will return an instance if the request arguments can be understood
# as a supported OpenID Message format.
# Will return undef if this doesn't seem to be an OpenID Auth message.
# Will croak if the $argumenty_thing is not of a suitable type.
my $args = Net::OpenID::IndirectMessage->new($argumenty_thing);

# Determine which protocol version the message is using.
# Currently this can be either 1 for 1.1 or 2 for 2.0.
# Expect larger numbers for other versions in future.
# Most callers don't really need to care about this.
my $version = $args->protocol_version();

# Get a core argument value ("openid.mode")
my $mode = $args->get("mode");

# Get an extension argument value
my $nickname = $args->get_ext("http://openid.net/extensions/sreg/1.1", "nickname");

# Get hashref of all arguments in a given namespace
my $sreg = $args->get_ext("http://openid.net/extensions/sreg/1.1");

Most of the time callers won't need to use this class directly, but will instead access it through a Net::OpenID::Consumer instance.