Sha256: 679897fcb781458e93b946f1990fbb2a74dd496d5822acd8ae7fef44906e11e1

Contents?: true

Size: 1.5 KB

Versions: 2

Compression:

Stored size: 1.5 KB

Contents

# typed: false
# frozen_string_literal: true

module Hephaestus
  module ValidatesFromYetto
    SHA256_DIGEST = OpenSSL::Digest.new("sha256")

    extend ActiveSupport::Concern

    include Hephaestus::Responses

    def from_yetto?
      return bad_request if request.headers.blank?

      yetto_signature = request.headers.fetch(Hephaestus::Headers::HEADER_SIGNATURE, "")

      return bad_request unless yetto_signature.start_with?("sha256=")

      hmac_header = yetto_signature.split("sha256=").last
      body = request.raw_post

      calculated_hmac = OpenSSL::HMAC.hexdigest(SHA256_DIGEST, Hephaestus::YETTO_SIGNING_SECRET, body)

      return true if ActiveSupport::SecurityUtils.secure_compare(calculated_hmac, hmac_header)

      bad_request
    end

    def from_yetto_inline?
      return bad_request if request.headers.blank?

      yetto_signature = request.headers.fetch(Hephaestus::Headers::HEADER_SIGNATURE, "")

      return bad_request unless yetto_signature.start_with?("sha256=")

      hmac_header = yetto_signature.split("sha256=").last
      body = params["encrypted_payload"]

      @payload = T.let(ActiveSupport::MessageEncryptor.new(Hephaestus::YETTO_SIGNING_SECRET, url_safe: true, serializer: :json).decrypt_and_verify(body), T.nilable(String))
      calculated_hmac = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), Hephaestus::YETTO_SIGNING_SECRET, @payload)

      return true if ActiveSupport::SecurityUtils.secure_compare(calculated_hmac, hmac_header)

      bad_request
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hephaestus-0.8.16.1 app/controllers/concerns/hephaestus/validates_from_yetto.rb
hephaestus-0.8.16 app/controllers/concerns/hephaestus/validates_from_yetto.rb