Class: OpenID::Server::Decoder

Inherits:
Object
  • Object
show all
Defined in:
lib/openid/server.rb

Overview

I decode an incoming web request in to a OpenIDRequest.

Constant Summary collapse

@@handlers =
{
  "checkid_setup" => CheckIDRequest.method(:from_message),
  "checkid_immediate" => CheckIDRequest.method(:from_message),
  "check_authentication" => CheckAuthRequest.method(:from_message),
  "associate" => AssociateRequest.method(:from_message),
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server) ⇒ Decoder

Construct a Decoder. The server is necessary because some replies reference their server.



1261
1262
1263
# File 'lib/openid/server.rb', line 1261

def initialize(server)
  @server = server
end

Instance Attribute Details

#serverObject

Returns the value of attribute server.



1257
1258
1259
# File 'lib/openid/server.rb', line 1257

def server
  @server
end

Instance Method Details

#decode(query) ⇒ Object

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.



1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
# File 'lib/openid/server.rb', line 1272

def decode(query)
  return if query.nil? or query.empty?

  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")
  unless mode
    msg = format("No mode value in message %s", message)
    raise ProtocolError.new(message, msg)
  end

  handler = @@handlers.fetch(mode, method(:default_decoder))
  handler.call(message, @server.op_endpoint)
end

#default_decoder(message, _server) ⇒ Object

Called to decode queries when no handler for that mode is found.

This implementation always raises ProtocolError.

Raises:



1298
1299
1300
1301
1302
# File 'lib/openid/server.rb', line 1298

def default_decoder(message, _server)
  mode = message.get_arg(OPENID_NS, "mode")
  msg = format("Unrecognized OpenID mode %s", mode)
  raise ProtocolError.new(message, msg)
end