Sha256: 36760a32ba6c5583632fc305f828745adae9687db7245c5f9c343262e908f6ff

Contents?: true

Size: 1.62 KB

Versions: 22

Compression:

Stored size: 1.62 KB

Contents

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

Version data entries

22 entries across 22 versions & 4 rubygems

Version Path
ruby-openid-2.9.2 lib/openid/kvpost.rb
ruby-openid-2.9.1 lib/openid/kvpost.rb
ruby-openid-2.8.0 lib/openid/kvpost.rb
ruby-openid-2.7.0 lib/openid/kvpost.rb
ruby-openid-2.6.0 lib/openid/kvpost.rb
pelle-ruby-openid-2.1.8 lib/openid/kvpost.rb
ruby-openid-2.5.0 lib/openid/kvpost.rb
ruby-openid-2.4.0 lib/openid/kvpost.rb
ruby-openid-2.3.0 lib/openid/kvpost.rb
ruby-openid-2.2.3 lib/openid/kvpost.rb
ruby-openid-2.2.2 lib/openid/kvpost.rb
ruby-openid-2.2.1 lib/openid/kvpost.rb
ruby-openid-2.2.0 lib/openid/kvpost.rb
entp-ruby-openid-2.2 lib/openid/kvpost.rb
nov-ruby-openid-2.1.9 lib/openid/kvpost.rb
ruby-openid-2.1.8 lib/openid/kvpost.rb
pelle-ruby-openid-2.1.9 lib/openid/kvpost.rb
ruby-openid-2.1.7 lib/openid/kvpost.rb
ruby-openid-2.1.5 lib/openid/kvpost.rb
ruby-openid-2.1.6 lib/openid/kvpost.rb