class PostmanMta::Utils::Signature

Usage:

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

Constants

SPLITTER
TTL

Public Class Methods

new(options = {}) click to toggle source
# File lib/postman_mta/utils/signature.rb, line 14
def initialize(options = {})
  @options = options
  @timestamp = Time.zone.at(@options[:timestamp].to_i)
end

Public Instance Methods

alive?() click to toggle source
# File lib/postman_mta/utils/signature.rb, line 32
def alive?
  alive_timerange.cover?(@timestamp)
end
alive_timerange() click to toggle source
# File lib/postman_mta/utils/signature.rb, line 36
def alive_timerange
  @alive_timerange ||= (TTL.ago..Time.zone.now)
end
expired?() click to toggle source
# File lib/postman_mta/utils/signature.rb, line 28
def expired?
  !alive?
end
generate_signature(secret) click to toggle source

Generate signature token

# 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) click to toggle source
# File lib/postman_mta/utils/signature.rb, line 24
def invalid?(*args)
  !valid?(*args)
end
valid?(signature, secret) click to toggle source
# 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

Protected Instance Methods

digest() click to toggle source
# File lib/postman_mta/utils/signature.rb, line 49
def digest
  OpenSSL::Digest::SHA256.new
end
string_to_sign() click to toggle source
# File lib/postman_mta/utils/signature.rb, line 53
def string_to_sign
  [
    @options[:request_method],
    @options[:path],
    @options[:access_key],
    @timestamp.to_i
  ].map(&:to_s).join(SPLITTER)
end