Class: Webhook

Inherits:
ApplicationRecord
  • Object
show all
Extended by:
FriendlyId
Includes:
Authorizable, Encryptable, Parameterizable::ByIdName
Defined in:
app/models/webhook.rb

Constant Summary collapse

EVENT_POSTFIX =
".#{Foreman::Observable::DEFAULT_NAMESPACE}"
DEFAULT_PAYLOAD_TEMPLATE =
'Webhook Template - Payload Default'
ALLOWED_HTTP_METHODS =
%w[POST GET PUT DELETE PATCH].freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.available_eventsObject



40
41
42
# File 'app/models/webhook.rb', line 40

def self.available_events
  ::Foreman::EventSubscribers.all_observable_events
end

.deliver(event_name:, payload:) ⇒ Object



44
45
46
47
48
# File 'app/models/webhook.rb', line 44

def self.deliver(event_name:, payload:)
  for_event(event_name).includes([:webhook_template]).each do |target|
    target.deliver(event_name: event_name, payload: payload) if target.enabled?
  end
end

Instance Method Details

#ca_certs_storeObject



80
81
82
83
84
85
86
87
88
89
90
# File 'app/models/webhook.rb', line 80

def ca_certs_store
  store = OpenSSL::X509::Store.new
  return store if ssl_ca_certs.blank?

  ssl_ca_certs.split(/(?=-----BEGIN)/).each do |cert|
    store.add_cert(OpenSSL::X509::Certificate.new(cert))
  end
  store
rescue StandardError => e
  raise _(format('Failed to build X509 certificate store for HTTPS client, error: %s', e.message))
end

#deliver(event_name:, payload:) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
# File 'app/models/webhook.rb', line 67

def deliver(event_name:, payload:)
  payload_to_deliver = rendered_payload(event_name, payload)
  headers_to_deliver = rendered_headers(event_name, payload)
  url_to_deliver = rendered_targed_url(event_name, payload)
  ::ForemanWebhooks::DeliverWebhookJob.perform_later(
    event_name: event_name,
    payload: payload_to_deliver,
    headers: headers_to_deliver,
    url: url_to_deliver,
    webhook_id: id
  )
end

#eventObject



63
64
65
# File 'app/models/webhook.rb', line 63

def event
  events.first
end

#event=(event) ⇒ Object



59
60
61
# File 'app/models/webhook.rb', line 59

def event=(event)
  self.events = event
end

#events=(events) ⇒ Object



50
51
52
53
54
55
56
57
# File 'app/models/webhook.rb', line 50

def events=(events)
  events = Array(events).map do |event|
    next event if event.end_with?(EVENT_POSTFIX)

    event.to_s.underscore + EVENT_POSTFIX
  end
  super(self.class.available_events & events)
end