Class: OAuth2::Client

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

Overview

The OAuth2::Client class

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client_id, client_secret, opts = {}) {|builder| ... } ⇒ Client

Instantiate a new OAuth 2.0 client using the Client ID and Client Secret registered to your application.

Parameters:

  • client_id (String)

    the client_id value

  • client_secret (String)

    the client_secret value

  • opts (Hash) (defaults to: {})

    the options to create the client with

Options Hash (opts):

  • :site (String)

    the OAuth2 provider site host

  • :authorize_url (String) — default: '/oauth/authorize'

    absolute or relative URL path to the Authorization endpoint

  • :token_url (String) — default: '/oauth/token'

    absolute or relative URL path to the Token endpoint

  • :token_method (Symbol) — default: :post

    HTTP method to use to request token (:get or :post)

  • :connection_opts (Hash) — default: {}

    Hash of connection options to pass to initialize Faraday with

  • :max_redirects (FixNum) — default: 5

    maximum number of redirects to follow

  • :raise_errors (Boolean) — default: true

    whether or not to raise an OAuth2::Error on responses with 400+ status codes

Yields:

  • (builder)

    The Faraday connection builder

[View source]

25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/oauth2/client.rb', line 25

def initialize(client_id, client_secret, opts={}, &block)
  @id = client_id
  @secret = client_secret
  @site = opts.delete(:site)
  ssl = opts.delete(:ssl)
  @options = {:authorize_url    => '/oauth/authorize',
              :token_url        => '/oauth/token',
              :token_method     => :post,
              :connection_opts  => {},
              :connection_build => block,
              :max_redirects    => 5,
              :raise_errors     => true}.merge(opts)
  @options[:connection_opts][:ssl] = ssl if ssl
end

Instance Attribute Details

#connectionObject

The Faraday connection object


49
50
51
# File 'lib/oauth2/client.rb', line 49

def connection
  @connection
end

#idObject (readonly)

Returns the value of attribute id.


6
7
8
# File 'lib/oauth2/client.rb', line 6

def id
  @id
end

#optionsObject

Returns the value of attribute options.


7
8
9
# File 'lib/oauth2/client.rb', line 7

def options
  @options
end

#secretObject (readonly)

Returns the value of attribute secret.


6
7
8
# File 'lib/oauth2/client.rb', line 6

def secret
  @secret
end

#siteObject

Returns the value of attribute site.


7
8
9
# File 'lib/oauth2/client.rb', line 7

def site
  @site
end

Instance Method Details

#assertionObject

[View source]

164
165
166
# File 'lib/oauth2/client.rb', line 164

def assertion
  @assertion ||= OAuth2::Strategy::Assertion.new(self)
end

#auth_codeObject

The Authorization Code strategy

[View source]

139
140
141
# File 'lib/oauth2/client.rb', line 139

def auth_code
  @auth_code ||= OAuth2::Strategy::AuthCode.new(self)
end

#authorize_url(params = nil) ⇒ Object

The authorize endpoint URL of the OAuth2 provider

Parameters:

  • params (Hash) (defaults to: nil)

    additional query parameters

[View source]

62
63
64
# File 'lib/oauth2/client.rb', line 62

def authorize_url(params=nil)
  connection.build_url(options[:authorize_url], params).to_s
end

#client_credentialsObject

The Client Credentials strategy

[View source]

160
161
162
# File 'lib/oauth2/client.rb', line 160

def client_credentials
  @client_credentials ||= OAuth2::Strategy::ClientCredentials.new(self)
end

#get_token(params, access_token_opts = {}) ⇒ AccessToken

Initializes an AccessToken by making a request to the token endpoint

Parameters:

  • params (Hash)

    a Hash of params for the token endpoint

  • access (Hash)

    token options, to pass to the AccessToken object

Returns:

Raises:

[View source]

121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/oauth2/client.rb', line 121

def get_token(params, access_token_opts={})
  opts = {:raise_errors => options[:raise_errors], :parse => params.delete(:parse)}
  if options[:token_method] == :post
    headers = params.delete(:headers)
    opts[:body] = params
    opts[:headers] =  {'Content-Type' => 'application/x-www-form-urlencoded'}
    opts[:headers].merge!(headers) if headers
  else
    opts[:params] = params
  end
  response = request(options[:token_method], token_url, opts)
  raise Error.new(response) if options[:raise_errors] && !(response.parsed.is_a?(Hash) && response.parsed['access_token'])
  AccessToken.from_hash(self, response.parsed.merge(access_token_opts))
end

#implicitObject

The Implicit strategy

[View source]

146
147
148
# File 'lib/oauth2/client.rb', line 146

def implicit
  @implicit ||= OAuth2::Strategy::Implicit.new(self)
end

#passwordObject

The Resource Owner Password Credentials strategy

[View source]

153
154
155
# File 'lib/oauth2/client.rb', line 153

def password
  @password ||= OAuth2::Strategy::Password.new(self)
end

#request(verb, url, opts = {}) {|req| ... } ⇒ Object

Makes a request relative to the specified site root.

Parameters:

  • verb (Symbol)

    one of :get, :post, :put, :delete

  • url (String)

    URL path of request

  • opts (Hash) (defaults to: {})

    the options to make the request with

Options Hash (opts):

  • :params (Hash)

    additional query parameters for the URL of the request

  • :body (Hash, String)

    the body of the request

  • :headers (Hash)

    http request headers

  • :raise_errors (Boolean)

    whether or not to raise an OAuth2::Error on 400+ status code response for this request. Will default to client option

  • :parse (Symbol)

    @see Response::initialize

Yields:

  • (req)

    The Faraday request

[View source]

85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/oauth2/client.rb', line 85

def request(verb, url, opts={})
  url = self.connection.build_url(url, opts[:params]).to_s

  response = connection.run_request(verb, url, opts[:body], opts[:headers]) do |req|
    yield(req) if block_given?
  end
  response = Response.new(response, :parse => opts[:parse])

  case response.status
  when 301, 302, 303, 307
    opts[:redirect_count] ||= 0
    opts[:redirect_count] += 1
    return response if opts[:redirect_count] > options[:max_redirects]
    if response.status == 303
      verb = :get
      opts.delete(:body)
    end
    request(verb, response.headers['location'], opts)
  when 200..299, 300..399
    # on non-redirecting 3xx statuses, just return the response
    response
  when 400..599
    e = Error.new(response)
    raise e if opts[:raise_errors] || options[:raise_errors]
    response.error = e
    response
  else
    raise Error.new(response), "Unhandled status code value of #{response.status}"
  end
end

#token_url(params = nil) ⇒ Object

The token endpoint URL of the OAuth2 provider

Parameters:

  • params (Hash) (defaults to: nil)

    additional query parameters

[View source]

69
70
71
# File 'lib/oauth2/client.rb', line 69

def token_url(params=nil)
  connection.build_url(options[:token_url], params).to_s
end