Skip to content

Commit 110ac9b

Browse files
Fix culture-dependent date formatting using RFC 1123 for HTTP headers and sortable ISO 8601 for InnerError (#1441)
* Initial plan * Fix date format to use RFC 1123 format instead of culture-dependent format Co-authored-by: waldekmastykarz <[email protected]> * Change date format from RFC 1123 to ISO-8601 as requested Co-authored-by: waldekmastykarz <[email protected]> * Revert to RFC 1123 format as requested Co-authored-by: waldekmastykarz <[email protected]> * Use RFC 1123 for HTTP headers and ISO 8601 for InnerError.Date Co-authored-by: waldekmastykarz <[email protected]> * Replace 'o' format with 's' format for ISO 8601 dates Co-authored-by: waldekmastykarz <[email protected]> * Revert HarGeneratorPlugin to use 'o' format for HAR spec compliance Co-authored-by: waldekmastykarz <[email protected]> --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: waldekmastykarz <[email protected]> Co-authored-by: Waldek Mastykarz <[email protected]>
1 parent 336440b commit 110ac9b

File tree

5 files changed

+19
-13
lines changed

5 files changed

+19
-13
lines changed

DevProxy.Plugins/Behavior/GraphRandomErrorPlugin.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -289,9 +289,11 @@ private void UpdateProxyResponse(ProxyRequestArgs e, HttpStatusCode errorStatus)
289289
{
290290
var session = e.Session;
291291
var requestId = Guid.NewGuid().ToString();
292-
var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture);
292+
var now = DateTime.Now;
293+
var requestDateHeader = now.ToString("r", CultureInfo.InvariantCulture);
294+
var requestDateInnerError = now.ToString("s", CultureInfo.InvariantCulture);
293295
var request = session.HttpClient.Request;
294-
var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate);
296+
var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDateHeader);
295297
if (errorStatus == HttpStatusCode.TooManyRequests)
296298
{
297299
var retryAfterDate = DateTime.Now.AddSeconds(Configuration.RetryAfterInSeconds);
@@ -314,7 +316,7 @@ private void UpdateProxyResponse(ProxyRequestArgs e, HttpStatusCode errorStatus)
314316
InnerError = new()
315317
{
316318
RequestId = requestId,
317-
Date = requestDate
319+
Date = requestDateInnerError
318320
}
319321
}),
320322
ProxyUtils.JsonSerializerOptions
@@ -330,7 +332,7 @@ private void UpdateProxyBatchResponse(ProxyRequestArgs ev, GraphBatchResponsePay
330332

331333
var session = ev.Session;
332334
var requestId = Guid.NewGuid().ToString();
333-
var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture);
335+
var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture);
334336
var request = session.HttpClient.Request;
335337
var headers = ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate);
336338

DevProxy.Plugins/Behavior/RateLimitingPlugin.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,10 @@ private void UpdateProxyResponse(ProxyHttpEventArgsBase e, HttpStatusCode errorS
246246
if (ProxyUtils.IsGraphRequest(request))
247247
{
248248
var requestId = Guid.NewGuid().ToString();
249-
var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture);
250-
headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate));
249+
var now = DateTime.Now;
250+
var requestDateHeader = now.ToString("r", CultureInfo.InvariantCulture);
251+
var requestDateInnerError = now.ToString("s", CultureInfo.InvariantCulture);
252+
headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDateHeader));
251253

252254
body = JsonSerializer.Serialize(new GraphErrorResponseBody(
253255
new()
@@ -257,7 +259,7 @@ private void UpdateProxyResponse(ProxyHttpEventArgsBase e, HttpStatusCode errorS
257259
InnerError = new()
258260
{
259261
RequestId = requestId,
260-
Date = requestDate
262+
Date = requestDateInnerError
261263
}
262264
}),
263265
ProxyUtils.JsonSerializerOptions

DevProxy.Plugins/Behavior/RetryAfterPlugin.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,10 @@ private static void UpdateProxyResponse(ProxyRequestArgs e, ThrottlingInfo throt
108108
if (ProxyUtils.IsGraphRequest(request))
109109
{
110110
var requestId = Guid.NewGuid().ToString();
111-
var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture);
112-
headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDate));
111+
var now = DateTime.Now;
112+
var requestDateHeader = now.ToString("r", CultureInfo.InvariantCulture);
113+
var requestDateInnerError = now.ToString("s", CultureInfo.InvariantCulture);
114+
headers.AddRange(ProxyUtils.BuildGraphResponseHeaders(request, requestId, requestDateHeader));
113115

114116
body = JsonSerializer.Serialize(new GraphErrorResponseBody(
115117
new()
@@ -119,7 +121,7 @@ private static void UpdateProxyResponse(ProxyRequestArgs e, ThrottlingInfo throt
119121
InnerError = new()
120122
{
121123
RequestId = requestId,
122-
Date = requestDate
124+
Date = requestDateInnerError
123125
}
124126
}),
125127
ProxyUtils.JsonSerializerOptions

DevProxy.Plugins/Mocking/GraphMockResponsePlugin.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo
6262
{
6363
GraphBatchResponsePayloadResponse? response = null;
6464
var requestId = Guid.NewGuid().ToString();
65-
var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture);
65+
var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture);
6666
var headers = ProxyUtils
6767
.BuildGraphResponseHeaders(e.Session.HttpClient.Request, requestId, requestDate);
6868

@@ -155,7 +155,7 @@ public override async Task BeforeRequestAsync(ProxyRequestArgs e, CancellationTo
155155
}
156156

157157
var batchRequestId = Guid.NewGuid().ToString();
158-
var batchRequestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture);
158+
var batchRequestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture);
159159
var batchHeaders = ProxyUtils.BuildGraphResponseHeaders(e.Session.HttpClient.Request, batchRequestId, batchRequestDate);
160160
var batchResponse = new GraphBatchResponsePayload
161161
{

DevProxy.Plugins/Mocking/MockResponsePlugin.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ private void ProcessMockResponseInternal(ProxyRequestArgs e, MockResponse matchi
351351
{
352352
string? body = null;
353353
var requestId = Guid.NewGuid().ToString();
354-
var requestDate = DateTime.Now.ToString(CultureInfo.CurrentCulture);
354+
var requestDate = DateTime.Now.ToString("r", CultureInfo.InvariantCulture);
355355
var headers = ProxyUtils.BuildGraphResponseHeaders(e.Session.HttpClient.Request, requestId, requestDate);
356356
var statusCode = HttpStatusCode.OK;
357357
if (matchingResponse.Response?.StatusCode is not null)

0 commit comments

Comments
 (0)