Sha256: b88f9e62707d6412e098c7911c2881109b6af52c431f3e4e1deec9f613e3faf4

Contents?: true

Size: 1015 Bytes

Versions: 1

Compression:

Stored size: 1015 Bytes

Contents

# typed: strict

require "rack"

module M2mKeygen
  class RackValidator
    extend T::Sig

    sig { returns(Signature) }
    attr_reader :signature

    sig { returns(String) }
    attr_reader :header_name

    sig { params(secret: String, algorithm: String, header_name: String).void }
    def initialize(secret, algorithm: "sha512", header_name: "X-Signature")
      @header_name = T.let("HTTP_#{header_name.tr("-", "_").upcase}", String)
      @signature = T.let(Signature.new(secret, algorithm: algorithm), Signature)
    end

    sig { params(req: T.untyped).returns(T::Boolean) }
    def validate(req)
      # This will cover the case when Rails is used.
      req = Rack::Request.new(req.env)
      @signature.validate(
        params: req.params,
        verb: req.request_method,
        path: req.path,
        signature: req.env["HTTP_X_SIGNATURE"]
      ) && req.params["expiry"] && req.params["expiry"].to_i > Time.now.to_i &&
        req.params["expiry"].to_i < Time.now.to_i + 120
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
m2m_keygen-0.4.1 lib/m2m_keygen/rack_validator.rb