Jump To …

dailycred.rb

require 'omniauth-oauth2'
require 'faraday'
require 'net/https'
require 'json'
require 'pp'

The Dailycred Omniauth Strategy

module OmniAuth
  module Strategies
    class Dailycred < OmniAuth::Strategies::OAuth2

default options

      option :client_options, {
        :site => "https://www.dailycred.com",
        :authorize_url => '/oauth/authorize',
        :token_url => '/oauth/access_token'
      }

parameters to expect and return from dailycred responses

      ATTRIBUTES = ["email", "username", "created", "verified", "admin", "referred_by", "tags", "referred"]

allows parameters to be passed through

      AUTH_PARAMS = ["action","identity_provider","referrer"]

      option :authorize_options, OmniAuth::Strategies::Dailycred::AUTH_PARAMS

      uid { user['id'] }

      info do
        user
      end

      alias :old_request_phase :request_phase


      def authorize_params
        super.tap do |params|
          params[:state] ||= {}
        end
      end

this step allows auth_params to be added to the url

      def request_phase
        p session['omniauth.state']
        OmniAuth::Strategies::Dailycred::AUTH_PARAMS.each do |param|
          val = session['omniauth.params'][param]
          if val && !val.empty?
            options[:authorize_params] ||= {}
            options[:authorize_params].merge!(param => val)
          end
        end
        old_request_phase
      end

      private

This is the phase where the gem calls me.json, which returns information about the user

      def user
        return @duser if !@duser.nil?
        connection = Faraday::Connection.new options.client_options[:site], :ssl => options.client_options[:ssl]
        response = connection.get("/graph/me.json?access_token=#{access_token.token}")
        json = JSON.parse(response.body)

pp json

        @duser = {'token' => access_token.token}
        @duser['provider'] = 'dailycred'
        @duser['uid'] =  json['id'] || json['user_id']
        OmniAuth::Strategies::Dailycred::ATTRIBUTES.each do |attr|
          @duser[attr] = json[attr]
        end
        json["identities"].each do |k, v|
          @duser[k] = v
          @duser[k][:access_token] = json["access_tokens"][k]
        end if !json["identities"].nil?

pp @duser

        @duser
      end

    end
  end
end