Skip to content

Commit 2f7a286

Browse files
committed
refactor: Remove AWSSignerType attribute from service configs
1 parent e46adc5 commit 2f7a286

File tree

10 files changed

+97
-71
lines changed

10 files changed

+97
-71
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"core": {
3+
"updateMinimum": true,
4+
"type": "Patch",
5+
"changeLogMessages": [
6+
"Remove redundant `AWSSignerType` attribute from service configuration classes.",
7+
"Fix `EndpointDiscoveryHandler` not to fail when a request contains bearer token credentials."
8+
]
9+
}
10+
}

generator/ServiceClientGeneratorLib/Generators/Endpoints/EndpointResolver.partial.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ private string GetValueSource(Parameter parameter)
2525
case "AWS::S3::DisableMultiRegionAccessPoints": return "config.DisableMultiregionAccessPoints";
2626
case "AWS::S3::UseGlobalEndpoint": return "config.USEast1RegionalEndpointValue == S3UsEast1RegionalEndpointValue.Legacy";
2727
case "AWS::STS::UseGlobalEndpoint": return "false";
28-
case "AWS::Auth::AccountId": return "(requestContext.Identity as AWSCredentials)?.GetCredentials()?.AccountId";
28+
case "AWS::Auth::AccountId": return "requestContext.Identity is AWSCredentials credentials ? credentials.GetCredentials().AccountId : null";
2929
case "AWS::Auth::AccountIdEndpointMode": return "config.AccountIdEndpointMode.ToString().ToLower()";
3030
default: throw new Exception("Unknown builtIn");
3131
}

generator/ServiceClientGeneratorLib/Generators/SourceFiles/ServiceConfig.cs

Lines changed: 37 additions & 44 deletions
Large diffs are not rendered by default.

generator/ServiceClientGeneratorLib/Generators/SourceFiles/ServiceConfig.tt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ namespace <#=this.Config.Namespace#>
2020
/// <summary>
2121
/// Configuration for accessing Amazon <#=this.Config.ClassName#> service
2222
/// </summary>
23-
[AWSSignerType("<#=Config.ServiceModel.SignatureVersion#>")]
2423
public partial class Amazon<#=this.Config.ClassName#>Config : ClientConfig
2524
{
2625
private static readonly string UserAgentString =

sdk/src/Core/Amazon.Runtime/Credentials/Internal/AuthSchemeOption.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public class AuthSchemeOption : IAuthSchemeOption
5454
};
5555

5656
/// <summary>
57-
/// Default auth scheme options for services / operations that that only support SigV4A.
57+
/// Default auth scheme options for services / operations that that only support bearer authentication.
5858
/// </summary>
5959
public static readonly List<IAuthSchemeOption> DEFAULT_BEARER = new()
6060
{

sdk/src/Core/Amazon.Runtime/Internal/AWSSignerTypeAttribute.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Amazon.Runtime.Internal
44
{
5+
[Obsolete("This attribute should not be used as the SDK resolves which signer to use at the request level")]
56
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
67
public sealed class AWSSignerTypeAttribute : Attribute
78
{

sdk/src/Core/Amazon.Runtime/Pipeline/Handlers/CSMHandler/CSMCallAttemptHandler.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,10 @@ protected static void CSMCallAttemptMetricsCapture(IRequestContext requestContex
105105
requestContext.CSMCallAttempt.Api = CSMUtilities.
106106
GetApiNameFromRequest(requestContext.Request.RequestName, requestContext.ServiceMetaData.OperationNameMapping, requestContext.CSMCallAttempt.Service);
107107

108-
requestContext.CSMCallAttempt.AccessKey = (requestContext.Identity as AWSCredentials)?.GetCredentials()?.AccessKey;
108+
if (requestContext.Identity is AWSCredentials credentials)
109+
{
110+
requestContext.CSMCallAttempt.AccessKey = credentials.GetCredentials().AccessKey;
111+
}
109112

110113
requestContext.CSMCallAttempt.AttemptLatency = (long)requestContext
111114
.Metrics.StopEvent(Metric.CSMAttemptLatency)

sdk/src/Core/Amazon.Runtime/Pipeline/Handlers/EndpointDiscoveryHandler.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ public override void InvokeSync(IExecutionContext executionContext)
3838
{
3939
var requestContext = executionContext.RequestContext;
4040
var regionalEndpoint = requestContext.Request.Endpoint;
41-
var immutableCredentials = (requestContext.Identity as AWSCredentials)?.GetCredentials();
41+
42+
ImmutableCredentials immutableCredentials = null;
43+
if (requestContext.Identity is AWSCredentials credentials)
44+
{
45+
immutableCredentials = credentials.GetCredentials();
46+
}
4247

4348
PreInvoke(executionContext, immutableCredentials);
4449

@@ -71,7 +76,12 @@ public override async System.Threading.Tasks.Task<T> InvokeAsync<T>(IExecutionCo
7176
{
7277
var requestContext = executionContext.RequestContext;
7378
var regionalEndpoint = requestContext.Request.Endpoint;
74-
var immutableCredentials = await ((requestContext.Identity as AWSCredentials)?.GetCredentialsAsync()).ConfigureAwait(false);
79+
80+
ImmutableCredentials immutableCredentials = null;
81+
if (requestContext.Identity is AWSCredentials credentials)
82+
{
83+
immutableCredentials = await credentials.GetCredentialsAsync().ConfigureAwait(false);
84+
}
7585

7686
PreInvoke(executionContext, immutableCredentials);
7787

sdk/src/Core/Amazon.Runtime/Pipeline/Handlers/Signer.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,14 @@ public static void SignRequest(IRequestContext requestContext)
106106
using (MetricsUtilities.MeasureDuration(requestContext, TelemetryConstants.AuthSigningDurationMetricName))
107107
{
108108
ImmutableCredentials immutableCredentials = null;
109-
110-
using (TracingUtilities.CreateSpan(requestContext, TelemetryConstants.CredentialsRetrievalSpanName))
111-
using (MetricsUtilities.MeasureDuration(requestContext, TelemetryConstants.ResolveIdentityDurationMetricName))
112-
using (requestContext.Metrics.StartEvent(Metric.CredentialsRequestTime))
109+
if (requestContext.Identity is AWSCredentials awsCredentials)
113110
{
114-
immutableCredentials = (requestContext.Identity as AWSCredentials)?.GetCredentials();
111+
using (TracingUtilities.CreateSpan(requestContext, TelemetryConstants.CredentialsRetrievalSpanName))
112+
using (MetricsUtilities.MeasureDuration(requestContext, TelemetryConstants.ResolveIdentityDurationMetricName))
113+
using (requestContext.Metrics.StartEvent(Metric.CredentialsRequestTime))
114+
{
115+
immutableCredentials = awsCredentials.GetCredentials();
116+
}
115117
}
116118

117119
if (immutableCredentials?.UseToken == true &&
@@ -168,10 +170,8 @@ private static async Task SignRequestAsync(IRequestContext requestContext)
168170
using (requestContext.Metrics.StartEvent(Metric.RequestSigningTime))
169171
using (MetricsUtilities.MeasureDuration(requestContext, TelemetryConstants.AuthSigningDurationMetricName))
170172
{
171-
var awsCredentials = requestContext.Identity as AWSCredentials;
172173
ImmutableCredentials immutableCredentials = null;
173-
174-
if (awsCredentials != null)
174+
if (requestContext.Identity is AWSCredentials awsCredentials)
175175
{
176176
using (TracingUtilities.CreateSpan(requestContext, TelemetryConstants.CredentialsRetrievalSpanName))
177177
using (MetricsUtilities.MeasureDuration(requestContext, TelemetryConstants.ResolveIdentityDurationMetricName))

sdk/test/UnitTests/Custom/Runtime/EndpointDiscoveryTests.cs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public void RequiredNoIdentifiers(string endpoint, string expectedEndpoint)
6464
var config = SetupConfig();
6565
var client = new EndpointDiscoveryTestClient(config, baseUrl: endpoint);
6666
var executionContext = CreateExecutionContext(client, config, true, null);
67-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
67+
var immutableCredentials = GetCredentialsFromContext(executionContext);
6868

6969
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
7070
Assert.AreEqual(expectedEndpoint,
@@ -84,7 +84,7 @@ public void RequiredNoIdentifiersCached()
8484
var config = SetupConfig();
8585
var client = new EndpointDiscoveryTestClient(config);
8686
var executionContext = CreateExecutionContext(client, config, true, null);
87-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
87+
var immutableCredentials = GetCredentialsFromContext(executionContext);
8888

8989
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
9090
Assert.AreEqual("https://test123.amazonaws.com/shared/",
@@ -115,7 +115,7 @@ public void RequiredNoIdentifiersEvictCache()
115115
var config = SetupConfig();
116116
var client = new EndpointDiscoveryTestClient(config);
117117
var executionContext = CreateExecutionContext(client, config, true, null);
118-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
118+
var immutableCredentials = GetCredentialsFromContext(executionContext);
119119

120120
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
121121
Assert.AreEqual("https://test123.amazonaws.com/shared/",
@@ -156,7 +156,7 @@ public void RequiredWithIdentifiers()
156156
SortedDictionary<string, string> identifiers = new SortedDictionary<string, string>();
157157
identifiers.Add(IDENTIFIER_NAME, "test");
158158
var executionContext = CreateExecutionContext(client, config, true, identifiers);
159-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
159+
var immutableCredentials = GetCredentialsFromContext(executionContext);
160160

161161
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
162162
Assert.AreEqual("https://test123.amazonaws.com/shared/CreateTable",
@@ -178,7 +178,7 @@ public void RequiredWithIdentifiersCached()
178178
SortedDictionary<string, string> identifiers = new SortedDictionary<string, string>();
179179
identifiers.Add(IDENTIFIER_NAME, "test");
180180
var executionContext = CreateExecutionContext(client, config, true, identifiers);
181-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
181+
var immutableCredentials = GetCredentialsFromContext(executionContext);
182182

183183
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
184184
Assert.AreEqual("https://test123.amazonaws.com/shared/CreateTable",
@@ -208,7 +208,7 @@ public void RequiredNoIdentifiersFailedDiscovery()
208208
SortedDictionary<string, string> identifiers = new SortedDictionary<string, string>();
209209
identifiers.Add(IDENTIFIER_NAME, "test");
210210
var executionContext = CreateExecutionContext(client, config, true, identifiers);
211-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
211+
var immutableCredentials = GetCredentialsFromContext(executionContext);
212212

213213
Utils.AssertExceptionExpected(
214214
() => { EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials); },
@@ -227,7 +227,7 @@ public void NotRequiredNoIdentifiersFailedDiscoveryWait()
227227
var config = SetupConfig(true);
228228
var client = new EndpointDiscoveryTestClient(config, true);
229229
var executionContext = CreateExecutionContext(client, config, false, null);
230-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
230+
var immutableCredentials = GetCredentialsFromContext(executionContext);
231231

232232
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
233233
var endpoints = client.WaitForCachedValue(CACHEKEY);
@@ -247,7 +247,7 @@ public void NotRequiredEnabledNoIdentifiersWait()
247247
var config = SetupConfig(true);
248248
var client = new EndpointDiscoveryTestClient(config);
249249
var executionContext = CreateExecutionContext(client, config, false, null);
250-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
250+
var immutableCredentials = GetCredentialsFromContext(executionContext);
251251

252252
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
253253
var endpoints = client.WaitForCachedValue(CACHEKEY);
@@ -268,7 +268,7 @@ public void NotRequiredEnabledHasIdentifiersWait()
268268
SortedDictionary<string, string> identifiers = new SortedDictionary<string, string>();
269269
identifiers.Add(IDENTIFIER_NAME, "test");
270270
var executionContext = CreateExecutionContext(client, config, false, identifiers);
271-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
271+
var immutableCredentials = GetCredentialsFromContext(executionContext);
272272

273273
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
274274
var endpoints = client.WaitForCachedValue(CACHEKEY_IDENTIFIERS);
@@ -287,7 +287,7 @@ public void NotRequiredNoIdentifiersFailedDiscoveryNoWait()
287287
var config = SetupConfig(true);
288288
var client = new EndpointDiscoveryTestClient(config, true);
289289
var executionContext = CreateExecutionContext(client, config, false, null);
290-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
290+
var immutableCredentials = GetCredentialsFromContext(executionContext);
291291

292292
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
293293

@@ -303,7 +303,7 @@ public void NotRequiredEnabledNoIdentifiersNoWait()
303303
var config = SetupConfig(true);
304304
var client = new EndpointDiscoveryTestClient(config);
305305
var executionContext = CreateExecutionContext(client, config, false, null);
306-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
306+
var immutableCredentials = GetCredentialsFromContext(executionContext);
307307

308308
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
309309

@@ -321,7 +321,7 @@ public void NotRequiredEnabledHasIdentifiersNoWait()
321321
SortedDictionary<string, string> identifiers = new SortedDictionary<string, string>();
322322
identifiers.Add(IDENTIFIER_NAME, "test");
323323
var executionContext = CreateExecutionContext(client, config, false, identifiers);
324-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
324+
var immutableCredentials = GetCredentialsFromContext(executionContext);
325325

326326
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
327327

@@ -343,7 +343,7 @@ public void CacheEvictionTestUsingEndpointDiscoveryCallStack()
343343
var config = SetupConfig();
344344
var client = new EndpointDiscoveryTestClient(config);
345345
var executionContext = CreateExecutionContext(client, config, true, null);
346-
var immutableCredentials = (executionContext.RequestContext.Identity as AWSCredentials)?.GetCredentials();
346+
var immutableCredentials = GetCredentialsFromContext(executionContext);
347347
EndpointDiscoveryHandler.DiscoverEndpoints(executionContext.RequestContext, false, immutableCredentials);
348348

349349
Assert.AreEqual(1, client.CacheCount);
@@ -430,6 +430,16 @@ private bool HasEndpointAddress(IEnumerable<DiscoveryEndpointBase> endpoints, st
430430
return endpoints.Any(endpoint =>
431431
string.Equals(endpoint?.Address, address, StringComparison.OrdinalIgnoreCase));
432432
}
433+
434+
private ImmutableCredentials GetCredentialsFromContext(ExecutionContext executionContext)
435+
{
436+
if (executionContext.RequestContext.Identity is AWSCredentials credentials)
437+
{
438+
return credentials.GetCredentials();
439+
}
440+
441+
return null;
442+
}
433443
}
434444

435445
public class EndpointDiscoveryTestClient : AmazonDynamoDBClient

0 commit comments

Comments
 (0)