use webhook urls instead of encrypted configs

This commit is contained in:
Alex Turchyn
2024-10-28 20:39:09 +02:00
committed by Pete Matsyburka
parent f669045362
commit 84edb6dbda
50 changed files with 1350 additions and 269 deletions
@@ -67,8 +67,11 @@ module Api
submissions = create_submissions(@template, params)
submissions.each do |submission|
SendSubmissionCreatedWebhookRequestJob.perform_async({ 'submission_id' => submission.id })
@template.account.webhook_urls.with_event('submission.created').each do |webhook_url|
submissions.each do |submission|
SendSubmissionCreatedWebhookRequestJob.perform_async({ 'submission_id' => submission.id,
'webhook_url_id' => webhook_url.id })
end
end
Submissions.send_signature_requests(submissions)
@@ -93,7 +96,10 @@ module Api
else
@submission.update!(archived_at: Time.current)
SendSubmissionArchivedWebhookRequestJob.perform_async('submission_id' => @submission.id)
@submission.account.webhook_urls.with_event('submission.archived').each do |webhook_url|
SendSubmissionArchivedWebhookRequestJob.perform_async({ 'submission_id' => @submission.id,
'webhook_url_id' => webhook_url.id })
end
end
render json: @submission.as_json(only: %i[id archived_at])
@@ -13,7 +13,10 @@ module Api
SubmissionEvents.create_with_tracking_data(submitter, 'view_form', request)
SendFormViewedWebhookRequestJob.perform_async({ 'submitter_id' => submitter.id })
submitter.account.webhook_urls.with_event('form.viewed').each do |webhook_url|
SendFormViewedWebhookRequestJob.perform_async({ 'submitter_id' => submitter.id,
'webhook_url_id' => webhook_url.id })
end
render json: {}
end
@@ -25,7 +25,10 @@ module Api
schema_documents = Templates::CloneAttachments.call(template: cloned_template, original_template: @template)
SendTemplateCreatedWebhookRequestJob.perform_async('template_id' => cloned_template.id)
cloned_template.account.webhook_urls.with_event('template.created').each do |webhook_url|
SendTemplateCreatedWebhookRequestJob.perform_async({ 'template_id' => cloned_template.id,
'webhook_url_id' => webhook_url.id })
end
render json: Templates::SerializeForApi.call(cloned_template, schema_documents)
end
+4 -1
View File
@@ -65,7 +65,10 @@ module Api
@template.update!(template_params)
SendTemplateUpdatedWebhookRequestJob.perform_async('template_id' => @template.id)
@template.account.webhook_urls.with_event('template.updated').each do |webhook_url|
SendTemplateUpdatedWebhookRequestJob.perform_async({ 'template_id' => @template.id,
'webhook_url_id' => webhook_url.id })
end
render json: @template.as_json(only: %i[id updated_at])
end
+4 -1
View File
@@ -38,7 +38,10 @@ class StartFormController < ApplicationController
if @submitter.save
if is_new_record
SendSubmissionCreatedWebhookRequestJob.perform_async({ 'submission_id' => @submitter.submission.id })
@submitter.account.webhook_urls.with_event('submission.created').each do |webhook_url|
SendSubmissionCreatedWebhookRequestJob.perform_async({ 'submission_id' => @submitter.submission_id,
'webhook_url_id' => webhook_url.id })
end
end
redirect_to submit_form_path(@submitter.slug)
+14 -4
View File
@@ -50,9 +50,7 @@ class SubmissionsController < ApplicationController
params: params.merge('send_completed_email' => true))
end
submissions.each do |submission|
SendSubmissionCreatedWebhookRequestJob.perform_async({ 'submission_id' => submission.id })
end
enqueue_submission_created_webhooks(@template, submissions)
Submissions.send_signature_requests(submissions)
@@ -68,7 +66,10 @@ class SubmissionsController < ApplicationController
else
@submission.update!(archived_at: Time.current)
SendSubmissionArchivedWebhookRequestJob.perform_async('submission_id' => @submission.id)
@submission.account.webhook_urls.with_event('submission.archived').each do |webhook_url|
SendSubmissionArchivedWebhookRequestJob.perform_async({ 'submission_id' => @submission.id,
'webhook_url_id' => webhook_url.id })
end
I18n.t('submission_has_been_archived')
end
@@ -85,6 +86,15 @@ class SubmissionsController < ApplicationController
template.save!
end
def enqueue_submission_created_webhooks(template, submissions)
template.account.webhook_urls.with_event('submission.created').each do |webhook_url|
submissions.each do |submission|
SendSubmissionCreatedWebhookRequestJob.perform_async({ 'submission_id' => submission.id,
'webhook_url_id' => webhook_url.id })
end
end
end
def submissions_params
params.permit(submission: { submitters: [%i[uuid email phone name]] })
end
@@ -25,7 +25,10 @@ class SubmitFormDeclineController < ApplicationController
SubmitterMailer.declined_email(submitter, user).deliver_later!
end
SendFormDeclinedWebhookRequestJob.perform_async('submitter_id' => submitter.id)
submitter.account.webhook_urls.with_event('form.declined').each do |webhook_url|
SendFormDeclinedWebhookRequestJob.perform_async({ 'submitter_id' => submitter.id,
'webhook_url_id' => webhook_url.id })
end
redirect_to submit_form_path(submitter.slug)
end
+16 -2
View File
@@ -66,7 +66,7 @@ class TemplatesController < ApplicationController
if @template.save
Templates::CloneAttachments.call(template: @template, original_template: @base_template) if @base_template
SendTemplateUpdatedWebhookRequestJob.perform_async('template_id' => @template.id)
enqueue_template_created_webhooks(@template)
maybe_redirect_to_template(@template)
else
@@ -77,7 +77,7 @@ class TemplatesController < ApplicationController
def update
@template.update!(template_params)
SendTemplateUpdatedWebhookRequestJob.perform_async('template_id' => @template.id)
enqueue_template_updated_webhooks(@template)
head :ok
end
@@ -128,6 +128,20 @@ class TemplatesController < ApplicationController
end
end
def enqueue_template_created_webhooks(template)
template.account.webhook_urls.with_event('template.updated').each do |webhook_url|
SendTemplateCreatedWebhookRequestJob.perform_async({ 'template_id' => template.id,
'webhook_url_id' => webhook_url.id })
end
end
def enqueue_template_updated_webhooks(template)
template.account.webhook_urls.with_event('template.updated').each do |webhook_url|
SendTemplateUpdatedWebhookRequestJob.perform_async({ 'template_id' => template.id,
'webhook_url_id' => webhook_url.id })
end
end
def load_base_template
return if params[:base_template_id].blank?
@@ -23,7 +23,7 @@ class TemplatesUploadsController < ApplicationController
@template.update!(schema:)
SendTemplateCreatedWebhookRequestJob.perform_async('template_id' => @template.id)
enqueue_template_created_webhooks(@template)
redirect_to edit_template_path(@template)
rescue Templates::CreateAttachments::PdfEncrypted
@@ -65,4 +65,11 @@ class TemplatesUploadsController < ApplicationController
{ files: [file] }
end
def enqueue_template_created_webhooks(template)
template.account.webhook_urls.with_event('template.created').each do |webhook_url|
SendTemplateCreatedWebhookRequestJob.perform_async({ 'template_id' => template.id,
'webhook_url_id' => webhook_url.id })
end
end
end
@@ -4,9 +4,8 @@ class TestingApiSettingsController < ApplicationController
def index
authorize!(:manage, current_user.access_token)
@webhook_config =
current_account.encrypted_configs.find_or_initialize_by(key: EncryptedConfig::WEBHOOK_URL_KEY)
@webhook_url = current_account.webhook_urls.first_or_initialize
authorize!(:manage, @webhook_config)
authorize!(:manage, @webhook_url)
end
end
@@ -1,37 +0,0 @@
# frozen_string_literal: true
class WebhookPreferencesController < ApplicationController
EVENTS = %w[
form.viewed
form.started
form.completed
form.declined
template.created
template.updated
submission.created
submission.archived
].freeze
before_action :load_account_config
authorize_resource :account_config, parent: false
def create
@account_config.value[account_config_params[:event]] = account_config_params[:value] == '1'
@account_config.save!
head :ok
end
private
def load_account_config
@account_config =
current_account.account_configs.find_or_initialize_by(key: AccountConfig::WEBHOOK_PREFERENCES_KEY)
@account_config.value ||= {}
end
def account_config_params
params.permit(:event, :value)
end
end
+7 -15
View File
@@ -1,29 +1,21 @@
# frozen_string_literal: true
class WebhookSecretController < ApplicationController
before_action :load_encrypted_config
authorize_resource :encrypted_config, parent: false
load_and_authorize_resource :webhook_url, parent: false
def index; end
def show; end
def create
@encrypted_config.assign_attributes(value: {
encrypted_config_params[:key] => encrypted_config_params[:value]
def update
@webhook_url.update!(secret: {
webhook_secret_params[:key] => webhook_secret_params[:value]
}.compact_blank)
@encrypted_config.value.present? ? @encrypted_config.save! : @encrypted_config.delete
redirect_back(fallback_location: settings_webhooks_path, notice: I18n.t('webhook_secret_has_been_saved'))
end
private
def load_encrypted_config
@encrypted_config =
current_account.encrypted_configs.find_or_initialize_by(key: EncryptedConfig::WEBHOOK_SECRET_KEY)
end
def encrypted_config_params
params.require(:encrypted_config).permit(value: %i[key value]).fetch(:value, {})
def webhook_secret_params
params.require(:webhook_url).permit(secret: %i[key value]).fetch(:secret, {})
end
end
+9 -10
View File
@@ -1,15 +1,15 @@
# frozen_string_literal: true
class WebhookSettingsController < ApplicationController
before_action :load_encrypted_config
authorize_resource :encrypted_config, parent: false
before_action :load_webhook_url
authorize_resource :webhook_url, parent: false
def show; end
def create
@encrypted_config.assign_attributes(encrypted_config_params)
@webhook_url.assign_attributes(webhook_params)
@encrypted_config.value.present? ? @encrypted_config.save! : @encrypted_config.delete
@webhook_url.url.present? ? @webhook_url.save! : @webhook_url.delete
redirect_back(fallback_location: settings_webhooks_path, notice: I18n.t('webhook_url_has_been_saved'))
end
@@ -18,19 +18,18 @@ class WebhookSettingsController < ApplicationController
submitter = current_account.submitters.where.not(completed_at: nil).order(:id).last
SendFormCompletedWebhookRequestJob.perform_async({ 'submitter_id' => submitter.id,
'encrypted_config_id' => @encrypted_config.id })
'webhook_url_id' => @webhook_url.id })
redirect_back(fallback_location: settings_webhooks_path, notice: I18n.t('webhook_request_has_been_sent'))
end
private
def load_encrypted_config
@encrypted_config =
current_account.encrypted_configs.find_or_initialize_by(key: EncryptedConfig::WEBHOOK_URL_KEY)
def load_webhook_url
@webhook_url = current_account.webhook_urls.first_or_initialize
end
def encrypted_config_params
params.require(:encrypted_config).permit(:value)
def webhook_params
params.require(:webhook_url).permit(:url, events: [])
end
end