Class: PostmanMta::Utils::Signature

Inherits:
Object
  • Object
show all
Defined in:
lib/postman_mta/utils/signature.rb

Overview

Usage:

request = Signature.new(options)
request.valid?('some-signature-hash', 'some-big-secret-key',)

Constant Summary collapse

SPLITTER =
'|'.freeze
TTL =
2.minutes

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Signature

Returns a new instance of Signature.



14
15
16
17
# File 'lib/postman_mta/utils/signature.rb', line 14

def initialize(options = {})
  @options = options
  @timestamp = Time.zone.at(@options[:timestamp].to_i)
end

Instance Method Details

#alive?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/postman_mta/utils/signature.rb', line 32

def alive?
  alive_timerange.cover?(@timestamp)
end

#alive_timerangeObject



36
37
38
# File 'lib/postman_mta/utils/signature.rb', line 36

def alive_timerange
  @alive_timerange ||= (TTL.ago..Time.zone.now)
end

#expired?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/postman_mta/utils/signature.rb', line 28

def expired?
  !alive?
end

#generate_signature(secret) ⇒ Object

Generate signature token



42
43
44
45
# File 'lib/postman_mta/utils/signature.rb', line 42

def generate_signature(secret)
  hmac = OpenSSL::HMAC.digest(digest, secret, string_to_sign)
  Base64.encode64(hmac).chomp
end

#invalid?(*args) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/postman_mta/utils/signature.rb', line 24

def invalid?(*args)
  !valid?(*args)
end

#valid?(signature, secret) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
22
# File 'lib/postman_mta/utils/signature.rb', line 19

def valid?(signature, secret)
  return false if signature.blank? || secret.blank? || expired?
  generate_signature(secret) == signature
end