Class: WebHook

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
HTTParty, Sortable
Defined in:
app/models/hooks/web_hook.rb

Overview

Schema Information

Table name: web_hooks

id                      :integer          not null, primary key
url                     :string(2000)
project_id              :integer
created_at              :datetime
updated_at              :datetime
type                    :string           default("ProjectHook")
service_id              :integer
push_events             :boolean          default(TRUE), not null
issues_events           :boolean          default(FALSE), not null
merge_requests_events   :boolean          default(FALSE), not null
tag_push_events         :boolean          default(FALSE)
note_events             :boolean          default(FALSE), not null
enable_ssl_verification :boolean          default(TRUE)
build_events            :boolean          default(FALSE), not null
wiki_page_events        :boolean          default(FALSE), not null
token                   :string

Direct Known Subclasses

ProjectHook, ServiceHook, SystemHook

Instance Method Summary collapse

Instance Method Details

#async_execute(data, hook_name) ⇒ Object


69
70
71
# File 'app/models/hooks/web_hook.rb', line 69

def async_execute(data, hook_name)
  Sidekiq::Client.enqueue(ProjectWebHookWorker, id, data, hook_name)
end

#execute(data, hook_name) ⇒ Object


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'app/models/hooks/web_hook.rb', line 43

def execute(data, hook_name)
  parsed_url = URI.parse(url)
  if parsed_url.userinfo.blank?
    response = WebHook.post(url,
                            body: data.to_json,
                            headers: build_headers(hook_name),
                            verify: enable_ssl_verification)
  else
    post_url = url.gsub("#{parsed_url.userinfo}@", '')
    auth = {
      username: CGI.unescape(parsed_url.user),
      password: CGI.unescape(parsed_url.password),
    }
    response = WebHook.post(post_url,
                            body: data.to_json,
                            headers: build_headers(hook_name),
                            verify: enable_ssl_verification,
                            basic_auth: auth)
  end

  [(response.code >= 200 && response.code < 300), ActionView::Base.full_sanitizer.sanitize(response.to_s)]
rescue SocketError, OpenSSL::SSL::SSLError, Errno::ECONNRESET, Errno::ECONNREFUSED, Net::OpenTimeout => e
  logger.error("WebHook Error => #{e}")
  [false, e.to_s]
end