class OpenID::Server::Decoder
I decode an incoming web request in to a OpenIDRequest.
Attributes
server[RW]
Public Class Methods
new(server)
click to toggle source
Construct a Decoder. The server is necessary because some replies reference their server.
# File lib/openid/server.rb, line 1231 def initialize(server) @server = server end
Public Instance Methods
decode(query)
click to toggle source
I transform query parameters into an OpenIDRequest.
If the query does not seem to be an OpenID request at all, I return nil.
Raises ProtocolError when the query does not seem to be a valid OpenID request.
# File lib/openid/server.rb, line 1242 def decode(query) if query.nil? or query.length == 0 return nil end begin message = Message.from_post_args(query) rescue InvalidOpenIDNamespace => e query = query.dup query['openid.ns'] = OPENID2_NS message = Message.from_post_args(query) raise ProtocolError.new(message, e.to_s) end mode = message.get_arg(OPENID_NS, 'mode') if !mode msg = sprintf("No mode value in message %s", message) raise ProtocolError.new(message, msg) end handler = @@handlers.fetch(mode, self.method('default_decoder')) return handler.call(message, @server.op_endpoint) end
default_decoder(message, server)
click to toggle source
Called to decode queries when no handler for that mode is found.
This implementation always raises ProtocolError.
# File lib/openid/server.rb, line 1270 def default_decoder(message, server) mode = message.get_arg(OPENID_NS, 'mode') msg = sprintf("Unrecognized OpenID mode %s", mode) raise ProtocolError.new(message, msg) end