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