Module: Notion::Webhooks::Signature

Defined in:
lib/notion/webhooks/signature.rb

Class Method Summary collapse

Class Method Details

.secure_compare?(left, right) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
18
19
# File 'lib/notion/webhooks/signature.rb', line 15

def secure_compare?(left, right)
  return false unless left.bytesize == right.bytesize

  left.bytes.zip(right.bytes).reduce(0) { |difference, (a, b)| difference | (a ^ b) }.zero?
end

.valid?(secret:, payload:, signature:) ⇒ Boolean

Returns:

  • (Boolean)


10
11
12
13
# File 'lib/notion/webhooks/signature.rb', line 10

def valid?(secret:, payload:, signature:)
  expected = OpenSSL::HMAC.hexdigest("SHA256", secret, payload)
  secure_compare?(expected, signature.to_s.delete_prefix("sha256="))
end