Class: ConnectorsSdk::SharePoint::Authorization

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

Class Method Summary collapse

Class Method Details

.access_token(params) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/connectors_sdk/share_point/authorization.rb', line 38

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



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/connectors_sdk/share_point/authorization.rb', line 26

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] = { :prompt => 'consent' }
  client = oauth_client(params)
  client.authorization_uri.to_s
end

.authorization_urlObject



18
19
20
# File 'lib/connectors_sdk/share_point/authorization.rb', line 18

def authorization_url
  'https://login.microsoftonline.com/common/oauth2/v2.0/authorize'
end

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



85
86
87
# File 'lib/connectors_sdk/share_point/authorization.rb', line 85

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

.oauth_client(params) ⇒ Object



63
64
65
66
67
68
69
70
71
# File 'lib/connectors_sdk/share_point/authorization.rb', line 63

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



73
74
75
76
77
78
79
80
81
82
83
# File 'lib/connectors_sdk/share_point/authorization.rb', line 73

def oauth_scope
  %w[
    User.ReadBasic.All
    Group.Read.All
    Directory.AccessAsUser.All
    Files.Read
    Files.Read.All
    Sites.Read.All
    offline_access
  ]
end

.refresh(params) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/connectors_sdk/share_point/authorization.rb', line 49

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

.token_credential_uriObject



22
23
24
# File 'lib/connectors_sdk/share_point/authorization.rb', line 22

def token_credential_uri
  'https://login.microsoftonline.com/common/oauth2/v2.0/token'
end