@@ -15,12 +15,10 @@ module PactBroker
15
15
module Domain
16
16
17
17
class WebhookRequestError < StandardError
18
-
19
18
def initialize message , response
20
19
super message
21
20
@response = response
22
21
end
23
-
24
22
end
25
23
26
24
class WebhookResponseWithUtf8SafeBody < SimpleDelegator
@@ -41,6 +39,18 @@ def unsafe_body?
41
39
end
42
40
end
43
41
42
+ class WebhookRequestWithRedactedHeaders < SimpleDelegator
43
+ def to_hash
44
+ __getobj__ ( ) . to_hash . each_with_object ( { } ) do | ( key , values ) , new_hash |
45
+ new_hash [ key ] = redact? ( key ) ? [ "**********" ] : values
46
+ end
47
+ end
48
+
49
+ def redact? name
50
+ WebhookRequest ::HEADERS_TO_REDACT . any? { | pattern | name =~ pattern }
51
+ end
52
+ end
53
+
44
54
class WebhookRequest
45
55
46
56
include PactBroker ::Logging
@@ -95,15 +105,15 @@ def execute_and_build_result pact, verification, options, logs, execution_logger
95
105
req = build_request ( uri , pact , verification , execution_logger )
96
106
response = do_request ( uri , req )
97
107
log_response ( response , execution_logger , options )
98
- result = WebhookExecutionResult . new ( response , logs . string )
108
+ result = WebhookExecutionResult . new ( WebhookRequestWithRedactedHeaders . new ( req ) , response , logs . string )
99
109
log_completion_message ( options , execution_logger , result . success? )
100
110
result
101
111
end
102
112
103
113
def handle_error_and_build_result e , options , logs , execution_logger
104
114
log_error ( e , execution_logger , options )
105
115
log_completion_message ( options , execution_logger , false )
106
- WebhookExecutionResult . new ( nil , logs . string , e )
116
+ WebhookExecutionResult . new ( nil , nil , logs . string , e )
107
117
end
108
118
109
119
def build_request uri , pact , verification , execution_logger
@@ -123,11 +133,12 @@ def build_request uri, pact, verification, execution_logger
123
133
end
124
134
125
135
execution_logger . info ( req . body ) if req . body
136
+ logger . info "Making webhook #{ uuid } request #{ method . upcase } URI=#{ uri } headers=#{ headers_to_log } (body in debug logs)"
137
+ logger . debug "body=#{ req . body } "
126
138
req
127
139
end
128
140
129
141
def do_request uri , req
130
- logger . info "Making webhook #{ uuid } request #{ to_s } "
131
142
options = PactBroker ::BuildHttpOptions . call ( uri )
132
143
response = Net ::HTTP . start ( uri . hostname , uri . port , :ENV , options ) do |http |
133
144
http . request req
@@ -149,8 +160,8 @@ def response_body_hidden_message
149
160
end
150
161
151
162
def log_response_to_application_logger response
152
- logger . info "Received response for webhook #{ uuid } status=#{ response . code } "
153
- logger . debug "headers=#{ response . to_hash } "
163
+ logger . info "Received response for webhook #{ uuid } status=#{ response . code } (headers and body in debug logs) "
164
+ logger . debug "headers=#{ response . to_hash } "
154
165
logger . debug "body=#{ response . unsafe_body } "
155
166
end
156
167
0 commit comments