class Rack::PactBroker::InvalidUriProtection

Attributes

app[R]

Public Class Methods

new(app) click to toggle source
# File lib/rack/pact_broker/invalid_uri_protection.rb, line 15
def initialize app
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack/pact_broker/invalid_uri_protection.rb, line 19
def call env
  if (uri = valid_uri?(env))
    if (error_message = validate(uri))
      [422, {"Content-Type" => "text/plain"}, [error_message]]
    else
      app.call(env)
    end
  else
    [404, {}, []]
  end
end

Private Instance Methods

parse(uri) click to toggle source
# File lib/rack/pact_broker/invalid_uri_protection.rb, line 43
def parse uri
  URI.parse(uri)
end
valid_uri?(env) click to toggle source
# File lib/rack/pact_broker/invalid_uri_protection.rb, line 35
def valid_uri? env
  begin
    parse(::Rack::Request.new(env).url)
  rescue URI::InvalidURIError, ArgumentError
    nil
  end
end
validate(uri) click to toggle source
# File lib/rack/pact_broker/invalid_uri_protection.rb, line 47
def validate(uri)
  decoded_path = URI.decode(uri.path)
  if decoded_path.include?("\n")
    message("errors.new_line_in_url_path")
  elsif decoded_path.include?("\t")
    message("errors.tab_in_url_path")
  end
end