change open/read timeout for webhook requests
This commit is contained in:
@@ -5,8 +5,6 @@ class SendFormCompletedWebhookRequestJob
|
|||||||
|
|
||||||
sidekiq_options queue: :webhooks
|
sidekiq_options queue: :webhooks
|
||||||
|
|
||||||
USER_AGENT = 'DocuSeal.com Webhook'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS = 20
|
MAX_ATTEMPTS = 20
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
@@ -21,19 +19,8 @@ class SendFormCompletedWebhookRequestJob
|
|||||||
|
|
||||||
ActiveStorage::Current.url_options = Docuseal.default_url_options
|
ActiveStorage::Current.url_options = Docuseal.default_url_options
|
||||||
|
|
||||||
resp = begin
|
resp = SendWebhookRequest.call(webhook_url, event_type: 'form.completed',
|
||||||
Faraday.post(webhook_url.url,
|
data: Submitters::SerializeForWebhook.call(submitter))
|
||||||
{
|
|
||||||
event_type: 'form.completed',
|
|
||||||
timestamp: Time.current,
|
|
||||||
data: Submitters::SerializeForWebhook.call(submitter)
|
|
||||||
}.to_json,
|
|
||||||
'Content-Type' => 'application/json',
|
|
||||||
'User-Agent' => USER_AGENT,
|
|
||||||
**webhook_url.secret.to_h)
|
|
||||||
rescue Faraday::Error
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
||||||
(!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan))
|
(!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan))
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class SendFormDeclinedWebhookRequestJob
|
|||||||
|
|
||||||
sidekiq_options queue: :webhooks
|
sidekiq_options queue: :webhooks
|
||||||
|
|
||||||
USER_AGENT = 'DocuSeal.com Webhook'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS = 10
|
MAX_ATTEMPTS = 10
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
@@ -19,19 +17,8 @@ class SendFormDeclinedWebhookRequestJob
|
|||||||
|
|
||||||
ActiveStorage::Current.url_options = Docuseal.default_url_options
|
ActiveStorage::Current.url_options = Docuseal.default_url_options
|
||||||
|
|
||||||
resp = begin
|
resp = SendWebhookRequest.call(webhook_url, event_type: 'form.declined',
|
||||||
Faraday.post(webhook_url.url,
|
data: Submitters::SerializeForWebhook.call(submitter))
|
||||||
{
|
|
||||||
event_type: 'form.declined',
|
|
||||||
timestamp: Time.current,
|
|
||||||
data: Submitters::SerializeForWebhook.call(submitter)
|
|
||||||
}.to_json,
|
|
||||||
**webhook_url.secret.to_h,
|
|
||||||
'Content-Type' => 'application/json',
|
|
||||||
'User-Agent' => USER_AGENT)
|
|
||||||
rescue Faraday::Error
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
||||||
(!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan))
|
(!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan))
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class SendFormStartedWebhookRequestJob
|
|||||||
|
|
||||||
sidekiq_options queue: :webhooks
|
sidekiq_options queue: :webhooks
|
||||||
|
|
||||||
USER_AGENT = 'DocuSeal.com Webhook'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS = 10
|
MAX_ATTEMPTS = 10
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
@@ -19,19 +17,8 @@ class SendFormStartedWebhookRequestJob
|
|||||||
|
|
||||||
ActiveStorage::Current.url_options = Docuseal.default_url_options
|
ActiveStorage::Current.url_options = Docuseal.default_url_options
|
||||||
|
|
||||||
resp = begin
|
resp = SendWebhookRequest.call(webhook_url, event_type: 'form.started',
|
||||||
Faraday.post(webhook_url.url,
|
data: Submitters::SerializeForWebhook.call(submitter))
|
||||||
{
|
|
||||||
event_type: 'form.started',
|
|
||||||
timestamp: Time.current,
|
|
||||||
data: Submitters::SerializeForWebhook.call(submitter)
|
|
||||||
}.to_json,
|
|
||||||
**webhook_url.secret.to_h,
|
|
||||||
'Content-Type' => 'application/json',
|
|
||||||
'User-Agent' => USER_AGENT)
|
|
||||||
rescue Faraday::Error
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
||||||
(!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan))
|
(!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan))
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class SendFormViewedWebhookRequestJob
|
|||||||
|
|
||||||
sidekiq_options queue: :webhooks
|
sidekiq_options queue: :webhooks
|
||||||
|
|
||||||
USER_AGENT = 'DocuSeal.com Webhook'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS = 10
|
MAX_ATTEMPTS = 10
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
@@ -19,19 +17,8 @@ class SendFormViewedWebhookRequestJob
|
|||||||
|
|
||||||
ActiveStorage::Current.url_options = Docuseal.default_url_options
|
ActiveStorage::Current.url_options = Docuseal.default_url_options
|
||||||
|
|
||||||
resp = begin
|
resp = SendWebhookRequest.call(webhook_url, event_type: 'form.viewed',
|
||||||
Faraday.post(webhook_url.url,
|
data: Submitters::SerializeForWebhook.call(submitter))
|
||||||
{
|
|
||||||
event_type: 'form.viewed',
|
|
||||||
timestamp: Time.current,
|
|
||||||
data: Submitters::SerializeForWebhook.call(submitter)
|
|
||||||
}.to_json,
|
|
||||||
**webhook_url.secret.to_h,
|
|
||||||
'Content-Type' => 'application/json',
|
|
||||||
'User-Agent' => USER_AGENT)
|
|
||||||
rescue Faraday::Error
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
||||||
(!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan))
|
(!Docuseal.multitenant? || submitter.account.account_configs.exists?(key: :plan))
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class SendSubmissionArchivedWebhookRequestJob
|
|||||||
|
|
||||||
sidekiq_options queue: :webhooks
|
sidekiq_options queue: :webhooks
|
||||||
|
|
||||||
USER_AGENT = 'DocuSeal.com Webhook'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS = 10
|
MAX_ATTEMPTS = 10
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
@@ -17,19 +15,8 @@ class SendSubmissionArchivedWebhookRequestJob
|
|||||||
|
|
||||||
return if webhook_url.url.blank? || webhook_url.events.exclude?('submission.archived')
|
return if webhook_url.url.blank? || webhook_url.events.exclude?('submission.archived')
|
||||||
|
|
||||||
resp = begin
|
resp = SendWebhookRequest.call(webhook_url, event_type: 'submission.archived',
|
||||||
Faraday.post(webhook_url.url,
|
data: submission.as_json(only: %i[id archived_at]))
|
||||||
{
|
|
||||||
event_type: 'submission.archived',
|
|
||||||
timestamp: Time.current,
|
|
||||||
data: submission.as_json(only: %i[id archived_at])
|
|
||||||
}.to_json,
|
|
||||||
**webhook_url.secret.to_h,
|
|
||||||
'Content-Type' => 'application/json',
|
|
||||||
'User-Agent' => USER_AGENT)
|
|
||||||
rescue Faraday::Error
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
||||||
(!Docuseal.multitenant? || submission.account.account_configs.exists?(key: :plan))
|
(!Docuseal.multitenant? || submission.account.account_configs.exists?(key: :plan))
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class SendSubmissionCompletedWebhookRequestJob
|
|||||||
|
|
||||||
sidekiq_options queue: :webhooks
|
sidekiq_options queue: :webhooks
|
||||||
|
|
||||||
USER_AGENT = 'DocuSeal.com Webhook'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS = 10
|
MAX_ATTEMPTS = 10
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
@@ -17,19 +15,8 @@ class SendSubmissionCompletedWebhookRequestJob
|
|||||||
|
|
||||||
return if webhook_url.url.blank? || webhook_url.events.exclude?('submission.completed')
|
return if webhook_url.url.blank? || webhook_url.events.exclude?('submission.completed')
|
||||||
|
|
||||||
resp = begin
|
resp = SendWebhookRequest.call(webhook_url, event_type: 'submission.completed',
|
||||||
Faraday.post(webhook_url.url,
|
data: Submissions::SerializeForApi.call(submission))
|
||||||
{
|
|
||||||
event_type: 'submission.completed',
|
|
||||||
timestamp: Time.current,
|
|
||||||
data: Submissions::SerializeForApi.call(submission)
|
|
||||||
}.to_json,
|
|
||||||
'Content-Type' => 'application/json',
|
|
||||||
'User-Agent' => USER_AGENT,
|
|
||||||
**webhook_url.secret.to_h)
|
|
||||||
rescue Faraday::Error
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
||||||
(!Docuseal.multitenant? || submission.account.account_configs.exists?(key: :plan))
|
(!Docuseal.multitenant? || submission.account.account_configs.exists?(key: :plan))
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class SendSubmissionCreatedWebhookRequestJob
|
|||||||
|
|
||||||
sidekiq_options queue: :webhooks
|
sidekiq_options queue: :webhooks
|
||||||
|
|
||||||
USER_AGENT = 'DocuSeal.com Webhook'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS = 10
|
MAX_ATTEMPTS = 10
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
@@ -17,19 +15,8 @@ class SendSubmissionCreatedWebhookRequestJob
|
|||||||
|
|
||||||
return if webhook_url.url.blank? || webhook_url.events.exclude?('submission.created')
|
return if webhook_url.url.blank? || webhook_url.events.exclude?('submission.created')
|
||||||
|
|
||||||
resp = begin
|
resp = SendWebhookRequest.call(webhook_url, event_type: 'submission.created',
|
||||||
Faraday.post(webhook_url.url,
|
data: Submissions::SerializeForApi.call(submission))
|
||||||
{
|
|
||||||
event_type: 'submission.created',
|
|
||||||
timestamp: Time.current,
|
|
||||||
data: Submissions::SerializeForApi.call(submission)
|
|
||||||
}.to_json,
|
|
||||||
**webhook_url.secret.to_h,
|
|
||||||
'Content-Type' => 'application/json',
|
|
||||||
'User-Agent' => USER_AGENT)
|
|
||||||
rescue Faraday::Error
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
||||||
(!Docuseal.multitenant? || submission.account.account_configs.exists?(key: :plan))
|
(!Docuseal.multitenant? || submission.account.account_configs.exists?(key: :plan))
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class SendTemplateCreatedWebhookRequestJob
|
|||||||
|
|
||||||
sidekiq_options queue: :webhooks
|
sidekiq_options queue: :webhooks
|
||||||
|
|
||||||
USER_AGENT = 'DocuSeal.com Webhook'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS = 10
|
MAX_ATTEMPTS = 10
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
@@ -17,19 +15,8 @@ class SendTemplateCreatedWebhookRequestJob
|
|||||||
|
|
||||||
return if webhook_url.url.blank? || webhook_url.events.exclude?('template.created')
|
return if webhook_url.url.blank? || webhook_url.events.exclude?('template.created')
|
||||||
|
|
||||||
resp = begin
|
resp = SendWebhookRequest.call(webhook_url, event_type: 'template.created',
|
||||||
Faraday.post(webhook_url.url,
|
data: Templates::SerializeForApi.call(template))
|
||||||
{
|
|
||||||
event_type: 'template.created',
|
|
||||||
timestamp: Time.current,
|
|
||||||
data: Templates::SerializeForApi.call(template)
|
|
||||||
}.to_json,
|
|
||||||
**webhook_url.secret.to_h,
|
|
||||||
'Content-Type' => 'application/json',
|
|
||||||
'User-Agent' => USER_AGENT)
|
|
||||||
rescue Faraday::Error
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
||||||
(!Docuseal.multitenant? || template.account.account_configs.exists?(key: :plan))
|
(!Docuseal.multitenant? || template.account.account_configs.exists?(key: :plan))
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class SendTemplateUpdatedWebhookRequestJob
|
|||||||
|
|
||||||
sidekiq_options queue: :webhooks
|
sidekiq_options queue: :webhooks
|
||||||
|
|
||||||
USER_AGENT = 'DocuSeal.com Webhook'
|
|
||||||
|
|
||||||
MAX_ATTEMPTS = 10
|
MAX_ATTEMPTS = 10
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
@@ -17,19 +15,8 @@ class SendTemplateUpdatedWebhookRequestJob
|
|||||||
|
|
||||||
return if webhook_url.url.blank? || webhook_url.events.exclude?('template.updated')
|
return if webhook_url.url.blank? || webhook_url.events.exclude?('template.updated')
|
||||||
|
|
||||||
resp = begin
|
resp = SendWebhookRequest.call(webhook_url, event_type: 'template.updated',
|
||||||
Faraday.post(webhook_url.url,
|
data: Templates::SerializeForApi.call(template))
|
||||||
{
|
|
||||||
event_type: 'template.updated',
|
|
||||||
timestamp: Time.current,
|
|
||||||
data: Templates::SerializeForApi.call(template)
|
|
||||||
}.to_json,
|
|
||||||
**webhook_url.secret.to_h,
|
|
||||||
'Content-Type' => 'application/json',
|
|
||||||
'User-Agent' => USER_AGENT)
|
|
||||||
rescue Faraday::Error
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
if (resp.nil? || resp.status.to_i >= 400) && attempt <= MAX_ATTEMPTS &&
|
||||||
(!Docuseal.multitenant? || template.account.account_configs.exists?(key: :plan))
|
(!Docuseal.multitenant? || template.account.account_configs.exists?(key: :plan))
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module SendWebhookRequest
|
||||||
|
USER_AGENT = 'DocuSeal.com Webhook'
|
||||||
|
|
||||||
|
module_function
|
||||||
|
|
||||||
|
def call(webhook_url, event_type:, data:)
|
||||||
|
Faraday.post(webhook_url.url) do |req|
|
||||||
|
req.headers['Content-Type'] = 'application/json'
|
||||||
|
req.headers['User-Agent'] = USER_AGENT
|
||||||
|
req.headers.merge!(webhook_url.secret.to_h) if webhook_url.secret.present?
|
||||||
|
|
||||||
|
req.body = {
|
||||||
|
event_type: event_type,
|
||||||
|
timestamp: Time.current,
|
||||||
|
data: data
|
||||||
|
}.to_json
|
||||||
|
|
||||||
|
req.options.read_timeout = 8
|
||||||
|
req.options.open_timeout = 8
|
||||||
|
end
|
||||||
|
rescue Faraday::Error
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user