# frozen_string_literal: true

module Grape
  module Jwt
    # The Grape JWT authentication concern.
    module Authentication
      # Specifies which configuration keys are shared between keyless
      # and grape-jwt-authentication, so that we can easily pass through
      # our configuration to keyless.
      KEYLESS_CONFIGURATION = %i[
        authenticator rsa_public_key_url rsa_public_key_caching
        rsa_public_key_expiration jwt_issuer jwt_beholder jwt_options
        jwt_verification_key
      ].freeze

      # (Re)configure our gem dependencies. We take care of setting up
      # +Keyless+, which has been extracted from this gem.
      def self.configure_dependencies
        configure_keyless
      end

      # Configure the +Keyless+ gem with our configuration.
      def self.configure_keyless
        configuration = Grape::Jwt::Authentication.configuration

        Keyless.configure do |keyless|
          KEYLESS_CONFIGURATION.each do |option|
            keyless.send("#{option}=", configuration.send(option))
          end
        end
      end
    end
  end
end