connectors_sdk 8.2.0.0 → 8.3.0.0.pre.20220517T144653Z

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/lib/connectors_sdk/atlassian/config.rb +27 -0
  3. data/lib/connectors_sdk/atlassian/custom_client.rb +87 -0
  4. data/lib/connectors_sdk/base/adapter.rb +7 -8
  5. data/lib/connectors_sdk/base/authorization.rb +89 -0
  6. data/lib/connectors_sdk/base/custom_client.rb +1 -2
  7. data/lib/connectors_sdk/base/extractor.rb +3 -2
  8. data/lib/connectors_sdk/base/http_call_wrapper.rb +135 -0
  9. data/lib/connectors_sdk/base/registry.rb +5 -3
  10. data/lib/connectors_sdk/confluence/adapter.rb +216 -0
  11. data/lib/connectors_sdk/confluence/custom_client.rb +143 -0
  12. data/lib/connectors_sdk/confluence/extractor.rb +265 -0
  13. data/lib/connectors_sdk/confluence_cloud/authorization.rb +64 -0
  14. data/lib/connectors_sdk/confluence_cloud/custom_client.rb +61 -0
  15. data/lib/connectors_sdk/confluence_cloud/extractor.rb +59 -0
  16. data/lib/connectors_sdk/confluence_cloud/http_call_wrapper.rb +59 -0
  17. data/lib/connectors_sdk/helpers/atlassian_time_formatter.rb +10 -0
  18. data/lib/connectors_sdk/office365/adapter.rb +7 -7
  19. data/lib/connectors_sdk/office365/config.rb +1 -0
  20. data/lib/connectors_sdk/office365/custom_client.rb +25 -64
  21. data/lib/connectors_sdk/office365/extractor.rb +18 -34
  22. data/lib/connectors_sdk/share_point/adapter.rb +24 -12
  23. data/lib/connectors_sdk/share_point/authorization.rb +14 -62
  24. data/lib/connectors_sdk/share_point/extractor.rb +2 -2
  25. data/lib/connectors_sdk/share_point/http_call_wrapper.rb +24 -83
  26. data/lib/connectors_shared/exception_tracking.rb +4 -4
  27. data/lib/connectors_shared/extraction_utils.rb +109 -0
  28. data/lib/connectors_shared/job_status.rb +18 -0
  29. data/lib/connectors_shared/middleware/basic_auth.rb +27 -0
  30. data/lib/connectors_shared/middleware/bearer_auth.rb +27 -0
  31. data/lib/connectors_shared/middleware/restrict_hostnames.rb +73 -0
  32. data/lib/connectors_shared/monitor.rb +3 -3
  33. data/lib/connectors_shared.rb +1 -0
  34. data/lib/stubs/enterprise_search/exception_tracking.rb +43 -0
  35. metadata +23 -5
@@ -11,11 +11,11 @@ require 'connectors_sdk/base/adapter'
11
11
  module ConnectorsSdk
12
12
  module Office365
13
13
  class Adapter < ConnectorsSdk::Base::Adapter
14
- def self.swiftype_document_from_file(_file)
14
+ def self.es_document_from_file(_file)
15
15
  raise NotImplementedError
16
16
  end
17
17
 
18
- def self.swiftype_document_from_folder(_folder)
18
+ def self.es_document_from_folder(_folder)
19
19
  raise NotImplementedError
20
20
  end
21
21
 
@@ -26,7 +26,7 @@ module ConnectorsSdk
26
26
  @item = item
27
27
  end
28
28
 
29
- def self.convert_id_to_fp_id(_id)
29
+ def self.convert_id_to_es_id(_id)
30
30
  raise NotImplementedError
31
31
  end
32
32
 
@@ -41,10 +41,10 @@ module ConnectorsSdk
41
41
  ConnectorsSdk::Office365::Adapter.normalize_path("#{parent_folder_path}/#{item.name}")
42
42
  end
43
43
 
44
- def to_swiftype_document
44
+ def to_es_document
45
45
  {
46
46
  :_fields_to_preserve => ConnectorsSdk::Office365::Adapter.fields_to_preserve,
47
- :id => self.class.convert_id_to_fp_id(item.id),
47
+ :id => self.class.convert_id_to_es_id(item.id),
48
48
  :path => get_path(item),
49
49
  :title => item.name,
50
50
  :url => item.webUrl,
@@ -96,7 +96,7 @@ module ConnectorsSdk
96
96
  end
97
97
 
98
98
  class FileGraphItem < GraphItem
99
- def self.convert_id_to_fp_id(_id)
99
+ def self.convert_id_to_es_id(_id)
100
100
  raise NotImplementedError
101
101
  end
102
102
 
@@ -132,7 +132,7 @@ module ConnectorsSdk
132
132
  end
133
133
 
134
134
  class PackageGraphItem < GraphItem
135
- def self.convert_id_to_fp_id(id)
135
+ def self.convert_id_to_es_id(id)
136
136
  raise NotImplementedError
137
137
  end
138
138
 
@@ -7,6 +7,7 @@
7
7
  # frozen_string_literal: true
8
8
 
9
9
  require 'connectors_sdk/base/config'
10
+ require 'connectors_sdk/office365/extractor'
10
11
 
11
12
  module ConnectorsSdk
12
13
  module Office365
@@ -6,9 +6,11 @@
6
6
 
7
7
  # frozen_string_literal: true
8
8
 
9
+ require 'hashie/mash'
10
+
9
11
  require 'connectors_sdk/base/custom_client'
12
+ require 'connectors_sdk/office365/extractor'
10
13
  require 'connectors_shared'
11
- require 'hashie/mash'
12
14
 
13
15
  module ConnectorsSdk
14
16
  module Office365
@@ -50,7 +52,6 @@ module ConnectorsSdk
50
52
  def initialize(access_token:, cursors: {}, ensure_fresh_auth: nil)
51
53
  @access_token = access_token
52
54
  @cursors = cursors || {}
53
- @cursors[ConnectorsSdk::Office365::Extractor::DRIVE_IDS_CURSOR_KEY] ||= {}
54
55
  super(:ensure_fresh_auth => ensure_fresh_auth)
55
56
  end
56
57
 
@@ -75,12 +76,11 @@ module ConnectorsSdk
75
76
  # recently created groups (new Private Team site will be there) to reduce friction and index this site
76
77
  # earlier.
77
78
  # See: https://github.com/elastic/ent-search/pull/3581
78
- share_point_sites = (sites(:fields => %w[id]) + recent_share_point_group_sites(:fields => %[id]))
79
+ share_point_sites = (sites(:fields => %w[id,name]) + recent_share_point_group_sites(:fields => %w[id,name]))
79
80
 
80
81
  share_point_sites
81
- .map(&:id)
82
- .uniq
83
- .map { |site_id| site_drives(site_id, :fields => fields) }
82
+ .uniq(&:id)
83
+ .map { |site| site_drives(site, :fields => fields) }
84
84
  .flatten
85
85
  .compact
86
86
  end
@@ -102,47 +102,32 @@ module ConnectorsSdk
102
102
  request_all(:endpoint => 'sites/', :fields => fields, :additional_query_params => { :search => '', :top => 10 })
103
103
  end
104
104
 
105
- def site_drives(site_id, fields: [])
105
+ def site_drives(site, fields: [])
106
106
  document_libraries(
107
- request_all(:endpoint => "sites/#{site_id}/drives/", :fields => fields)
108
- )
107
+ request_all(:endpoint => "sites/#{site.id}/drives/", :fields => fields)
108
+ ).map do |drive|
109
+ drive.site_name = site.name
110
+ drive
111
+ end
109
112
  rescue ClientError => e
110
113
  ConnectorsShared::Logger.info("Received response of #{e.status_code} trying to get drive for Site with Id = #{site_id}: #{e.message}")
111
114
  nil
112
115
  end
113
116
 
114
- def list_items(drive_id, fields: [], break_after_page: false)
117
+ def list_items(drive_id, fields: [])
115
118
  # MSFT Graph API does not have a recursive list items, have to do this dfs style
116
-
117
- stack = if break_after_page && cursors['page_cursor'].present?
118
- cursors.delete('page_cursor')
119
- else
120
- [get_root_item(drive_id, ['id']).id]
121
- end
122
-
119
+ stack = [get_root_item(drive_id, ['id']).id]
123
120
  # We rely on the id field below to perform our DFS
124
121
  fields_with_id = fields.any? ? fields | ['id'] : fields
125
- yielded = 0
126
122
  while stack.any?
127
123
  folder_id = stack.pop
128
- item_children(drive_id, folder_id, :fields => fields_with_id, :break_after_page => break_after_page) do |item|
124
+ item_children(drive_id, folder_id, :fields => fields_with_id) do |item|
129
125
  if item.folder
130
126
  stack << item.id
131
127
  end
132
128
  yield item
133
-
134
- yielded += 1
135
129
  end
136
130
 
137
- if break_after_page && yielded >= 100
138
- if cursors['item_children_next_link'].present?
139
- stack << folder_id
140
- end
141
- if stack.any?
142
- cursors['page_cursor'] = stack.dup
143
- break
144
- end
145
- end
146
131
  end
147
132
  end
148
133
 
@@ -150,19 +135,16 @@ module ConnectorsSdk
150
135
  request_endpoint(:endpoint => "drives/#{drive_id}/items/#{item_id}/permissions").value
151
136
  end
152
137
 
153
- def list_changes(drive_id:, start_delta_link: nil, last_modified: nil, break_after_page: false)
138
+ def list_changes(drive_id:, start_delta_link: nil, last_modified: nil)
154
139
  query_params = { :'$select' => %w(id content.downloadUrl lastModifiedDateTime lastModifiedBy root deleted file folder package name webUrl createdBy createdDateTime size).join(',') }
155
140
  response =
156
- if break_after_page && cursors['page_cursor'].present?
157
- request_json(:url => cursors.delete('page_cursor'))
158
- elsif start_delta_link.nil?
141
+ if start_delta_link.nil?
159
142
  endpoint = "drives/#{drive_id}/root/delta"
160
143
  request_endpoint(:endpoint => endpoint, :query_params => query_params)
161
144
  else
162
145
  request_json(:url => start_delta_link, :query_params => query_params)
163
146
  end
164
147
 
165
- yielded = 0
166
148
  loop do
167
149
  response.value.each do |change|
168
150
  # MSFT Graph API does not allow us to view "changes" in chronological order, so if there is no cursor,
@@ -170,25 +152,18 @@ module ConnectorsSdk
170
152
  # since to get another cursor, we would have to go through all the changes anyway
171
153
  next if last_modified.present? && Time.parse(change.lastModifiedDateTime) < last_modified
172
154
  next if change.root # We don't want to index the root of the drive
173
-
174
155
  yield change
175
- yielded += 1
176
- end
177
-
178
- if break_after_page && yielded >= 100 && response['@odata.nextLink'].present?
179
- cursors['page_cursor'] = response['@odata.nextLink']
180
- break
181
156
  end
182
157
 
183
158
  break if response['@odata.nextLink'].nil?
184
159
  response = request_json(:url => response['@odata.nextLink'])
185
160
  end
186
161
 
187
- cursors[ConnectorsSdk::Office365::Extractor::DRIVE_IDS_CURSOR_KEY][drive_id] = response['@odata.deltaLink']
162
+ cursors[drive_id] = response['@odata.deltaLink']
188
163
  end
189
164
 
190
165
  def get_latest_delta_link(drive_id)
191
- cursors[ConnectorsSdk::Office365::Extractor::DRIVE_IDS_CURSOR_KEY][drive_id] || exhaustively_get_delta_link(drive_id)
166
+ cursors[drive_id] || exhaustively_get_delta_link(drive_id)
192
167
  end
193
168
 
194
169
  def exhaustively_get_delta_link(drive_id)
@@ -208,6 +183,7 @@ module ConnectorsSdk
208
183
  def download_item(download_url)
209
184
  request(:url => download_url) do |request|
210
185
  request.options.params_encoder = Office365DownloadParamsEncoder
186
+ request.options.timeout = 30
211
187
  end.body
212
188
  end
213
189
 
@@ -233,7 +209,7 @@ module ConnectorsSdk
233
209
 
234
210
  groups(:fields => %w(id createdDateTime))
235
211
  .select { |group| group.createdDateTime > created_date_time_threshold }
236
- .map { |group| group_root_site(group.id, :fields => %w[id]) }.compact
212
+ .map { |group| group_root_site(group.id, :fields => fields) }.compact
237
213
  end
238
214
 
239
215
  def document_libraries(drives)
@@ -261,30 +237,15 @@ module ConnectorsSdk
261
237
  request_endpoint(:endpoint => "drives/#{drive_id}/root", :query_params => query_params)
262
238
  end
263
239
 
264
- def item_children(drive_id, item_id, fields: [], break_after_page: false, &block)
265
- next_link = cursors.delete('item_children_next_link') if break_after_page
266
-
267
- response = if next_link.present?
268
- request_json(:url => next_link)
269
- else
270
- endpoint = "drives/#{drive_id}/items/#{item_id}/children"
271
- query_params = transform_fields_to_request_query_params(fields)
272
- request_endpoint(:endpoint => endpoint, :query_params => query_params)
273
- end
240
+ def item_children(drive_id, item_id, fields: [], &block)
241
+ endpoint = "drives/#{drive_id}/items/#{item_id}/children"
242
+ query_params = transform_fields_to_request_query_params(fields)
243
+ response = request_endpoint(:endpoint => endpoint, :query_params => query_params)
274
244
 
275
- yielded = 0
276
245
  loop do
277
246
  response.value.each(&block)
278
247
  next_link = response['@odata.nextLink']
279
-
280
248
  break if next_link.nil?
281
-
282
- yielded += response.value.size
283
- if break_after_page && yielded >= 100
284
- cursors['item_children_next_link'] = next_link
285
- break
286
- end
287
-
288
249
  response = request_json(:url => next_link)
289
250
  end
290
251
  end
@@ -14,52 +14,34 @@ module ConnectorsSdk
14
14
  class Extractor < ConnectorsSdk::Base::Extractor
15
15
  DRIVE_IDS_CURSOR_KEY = 'drive_ids'.freeze
16
16
 
17
- def yield_document_changes(modified_since: nil, break_after_page: false, &block)
17
+ def yield_document_changes(modified_since: nil, &block)
18
18
  drives_to_index.each do |drive|
19
19
  drive_id = drive.id
20
-
21
- if break_after_page
22
- current_drive_id = config.cursors['current_drive_id']
23
- if current_drive_id.present? && current_drive_id > drive_id # they come alpha sorted
24
- next
25
- end
26
- config.cursors['current_drive_id'] = drive_id
27
- end
28
-
29
20
  drive_owner_name = drive.dig(:owner, :user, :displayName)
30
21
  drive_name = drive.name
22
+ site_name = drive.site_name
31
23
 
32
24
  drive_id_to_delta_link = config.cursors.fetch(DRIVE_IDS_CURSOR_KEY, {})
33
25
  begin
34
26
  if start_delta_link = drive_id_to_delta_link[drive_id]
35
27
  log_debug("Starting an incremental crawl with cursor for #{service_type.classify} with drive_id: #{drive_id}")
36
28
  begin
37
- yield_changes(drive_id, :start_delta_link => start_delta_link, :drive_owner_name => drive_owner_name, :drive_name => drive_name, :break_after_page => break_after_page, &block)
29
+ yield_changes(drive_id, :start_delta_link => start_delta_link, :drive_owner_name => drive_owner_name, :drive_name => drive_name, :site_name => site_name, &block)
38
30
  rescue ConnectorsSdk::Office365::CustomClient::Office365InvalidCursorsError
39
31
  log_warn("Error listing changes with start_delta_link: #{start_delta_link}, falling back to full crawl")
40
- yield_drive_items(drive_id, :drive_owner_name => drive_owner_name, :drive_name => drive_name, :break_after_page => break_after_page, &block)
32
+ yield_drive_items(drive_id, :drive_owner_name => drive_owner_name, :drive_name => drive_name, :site_name => site_name, &block)
41
33
  end
42
34
  elsif modified_since.present?
43
35
  log_debug("Starting an incremental crawl using last_modified (no cursor found) for #{service_type.classify} with drive_id: #{drive_id}")
44
- yield_changes(drive_id, :last_modified => modified_since, :drive_owner_name => drive_owner_name, :drive_name => drive_name, :break_after_page => break_after_page, &block)
36
+ yield_changes(drive_id, :last_modified => modified_since, :drive_owner_name => drive_owner_name, :drive_name => drive_name, :site_name => site_name, &block)
45
37
  else
46
38
  log_debug("Starting a full crawl #{service_type.classify} with drive_id: #{drive_id}")
47
- yield_drive_items(drive_id, :drive_owner_name => drive_owner_name, :drive_name => drive_name, :break_after_page => break_after_page, &block)
39
+ yield_drive_items(drive_id, :drive_owner_name => drive_owner_name, :drive_name => drive_name, :site_name => site_name, &block)
48
40
  end
49
41
  rescue ConnectorsSdk::Office365::CustomClient::ClientError => e
50
42
  log_warn("Error searching and listing drive #{drive_id}")
51
43
  capture_exception(e)
52
44
  end
53
-
54
- if break_after_page && (config.cursors['page_cursor'].present? || config.cursors['item_children_next_link'].present?)
55
- break
56
- end
57
- end
58
-
59
- if break_after_page && config.cursors['page_cursor'].blank? && config.cursors['item_children_next_link'].blank?
60
- @completed = true
61
- config.overwrite_cursors!(retrieve_latest_cursors)
62
- log_debug("Completed #{modified_since.nil? ? 'full' : 'incremental'} extraction")
63
45
  end
64
46
 
65
47
  nil
@@ -132,7 +114,7 @@ module ConnectorsSdk
132
114
  @existing_drive_item_ids ||= Set.new.tap do |ids|
133
115
  drives_to_index.each do |drive|
134
116
  client.list_items(drive.id) do |item|
135
- ids << convert_id_to_fp_id(item.id)
117
+ ids << convert_id_to_es_id(item.id)
136
118
  end
137
119
  end
138
120
  end
@@ -142,7 +124,7 @@ module ConnectorsSdk
142
124
  raise NotImplementedError
143
125
  end
144
126
 
145
- def convert_id_to_fp_id(_id)
127
+ def convert_id_to_es_id(_id)
146
128
  raise NotImplementedError
147
129
  end
148
130
 
@@ -156,11 +138,12 @@ module ConnectorsSdk
156
138
  ConnectorsShared::ExceptionTracking.capture_exception(office365_client_error, options)
157
139
  end
158
140
 
159
- def yield_drive_items(drive_id, drive_owner_name:, drive_name:, break_after_page: false, &block)
160
- client.list_items(drive_id, break_after_page: break_after_page) do |item|
141
+ def yield_drive_items(drive_id, drive_owner_name:, drive_name:, site_name:, &block)
142
+ client.list_items(drive_id) do |item|
161
143
  yield_single_document_change(:identifier => "Office365 change: #{item&.id} (#{Office365::Adapter::GraphItem.get_path(item)})") do
162
144
  item.drive_owner_name = drive_owner_name
163
145
  item.drive_name = drive_name
146
+ item.site_name = site_name
164
147
  yield_create_or_update(drive_id, item, &block)
165
148
  end
166
149
  end
@@ -170,15 +153,16 @@ module ConnectorsSdk
170
153
  if item.deleted.nil?
171
154
  yield_create_or_update(drive_id, item, &block)
172
155
  else
173
- yield :delete, convert_id_to_fp_id(item.id)
156
+ yield :delete, convert_id_to_es_id(item.id)
174
157
  end
175
158
  end
176
159
 
177
- def yield_changes(drive_id, drive_owner_name:, drive_name:, start_delta_link: nil, last_modified: nil, break_after_page: false, &block)
178
- client.list_changes(:drive_id => drive_id, :start_delta_link => start_delta_link, :last_modified => last_modified, :break_after_page => break_after_page) do |item|
160
+ def yield_changes(drive_id, drive_owner_name:, drive_name:, site_name:, start_delta_link: nil, last_modified: nil, &block)
161
+ client.list_changes(:drive_id => drive_id, :start_delta_link => start_delta_link, :last_modified => last_modified) do |item|
179
162
  yield_single_document_change(:identifier => "Office365 change: #{item&.id} (#{Office365::Adapter::GraphItem.get_path(item)})") do
180
163
  item.drive_owner_name = drive_owner_name
181
164
  item.drive_name = drive_name
165
+ item.site_name = site_name
182
166
  yield_correct_actions_and_converted_item(drive_id, item, &block)
183
167
  end
184
168
  end
@@ -210,11 +194,11 @@ module ConnectorsSdk
210
194
 
211
195
  def generate_document(item)
212
196
  if item.file
213
- adapter.swiftype_document_from_file(item)
197
+ adapter.es_document_from_file(item)
214
198
  elsif item.folder
215
- adapter.swiftype_document_from_folder(item)
199
+ adapter.es_document_from_folder(item)
216
200
  elsif item.package
217
- adapter.swiftype_document_from_package(item)
201
+ adapter.es_document_from_package(item)
218
202
  else
219
203
  raise "Unexpected Office 365 item type for item #{item}"
220
204
  end
@@ -10,36 +10,48 @@ require 'connectors_sdk/office365/adapter'
10
10
 
11
11
  module ConnectorsSdk
12
12
  module SharePoint
13
+ module SitePrefix
14
+ def get_path(item)
15
+ item.site_name.present? ? "/sites/#{item.site_name}#{super}" : super
16
+ end
17
+ end
18
+
13
19
  class Adapter < Office365::Adapter
14
20
  generate_id_helpers :share_point, 'share_point'
15
21
 
16
- def self.swiftype_document_from_file(file)
17
- FileGraphItem.new(file).to_swiftype_document
22
+ def self.es_document_from_file(file)
23
+ FileGraphItem.new(file).to_es_document
18
24
  end
19
25
 
20
- def self.swiftype_document_from_folder(folder)
21
- FolderGraphItem.new(folder).to_swiftype_document
26
+ def self.es_document_from_folder(folder)
27
+ FolderGraphItem.new(folder).to_es_document
22
28
  end
23
29
 
24
- def self.swiftype_document_from_package(package)
25
- PackageGraphItem.new(package).to_swiftype_document
30
+ def self.es_document_from_package(package)
31
+ PackageGraphItem.new(package).to_es_document
26
32
  end
27
33
 
28
34
  class FileGraphItem < Office365::Adapter::FileGraphItem
29
- def self.convert_id_to_fp_id(id)
30
- ConnectorsSdk::SharePoint::Adapter.share_point_id_to_fp_id(id)
35
+ include SitePrefix
36
+
37
+ def self.convert_id_to_es_id(id)
38
+ ConnectorsSdk::SharePoint::Adapter.share_point_id_to_es_id(id)
31
39
  end
32
40
  end
33
41
 
34
42
  class FolderGraphItem < Office365::Adapter::FolderGraphItem
35
- def self.convert_id_to_fp_id(id)
36
- ConnectorsSdk::SharePoint::Adapter.share_point_id_to_fp_id(id)
43
+ include SitePrefix
44
+
45
+ def self.convert_id_to_es_id(id)
46
+ ConnectorsSdk::SharePoint::Adapter.share_point_id_to_es_id(id)
37
47
  end
38
48
  end
39
49
 
40
50
  class PackageGraphItem < Office365::Adapter::PackageGraphItem
41
- def self.convert_id_to_fp_id(id)
42
- ConnectorsSdk::SharePoint::Adapter.share_point_id_to_fp_id(id)
51
+ include SitePrefix
52
+
53
+ def self.convert_id_to_es_id(id)
54
+ ConnectorsSdk::SharePoint::Adapter.share_point_id_to_es_id(id)
43
55
  end
44
56
  end
45
57
  end
@@ -6,70 +6,12 @@
6
6
 
7
7
  # frozen_string_literal: true
8
8
 
9
- require 'connectors_shared'
10
- require 'signet'
11
- require 'signet/oauth_2'
12
- require 'signet/oauth_2/client'
9
+ require 'connectors_sdk/base/authorization'
13
10
 
14
11
  module ConnectorsSdk
15
12
  module SharePoint
16
- class Authorization
13
+ class Authorization < ConnectorsSdk::Base::Authorization
17
14
  class << self
18
- def authorization_url
19
- 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize'
20
- end
21
-
22
- def token_credential_uri
23
- 'https://login.microsoftonline.com/common/oauth2/v2.0/token'
24
- end
25
-
26
- def authorization_uri(params)
27
- missing = missing_fields(params, %w[client_id])
28
- unless missing.blank?
29
- raise ConnectorsShared::ClientError.new("Missing required fields: #{missing.join(', ')}")
30
- end
31
-
32
- params[:response_type] = 'code'
33
- params[:additional_parameters] = { :prompt => 'consent' }
34
- client = oauth_client(params)
35
- client.authorization_uri.to_s
36
- end
37
-
38
- def access_token(params)
39
- missing = missing_fields(params, %w[client_id client_secret code redirect_uri])
40
- unless missing.blank?
41
- raise ConnectorsShared::ClientError.new("Missing required fields: #{missing.join(', ')}")
42
- end
43
-
44
- params[:grant_type] = 'authorization_code'
45
- client = oauth_client(params)
46
- client.fetch_access_token
47
- end
48
-
49
- def refresh(params)
50
- missing = missing_fields(params, %w[client_id client_secret refresh_token])
51
- unless missing.blank?
52
- raise ConnectorsShared::ClientError.new("Missing required fields: #{missing.join(', ')}")
53
- end
54
-
55
- params[:grant_type] = 'refresh_token'
56
- client = oauth_client(params)
57
- client.refresh!
58
- rescue StandardError => e
59
- ConnectorsShared::ExceptionTracking.log_exception(e)
60
- raise ConnectorsShared::TokenRefreshFailedError
61
- end
62
-
63
- def oauth_client(params)
64
- options = params.merge(
65
- :authorization_uri => authorization_url,
66
- :token_credential_uri => token_credential_uri,
67
- :scope => oauth_scope
68
- )
69
- options[:state] = JSON.dump(options[:state]) if options[:state]
70
- Signet::OAuth2::Client.new(options)
71
- end
72
-
73
15
  def oauth_scope
74
16
  %w[
75
17
  User.ReadBasic.All
@@ -82,8 +24,18 @@ module ConnectorsSdk
82
24
  ]
83
25
  end
84
26
 
85
- def missing_fields(params, required = [])
86
- Array.wrap(required).select { |field| params[field.to_sym].nil? }
27
+ private
28
+
29
+ def authorization_url
30
+ 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize'
31
+ end
32
+
33
+ def token_credential_uri
34
+ 'https://login.microsoftonline.com/common/oauth2/v2.0/token'
35
+ end
36
+
37
+ def additional_parameters
38
+ { :prompt => 'consent' }
87
39
  end
88
40
  end
89
41
  end
@@ -15,8 +15,8 @@ module ConnectorsSdk
15
15
 
16
16
  private
17
17
 
18
- def convert_id_to_fp_id(id)
19
- ConnectorsSdk::SharePoint::Adapter.share_point_id_to_fp_id(id)
18
+ def convert_id_to_es_id(id)
19
+ ConnectorsSdk::SharePoint::Adapter.share_point_id_to_es_id(id)
20
20
  end
21
21
 
22
22
  def adapter