lib/embulk/input/zendesk/client.rb in embulk-input-zendesk-0.2.9 vs lib/embulk/input/zendesk/client.rb in embulk-input-zendesk-0.2.10
- old
+ new
@@ -41,10 +41,11 @@
end
def validate_config
validate_credentials
validate_target
+ validate_app_marketplace
end
def validate_credentials
valid = case config[:auth_method]
when "basic"
@@ -66,10 +67,19 @@
unless AVAILABLE_TARGETS.include?(config[:target])
raise Embulk::ConfigError.new("target: '#{config[:target]}' is not supported. Supported targets are #{AVAILABLE_TARGETS.join(", ")}.")
end
end
+ def validate_app_marketplace
+ valid = config[:app_marketplace_integration_name] && config[:app_marketplace_org_id] && config[:app_marketplace_app_id]
+ valid = valid || (!config[:app_marketplace_integration_name] && !config[:app_marketplace_org_id] && !config[:app_marketplace_app_id])
+
+ unless valid
+ raise Embulk::ConfigError.new("All of app_marketplace_integration_name, app_marketplace_org_id, app_marketplace_app_id are required to fill out for Apps Marketplace API header")
+ end
+ end
+
# they have both Incremental API and non-incremental API
# 170717: `ticket_events` can use standard endpoint format now, ie. `<target>.json`
%w(tickets ticket_events users organizations).each do |target|
define_method(target) do |partial = true, start_time = 0, &block|
# Always use incremental_export. There is some difference between incremental_export and export.
@@ -253,13 +263,22 @@
def request(path, query = {})
u = URI.parse(config[:login_url])
u.path = path
+ # https://help.zendesk.com/hc/en-us/articles/115010249348-Announcing-Updated-Apps-Marketplace-API-Header-Requirementsmerg
+ extheader = {}
+
+ if config[:app_marketplace_integration_name] && config[:app_marketplace_org_id] && config[:app_marketplace_app_id]
+ extheader = {"X-Zendesk-Marketplace-Name" => config[:app_marketplace_integration_name],
+ "X-Zendesk-Marketplace-Organization-Id" => config[:app_marketplace_org_id],
+ "X-Zendesk-Marketplace-App-Id" => config[:app_marketplace_app_id]}
+ end
+
retryer.with_retry do
Embulk.logger.debug "Fetching #{u.to_s}"
- response = httpclient.get(u.to_s, query, follow_redirect: true)
+ response = httpclient.get(u.to_s, query, extheader)
handle_response(response.status, response.headers, response.body)
response
end
end
@@ -269,14 +288,23 @@
# Disconnect socket when received PARTIAL_RECORDS_BYTE_SIZE bytes,
# And extract valid JSONs from received bytes (extract_valid_json_from_chunk method)
u = URI.parse(config[:login_url])
u.path = path
+ # https://help.zendesk.com/hc/en-us/articles/115010249348-Announcing-Updated-Apps-Marketplace-API-Header-Requirementsmerg
+ extheader = {}
+
+ if config[:app_marketplace_integration_name] && config[:app_marketplace_org_id] && config[:app_marketplace_app_id]
+ extheader = {"X-Zendesk-Marketplace-Name" => config[:app_marketplace_integration_name],
+ "X-Zendesk-Marketplace-Organization-Id" => config[:app_marketplace_org_id],
+ "X-Zendesk-Marketplace-App-Id" => config[:app_marketplace_app_id]}
+ end
+
retryer.with_retry do
Embulk.logger.debug "Fetching #{u.to_s}"
buf = ""
auth_retry = 0
- httpclient.get(u.to_s, query, follow_redirect: true) do |message, chunk|
+ httpclient.get(u.to_s, query, extheader) do |message, chunk|
if message.status == 401
# First request will fail by 401 because not included credentials.
# HTTPClient will retry request with credentials.
if auth_retry.zero?
auth_retry += 1