summaryrefslogtreecommitdiff
path: root/app/helpers/web_hooks/web_hooks_helper.rb
blob: bda9bf58fb7917667c00b30b8cbcdd4a2ce06a63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# frozen_string_literal: true

module WebHooks
  module WebHooksHelper
    EXPIRY_TTL = 1.hour

    def show_project_hook_failed_callout?(project:)
      return false if project_hook_page?
      return false unless current_user
      return false unless Ability.allowed?(current_user, :read_web_hooks, project)

      # Assumes include of Users::CalloutsHelper
      return false if web_hook_disabled_dismissed?(project)

      any_project_hook_failed?(project) # Most expensive query last
    end

    private

    def any_project_hook_failed?(project)
      Rails.cache.fetch("any_web_hook_failed:#{project.id}", expires_in: EXPIRY_TTL) do
        ProjectHook.for_projects(project).disabled.exists?
      end
    end

    def project_hook_page?
      current_controller?('projects/hooks') || current_controller?('projects/hook_logs')
    end
  end
end