Sha256: e6b2ba79fc90266f566aaa337ebbfb3d4b47e33cf38947bce03eecfe87e6694a

Contents?: true

Size: 1.78 KB

Versions: 4

Compression:

Stored size: 1.78 KB

Contents

# frozen_string_literal: true
require 'drillbit/configuration'
require 'drillbit/parameters'
require 'drillbit/matchers/subdomain'
require 'drillbit/matchers/accept_header'
require 'drillbit/requests/base'
require 'drillbit/responses/invalid_api_request'
require 'drillbit/responses/invalid_subdomain'
require 'drillbit/responses/invalid_token'

module  Drillbit
module  Middleware
class   ApiRequest
  JSON_API_MIME_TYPE_PATTERN = %r{application/vnd\.api\+json(?=\z|;)}

  def initialize(app)
    @app = app
  end

  # rubocop:disable Metrics/LineLength
  # :reek:FeatureEnvy
  def call(env)
    env['HTTP_X_APPLICATION_NAME'] = Drillbit.configuration.application_name

    request               = Requests::Base.resolve(env)
    subdomain_matcher     = Matchers::Subdomain.new
    accept_header_matcher = Matchers::AcceptHeader.new
    token                 = request.authorization_token

    return Responses::InvalidSubdomain.call(env)      unless subdomain_matcher.matches?(request)
    return Responses::InvalidApiRequest.call(env)     unless !subdomain_matcher.matches_api_subdomain?(request) ||
                                                             accept_header_matcher.matches?(request)
    return Responses::InvalidToken.call(env,
                                        application_name: request.application_name) \
           unless token.valid?

    env['X_DECRYPTED_JSON_WEB_TOKEN'] = token.to_h
    env['QUERY_STRING']               = Parameters.process(env['QUERY_STRING'])
    env['CONTENT_TYPE']               = env['CONTENT_TYPE'].
                                        to_s.
                                        gsub JSON_API_MIME_TYPE_PATTERN,
                                             'application/json'

    @app.call(env)
  end
  # rubocop:enable Metrics/LineLength
end
end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
drillbit-1.1.0 lib/drillbit/middleware/api_request.rb
drillbit-1.0.1 lib/drillbit/middleware/api_request.rb
drillbit-1.0.0 lib/drillbit/middleware/api_request.rb
drillbit-0.0.1 lib/drillbit/middleware/api_request.rb