def self.from_message(message, op_endpoint=UNUSED)
if message.is_openid1()
session_type = message.get_arg(OPENID_NS, 'session_type')
if session_type == 'no-encryption'
Util.log('Received OpenID 1 request with a no-encryption ' +
'association session type. Continuing anyway.')
elsif !session_type
session_type = 'no-encryption'
end
else
session_type = message.get_arg(OPENID2_NS, 'session_type')
if !session_type
raise ProtocolError.new(message,
text="session_type missing from request")
end
end
session_class = @@session_classes[session_type]
if !session_class
raise ProtocolError.new(message,
sprintf("Unknown session type %s", session_type))
end
begin
session = session_class.from_message(message)
rescue ArgumentError => why
raise ProtocolError.new(message,
sprintf('Error parsing %s session: %s',
session_type, why))
end
assoc_type = message.get_arg(OPENID_NS, 'assoc_type', 'HMAC-SHA1')
if !session.allowed_assoc_type?(assoc_type)
msg = sprintf('Session type %s does not support association type %s',
session_type, assoc_type)
raise ProtocolError.new(message, msg)
end
obj = self.new(session, assoc_type)
obj.message = message
return obj
end