Class: Legion::Trigger::Sources::Slack

Inherits:
Base
  • Object
show all
Defined in:
lib/legion/trigger/sources/slack.rb

Instance Method Summary collapse

Methods inherited from Base

delivery_header, event_header, signature_header, source_name

Instance Method Details

#normalize(headers:, body:) ⇒ Object

rubocop:disable Lint/UnusedMethodArgument



14
15
16
17
18
19
20
21
22
23
# File 'lib/legion/trigger/sources/slack.rb', line 14

def normalize(headers:, body:) # rubocop:disable Lint/UnusedMethodArgument
  event = dig_body(body, 'event') || {}
  {
    source:      'slack',
    event_type:  dig_body(body, 'type') || 'unknown',
    action:      dig_body(event, 'type'),
    delivery_id: dig_body(body, 'event_id'),
    payload:     body
  }
end

#verify_signature(headers:, body_raw:, secret:) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/legion/trigger/sources/slack.rb', line 25

def verify_signature(headers:, body_raw:, secret:)
  timestamp = headers['HTTP_X_SLACK_REQUEST_TIMESTAMP']
  return false unless timestamp
  return false if (Time.now.to_i - timestamp.to_i).abs > 300

  sig_basestring = "v0:#{timestamp}:#{body_raw}"
  digest = OpenSSL::HMAC.hexdigest('SHA256', secret, sig_basestring)
  expected = "v0=#{digest}"
  provided = headers[self.class.signature_header]
  return false unless provided

  secure_compare(provided, expected)
end