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