Class: Gle

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

Overview

Provides methods to authenticate a user with the Google OAuth flow.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Gle

Returns a new instance of Gle.

Parameters:

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

    the options to initialize an instance of Gle.

Options Hash (options):

  • :grant_type (String)
  • :redirect_uri (String)
  • :code (String)
  • :refresh_token (String)


50
51
52
53
54
# File 'lib/gle.rb', line 50

def initialize(options = {})
  @tokens_body = options
  @tokens_body[:client_id] = Yt.configuration.client_id
  @tokens_body[:client_secret] = Yt.configuration.client_secret
end

Class Method Details

.create(options = {}) ⇒ Object

Parameters:

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

    the options to initialize an instance of Gle.

Options Hash (options):

  • :redirect_uri (String)

    The URI to redirect users to after they have completed the Google OAuth flow.

  • :code (String)

    A single-use authorization code provided by Google OAuth to obtain an access token to access Google API.



13
14
15
# File 'lib/gle.rb', line 13

def self.create(options = {})
  new options.merge(grant_type: :authorization_code)
end

.find_by(options = {}) ⇒ Object

Parameters:

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

    the options to initialize an instance of Gle.

Options Hash (options):

  • :refresh_token (String)

    A multi-use refresh token to obtain an access token to access Google API.



20
21
22
# File 'lib/gle.rb', line 20

def self.find_by(options = {})
  new options.merge(grant_type: :refresh_token)
end

.scope_for(scopes) ⇒ Object



103
104
105
106
107
# File 'lib/gle.rb', line 103

def self.scope_for(scopes)
  ['userinfo.email'].concat(scopes).map do |scope|
    "https://www.googleapis.com/auth/#{scope}"
  end.join(' ')
end

.url_for(options = {}) ⇒ String

Returns the URL where to authenticate with a Google account.

Parameters:

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

    the options to initialize an instance of Gle.

Options Hash (options):

  • :redirect_uri (String)

    The URI to redirect users to after they have completed the Google OAuth flow.

  • :force (Boolean)

    whether to force users to re-authenticate an account that was previously authenticated.

  • :scopes (Array<String>)

    The list of scopes that users are requested to authorize.

Returns:

  • (String)

    the URL where to authenticate with a Google account.



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/gle.rb', line 32

def self.url_for(options = {})
  if Yt.configuration.mock_auth_error
    options[:redirect_uri] + '?error=' + Yt.configuration.mock_auth_error
  elsif Yt.configuration.mock_auth_email
    options[:redirect_uri] + '?code=mock-email'
  else
    host = 'accounts.google.com'
    path = '/o/oauth2/auth'
    query = URI.encode_www_form url_params(options)
    URI::HTTPS.build(host: host, path: path, query: query).to_s
  end
end

.url_params(options) ⇒ Object



92
93
94
95
96
97
98
99
100
101
# File 'lib/gle.rb', line 92

def self.url_params(options)
  {}.tap do |params|
    params[:client_id] = Yt.configuration.client_id
    params[:scope] = scope_for(options.fetch :scopes, [])
    params[:access_type] = :offline
    params[:approval_prompt] = options[:force] ? :force : :auto
    params[:redirect_uri] = options[:redirect_uri]
    params[:response_type] = :code
  end
end

Instance Method Details

#access_tokenString

Returns the access token of an authenticated Google account.

Returns:

  • (String)

    the access token of an authenticated Google account.



75
76
77
# File 'lib/gle.rb', line 75

def access_token
  tokens['access_token']
end

#access_token_was_refreshedObject

Placeholder method that can be invoked after a refresh token is used to generate a new access token. Applications can override this method, for instance to store the new token in a database



87
88
# File 'lib/gle.rb', line 87

def access_token_was_refreshed
end

#emailString

Returns the email of an authenticated Google account.

Returns:

  • (String)

    the email of an authenticated Google account.



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/gle.rb', line 62

def email
  if Yt.configuration.mock_auth_email
    if Yt.configuration.mock_auth_email.eql? 'invalid-email'
      raise Yt::HTTPError, 'Malformed auth code'
    else
      Yt.configuration.mock_auth_email
    end
  else
    profile['email']
  end
end

#refresh_tokenString

Returns the refresh token of an authenticated Google account.

Returns:

  • (String)

    the refresh token of an authenticated Google account.



80
81
82
# File 'lib/gle.rb', line 80

def refresh_token
  tokens['refresh_token']
end

#revokeBoolean

Returns whether the authentication was revoked.

Returns:

  • (Boolean)

    whether the authentication was revoked.



57
58
59
# File 'lib/gle.rb', line 57

def revoke
  !!Yt::HTTPRequest.new(revoke_params).run
end