Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import software.amazon.awssdk.annotations.Immutable;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.identity.spi.Identity;
import software.amazon.awssdk.identity.spi.IdentityProvider;
import software.amazon.awssdk.identity.spi.IdentityProviders;
import software.amazon.awssdk.utils.Lazy;
import software.amazon.awssdk.utils.ToString;
import software.amazon.awssdk.utils.Validate;

Expand All @@ -35,24 +36,13 @@
@Immutable
@SdkInternalApi
public final class DefaultIdentityProviders implements IdentityProviders {
/**
* TODO(sra-identity-auth): Currently, some customers assume we won't interact with the identity providers when we create
* the client. This isn't true - we need to call identityType. To TEMPORARILY work around those customer's tests failing,
* this is marked lazy. Once we fully migrate over to the SRA as the default code path, we should remove this lazy and
* ticket everyone in live who is making those bad assumptions.
*/
private final Lazy<Map<Class<?>, IdentityProvider<?>>> identityProviders;
private final List<IdentityProvider<?>> identityProvidersList;

private final Map<Class<?>, IdentityProvider<?>> identityProviders;

private DefaultIdentityProviders(BuilderImpl builder) {
this.identityProvidersList = new ArrayList<>(builder.identityProviders);
this.identityProviders = new Lazy<>(() -> {
Map<Class<?>, IdentityProvider<?>> result = new HashMap<>();
for (IdentityProvider<?> identityProvider : identityProvidersList) {
result.put(identityProvider.identityType(), identityProvider);
}
return result;
});
this.identityProviders = builder.identityProviders.stream().collect(
Collectors.toMap(identityProvider -> identityProvider.identityType(),
Function.identity(), (m1, m2) -> m2, HashMap::new));
}

public static Builder builder() {
Expand All @@ -61,7 +51,7 @@ public static Builder builder() {

@Override
public <T extends Identity> IdentityProvider<T> identityProvider(Class<T> identityType) {
return (IdentityProvider<T>) identityProviders.getValue().get(identityType);
return (IdentityProvider<T>) identityProviders.get(identityType);
}

@Override
Expand All @@ -72,7 +62,7 @@ public Builder toBuilder() {
@Override
public String toString() {
return ToString.builder("IdentityProviders")
.add("identityProviders", identityProvidersList)
.add("identityProviders", identityProviders.values())
.build();
}

Expand All @@ -83,7 +73,7 @@ private BuilderImpl() {
}

private BuilderImpl(DefaultIdentityProviders identityProviders) {
this.identityProviders.addAll(identityProviders.identityProvidersList);
this.identityProviders.addAll(identityProviders.identityProviders.values());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,23 +97,6 @@ public void copyBuilder_addIdentityProvider_works() {
assertSame(tokenProvider, identityProviders.identityProvider(TokenIdentity.class));
}

@Test
public void identityProviders_notTouched_untilNeeded() {
// TODO(sra-identity-auth): This should be removed once everything is on useSraAuth = true
IdentityProvider<AwsCredentialsIdentity> awsCredentialsProvider = Mockito.mock(IdentityProvider.class);
IdentityProviders providers =
IdentityProviders.builder()
.putIdentityProvider(awsCredentialsProvider)
.build()
.toBuilder()
.putIdentityProvider(awsCredentialsProvider)
.build()
.toBuilder()
.build();
providers.toString();
Mockito.verifyNoMoreInteractions(awsCredentialsProvider);
}

private static final class AwsCredentialsProvider implements IdentityProvider<AwsCredentialsIdentity> {

@Override
Expand Down
Loading