Class: Attio::Util::WebhookSignature::Handler

Inherits:
Object
  • Object
show all
Defined in:
lib/attio/util/webhook_signature.rb

Overview

Helper class for webhook handlers

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(secret) ⇒ Handler

Returns a new instance of Handler.



107
108
109
110
# File 'lib/attio/util/webhook_signature.rb', line 107

def initialize(secret)
  @secret = secret
  validate_secret!
end

Instance Attribute Details

#secretObject (readonly)

Returns the value of attribute secret.



105
106
107
# File 'lib/attio/util/webhook_signature.rb', line 105

def secret
  @secret
end

Instance Method Details

#parse_and_verify(request) ⇒ Object

Parse and verify a request



128
129
130
131
132
133
134
135
# File 'lib/attio/util/webhook_signature.rb', line 128

def parse_and_verify(request)
  verify_request(request)

  body = extract_body(request)
  JSON.parse(body, symbolize_names: true)
rescue JSON::ParserError => e
  raise SignatureVerificationError, "Invalid JSON payload: #{e.message}"
end

#verify_request(request) ⇒ Object

Verify a request



113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/attio/util/webhook_signature.rb', line 113

def verify_request(request)
  headers = extract_headers(request)
  body = extract_body(request)

  signature_data = WebhookSignature.extract_from_headers(headers)

  WebhookSignature.verify!(
    payload: body,
    signature: signature_data[:signature],
    timestamp: signature_data[:timestamp],
    secret: secret
  )
end