lib/omniauth/strategies/mailchimp.rb in omniauth-mailchimp-1.0.3 vs lib/omniauth/strategies/mailchimp.rb in omniauth-mailchimp-1.2.0

- old
+ new

@@ -2,43 +2,60 @@ require 'multi_json' module OmniAuth module Strategies class Mailchimp < OmniAuth::Strategies::OAuth2 - + option :name, "mailchimp" - + option :client_options, { :site => "https://login.mailchimp.com", :authorize_url => '/oauth2/authorize', :token_url => '/oauth2/token' } + def request_phase + req = Rack::Request.new(@env) + options.update(req.params) + super + end + uid { raw_info["user_id"] } info do - { - :first_name => raw_info["contact"]["fname"], - :last_name => raw_info["contact"]["lname"], - :email => raw_info["contact"]["email"] + contact = raw_info["contact"] || {} + + { + :first_name => contact["fname"], + :last_name => contact["lname"], + :email => contact["email"] } end - - extra do - { + + extra do + { :metadata => user_data, - :raw_info => raw_info + :raw_info => raw_info, + :api_token_with_dc => "#{@access_token.token}-#{user_data['dc']}", } end def raw_info @raw_info ||= begin data = user_data endpoint = data["api_endpoint"] apikey = "#{@access_token.token}-#{data['dc']}" - @access_token.get("#{endpoint}/1.3/?method=getAccountDetails&apikey=#{apikey}").parsed + response = @access_token.get("#{endpoint}/2.0/helper/account-details?apikey=#{apikey}").parsed + if response["error"] + case response["code"] + when 109 + fail!(:invalid_credentials, response["error"]) + end + else + response + end end end def user_data @data ||= MultiJson.decode(@access_token.get("https://login.mailchimp.com/oauth2/metadata").body)