connectors_sdk 8.2.0.0 → 8.3.0.0.pre.20220517T144653Z

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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