Skip to content

Commit

Permalink
Use callbacks to send webhooks (#4830)
Browse files Browse the repository at this point in the history
Ensures they are sent when a version is yanked via the admin dashboard
  • Loading branch information
segiddins authored Jun 24, 2024
1 parent 1737865 commit c175af7
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 13 deletions.
11 changes: 0 additions & 11 deletions app/controllers/api/base_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,6 @@ def find_rubygem_by_name
render plain: "This gem could not be found", status: :not_found
end

def enqueue_web_hook_jobs(version)
jobs = version.rubygem.web_hooks.enabled + WebHook.global.enabled
jobs.each do |job|
job.fire(
request.protocol.delete("://"),
request.host_with_port,
version
)
end
end

def verify_api_key_gem_scope
return unless @api_key.rubygem && @api_key.rubygem != @rubygem

Expand Down
1 change: 0 additions & 1 deletion app/controllers/api/v1/deletions_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ def create
@deletion = @api_key.user.deletions.build(version: @version)
if @deletion.save
StatsD.increment "yank.success"
enqueue_web_hook_jobs(@version)
render plain: response_with_mfa_warning("Successfully deleted gem: #{@version.to_title}")
elsif @deletion.ineligible?
StatsD.increment "yank.forbidden"
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/api/v1/rubygems_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def create
return render_api_key_forbidden unless @api_key.can_push_rubygem?

gemcutter = Pusher.new(@api_key, request.body, request:)
enqueue_web_hook_jobs(gemcutter.version) if gemcutter.process
gemcutter.process
render plain: response_with_mfa_warning(gemcutter.message), status: gemcutter.code
rescue StandardError => e
Rails.error.report(e, handled: true)
Expand Down
8 changes: 8 additions & 0 deletions app/models/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class Version < ApplicationRecord # rubocop:disable Metrics/ClassLength
after_create :create_gem_download
after_create :record_push_event
after_save :reorder_versions, if: -> { saved_change_to_indexed? || saved_change_to_id? }
after_save :enqueue_web_hook_jobs, if: -> { saved_change_to_indexed? && (!saved_change_to_id? || indexed?) }
after_save :refresh_rubygem_indexed, if: -> { saved_change_to_indexed? || saved_change_to_id? }

serialize :licenses, coder: YAML
Expand Down Expand Up @@ -502,4 +503,11 @@ def record_push_event
rubygem.record_event!(Events::RubygemEvent::VERSION_PUSHED, number: number, platform: platform, sha256: sha256_hex,
pushed_by: pusher&.display_handle, version_gid: to_gid, actor_gid: pusher&.to_gid)
end

def enqueue_web_hook_jobs
jobs = rubygem.web_hooks.or(WebHook.global).enabled
jobs.find_each do |job|
job.fire(Gemcutter::PROTOCOL, Gemcutter::HOST, self)
end
end
end

0 comments on commit c175af7

Please sign in to comment.