diff options
Diffstat (limited to 'vendor/gems/ruby-openid-2.1.4/lib/openid/kvpost.rb')
-rw-r--r-- | vendor/gems/ruby-openid-2.1.4/lib/openid/kvpost.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/vendor/gems/ruby-openid-2.1.4/lib/openid/kvpost.rb b/vendor/gems/ruby-openid-2.1.4/lib/openid/kvpost.rb new file mode 100644 index 000000000..1495afe74 --- /dev/null +++ b/vendor/gems/ruby-openid-2.1.4/lib/openid/kvpost.rb @@ -0,0 +1,58 @@ +require "openid/message" +require "openid/fetchers" + +module OpenID + # Exception that is raised when the server returns a 400 response + # code to a direct request. + class ServerError < OpenIDError + attr_reader :error_text, :error_code, :message + + def initialize(error_text, error_code, message) + super(error_text) + @error_text = error_text + @error_code = error_code + @message = message + end + + def self.from_message(msg) + error_text = msg.get_arg(OPENID_NS, 'error', + '<no error message supplied>') + error_code = msg.get_arg(OPENID_NS, 'error_code') + return self.new(error_text, error_code, msg) + end + end + + class KVPostNetworkError < OpenIDError + end + class HTTPStatusError < OpenIDError + end + + class Message + def self.from_http_response(response, server_url) + msg = self.from_kvform(response.body) + case response.code.to_i + when 200 + return msg + when 206 + return msg + when 400 + raise ServerError.from_message(msg) + else + error_message = "bad status code from server #{server_url}: "\ + "#{response.code}" + raise HTTPStatusError.new(error_message) + end + end + end + + # Send the message to the server via HTTP POST and receive and parse + # a response in KV Form + def self.make_kv_post(request_message, server_url) + begin + http_response = self.fetch(server_url, request_message.to_url_encoded) + rescue Exception + raise KVPostNetworkError.new("Unable to contact OpenID server: #{$!.to_s}") + end + return Message.from_http_response(http_response, server_url) + end +end |