You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docuseal/lib/tasks/webhooks.rake

75 lines
2.7 KiB

# frozen_string_literal: true
namespace :webhooks do
desc 'Configure CareerPlug webhook secret from CAREERPLUG_WEBHOOK_SECRET env var'
task configure_careerplug: :environment do
secret = ENV.fetch('CAREERPLUG_WEBHOOK_SECRET') do
if Rails.env.development?
'development_webhook_secret'
else
abort 'CAREERPLUG_WEBHOOK_SECRET environment variable is required'
end
end
webhook_urls = WebhookUrl.where('url LIKE ? OR url LIKE ? OR url LIKE ?',
'%careerplug%', '%cpats%', '%localhost:3000%')
if webhook_urls.any?
webhook_urls.find_each do |webhook_url|
webhook_url.update!(secret: { 'X-CareerPlug-Secret' => secret })
puts "Updated webhook secret for #{webhook_url.url}"
end
puts "Updated #{webhook_urls.count} webhook URL(s)"
else
puts 'No CareerPlug webhook URLs found. Available webhooks:'
WebhookUrl.find_each { |w| puts " - #{w.id}: #{w.url}" }
end
end
desc 'Set up development webhook URLs for all accounts and partnerships (creates URLs + configures secret)'
task setup_development: :environment do
abort 'This task is only for development' unless Rails.env.development?
url = 'http://localhost:3000/api/docuseal/events'
secret = { 'X-CareerPlug-Secret' => 'development_webhook_secret' }
sha1 = Digest::SHA1.hexdigest(url)
account_events = %w[form.viewed form.started form.completed form.declined template.preferences_updated]
partnership_events = %w[template.preferences_updated]
created = 0
updated = 0
Account.find_each do |account|
webhook_url = WebhookUrl.find_or_initialize_by(account:, sha1:)
if webhook_url.new_record?
webhook_url.assign_attributes(url:, events: account_events, secret:)
webhook_url.save!
created += 1
puts "Created webhook URL for account #{account.id}: #{account.name}"
elsif webhook_url.secret != secret
webhook_url.update!(secret:)
updated += 1
puts "Updated webhook secret for account #{account.id}: #{account.name}"
end
end
Partnership.find_each do |partnership|
webhook_url = WebhookUrl.find_or_initialize_by(partnership:, sha1:)
if webhook_url.new_record?
webhook_url.assign_attributes(url:, events: partnership_events, secret:)
webhook_url.save!
created += 1
puts "Created webhook URL for partnership #{partnership.id}: #{partnership.name}"
elsif webhook_url.secret != secret
webhook_url.update!(secret:)
updated += 1
puts "Updated webhook secret for partnership #{partnership.id}: #{partnership.name}"
end
end
puts "Done: #{created} created, #{updated} updated"
end
end