Sha256: 21718be53440f0dc45453b11210c8de2e494b7895530082c5359eac6ec2ebe4a

Contents?: true

Size: 1.6 KB

Versions: 2

Compression:

Stored size: 1.6 KB

Contents

require 'omniauth-oauth2'
require 'multi_json'
require 'multi_xml'

module OmniAuth
  module Strategies
    class ConstantContact2 < OmniAuth::Strategies::OAuth2
      
      DEFAULT_RESPONSE_TYPE = 'code'
      DEFAULT_GRANT = 'authorization_code'
      
      option :name, "constantcontact"

      option :client_options, {
          :site => 'https://oauth2.constantcontact.com',
          :authorize_url => '/oauth2/oauth/siteowner/authorize',
          :token_url => '/oauth2/oauth/token'
      }

      def authorize_params
        super.tap do |params|
          params[:response_type] ||= DEFAULT_RESPONSE_TYPE
          params[:client_id] = client.id
        end
      end

      def token_params
        super.tap do |params|
          params[:grant_type] ||= DEFAULT_GRANT
          params[:client_id] = client.id
          params[:client_secret] = client.secret
        end
      end

      uid do
        request.params['username']
      end

      info do
        entries = raw_info['feed']['entry']
        if entries.kind_of?(Array)
          {
              :email_entries => entries.map{|x|x["content"]["Email"]["EmailAddress"]}
          }
        else 
          {
              :email => entries["content"]["Email"]["EmailAddress"]
          }
        end
      end

      extra do
        { 'raw_info' => raw_info }
      end

      def raw_info
        @raw_info ||= MultiXml.parse(access_token.get("https://api.constantcontact.com/ws/customers/" + request.params['username'] + "/settings/emailaddresses").body)
      end
    end
  end
end

OmniAuth.config.add_camelization 'constantcontact', 'ConstantContact2'

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
omniauth-constantcontact2-1.0.4 lib/omniauth/strategies/constantcontact2.rb
omniauth-constantcontact2-1.0.3 lib/omniauth/strategies/constantcontact2.rb