class OmniAuth::Strategies::BraintreeAuth

Public Instance Methods

build_access_token() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/braintree_auth.rb, line 47
def build_access_token
  options.token_params.merge!(:headers => authorization_header)
  super
end
request_phase() click to toggle source
# File lib/omniauth/strategies/braintree_auth.rb, line 39
def request_phase
  # Braintree requires a custom signature for authorization requests
  base_url = client.auth_code.authorize_url(authorize_params)
  signature = compute_signature(base_url)
  authorize_url = "#{base_url}&signature=#{signature}&algorithm=SHA256"
  redirect authorize_url
end
setup_phase() click to toggle source
# File lib/omniauth/strategies/braintree_auth.rb, line 31
def setup_phase
  options.client_options.site = "https://api.braintreegateway.com" if options.environment == "production"

  # application/xml content type is not recognized as XML by OAuth2 gem, so we must register it manually
  # https://github.com/intridea/oauth2/pull/255 would add it as a registered content type
  ::OAuth2::Response.register_parser(:xml, "application/xml") { |body| MultiXml.parse(body) }
end

Private Instance Methods

authorization_header() click to toggle source
# File lib/omniauth/strategies/braintree_auth.rb, line 54
def authorization_header
  {"Authorization" => "Basic #{::Base64.strict_encode64("#{options[:client_id]}:#{options[:client_secret]}")}"}
end
compute_signature(url) click to toggle source
# File lib/omniauth/strategies/braintree_auth.rb, line 58
def compute_signature(url)
  key_digest = OpenSSL::Digest::SHA256.digest(options["client_secret"])
  OpenSSL::HMAC.hexdigest(OpenSSL::Digest::SHA256.new, key_digest, url)
end