Class: Sentry::RequestInterface

Inherits:
Interface show all
Defined in:
lib/sentry/interfaces/request.rb

Constant Summary collapse

REQUEST_ID_HEADERS =
%w[action_dispatch.request_id HTTP_X_REQUEST_ID].freeze
CONTENT_HEADERS =
%w[CONTENT_TYPE CONTENT_LENGTH].freeze
LOWERCASE_PATTERN =

Regex to detect lowercase chars — match? is allocation-free (no MatchData/String)

/[a-z]/.freeze
MAX_BODY_LIMIT =
4096 * 4

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Interface

#to_h

Constructor Details

#initialize(env:, data_collection:, rack_env_whitelist:) ⇒ RequestInterface

Returns a new instance of RequestInterface.

Parameters:

  • env (Hash)
  • data_collection (DataCollection)
  • rack_env_whitelist (Array)

See Also:



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/sentry/interfaces/request.rb', line 43

def initialize(env:, data_collection:, rack_env_whitelist:)
  env = env.dup
  request = ::Rack::Request.new(env)
  query = data_collection.url_query_params.filter(request.GET) rescue nil

  self.method       = request.request_method
  self.url          = request.scheme && request.url.split("?").first
  self.query_string = query unless query&.empty?
  self.cookies      = data_collection.cookies.filter(request.cookies, cookie: true)
  self.data         = read_data_from(request) if data_collection.collect_incoming_http_body?
  self.headers      = filter_and_format_headers(env, data_collection.http_headers.request)
  self.env          = filter_and_format_env(env, data_collection.http_headers.request, rack_env_whitelist)
end

Instance Attribute Details

#cookiesHash

Returns:

  • (Hash)


30
31
32
# File 'lib/sentry/interfaces/request.rb', line 30

def cookies
  @cookies
end

#dataHash

Returns:

  • (Hash)


24
25
26
# File 'lib/sentry/interfaces/request.rb', line 24

def data
  @data
end

#envHash

Returns:

  • (Hash)


36
37
38
# File 'lib/sentry/interfaces/request.rb', line 36

def env
  @env
end

#headersHash

Returns:

  • (Hash)


33
34
35
# File 'lib/sentry/interfaces/request.rb', line 33

def headers
  @headers
end

#methodString

Returns:

  • (String)


21
22
23
# File 'lib/sentry/interfaces/request.rb', line 21

def method
  @method
end

#query_stringString, Hash

Returns:

  • (String, Hash)


27
28
29
# File 'lib/sentry/interfaces/request.rb', line 27

def query_string
  @query_string
end

#urlString

Returns:

  • (String)


18
19
20
# File 'lib/sentry/interfaces/request.rb', line 18

def url
  @url
end

Class Method Details

.rack_3_or_above?Boolean

Returns:

  • (Boolean)


122
123
124
125
126
127
# File 'lib/sentry/interfaces/request.rb', line 122

def self.rack_3_or_above?
  return @rack_3_or_above if defined?(@rack_3_or_above)

  @rack_3_or_above = defined?(::Rack) &&
    Gem::Version.new(::Rack.release) >= Gem::Version.new("3.0")
end