Skip to content

Commit d4be241

Browse files
authored
Fallback if system time incorrect during migration (#95)
1 parent 65107c5 commit d4be241

File tree

1 file changed

+10
-3
lines changed
  • Thirdweb/Thirdweb.Wallets/InAppWallet/EmbeddedWallet.Authentication

1 file changed

+10
-3
lines changed

Thirdweb/Thirdweb.Wallets/InAppWallet/EmbeddedWallet.Authentication/AWS.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ private static async Task<AwsCredentials> GetTemporaryCredentialsAsync(string id
5353
};
5454
}
5555

56-
private static async Task<JToken> GenerateDataKey(AwsCredentials credentials, IThirdwebHttpClient httpClient)
56+
private static async Task<JToken> GenerateDataKey(AwsCredentials credentials, IThirdwebHttpClient httpClient, DateTime? dateOverride = null)
5757
{
5858
var client = Utils.ReconstructHttpClient(httpClient);
5959
var endpoint = $"https://kms.{AWS_REGION}.amazonaws.com/";
@@ -64,9 +64,10 @@ private static async Task<JToken> GenerateDataKey(AwsCredentials credentials, IT
6464

6565
client.AddHeader("X-Amz-Target", "TrentService.GenerateDataKey");
6666

67-
var dateTimeNow = DateTime.UtcNow;
67+
var dateTimeNow = dateOverride ?? DateTime.UtcNow;
6868
var dateStamp = dateTimeNow.ToString("yyyyMMdd");
69-
var amzDate = dateTimeNow.ToString("yyyyMMddTHHmmssZ");
69+
var amzDateFormat = "yyyyMMddTHHmmssZ";
70+
var amzDate = dateTimeNow.ToString(amzDateFormat);
7071
var canonicalUri = "/";
7172

7273
var canonicalHeaders = $"host:kms.{AWS_REGION}.amazonaws.com\nx-amz-date:{amzDate}\n";
@@ -104,6 +105,12 @@ private static async Task<JToken> GenerateDataKey(AwsCredentials credentials, IT
104105

105106
if (!response.IsSuccessStatusCode)
106107
{
108+
if (dateOverride == null && responseContent.Contains("InvalidSignatureException"))
109+
{
110+
var parsedTime = responseContent.Substring(responseContent.LastIndexOf('(') + 1, amzDate.Length);
111+
return await GenerateDataKey(credentials, httpClient, DateTime.ParseExact(parsedTime, amzDateFormat, System.Globalization.CultureInfo.InvariantCulture).ToUniversalTime())
112+
.ConfigureAwait(false);
113+
}
107114
throw new Exception($"Failed to generate data key: {responseContent}");
108115
}
109116

0 commit comments

Comments
 (0)