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.



1207
1208
1209
# File 'lib/openid/server.rb', line 1207

def initialize(server)
  @server = server
end

Instance Attribute Details

#serverObject

Returns the value of attribute server.



1203
1204
1205
# File 'lib/openid/server.rb', line 1203

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.



1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
# File 'lib/openid/server.rb', line 1218

def decode(query)
  if query.nil? or query.length == 0
    return nil
  end

  message = Message.from_post_args(query)

  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) ⇒ Object

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

This implementation always raises ProtocolError.

Raises:



1239
1240
1241
1242
1243
# File 'lib/openid/server.rb', line 1239

def default_decoder(message, server)
  mode = message.get_arg(OPENID_NS, 'mode')
  msg = sprintf("No decoder for mode %s", mode)
  raise ProtocolError.new(message, msg)
end