Class: ConnectorsSdk::Base::Authorization

Inherits:
Object
  • Object
show all
Defined in:
lib/connectors_sdk/base/authorization.rb

Class Method Summary collapse

Class Method Details

.access_token(params) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'lib/connectors_sdk/base/authorization.rb', line 30

def access_token(params)
  missing = missing_fields(params, %w[client_id client_secret code redirect_uri])
  unless missing.blank?
    raise ConnectorsShared::ClientError.new("Missing required fields: #{missing.join(', ')}")
  end

  params[:grant_type] = 'authorization_code'
  client = oauth_client(params)
  client.fetch_access_token
end

.authorization_uri(params) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/connectors_sdk/base/authorization.rb', line 18

def authorization_uri(params)
  missing = missing_fields(params, %w[client_id])
  unless missing.blank?
    raise ConnectorsShared::ClientError.new("Missing required fields: #{missing.join(', ')}")
  end

  params[:response_type] = 'code'
  params[:additional_parameters] = additional_parameters
  client = oauth_client(params)
  client.authorization_uri.to_s
end

.missing_fields(params, required = []) ⇒ Object



65
66
67
# File 'lib/connectors_sdk/base/authorization.rb', line 65

def missing_fields(params, required = [])
  Array.wrap(required).select { |field| params[field.to_sym].nil? }
end

.oauth_client(params) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/connectors_sdk/base/authorization.rb', line 55

def oauth_client(params)
  options = params.merge(
    :authorization_uri => authorization_url,
    :token_credential_uri => token_credential_uri,
    :scope => oauth_scope
  )
  options[:state] = JSON.dump(options[:state]) if options[:state]
  Signet::OAuth2::Client.new(options)
end

.oauth_scopeObject



69
70
71
# File 'lib/connectors_sdk/base/authorization.rb', line 69

def oauth_scope
  raise 'Not implemented for this connector'
end

.refresh(params) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/connectors_sdk/base/authorization.rb', line 41

def refresh(params)
  missing = missing_fields(params, %w[client_id client_secret refresh_token])
  unless missing.blank?
    raise ConnectorsShared::ClientError.new("Missing required fields: #{missing.join(', ')}")
  end

  params[:grant_type] = 'refresh_token'
  client = oauth_client(params)
  client.refresh!
rescue StandardError => e
  ConnectorsShared::ExceptionTracking.log_exception(e)
  raise ConnectorsShared::TokenRefreshFailedError
end