connectors_sdk 8.3.0.0.pre.20220414T060419Z → 8.3.0.0.pre.20220510T144908Z
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.
- checksums.yaml +4 -4
- data/lib/connectors_sdk/atlassian/config.rb +27 -0
- data/lib/connectors_sdk/atlassian/custom_client.rb +87 -0
- data/lib/connectors_sdk/base/adapter.rb +7 -8
- data/lib/connectors_sdk/base/authorization.rb +89 -0
- data/lib/connectors_sdk/base/custom_client.rb +0 -1
- data/lib/connectors_sdk/base/extractor.rb +3 -2
- data/lib/connectors_sdk/base/http_call_wrapper.rb +135 -0
- data/lib/connectors_sdk/base/registry.rb +5 -3
- data/lib/connectors_sdk/confluence/adapter.rb +216 -0
- data/lib/connectors_sdk/confluence/custom_client.rb +143 -0
- data/lib/connectors_sdk/confluence/extractor.rb +270 -0
- data/lib/connectors_sdk/confluence_cloud/authorization.rb +64 -0
- data/lib/connectors_sdk/confluence_cloud/custom_client.rb +61 -0
- data/lib/connectors_sdk/confluence_cloud/extractor.rb +59 -0
- data/lib/connectors_sdk/confluence_cloud/http_call_wrapper.rb +59 -0
- data/lib/connectors_sdk/helpers/atlassian_time_formatter.rb +10 -0
- data/lib/connectors_sdk/office365/adapter.rb +7 -7
- data/lib/connectors_sdk/office365/config.rb +1 -0
- data/lib/connectors_sdk/office365/custom_client.rb +31 -9
- data/lib/connectors_sdk/office365/extractor.rb +8 -8
- data/lib/connectors_sdk/share_point/adapter.rb +12 -12
- data/lib/connectors_sdk/share_point/authorization.rb +14 -62
- data/lib/connectors_sdk/share_point/extractor.rb +2 -2
- data/lib/connectors_sdk/share_point/http_call_wrapper.rb +24 -83
- data/lib/connectors_shared/exception_tracking.rb +4 -4
- data/lib/connectors_shared/extraction_utils.rb +109 -0
- data/lib/connectors_shared/middleware/basic_auth.rb +27 -0
- data/lib/connectors_shared/middleware/bearer_auth.rb +27 -0
- data/lib/connectors_shared/middleware/restrict_hostnames.rb +73 -0
- data/lib/connectors_shared/monitor.rb +3 -3
- data/lib/stubs/enterprise_search/exception_tracking.rb +43 -0
- metadata +22 -10
- data/lib/connectors_sdk/base/.config.rb.un~ +0 -0
- data/lib/connectors_sdk/base/.connectors.rb.un~ +0 -0
- data/lib/connectors_sdk/base/.registry.rb.un~ +0 -0
- data/lib/connectors_sdk/share_point/.http_call_wrapper.rb.un~ +0 -0
@@ -0,0 +1,73 @@
|
|
1
|
+
#
|
2
|
+
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
3
|
+
# or more contributor license agreements. Licensed under the Elastic License;
|
4
|
+
# you may not use this file except in compliance with the Elastic License.
|
5
|
+
#
|
6
|
+
|
7
|
+
# frozen_string_literal: true
|
8
|
+
|
9
|
+
require 'faraday/middleware'
|
10
|
+
require 'resolv'
|
11
|
+
|
12
|
+
require 'connectors_shared/errors'
|
13
|
+
require 'connectors_shared/logger'
|
14
|
+
|
15
|
+
module ConnectorsShared
|
16
|
+
module Middleware
|
17
|
+
class RestrictHostnames < Faraday::Middleware
|
18
|
+
class AddressNotAllowed < ConnectorsShared::ClientError; end
|
19
|
+
URL_PATTERN = /\Ahttp/
|
20
|
+
|
21
|
+
attr_reader :allowed_hosts, :allowed_ips
|
22
|
+
|
23
|
+
def initialize(app = nil, options = {})
|
24
|
+
super(app)
|
25
|
+
@allowed_hosts = options[:allowed_hosts]
|
26
|
+
@allowed_ips = ips_from_hosts(@allowed_hosts)
|
27
|
+
end
|
28
|
+
|
29
|
+
def call(env)
|
30
|
+
raise AddressNotAllowed.new("Address not allowed for #{env[:url]}") if denied?(env)
|
31
|
+
@app.call(env)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def ips_from_hosts(hosts)
|
37
|
+
hosts&.flat_map do |host|
|
38
|
+
if URL_PATTERN.match(host)
|
39
|
+
lookup_ips(URI.parse(host).host)
|
40
|
+
elsif Resolv::IPv4::Regex.match(host) || Resolv::IPv6::Regex.match(host)
|
41
|
+
IPAddr.new(host)
|
42
|
+
else
|
43
|
+
lookup_ips(host)
|
44
|
+
end
|
45
|
+
end || []
|
46
|
+
end
|
47
|
+
|
48
|
+
def denied?(env)
|
49
|
+
requested_ips = lookup_ips(env[:url].hostname)
|
50
|
+
no_match = requested_ips.all? { |ip| !@allowed_ips.include?(ip) }
|
51
|
+
return false unless no_match
|
52
|
+
ConnectorsShared::Logger.warn("Requested url #{env[:url]} with resolved ip addresses #{requested_ips} does not match " \
|
53
|
+
"allowed hosts #{@allowed_hosts} with resolved ip addresses #{@allowed_ips}. Retrying.")
|
54
|
+
@allowed_ips = ips_from_hosts(@allowed_hosts) # maybe the IP has changed for an allowed host. Re-do allowed_hosts DNS lookup
|
55
|
+
no_match = requested_ips.all? { |ip| !@allowed_ips.include?(ip) }
|
56
|
+
ConnectorsShared::Logger.error("Requested url #{env[:url]} with resolved ip addresses #{requested_ips} does not match " \
|
57
|
+
"allowed hosts #{@allowed_hosts} with resolved ip addresses #{@allowed_ips}") if no_match
|
58
|
+
no_match
|
59
|
+
end
|
60
|
+
|
61
|
+
def lookup_ips(hostname)
|
62
|
+
addr_infos(hostname).map { |a| IPAddr.new(a.ip_address) }
|
63
|
+
end
|
64
|
+
|
65
|
+
def addr_infos(hostname)
|
66
|
+
Addrinfo.getaddrinfo(hostname, nil, :UNSPEC, :STREAM)
|
67
|
+
rescue SocketError
|
68
|
+
# In case of invalid hostname, return an empty list of addresses
|
69
|
+
[]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
require 'connectors_shared/errors'
|
10
10
|
require 'stubs/app_config' unless defined?(Rails)
|
11
|
-
require 'stubs/
|
11
|
+
require 'stubs/enterprise_search/exception_tracking' unless defined?(Rails)
|
12
12
|
|
13
13
|
module ConnectorsShared
|
14
14
|
class Monitor
|
@@ -44,8 +44,8 @@ module ConnectorsShared
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def note_error(error, id: Time.now.to_i)
|
47
|
-
stack_trace =
|
48
|
-
error_message =
|
47
|
+
stack_trace = EnterpriseSearch::ExceptionTracking.generate_stack_trace(error)
|
48
|
+
error_message = EnterpriseSearch::ExceptionTracking.generate_error_message(error, nil, nil)
|
49
49
|
@connector.log_debug("Message id: #{id} - #{error_message}\n#{stack_trace}")
|
50
50
|
@total_error_count += 1
|
51
51
|
@consecutive_error_count += 1
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
3
|
+
# or more contributor license agreements. Licensed under the Elastic License;
|
4
|
+
# you may not use this file except in compliance with the Elastic License.
|
5
|
+
#
|
6
|
+
|
7
|
+
module EnterpriseSearch
|
8
|
+
class ExceptionTracking
|
9
|
+
def self.capture_message(message, context = {})
|
10
|
+
AppConfig.connectors_logger.error { "Error: #{message}. Context: #{context.inspect}" }
|
11
|
+
|
12
|
+
# When the method is called from a rescue block, our return value may leak outside of its
|
13
|
+
# intended scope, so let's explicitly return nil here to be safe.
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.log_exception(exception, message = nil, context: nil, logger: AppConfig.connectors_logger)
|
18
|
+
logger.error { message } if message
|
19
|
+
logger.error { generate_stack_trace(exception) }
|
20
|
+
logger.error { "Context: #{context.inspect}" } if context
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.generate_error_message(exception, message, context)
|
24
|
+
context = { :message_id => exception.id }.merge(context || {}) if exception.respond_to?(:id)
|
25
|
+
context_message = context && "Context: #{context.inspect}"
|
26
|
+
['Exception', message, exception.class.to_s, exception.message, context_message]
|
27
|
+
.compact
|
28
|
+
.map { |part| part.to_s.dup.force_encoding('UTF-8') }
|
29
|
+
.join(': ')
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.generate_stack_trace(exception)
|
33
|
+
full_message = exception.full_message
|
34
|
+
|
35
|
+
cause = exception
|
36
|
+
while cause.cause != cause && (cause = cause.cause)
|
37
|
+
full_message << "Cause:\n#{cause.full_message}"
|
38
|
+
end
|
39
|
+
|
40
|
+
full_message.dup.force_encoding('UTF-8')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: connectors_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.3.0.0.pre.
|
4
|
+
version: 8.3.0.0.pre.20220510T144908Z
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -61,19 +61,27 @@ files:
|
|
61
61
|
- LICENSE
|
62
62
|
- NOTICE.txt
|
63
63
|
- lib/connectors_sdk.rb
|
64
|
-
- lib/connectors_sdk/
|
65
|
-
- lib/connectors_sdk/
|
66
|
-
- lib/connectors_sdk/base/.registry.rb.un~
|
64
|
+
- lib/connectors_sdk/atlassian/config.rb
|
65
|
+
- lib/connectors_sdk/atlassian/custom_client.rb
|
67
66
|
- lib/connectors_sdk/base/adapter.rb
|
67
|
+
- lib/connectors_sdk/base/authorization.rb
|
68
68
|
- lib/connectors_sdk/base/config.rb
|
69
69
|
- lib/connectors_sdk/base/custom_client.rb
|
70
70
|
- lib/connectors_sdk/base/extractor.rb
|
71
|
+
- lib/connectors_sdk/base/http_call_wrapper.rb
|
71
72
|
- lib/connectors_sdk/base/registry.rb
|
73
|
+
- lib/connectors_sdk/confluence/adapter.rb
|
74
|
+
- lib/connectors_sdk/confluence/custom_client.rb
|
75
|
+
- lib/connectors_sdk/confluence/extractor.rb
|
76
|
+
- lib/connectors_sdk/confluence_cloud/authorization.rb
|
77
|
+
- lib/connectors_sdk/confluence_cloud/custom_client.rb
|
78
|
+
- lib/connectors_sdk/confluence_cloud/extractor.rb
|
79
|
+
- lib/connectors_sdk/confluence_cloud/http_call_wrapper.rb
|
80
|
+
- lib/connectors_sdk/helpers/atlassian_time_formatter.rb
|
72
81
|
- lib/connectors_sdk/office365/adapter.rb
|
73
82
|
- lib/connectors_sdk/office365/config.rb
|
74
83
|
- lib/connectors_sdk/office365/custom_client.rb
|
75
84
|
- lib/connectors_sdk/office365/extractor.rb
|
76
|
-
- lib/connectors_sdk/share_point/.http_call_wrapper.rb.un~
|
77
85
|
- lib/connectors_sdk/share_point/adapter.rb
|
78
86
|
- lib/connectors_sdk/share_point/authorization.rb
|
79
87
|
- lib/connectors_sdk/share_point/extractor.rb
|
@@ -83,14 +91,19 @@ files:
|
|
83
91
|
- lib/connectors_shared/errors.rb
|
84
92
|
- lib/connectors_shared/exception_tracking.rb
|
85
93
|
- lib/connectors_shared/extension_mapping_util.rb
|
94
|
+
- lib/connectors_shared/extraction_utils.rb
|
86
95
|
- lib/connectors_shared/logger.rb
|
96
|
+
- lib/connectors_shared/middleware/basic_auth.rb
|
97
|
+
- lib/connectors_shared/middleware/bearer_auth.rb
|
98
|
+
- lib/connectors_shared/middleware/restrict_hostnames.rb
|
87
99
|
- lib/connectors_shared/monitor.rb
|
100
|
+
- lib/stubs/enterprise_search/exception_tracking.rb
|
88
101
|
homepage: https://github.com/elastic/connectors
|
89
102
|
licenses:
|
90
103
|
- Elastic-2.0
|
91
104
|
metadata:
|
92
|
-
revision:
|
93
|
-
repository:
|
105
|
+
revision: fb1187beef857b555633e1804eef3ed5e586091d
|
106
|
+
repository: git@github.com:elastic/connectors.git
|
94
107
|
post_install_message:
|
95
108
|
rdoc_options: []
|
96
109
|
require_paths:
|
@@ -106,8 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
119
|
- !ruby/object:Gem::Version
|
107
120
|
version: 1.3.1
|
108
121
|
requirements: []
|
109
|
-
|
110
|
-
rubygems_version: 2.7.7
|
122
|
+
rubygems_version: 3.0.3.1
|
111
123
|
signing_key:
|
112
124
|
specification_version: 4
|
113
125
|
summary: Gem containing apis used by Enterprise Search and implementations of Connectors
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|