Sha256: 7f40b193cf8d3ecfcd0ecfbda46119a6d5115260d16d1465af64daf1b08a5e5b

Contents?: true

Size: 1.31 KB

Versions: 18

Compression:

Stored size: 1.31 KB

Contents

require 'openssl'
require 'digest/sha1'

module PostmanMta
  module Utils
    # Usage:
    #  request = Signature.new(options)
    #  request.valid?('some-signature-hash', 'some-big-secret-key',)
    #
    class Signature
      SPLITTER = '|'.freeze
      TTL = 2.minutes

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

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

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

      def expired?
        !alive?
      end

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

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

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

      protected

      def digest
        OpenSSL::Digest::SHA256.new
      end

      def string_to_sign
        [
          @options[:request_method],
          @options[:path],
          @options[:access_key],
          @timestamp.to_i
        ].map(&:to_s).join(SPLITTER)
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
postman_mta-0.2.8 lib/postman_mta/utils/signature.rb
postman_mta-0.2.7 lib/postman_mta/utils/signature.rb
postman_mta-0.2.6 lib/postman_mta/utils/signature.rb
postman_mta-0.2.4 lib/postman_mta/utils/signature.rb
postman_mta-0.2.3 lib/postman_mta/utils/signature.rb
postman_mta-0.2.2 lib/postman_mta/utils/signature.rb
postman_mta-0.2.1 lib/postman_mta/utils/signature.rb
postman_mta-0.2.0 lib/postman_mta/utils/signature.rb
postman_mta-0.1.9 lib/postman_mta/utils/signature.rb
postman_mta-0.1.8 lib/postman_mta/utils/signature.rb
postman_mta-0.1.7 lib/postman_mta/utils/signature.rb
postman_mta-0.1.6 lib/postman_mta/utils/signature.rb
postman_mta-0.1.5 lib/postman_mta/utils/signature.rb
postman_mta-0.1.4 lib/postman_mta/utils/signature.rb
postman_mta-0.1.3 lib/postman_mta/utils/signature.rb
postman_mta-0.1.2 lib/postman_mta/utils/signature.rb
postman_mta-0.1.1 lib/postman_mta/utils/signature.rb
postman_mta-0.1.0 lib/postman_mta/utils/signature.rb