Module: Aikido::Zen::Sinks::HTTPClient::Helpers
- Defined in:
- lib/aikido/zen/sinks/httpclient.rb
Class Method Summary collapse
- .scan(request, connection, operation) ⇒ Object
- .sink(req, &block) ⇒ Object
- .wrap_request(req) ⇒ Object
- .wrap_response(resp) ⇒ Object
Class Method Details
.scan(request, connection, operation) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/aikido/zen/sinks/httpclient.rb', line 32 def self.scan(request, connection, operation) SINK.scan( request: request, connection: connection, operation: operation ) end |
.sink(req, &block) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/aikido/zen/sinks/httpclient.rb', line 40 def self.sink(req, &block) wrapped_request = wrap_request(req) connection = OutboundConnection.from_uri(req.http_header.request_uri) # Store the request information so the DNS sinks can pick it up. context = Aikido::Zen.current_context if context prev_request = context["ssrf.request"] context["ssrf.request"] = wrapped_request end settings = Aikido::Zen.runtime_settings unless Aikido::Zen.request_bypassed? Aikido::Zen.track_outbound(connection) if settings.block_outbound?(connection) Sinks::DSL.presafe do raise OutboundConnectionBlockedError.new(connection) end end end scan(wrapped_request, connection, "request") yield ensure context["ssrf.request"] = prev_request if context end |
.wrap_request(req) ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/aikido/zen/sinks/httpclient.rb', line 13 def self.wrap_request(req) Scanners::SSRFScanner::Request.new( verb: req.http_header.request_method, uri: req.http_header.request_uri, headers: req.headers ) end |
.wrap_response(resp) ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/aikido/zen/sinks/httpclient.rb', line 21 def self.wrap_response(resp) # Code coverage is disabled here because `do_get_header` is not called, # because WebMock does not mock it. # :nocov: Scanners::SSRFScanner::Response.new( status: resp.http_header.status_code, headers: resp.headers ) # :nocov: end |