8
8
require 'pact_broker/api/pact_broker_urls'
9
9
require 'pact_broker/build_http_options'
10
10
require 'cgi'
11
+ require 'delegate'
11
12
12
13
module PactBroker
13
14
@@ -22,6 +23,24 @@ def initialize message, response
22
23
23
24
end
24
25
26
+ class WebhookResponseWithUtf8SafeBody < SimpleDelegator
27
+ def body
28
+ if unsafe_body
29
+ unsafe_body . encode ( 'UTF-8' , 'binary' , invalid : :replace , undef : :replace , replace : '' )
30
+ else
31
+ unsafe_body
32
+ end
33
+ end
34
+
35
+ def unsafe_body
36
+ __getobj__ ( ) . body
37
+ end
38
+
39
+ def unsafe_body?
40
+ unsafe_body != body
41
+ end
42
+ end
43
+
25
44
class WebhookRequest
26
45
27
46
include PactBroker ::Logging
@@ -110,9 +129,10 @@ def build_request uri, pact, verification, execution_logger
110
129
def do_request uri , req
111
130
logger . info "Making webhook #{ uuid } request #{ to_s } "
112
131
options = PactBroker ::BuildHttpOptions . call ( uri )
113
- Net ::HTTP . start ( uri . hostname , uri . port , :ENV , options ) do |http |
132
+ response = Net ::HTTP . start ( uri . hostname , uri . port , :ENV , options ) do |http |
114
133
http . request req
115
134
end
135
+ WebhookResponseWithUtf8SafeBody . new ( response )
116
136
end
117
137
118
138
def log_response response , execution_logger , options
@@ -131,7 +151,7 @@ def response_body_hidden_message
131
151
def log_response_to_application_logger response
132
152
logger . info "Received response for webhook #{ uuid } status=#{ response . code } "
133
153
logger . debug "headers=#{ response . to_hash } "
134
- logger . debug "body=#{ response . body } "
154
+ logger . debug "body=#{ response . unsafe_body } "
135
155
end
136
156
137
157
def log_response_to_execution_logger response , execution_logger
@@ -140,15 +160,12 @@ def log_response_to_execution_logger response, execution_logger
140
160
execution_logger . info "#{ header . split ( "-" ) . collect ( &:capitalize ) . join ( '-' ) } : #{ response [ header ] } "
141
161
end
142
162
143
- safe_body = nil
144
-
145
163
if response . body
146
- safe_body = response . body . encode ( 'UTF-8' , 'binary' , invalid : :replace , undef : :replace , replace : '' )
147
- if response . body != safe_body
164
+ if response . unsafe_body?
148
165
execution_logger . debug "Note that invalid UTF-8 byte sequences were removed from response body before saving the logs"
149
166
end
167
+ execution_logger . info response . body
150
168
end
151
- execution_logger . info safe_body
152
169
end
153
170
154
171
def log_completion_message options , execution_logger , success
@@ -182,7 +199,7 @@ def http_request(uri)
182
199
end
183
200
184
201
def build_uri ( pact , verification )
185
- URI ( PactBroker ::Webhooks ::Render . call ( url , pact , verification ) { | value | CGI ::escape ( value ) } )
202
+ URI ( PactBroker ::Webhooks ::Render . call ( url , pact , verification ) { | value | CGI ::escape ( value ) if ! value . nil? } )
186
203
end
187
204
188
205
def url_with_credentials pact , verification
0 commit comments