in codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeInterceptorSpec.java [248:313]
private MethodSpec generateTrySelectAuthScheme() {
MethodSpec.Builder builder = MethodSpec.methodBuilder("trySelectAuthScheme")
.addModifiers(Modifier.PRIVATE)
.returns(namedSelectedAuthScheme())
.addParameter(AuthSchemeOption.class, "authOption")
.addParameter(namedAuthScheme(), "authScheme")
.addParameter(IdentityProviders.class, "identityProviders")
.addParameter(listOfStringSuppliers(), "discardedReasons")
.addParameter(MetricCollector.class, "metricCollector")
.addParameter(ExecutionAttributes.class, "executionAttributes")
.addTypeVariable(TypeVariableName.get("T", Identity.class));
builder.beginControlFlow("if (authScheme == null)");
{
builder.addStatement("discardedReasons.add(() -> String.format($S, authOption.schemeId()))",
"'%s' is not enabled for this request.")
.addStatement("return null")
.endControlFlow();
}
builder.addStatement("$T identityProvider = authScheme.identityProvider(identityProviders)",
namedIdentityProvider());
builder.beginControlFlow("if (identityProvider == null)");
{
builder.addStatement("discardedReasons.add(() -> String.format($S, authOption.schemeId()))",
"'%s' does not have an identity provider configured.")
.addStatement("return null")
.endControlFlow();
}
builder.addStatement("$T signer",
ParameterizedTypeName.get(ClassName.get(HttpSigner.class), TypeVariableName.get("T")));
builder.beginControlFlow("try");
{
builder.addStatement("signer = authScheme.signer()");
builder.nextControlFlow("catch (RuntimeException e)");
builder.addStatement("discardedReasons.add(() -> String.format($S, authOption.schemeId(), e.getMessage()))",
"'%s' signer could not be retrieved: %s")
.addStatement("return null")
.endControlFlow();
}
builder.addStatement("$T.Builder identityRequestBuilder = $T.builder()",
ResolveIdentityRequest.class,
ResolveIdentityRequest.class);
builder.addStatement("authOption.forEachIdentityProperty(identityRequestBuilder::putProperty)");
if (endpointRulesSpecUtils.isS3()) {
builder.addStatement("identityRequestBuilder.putProperty($T.SDK_CLIENT, "
+ "executionAttributes.getAttribute($T.SDK_CLIENT))",
SdkIdentityProperty.class,
SdkInternalExecutionAttribute.class);
}
builder.addStatement("$T identity", namedIdentityFuture());
builder.addStatement("$T metric = getIdentityMetric(identityProvider)", durationSdkMetric());
builder.beginControlFlow("if (metric == null)")
.addStatement("identity = identityProvider.resolveIdentity(identityRequestBuilder.build())")
.nextControlFlow("else")
.addStatement("identity = $T.reportDuration("
+ "() -> identityProvider.resolveIdentity(identityRequestBuilder.build()), metricCollector, metric)",
MetricUtils.class)
.endControlFlow();
builder.addStatement("return new $T<>(identity, signer, authOption)", SelectedAuthScheme.class);
return builder.build();
}