diff options
Diffstat (limited to 'app/models/project_services/emails_on_push_service.rb')
-rw-r--r-- | app/models/project_services/emails_on_push_service.rb | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/app/models/project_services/emails_on_push_service.rb b/app/models/project_services/emails_on_push_service.rb deleted file mode 100644 index cdb69684d16..00000000000 --- a/app/models/project_services/emails_on_push_service.rb +++ /dev/null @@ -1,97 +0,0 @@ -# frozen_string_literal: true - -class EmailsOnPushService < Service - include NotificationBranchSelection - - RECIPIENTS_LIMIT = 750 - - boolean_accessor :send_from_committer_email - boolean_accessor :disable_diffs - prop_accessor :recipients, :branches_to_be_notified - validates :recipients, presence: true, if: :validate_recipients? - validate :number_of_recipients_within_limit, if: :validate_recipients? - - def self.valid_recipients(recipients) - recipients.split.select do |recipient| - recipient.include?('@') - end.uniq(&:downcase) - end - - def title - s_('EmailsOnPushService|Emails on push') - end - - def description - s_('EmailsOnPushService|Email the commits and diff of each push to a list of recipients.') - end - - def self.to_param - 'emails_on_push' - end - - def self.supported_events - %w(push tag_push) - end - - def initialize_properties - super - - self.branches_to_be_notified = 'all' if branches_to_be_notified.nil? - end - - def execute(push_data) - return unless supported_events.include?(push_data[:object_kind]) - return if project.emails_disabled? - return unless notify_for_ref?(push_data) - - EmailsOnPushWorker.perform_async( - project_id, - recipients, - push_data, - send_from_committer_email: send_from_committer_email?, - disable_diffs: disable_diffs? - ) - end - - def notify_for_ref?(push_data) - return true if push_data[:object_kind] == 'tag_push' - return true if push_data.dig(:object_attributes, :tag) - - notify_for_branch?(push_data) - end - - def send_from_committer_email? - Gitlab::Utils.to_boolean(self.send_from_committer_email) - end - - def disable_diffs? - Gitlab::Utils.to_boolean(self.disable_diffs) - end - - def fields - domains = Notify.allowed_email_domains.map { |domain| "user@#{domain}" }.join(", ") - [ - { type: 'checkbox', name: 'send_from_committer_email', title: s_("EmailsOnPushService|Send from committer"), - help: s_("EmailsOnPushService|Send notifications from the committer's email address if the domain matches the domain used by your GitLab instance (such as %{domains}).") % { domains: domains } }, - { type: 'checkbox', name: 'disable_diffs', title: s_("EmailsOnPushService|Disable code diffs"), - help: s_("EmailsOnPushService|Don't include possibly sensitive code diffs in notification body.") }, - { type: 'select', name: 'branches_to_be_notified', choices: branch_choices }, - { - type: 'textarea', - name: 'recipients', - placeholder: s_('EmailsOnPushService|tanuki@example.com gitlab@example.com'), - help: s_('EmailsOnPushService|Emails separated by whitespace.') - } - ] - end - - private - - def number_of_recipients_within_limit - return if recipients.blank? - - if self.class.valid_recipients(recipients).size > RECIPIENTS_LIMIT - errors.add(:recipients, s_("EmailsOnPushService|can't exceed %{recipients_limit}") % { recipients_limit: RECIPIENTS_LIMIT }) - end - end -end |