diff options
author | Claire <claire.github-309c@sitedethib.com> | 2022-06-10 19:19:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-10 19:19:31 +0200 |
commit | 970f06331bc7e482226e974c468b559a9e2f3fa3 (patch) | |
tree | 5435ce8e4d315b83453b42a5391d289d765a2a58 /app/models/webhook.rb | |
parent | 3d841eba69b340aac4f012fb388f9e9761ec2ba5 (diff) | |
parent | d064476c4a111708fe8193ff56ebd307dd4f5a0c (diff) |
Merge pull request #1797 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/models/webhook.rb')
-rw-r--r-- | app/models/webhook.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/app/models/webhook.rb b/app/models/webhook.rb new file mode 100644 index 000000000..431edd75d --- /dev/null +++ b/app/models/webhook.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: webhooks +# +# id :bigint(8) not null, primary key +# url :string not null +# events :string default([]), not null, is an Array +# secret :string default(""), not null +# enabled :boolean default(TRUE), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class Webhook < ApplicationRecord + EVENTS = %w( + account.created + report.created + ).freeze + + scope :enabled, -> { where(enabled: true) } + + validates :url, presence: true, url: true + validates :secret, presence: true, length: { minimum: 12 } + validates :events, presence: true + + validate :validate_events + + before_validation :strip_events + before_validation :generate_secret + + def rotate_secret! + update!(secret: SecureRandom.hex(20)) + end + + def enable! + update!(enabled: true) + end + + def disable! + update!(enabled: false) + end + + private + + def validate_events + errors.add(:events, :invalid) if events.any? { |e| !EVENTS.include?(e) } + end + + def strip_events + self.events = events.map { |str| str.strip.presence }.compact if events.present? + end + + def generate_secret + self.secret = SecureRandom.hex(20) if secret.blank? + end +end |