mirror of https://github.com/docusealco/docuseal
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.
54 lines
1.4 KiB
54 lines
1.4 KiB
# frozen_string_literal: true
|
|
|
|
class PopulateWebhookUrls < ActiveRecord::Migration[7.2]
|
|
disable_ddl_transaction
|
|
|
|
class MigrationWebhookUrl < ActiveRecord::Base
|
|
self.table_name = 'webhook_urls'
|
|
|
|
serialize :events, coder: JSON
|
|
serialize :secret, coder: JSON
|
|
|
|
encrypts :url, :secret
|
|
end
|
|
|
|
class MigrationEncryptedConfig < ActiveRecord::Base
|
|
self.table_name = 'encrypted_configs'
|
|
|
|
encrypts :value
|
|
serialize :value, coder: JSON
|
|
end
|
|
|
|
class MigrationAccountConfig < ActiveRecord::Base
|
|
self.table_name = 'account_configs'
|
|
|
|
serialize :value, coder: JSON
|
|
end
|
|
|
|
def up
|
|
MigrationEncryptedConfig.where(key: 'webhook_url').find_each do |config|
|
|
webhook_url = MigrationWebhookUrl.find_or_initialize_by(account_id: config.account_id,
|
|
sha1: Digest::SHA1.hexdigest(config.value))
|
|
|
|
webhook_url.secret =
|
|
MigrationEncryptedConfig.find_by(account_id: config.account_id, key: 'webhook_secret')&.value.to_h
|
|
|
|
preferences =
|
|
MigrationAccountConfig.find_by(account_id: config.account_id, key: 'webhook_preferences')&.value.to_h
|
|
|
|
events = %w[form.viewed form.started form.completed form.declined].reject { |event| preferences[event] == false }
|
|
|
|
events += preferences.compact_blank.keys
|
|
|
|
webhook_url.events = events.uniq
|
|
webhook_url.url = config.value
|
|
|
|
webhook_url.save!
|
|
end
|
|
end
|
|
|
|
def down
|
|
nil
|
|
end
|
|
end
|