connectors_sdk 8.3.0.0.pre.20220414T060419Z → 8.3.0.0.pre.20220510T144908Z
Sign up to get free protection for your applications and to get access to all the features.
- 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
|