Class: Crowdskout::Auth::OAuth2

Inherits:
Object
  • Object
show all
Defined in:
lib/crowdskout/auth/oauth2.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Object

Class constructor

Parameters:

  • opts (Hash) (defaults to: {})
    • the options to create an OAuth2 object with

Options Hash (opts):

  • :api_key (String)
    • the Crowdskout API Key

  • :api_secret (String)
    • the Crowdskout secret key

  • :redirect_url (String)
    • the URL where Crowdskout is returning the authorization code



19
20
21
22
23
24
25
26
# File 'lib/crowdskout/auth/oauth2.rb', line 19

def initialize(opts = {})
  @client_id = opts[:api_key] || Util::Config.get('auth.api_key')
  @client_secret = opts[:api_secret] || Util::Config.get('auth.api_secret')
  @redirect_uri = opts[:redirect_url] || Util::Config.get('auth.redirect_uri')
  if @client_id.nil? || @client_id == '' || @client_secret.nil? || @client_secret.nil? || @redirect_uri.nil? || @redirect_uri == ''
    raise ArgumentError.new "Either api_key, api_secret or redirect_uri is missing in explicit call or configuration."
  end
end

Instance Attribute Details

#client_idObject

Returns the value of attribute client_id.



10
11
12
# File 'lib/crowdskout/auth/oauth2.rb', line 10

def client_id
  @client_id
end

#client_secretObject

Returns the value of attribute client_secret.



10
11
12
# File 'lib/crowdskout/auth/oauth2.rb', line 10

def client_secret
  @client_secret
end

#propsObject

Returns the value of attribute props.



10
11
12
# File 'lib/crowdskout/auth/oauth2.rb', line 10

def props
  @props
end

#redirect_uriObject

Returns the value of attribute redirect_uri.



10
11
12
# File 'lib/crowdskout/auth/oauth2.rb', line 10

def redirect_uri
  @redirect_uri
end

Instance Method Details

#get_access_token(code) ⇒ String

Obtain an access token

Parameters:

  • code (String)
    • the code returned from Crowdskout after a user has granted access to his account

Returns:

  • (String)

    the access token



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/crowdskout/auth/oauth2.rb', line 54

def get_access_token(code)
  params = {
    :grant_type    => Util::Config.get('auth.authorization_code_grant_type'),
    :client_id     => @client_id,
    :client_secret => @client_secret,
    :code          => code,
    :redirect_uri  => @redirect_uri
  }

  url = [
    Util::Config.get('auth.base_url'),
    Util::Config.get('auth.token_endpoint')
  ].join

  response_body = ''
  begin
    response = RestClient.post(url, params)
    response_body = JSON.parse(response)
  rescue => e
    response_body = e.respond_to?(:response) && e.response ?
      JSON.parse(e.response) :
      {'error' => '', 'error_description' => e.message}
  end

  if response_body['error_description']
    error = response_body['error_description']
    raise Exceptions::OAuth2Exception, error
  end

  response_body
end

#get_authorization_url(state = nil) ⇒ String

Get the URL at which the user can authenticate and authorize the requesting application

Parameters:

  • state (String) (defaults to: nil)
    • an optional value used by the client to maintain state between the request and callback

Returns:

  • (String)

    the authorization URL



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/crowdskout/auth/oauth2.rb', line 32

def get_authorization_url(state = nil)
  response_type = Util::Config.get('auth.response_type_code')
  params = {
    :response_type => response_type,
    :client_id     => @client_id,
    :redirect_uri  => @redirect_uri
  }
  if state
      params[:state] = state
  end
  [
    Util::Config.get('auth.base_url'),
    Util::Config.get('auth.authorization_endpoint'),
    '?',
    Util::Helpers.http_build_query(params)
  ].join
end