From d843a6f28442f63c65b2c0e164d19ed6562fd867 Mon Sep 17 00:00:00 2001 From: Jaykumar Gosar Date: Fri, 19 May 2023 01:25:50 -0700 Subject: [PATCH 1/6] Add initial AuthSchemeProvider codegen This includes: * AuthSchemeParams interface and implementation. * AuthSchemeProvider interface * AuthSchemeProvider implementation is stubbed out for now. * Plumbing to generate authscheme related code --- .../amazon/awssdk/codegen/AddMetadata.java | 1 + .../emitters/GeneratorPathProvider.java | 9 + .../tasks/AuthSchemeGeneratorTasks.java | 69 ++++++++ .../emitters/tasks/AwsGeneratorTasks.java | 3 +- .../awssdk/codegen/internal/Constant.java | 3 + .../codegen/model/intermediate/Metadata.java | 23 +++ .../codegen/naming/DefaultNamingStrategy.java | 5 + .../awssdk/codegen/naming/NamingStrategy.java | 6 + .../poet/authscheme/AuthSchemeParamsSpec.java | 122 ++++++++++++++ .../authscheme/AuthSchemeProviderSpec.java | 113 +++++++++++++ .../poet/authscheme/AuthSchemeSpecUtils.java | 70 ++++++++ .../DefaultAuthSchemeParamsSpec.java | 156 ++++++++++++++++++ .../DefaultAuthSchemeProviderSpec.java | 83 ++++++++++ .../poet/authscheme/AuthSchemeSpecTest.java | 50 ++++++ .../poet/authscheme/auth-scheme-params.java | 28 ++++ .../poet/authscheme/auth-scheme-provider.java | 35 ++++ .../default-auth-scheme-params.java | 55 ++++++ .../default-auth-scheme-provider.java | 28 ++++ core/auth/pom.xml | 5 + 19 files changed, 863 insertions(+), 1 deletion(-) create mode 100644 codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AuthSchemeGeneratorTasks.java create mode 100644 codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java create mode 100644 codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java create mode 100644 codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java create mode 100644 codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java create mode 100644 codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeProviderSpec.java create mode 100644 codegen/src/test/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecTest.java create mode 100644 codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java create mode 100644 codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java create mode 100644 codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-params.java create mode 100644 codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-provider.java diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/AddMetadata.java b/codegen/src/main/java/software/amazon/awssdk/codegen/AddMetadata.java index 7442ae662324..d84e5ade4788 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/AddMetadata.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/AddMetadata.java @@ -59,6 +59,7 @@ public static Metadata constructMetadata(ServiceModel serviceModel, .withPaginatorsPackageName(namingStrategy.getPaginatorsPackageName(serviceName)) .withWaitersPackageName(namingStrategy.getWaitersPackageName(serviceName)) .withEndpointRulesPackageName(namingStrategy.getEndpointRulesPackageName(serviceName)) + .withAuthSchemePackageName(namingStrategy.getAuthSchemePackageName(serviceName)) .withServiceAbbreviation(serviceMetadata.getServiceAbbreviation()) .withServiceFullName(serviceMetadata.getServiceFullName()) .withServiceName(serviceName) diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/GeneratorPathProvider.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/GeneratorPathProvider.java index 5e680b97b320..8cc7b1f36026 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/GeneratorPathProvider.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/GeneratorPathProvider.java @@ -95,4 +95,13 @@ public String getEndpointRulesInternalResourcesDirectory() { public String getEndpointRulesTestDirectory() { return testDirectory + "/" + Utils.packageToDirectory(model.getMetadata().getFullEndpointRulesPackageName()); } + + public String getAuthSchemeDirectory() { + return sourceDirectory + "/" + Utils.packageToDirectory(model.getMetadata().getFullAuthSchemePackageName()); + } + + public String getAuthSchemeInternalDirectory() { + return sourceDirectory + "/" + Utils.packageToDirectory(model.getMetadata().getFullInternalAuthSchemePackageName()); + } + } diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AuthSchemeGeneratorTasks.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AuthSchemeGeneratorTasks.java new file mode 100644 index 000000000000..095853439d32 --- /dev/null +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AuthSchemeGeneratorTasks.java @@ -0,0 +1,69 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.emitters.tasks; + +import java.util.ArrayList; +import java.util.List; +import software.amazon.awssdk.codegen.emitters.GeneratorTask; +import software.amazon.awssdk.codegen.emitters.GeneratorTaskParams; +import software.amazon.awssdk.codegen.emitters.PoetGeneratorTask; +import software.amazon.awssdk.codegen.poet.authscheme.AuthSchemeParamsSpec; +import software.amazon.awssdk.codegen.poet.authscheme.AuthSchemeProviderSpec; +import software.amazon.awssdk.codegen.poet.authscheme.DefaultAuthSchemeParamsSpec; +import software.amazon.awssdk.codegen.poet.authscheme.DefaultAuthSchemeProviderSpec; + +public final class AuthSchemeGeneratorTasks extends BaseGeneratorTasks { + private final GeneratorTaskParams generatorTaskParams; + + public AuthSchemeGeneratorTasks(GeneratorTaskParams dependencies) { + super(dependencies); + this.generatorTaskParams = dependencies; + } + + @Override + protected List createTasks() throws Exception { + List tasks = new ArrayList<>(); + tasks.add(generateParamsInterface()); + tasks.add(generateProviderInterface()); + tasks.add(generateDefaultParamsImpl()); + tasks.add(generateDefaultProviderImpl()); + return tasks; + } + + private GeneratorTask generateParamsInterface() { + return new PoetGeneratorTask(authSchemeDir(), model.getFileHeader(), new AuthSchemeParamsSpec(model)); + } + + private GeneratorTask generateDefaultParamsImpl() { + return new PoetGeneratorTask(authSchemeInternalDir(), model.getFileHeader(), new DefaultAuthSchemeParamsSpec(model)); + } + + private GeneratorTask generateProviderInterface() { + return new PoetGeneratorTask(authSchemeDir(), model.getFileHeader(), new AuthSchemeProviderSpec(model)); + } + + private GeneratorTask generateDefaultProviderImpl() { + return new PoetGeneratorTask(authSchemeInternalDir(), model.getFileHeader(), new DefaultAuthSchemeProviderSpec(model)); + } + + private String authSchemeDir() { + return generatorTaskParams.getPathProvider().getAuthSchemeDirectory(); + } + + private String authSchemeInternalDir() { + return generatorTaskParams.getPathProvider().getAuthSchemeInternalDirectory(); + } +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AwsGeneratorTasks.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AwsGeneratorTasks.java index 197b35f9effa..a6b3b75e4fcc 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AwsGeneratorTasks.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AwsGeneratorTasks.java @@ -27,6 +27,7 @@ public AwsGeneratorTasks(GeneratorTaskParams params) { new PaginatorsGeneratorTasks(params), new EventStreamGeneratorTasks(params), new WaitersGeneratorTasks(params), - new EndpointProviderTasks(params)); + new EndpointProviderTasks(params), + new AuthSchemeGeneratorTasks(params)); } } diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/internal/Constant.java b/codegen/src/main/java/software/amazon/awssdk/codegen/internal/Constant.java index 538fd383782a..eb7baf141d4a 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/internal/Constant.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/internal/Constant.java @@ -70,6 +70,9 @@ public final class Constant { public static final String PACKAGE_NAME_RULES_PATTERN = "%s.endpoints"; + // TODO: reviewer: maybe just auth instead of authscheme? or auth.scheme? + public static final String PACKAGE_NAME_AUTH_SCHEME_PATTERN = "%s.authscheme"; + public static final String PACKAGE_NAME_SMOKE_TEST_PATTERN = "%s.smoketests"; public static final String PACKAGE_NAME_CUSTOM_AUTH_PATTERN = "%s.auth"; diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/model/intermediate/Metadata.java b/codegen/src/main/java/software/amazon/awssdk/codegen/model/intermediate/Metadata.java index 1803ef245d6c..8cff0c0e8db3 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/model/intermediate/Metadata.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/model/intermediate/Metadata.java @@ -72,6 +72,8 @@ public class Metadata { private String endpointRulesPackageName; + private String authSchemePackageName; + private String serviceAbbreviation; private String serviceFullName; @@ -723,6 +725,27 @@ public String getFullInternalEndpointRulesPackageName() { return joinPackageNames(getFullEndpointRulesPackageName(), "internal"); } + public void setAuthSchemePackageName(String authSchemePackageName) { + this.authSchemePackageName = authSchemePackageName; + } + + public Metadata withAuthSchemePackageName(String authSchemePackageName) { + setAuthSchemePackageName(authSchemePackageName); + return this; + } + + public String getAuthSchemePackageName() { + return authSchemePackageName; + } + + public String getFullAuthSchemePackageName() { + return joinPackageNames(rootPackageName, getAuthSchemePackageName()); + } + + public String getFullInternalAuthSchemePackageName() { + return joinPackageNames(getFullAuthSchemePackageName(), "internal"); + } + public String getFullInternalPackageName() { return joinPackageNames(getFullClientPackageName(), "internal"); } diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/naming/DefaultNamingStrategy.java b/codegen/src/main/java/software/amazon/awssdk/codegen/naming/DefaultNamingStrategy.java index f764525e67f9..03f718a8c1f4 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/naming/DefaultNamingStrategy.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/naming/DefaultNamingStrategy.java @@ -179,6 +179,11 @@ public String getEndpointRulesPackageName(String serviceName) { return getCustomizedPackageName(concatServiceNameIfShareModel(serviceName), Constant.PACKAGE_NAME_RULES_PATTERN); } + @Override + public String getAuthSchemePackageName(String serviceName) { + return getCustomizedPackageName(concatServiceNameIfShareModel(serviceName), Constant.PACKAGE_NAME_AUTH_SCHEME_PATTERN); + } + @Override public String getSmokeTestPackageName(String serviceName) { diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/naming/NamingStrategy.java b/codegen/src/main/java/software/amazon/awssdk/codegen/naming/NamingStrategy.java index 5563e760af3f..f231062c14bf 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/naming/NamingStrategy.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/naming/NamingStrategy.java @@ -18,6 +18,7 @@ import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; import software.amazon.awssdk.codegen.model.intermediate.MemberModel; import software.amazon.awssdk.codegen.model.service.Shape; +import software.amazon.awssdk.core.SdkField; /** * Strategy to name various Java constructs based on the naming in the model and potentially customizations. @@ -63,6 +64,11 @@ public interface NamingStrategy { */ String getEndpointRulesPackageName(String serviceName); + /** + * Retrieve the auth scheme package name that should be used based on the service name. + */ + String getAuthSchemePackageName(String serviceName); + /** * Retrieve the smote test package name that should be used based on the service name. */ diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java new file mode 100644 index 000000000000..38e070b8a906 --- /dev/null +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java @@ -0,0 +1,122 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.authscheme; + +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.CodeBlock; +import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.ParameterSpec; +import com.squareup.javapoet.ParameterizedTypeName; +import com.squareup.javapoet.TypeSpec; +import java.util.Optional; +import javax.lang.model.element.Modifier; +import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; +import software.amazon.awssdk.codegen.poet.ClassSpec; +import software.amazon.awssdk.codegen.poet.PoetUtils; + +// TODO: reviewer: Params v/s Parameters? +// : Suffix with Spec? +public class AuthSchemeParamsSpec implements ClassSpec { + private final IntermediateModel intermediateModel; + private final AuthSchemeSpecUtils authSchemeSpecUtils; + + public AuthSchemeParamsSpec(IntermediateModel intermediateModel) { + this.intermediateModel = intermediateModel; + this.authSchemeSpecUtils = new AuthSchemeSpecUtils(intermediateModel); + } + + @Override + public ClassName className() { + return authSchemeSpecUtils.parametersInterfaceName(); + } + + @Override + public TypeSpec poetSpec() { + TypeSpec.Builder b = PoetUtils.createInterfaceBuilder(className()) + .addModifiers(Modifier.PUBLIC) + .addAnnotation(SdkPublicApi.class) + .addJavadoc(interfaceJavadoc()) + .addMethod(builderMethod()) + .addType(builderInterfaceSpec()); + + addAccessorMethods(b); + return b.build(); + } + + private void addAccessorMethods(TypeSpec.Builder b) { + b.addMethod(MethodSpec.methodBuilder("operation") + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + .returns(String.class) + .build()); + + if (authSchemeSpecUtils.usesSigV4()) { + b.addMethod(MethodSpec.methodBuilder("region") + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + // TODO: reviewer: Should region be Regions (Regions.class isn't available here though) + .returns(ParameterizedTypeName.get(Optional.class, String.class)) + .build()); + } + } + + private CodeBlock interfaceJavadoc() { + CodeBlock.Builder b = CodeBlock.builder(); + + b.add("The parameters object used to resolve the auth schemes for the $N service.", + intermediateModel.getMetadata().getServiceName()); + + return b.build(); + } + + private MethodSpec builderMethod() { + return MethodSpec.methodBuilder("builder") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .returns(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) + .addStatement("return $T.builder()", authSchemeSpecUtils.parametersDefaultImplName()) + .build(); + } + + private TypeSpec builderInterfaceSpec() { + TypeSpec.Builder b = TypeSpec.interfaceBuilder(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) + .addModifiers(Modifier.PUBLIC, Modifier.STATIC); + + addBuilderSetterMethods(b); + + b.addMethod(MethodSpec.methodBuilder("build") + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + .returns(className()) + .build()); + + return b.build(); + } + + private void addBuilderSetterMethods(TypeSpec.Builder b) { + b.addMethod(MethodSpec.methodBuilder("operation") + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + .addParameter(ParameterSpec.builder(String.class, "operation").build()) + .returns(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) + .build()); + + if (authSchemeSpecUtils.usesSigV4()) { + b.addMethod(MethodSpec.methodBuilder("region") + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + .addParameter(ParameterSpec.builder(String.class, "region").build()) + .returns(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) + .build()); + } + } + +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java new file mode 100644 index 000000000000..293d673ecb56 --- /dev/null +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java @@ -0,0 +1,113 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.authscheme; + +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.CodeBlock; +import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.ParameterizedTypeName; +import com.squareup.javapoet.TypeName; +import com.squareup.javapoet.TypeSpec; +import java.util.function.Consumer; +import javax.lang.model.element.Modifier; +import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; +import software.amazon.awssdk.codegen.poet.ClassSpec; +import software.amazon.awssdk.codegen.poet.PoetUtils; +import software.amazon.awssdk.http.auth.spi.HttpAuthOption; + +public class AuthSchemeProviderSpec implements ClassSpec { + private final IntermediateModel intermediateModel; + private final AuthSchemeSpecUtils authSchemeSpecUtils; + + public AuthSchemeProviderSpec(IntermediateModel intermediateModel) { + this.intermediateModel = intermediateModel; + this.authSchemeSpecUtils = new AuthSchemeSpecUtils(intermediateModel); + } + + @Override + public ClassName className() { + return authSchemeSpecUtils.providerInterfaceName(); + } + + @Override + public TypeSpec poetSpec() { + return PoetUtils.createInterfaceBuilder(className()) + // .addSuperinterface(EndpointProvider.class) // TODO: reviewer: do we want a marker interface? + .addModifiers(Modifier.PUBLIC) + .addAnnotation(SdkPublicApi.class) + .addJavadoc(interfaceJavadoc()) + .addMethod(resolveAuthSchemeMethod()) + .addMethod(resolveAuthSchemeConsumerBuilderMethod()) + .addMethod(defaultProviderMethod()) + .build(); + } + + private MethodSpec resolveAuthSchemeMethod() { + MethodSpec.Builder b = MethodSpec.methodBuilder("resolveAuthScheme"); + b.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT); + b.addParameter(authSchemeSpecUtils.parametersInterfaceName(), "authSchemeParams"); + b.returns(authSchemeSpecUtils.resolverReturnType()); + b.addJavadoc(resolveMethodJavadoc()); + return b.build(); + } + + private MethodSpec resolveAuthSchemeConsumerBuilderMethod() { + ClassName parametersInterface = authSchemeSpecUtils.parametersInterfaceName(); + ClassName parametersBuilderInterface = parametersInterface.nestedClass("Builder"); + TypeName consumerType = ParameterizedTypeName.get(ClassName.get(Consumer.class), parametersBuilderInterface); + + MethodSpec.Builder b = MethodSpec.methodBuilder("resolveAuthScheme"); + b.addModifiers(Modifier.PUBLIC, Modifier.DEFAULT); + b.addParameter(consumerType, "consumer"); + b.returns(authSchemeSpecUtils.resolverReturnType()); + b.addJavadoc(resolveMethodJavadoc()); + + b.addStatement("$T builder = $T.builder()", parametersBuilderInterface, parametersInterface); + b.addStatement("consumer.accept(builder)"); + b.addStatement("return resolveAuthScheme(builder.build())"); + + return b.build(); + } + + private MethodSpec defaultProviderMethod() { + return MethodSpec.methodBuilder("defaultProvider") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .returns(className()) + .addStatement("return $T.create()", authSchemeSpecUtils.providerDefaultImplName()) + .build(); + } + + private CodeBlock interfaceJavadoc() { + CodeBlock.Builder b = CodeBlock.builder(); + + b.add("An auth scheme provider for $N. The auth scheme provider takes a set of parameters using {@link $T}, and " + + "resolves a list of {@link $T} based on the given parameters.", + intermediateModel.getMetadata().getServiceName(), + authSchemeSpecUtils.parametersInterfaceName(), + HttpAuthOption.class); + + return b.build(); + } + + private CodeBlock resolveMethodJavadoc() { + CodeBlock.Builder b = CodeBlock.builder(); + + b.add("Resolve the auth schemes based on the given set of parameters."); + + return b.build(); + } +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java new file mode 100644 index 000000000000..8a2bebb0f7d0 --- /dev/null +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java @@ -0,0 +1,70 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.authscheme; + +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.ParameterizedTypeName; +import com.squareup.javapoet.TypeName; +import java.util.List; +import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; +import software.amazon.awssdk.codegen.utils.AuthUtils; +import software.amazon.awssdk.http.auth.spi.HttpAuthOption; + +final class AuthSchemeSpecUtils { + private final IntermediateModel intermediateModel; + + AuthSchemeSpecUtils(IntermediateModel intermediateModel) { + this.intermediateModel = intermediateModel; + } + + private String basePackage() { + return intermediateModel.getMetadata().getFullAuthSchemePackageName(); + } + + private String internalPackage() { + return intermediateModel.getMetadata().getFullInternalAuthSchemePackageName(); + } + + public ClassName parametersInterfaceName() { + return ClassName.get(basePackage(), intermediateModel.getMetadata().getServiceName() + "AuthSchemeParams"); + } + + public ClassName parametersInterfaceBuilderInterfaceName() { + return parametersInterfaceName().nestedClass("Builder"); + } + + public ClassName parametersDefaultImplName() { + return ClassName.get(internalPackage(), "Default" + parametersInterfaceName().simpleName()); + } + + public ClassName providerInterfaceName() { + return ClassName.get(basePackage(), intermediateModel.getMetadata().getServiceName() + "AuthSchemeProvider"); + } + + public ClassName providerDefaultImplName() { + return ClassName.get(internalPackage(), "Default" + providerInterfaceName().simpleName()); + } + + public TypeName resolverReturnType() { + return ParameterizedTypeName.get(List.class, HttpAuthOption.class); + } + + public boolean usesSigV4() { + // TODO: reviewer: Does the below method usage change with sigV4a? + return AuthUtils.usesAwsAuth(intermediateModel); + } + +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java new file mode 100644 index 000000000000..02656d66c01b --- /dev/null +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java @@ -0,0 +1,156 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.authscheme; + +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.FieldSpec; +import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.ParameterSpec; +import com.squareup.javapoet.ParameterizedTypeName; +import com.squareup.javapoet.TypeSpec; +import java.util.Optional; +import javax.lang.model.element.Modifier; +import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; +import software.amazon.awssdk.codegen.poet.ClassSpec; +import software.amazon.awssdk.codegen.poet.PoetUtils; +import software.amazon.awssdk.utils.Validate; + +public class DefaultAuthSchemeParamsSpec implements ClassSpec { + private final AuthSchemeSpecUtils authSchemeSpecUtils; + + public DefaultAuthSchemeParamsSpec(IntermediateModel intermediateModel) { + this.authSchemeSpecUtils = new AuthSchemeSpecUtils(intermediateModel); + } + + @Override + public ClassName className() { + return authSchemeSpecUtils.parametersDefaultImplName(); + } + + @Override + public TypeSpec poetSpec() { + TypeSpec.Builder b = PoetUtils.createClassBuilder(className()) + .addModifiers(Modifier.PUBLIC, Modifier.FINAL) + .addAnnotation(SdkInternalApi.class) + .addSuperinterface(authSchemeSpecUtils.parametersInterfaceName()) + .addMethod(constructor()) + .addMethod(builderMethod()) + .addType(builderImplSpec()); + + addFieldsAndAccessors(b); + + return b.build(); + } + + private void addFieldsAndAccessors(TypeSpec.Builder b) { + b.addField(FieldSpec.builder(String.class, "operation") + .addModifiers(Modifier.PRIVATE, Modifier.FINAL) + .build()); + + b.addMethod(MethodSpec.methodBuilder("operation") + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class) + .returns(String.class) + .addStatement("return operation") + .build()); + + if (authSchemeSpecUtils.usesSigV4()) { + b.addField(FieldSpec.builder(String.class, "region") + .addModifiers(Modifier.PRIVATE, Modifier.FINAL) + .build()); + + b.addMethod(MethodSpec.methodBuilder("region") + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class) + .returns(ParameterizedTypeName.get(Optional.class, String.class)) + .addStatement("return region == null ? Optional.empty() : Optional.of(region)") + .build()); + } + } + + private MethodSpec constructor() { + MethodSpec.Builder b = MethodSpec.constructorBuilder() + .addModifiers(Modifier.PRIVATE) + .addParameter(builderClassName(), "builder") + .addStatement("this.operation = $T.paramNotNull(builder.operation, \"operation\")", + Validate.class); + + if (authSchemeSpecUtils.usesSigV4()) { + b.addStatement("this.region = builder.region"); + } + return b.build(); + } + + private MethodSpec builderMethod() { + return MethodSpec.methodBuilder("builder") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .returns(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) + .addStatement("return new $T()", builderClassName()) + .build(); + } + + private TypeSpec builderImplSpec() { + TypeSpec.Builder b = TypeSpec.classBuilder(builderClassName()) + .addModifiers(Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL) + .addSuperinterface(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()); + + addBuilderFieldsAndSetter(b); + + b.addMethod(MethodSpec.methodBuilder("build") + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class) + .returns(authSchemeSpecUtils.parametersInterfaceName()) + .addStatement("return new $T(this)", className()) + .build()); + + return b.build(); + } + + private void addBuilderFieldsAndSetter(TypeSpec.Builder b) { + b.addField(FieldSpec.builder(String.class, "operation") + .addModifiers(Modifier.PRIVATE) + .build()); + + b.addMethod(MethodSpec.methodBuilder("operation") + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class) + .addParameter(ParameterSpec.builder(String.class, "operation").build()) + .returns(builderClassName()) + .addStatement("this.operation = operation") + .addStatement("return this") + .build()); + + if (authSchemeSpecUtils.usesSigV4()) { + b.addField(FieldSpec.builder(String.class, "region") + .addModifiers(Modifier.PRIVATE) + .build()); + + b.addMethod(MethodSpec.methodBuilder("region") + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class) + .addParameter(ParameterSpec.builder(String.class, "region").build()) + .returns(builderClassName()) + .addStatement("this.region = region") + .addStatement("return this") + .build()); + } + } + + private ClassName builderClassName() { + return className().nestedClass("Builder"); + } +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeProviderSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeProviderSpec.java new file mode 100644 index 000000000000..06e5748b2962 --- /dev/null +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeProviderSpec.java @@ -0,0 +1,83 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.authscheme; + +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.FieldSpec; +import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.TypeSpec; +import java.util.ArrayList; +import javax.lang.model.element.Modifier; +import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; +import software.amazon.awssdk.codegen.poet.ClassSpec; +import software.amazon.awssdk.codegen.poet.PoetUtils; + +public class DefaultAuthSchemeProviderSpec implements ClassSpec { + private final AuthSchemeSpecUtils authSchemeSpecUtils; + + public DefaultAuthSchemeProviderSpec(IntermediateModel intermediateModel) { + this.authSchemeSpecUtils = new AuthSchemeSpecUtils(intermediateModel); + } + + @Override + public ClassName className() { + return authSchemeSpecUtils.providerDefaultImplName(); + } + + @Override + public TypeSpec poetSpec() { + return PoetUtils.createClassBuilder(className()) + .addModifiers(Modifier.PUBLIC, Modifier.FINAL) + .addAnnotation(SdkInternalApi.class) + .addSuperinterface(authSchemeSpecUtils.providerInterfaceName()) + .addMethod(constructor()) + .addField(defaultInstance()) + .addMethod(createMethod()) + .addMethod(resolveAuthSchemeMethod()) + .build(); + } + + private FieldSpec defaultInstance() { + return FieldSpec.builder(className(), "DEFAULT") + .addModifiers(Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL) + .initializer("new $T()", className()) + .build(); + } + + private MethodSpec constructor() { + return MethodSpec.constructorBuilder().addModifiers(Modifier.PRIVATE).build(); + } + + private MethodSpec createMethod() { + return MethodSpec.methodBuilder("create") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .returns(className()) + .addStatement("return DEFAULT") + .build(); + } + + private MethodSpec resolveAuthSchemeMethod() { + return MethodSpec.methodBuilder("resolveAuthScheme") + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class) + .returns(authSchemeSpecUtils.resolverReturnType()) + .addParameter(authSchemeSpecUtils.parametersInterfaceName(), "authSchemeParams") + // TODO: make real implementation + .addStatement("return new $T<>()", ArrayList.class) + .build(); + } +} diff --git a/codegen/src/test/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecTest.java b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecTest.java new file mode 100644 index 000000000000..82d45d05e79b --- /dev/null +++ b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecTest.java @@ -0,0 +1,50 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.authscheme; + +import static org.hamcrest.MatcherAssert.assertThat; +import static software.amazon.awssdk.codegen.poet.PoetMatchers.generatesTo; + +import org.junit.jupiter.api.Test; +import software.amazon.awssdk.codegen.poet.ClassSpec; +import software.amazon.awssdk.codegen.poet.ClientTestModels; + +public class AuthSchemeSpecTest { + + @Test + public void authSchemeParams() { + ClassSpec authSchemeParams = new AuthSchemeParamsSpec(ClientTestModels.queryServiceModels()); + assertThat(authSchemeParams, generatesTo("auth-scheme-params.java")); + } + + @Test + public void authSchemeProvider() { + ClassSpec authSchemeProvider = new AuthSchemeProviderSpec(ClientTestModels.queryServiceModels()); + assertThat(authSchemeProvider, generatesTo("auth-scheme-provider.java")); + } + + @Test + public void defaultAuthSchemeParams() { + ClassSpec defaultAuthSchemeParams = new DefaultAuthSchemeParamsSpec(ClientTestModels.queryServiceModels()); + assertThat(defaultAuthSchemeParams, generatesTo("default-auth-scheme-params.java")); + } + + @Test + public void defaultAuthSchemeProvider() { + ClassSpec defaultAuthSchemeProvider = new DefaultAuthSchemeProviderSpec(ClientTestModels.queryServiceModels()); + assertThat(defaultAuthSchemeProvider, generatesTo("default-auth-scheme-provider.java")); + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java new file mode 100644 index 000000000000..7895c5dcf892 --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java @@ -0,0 +1,28 @@ +package software.amazon.awssdk.services.query.authscheme; + +import java.util.Optional; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.services.query.authscheme.internal.DefaultQueryAuthSchemeParams; + +/** + * The parameters object used to resolve the auth schemes for the Query service. + */ +@Generated("software.amazon.awssdk:codegen") +@SdkPublicApi +public interface QueryAuthSchemeParams { + + static Builder builder() { + return DefaultQueryAuthSchemeParams.builder(); + } + + String operation(); + Optional region(); + + interface Builder { + Builder operation(String operation); + Builder region(String region); + + QueryAuthSchemeParams build(); + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java new file mode 100644 index 000000000000..c394284793f0 --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java @@ -0,0 +1,35 @@ +package software.amazon.awssdk.services.query.authscheme; + +import java.util.List; +import java.util.function.Consumer; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.http.auth.spi.HttpAuthOption; +import software.amazon.awssdk.services.query.authscheme.internal.DefaultQueryAuthSchemeProvider; + + +/** + * An auth scheme provider for Query. The auth scheme provider takes a set of parameters using + * {@link QueryAuthSchemeParams}, and resolves a list of {@link HttpAuthOption} based on the given parameters. + */ +@Generated("software.amazon.awssdk:codegen") +@SdkPublicApi +public interface QueryAuthSchemeProvider { + /** + * Resolve the auth schemes based on the given set of parameters. + */ + List resolveAuthScheme(QueryAuthSchemeParams authSchemeParams); + + /** + * Resolve the auth schemes based on the given set of parameters. + */ + default List resolveAuthScheme(Consumer consumer) { + QueryAuthSchemeParams.Builder builder = QueryAuthSchemeParams.builder(); + consumer.accept(builder); + return resolveAuthScheme(builder.build()); + } + + static QueryAuthSchemeProvider defaultProvider() { + return DefaultQueryAuthSchemeProvider.create(); + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-params.java new file mode 100644 index 000000000000..232b18ee77f4 --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-params.java @@ -0,0 +1,55 @@ +package software.amazon.awssdk.services.query.authscheme.internal; + +import java.util.Optional; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.services.query.authscheme.QueryAuthSchemeParams; +import software.amazon.awssdk.utils.Validate; + +@Generated("software.amazon.awssdk:codegen") +@SdkInternalApi +public final class DefaultQueryAuthSchemeParams implements QueryAuthSchemeParams { + private final String operation; + private final String region; + + private DefaultQueryAuthSchemeParams(Builder builder) { + this.operation = Validate.paramNotNull(builder.operation, "operation"); + this.region = builder.region; + } + + public static QueryAuthSchemeParams.Builder builder() { + return new Builder(); + } + + @Override + public String operation() { + return operation; + } + + @Override + public Optional region() { + return region == null ? Optional.empty() : Optional.of(region); + } + + private static final class Builder implements QueryAuthSchemeParams.Builder { + private String operation; + private String region; + + @Override + public Builder operation(String operation) { + this.operation = operation; + return this; + } + + @Override + public Builder region(String region) { + this.region = region; + return this; + } + + @Override + public QueryAuthSchemeParams build() { + return new DefaultQueryAuthSchemeParams(this); + } + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-provider.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-provider.java new file mode 100644 index 000000000000..57158eaf2841 --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-provider.java @@ -0,0 +1,28 @@ +package software.amazon.awssdk.services.query.authscheme.internal; + +import java.util.ArrayList; +import java.util.List; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.http.auth.spi.HttpAuthOption; +import software.amazon.awssdk.services.query.authscheme.QueryAuthSchemeParams; +import software.amazon.awssdk.services.query.authscheme.QueryAuthSchemeProvider; + +@Generated("software.amazon.awssdk:codegen") +@SdkInternalApi +public final class DefaultQueryAuthSchemeProvider implements QueryAuthSchemeProvider { + + private static final DefaultQueryAuthSchemeProvider DEFAULT = new DefaultQueryAuthSchemeProvider(); + + private DefaultQueryAuthSchemeProvider() { + } + + public static DefaultQueryAuthSchemeProvider create() { + return DEFAULT; + } + + @Override + public List resolveAuthScheme(QueryAuthSchemeParams authSchemeParams) { + return new ArrayList<>(); + } +} diff --git a/core/auth/pom.xml b/core/auth/pom.xml index 13db25646058..cc87b1f54b53 100644 --- a/core/auth/pom.xml +++ b/core/auth/pom.xml @@ -53,6 +53,11 @@ identity-spi ${awsjavasdk.version} + + software.amazon.awssdk + http-auth + ${awsjavasdk.version} + software.amazon.awssdk regions From c197b1249a7cfdf8b35e5bd1dcddaaec17c38bc3 Mon Sep 17 00:00:00 2001 From: Jaykumar Gosar Date: Tue, 23 May 2023 12:20:16 -0700 Subject: [PATCH 2/6] Refactor to remove some duplication --- .../poet/authscheme/AuthSchemeParamsSpec.java | 31 ++++---- .../DefaultAuthSchemeParamsSpec.java | 70 +++++++++---------- 2 files changed, 48 insertions(+), 53 deletions(-) diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java index 38e070b8a906..0a719beccab2 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java @@ -57,21 +57,6 @@ public TypeSpec poetSpec() { return b.build(); } - private void addAccessorMethods(TypeSpec.Builder b) { - b.addMethod(MethodSpec.methodBuilder("operation") - .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) - .returns(String.class) - .build()); - - if (authSchemeSpecUtils.usesSigV4()) { - b.addMethod(MethodSpec.methodBuilder("region") - .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) - // TODO: reviewer: Should region be Regions (Regions.class isn't available here though) - .returns(ParameterizedTypeName.get(Optional.class, String.class)) - .build()); - } - } - private CodeBlock interfaceJavadoc() { CodeBlock.Builder b = CodeBlock.builder(); @@ -103,6 +88,21 @@ private TypeSpec builderInterfaceSpec() { return b.build(); } + private void addAccessorMethods(TypeSpec.Builder b) { + b.addMethod(MethodSpec.methodBuilder("operation") + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + .returns(String.class) + .build()); + + if (authSchemeSpecUtils.usesSigV4()) { + b.addMethod(MethodSpec.methodBuilder("region") + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + // TODO: reviewer: Should region be Regions (Regions.class isn't available here though) + .returns(ParameterizedTypeName.get(Optional.class, String.class)) + .build()); + } + } + private void addBuilderSetterMethods(TypeSpec.Builder b) { b.addMethod(MethodSpec.methodBuilder("operation") .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) @@ -118,5 +118,4 @@ private void addBuilderSetterMethods(TypeSpec.Builder b) { .build()); } } - } diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java index 02656d66c01b..5e21add9a762 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java @@ -21,6 +21,7 @@ import com.squareup.javapoet.ParameterSpec; import com.squareup.javapoet.ParameterizedTypeName; import com.squareup.javapoet.TypeSpec; +import java.lang.reflect.Type; import java.util.Optional; import javax.lang.model.element.Modifier; import software.amazon.awssdk.annotations.SdkInternalApi; @@ -56,32 +57,6 @@ public TypeSpec poetSpec() { return b.build(); } - private void addFieldsAndAccessors(TypeSpec.Builder b) { - b.addField(FieldSpec.builder(String.class, "operation") - .addModifiers(Modifier.PRIVATE, Modifier.FINAL) - .build()); - - b.addMethod(MethodSpec.methodBuilder("operation") - .addModifiers(Modifier.PUBLIC) - .addAnnotation(Override.class) - .returns(String.class) - .addStatement("return operation") - .build()); - - if (authSchemeSpecUtils.usesSigV4()) { - b.addField(FieldSpec.builder(String.class, "region") - .addModifiers(Modifier.PRIVATE, Modifier.FINAL) - .build()); - - b.addMethod(MethodSpec.methodBuilder("region") - .addModifiers(Modifier.PUBLIC) - .addAnnotation(Override.class) - .returns(ParameterizedTypeName.get(Optional.class, String.class)) - .addStatement("return region == null ? Optional.empty() : Optional.of(region)") - .build()); - } - } - private MethodSpec constructor() { MethodSpec.Builder b = MethodSpec.constructorBuilder() .addModifiers(Modifier.PRIVATE) @@ -120,36 +95,57 @@ private TypeSpec builderImplSpec() { return b.build(); } - private void addBuilderFieldsAndSetter(TypeSpec.Builder b) { + private void addFieldsAndAccessors(TypeSpec.Builder b) { b.addField(FieldSpec.builder(String.class, "operation") - .addModifiers(Modifier.PRIVATE) + .addModifiers(Modifier.PRIVATE, Modifier.FINAL) .build()); b.addMethod(MethodSpec.methodBuilder("operation") .addModifiers(Modifier.PUBLIC) .addAnnotation(Override.class) - .addParameter(ParameterSpec.builder(String.class, "operation").build()) - .returns(builderClassName()) - .addStatement("this.operation = operation") - .addStatement("return this") + .returns(String.class) + .addStatement("return operation") .build()); if (authSchemeSpecUtils.usesSigV4()) { b.addField(FieldSpec.builder(String.class, "region") - .addModifiers(Modifier.PRIVATE) + .addModifiers(Modifier.PRIVATE, Modifier.FINAL) .build()); b.addMethod(MethodSpec.methodBuilder("region") .addModifiers(Modifier.PUBLIC) .addAnnotation(Override.class) - .addParameter(ParameterSpec.builder(String.class, "region").build()) - .returns(builderClassName()) - .addStatement("this.region = region") - .addStatement("return this") + .returns(ParameterizedTypeName.get(Optional.class, String.class)) + .addStatement("return region == null ? Optional.empty() : Optional.of(region)") .build()); } } + private void addBuilderFieldsAndSetter(TypeSpec.Builder b) { + b.addField(FieldSpec.builder(String.class, "operation") + .addModifiers(Modifier.PRIVATE) + .build()); + b.addMethod(builderSetterMethod("operation", String.class)); + + if (authSchemeSpecUtils.usesSigV4()) { + b.addField(FieldSpec.builder(String.class, "region") + .addModifiers(Modifier.PRIVATE) + .build()); + b.addMethod(builderSetterMethod("region", String.class)); + } + } + + private MethodSpec builderSetterMethod(String field, Type type) { + return MethodSpec.methodBuilder(field) + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class) + .addParameter(ParameterSpec.builder(type, field).build()) + .returns(builderClassName()) + .addStatement("this.$L = $L", field, field) + .addStatement("return this") + .build(); + } + private ClassName builderClassName() { return className().nestedClass("Builder"); } From cd22005298bf4a9eab8c4d7ebd3bb5a16cc7de38 Mon Sep 17 00:00:00 2001 From: Jaykumar Gosar Date: Tue, 23 May 2023 12:59:13 -0700 Subject: [PATCH 3/6] Add AuthSchemeProvider marker interface This is needed for setting authSchemeProvider client configuration option. --- .../authscheme/AuthSchemeProviderSpec.java | 3 ++- .../poet/authscheme/auth-scheme-provider.java | 4 +-- .../http/auth/spi/AuthSchemeProvider.java | 26 +++++++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 core/http-auth-spi/src/main/java/software/amazon/awssdk/http/auth/spi/AuthSchemeProvider.java diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java index 293d673ecb56..ec6a6bde5ef6 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java @@ -27,6 +27,7 @@ import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; import software.amazon.awssdk.codegen.poet.ClassSpec; import software.amazon.awssdk.codegen.poet.PoetUtils; +import software.amazon.awssdk.http.auth.spi.AuthSchemeProvider; import software.amazon.awssdk.http.auth.spi.HttpAuthOption; public class AuthSchemeProviderSpec implements ClassSpec { @@ -46,7 +47,7 @@ public ClassName className() { @Override public TypeSpec poetSpec() { return PoetUtils.createInterfaceBuilder(className()) - // .addSuperinterface(EndpointProvider.class) // TODO: reviewer: do we want a marker interface? + .addSuperinterface(AuthSchemeProvider.class) .addModifiers(Modifier.PUBLIC) .addAnnotation(SdkPublicApi.class) .addJavadoc(interfaceJavadoc()) diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java index c394284793f0..5da78daf3f44 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java @@ -4,17 +4,17 @@ import java.util.function.Consumer; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.http.auth.spi.AuthSchemeProvider; import software.amazon.awssdk.http.auth.spi.HttpAuthOption; import software.amazon.awssdk.services.query.authscheme.internal.DefaultQueryAuthSchemeProvider; - /** * An auth scheme provider for Query. The auth scheme provider takes a set of parameters using * {@link QueryAuthSchemeParams}, and resolves a list of {@link HttpAuthOption} based on the given parameters. */ @Generated("software.amazon.awssdk:codegen") @SdkPublicApi -public interface QueryAuthSchemeProvider { +public interface QueryAuthSchemeProvider extends AuthSchemeProvider { /** * Resolve the auth schemes based on the given set of parameters. */ diff --git a/core/http-auth-spi/src/main/java/software/amazon/awssdk/http/auth/spi/AuthSchemeProvider.java b/core/http-auth-spi/src/main/java/software/amazon/awssdk/http/auth/spi/AuthSchemeProvider.java new file mode 100644 index 000000000000..8db58fac1da3 --- /dev/null +++ b/core/http-auth-spi/src/main/java/software/amazon/awssdk/http/auth/spi/AuthSchemeProvider.java @@ -0,0 +1,26 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.http.auth.spi; + +import software.amazon.awssdk.annotations.SdkPublicApi; + +/** + * A marker interface for an auth scheme provider. An auth scheme provider takes as input a set of service-specific parameters, + * and resolves a list of {@link HttpAuthOption} based on the given parameters. + */ +@SdkPublicApi +public interface AuthSchemeProvider { +} From 34da7d015971e57d9c5b93b229f3b71c17f0e2ea Mon Sep 17 00:00:00 2001 From: Jaykumar Gosar Date: Tue, 23 May 2023 15:58:29 -0700 Subject: [PATCH 4/6] Add/update generated javadoc --- .../poet/authscheme/AuthSchemeParamsSpec.java | 14 +++++++++-- .../authscheme/AuthSchemeProviderSpec.java | 3 ++- .../poet/authscheme/AuthSchemeSpecUtils.java | 1 - .../poet/authscheme/auth-scheme-params.java | 24 +++++++++++++++++++ .../poet/authscheme/auth-scheme-provider.java | 5 +++- 5 files changed, 42 insertions(+), 5 deletions(-) diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java index 0a719beccab2..1a2cc4fbd1f0 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java @@ -29,7 +29,6 @@ import software.amazon.awssdk.codegen.poet.PoetUtils; // TODO: reviewer: Params v/s Parameters? -// : Suffix with Spec? public class AuthSchemeParamsSpec implements ClassSpec { private final IntermediateModel intermediateModel; private final AuthSchemeSpecUtils authSchemeSpecUtils; @@ -71,18 +70,23 @@ private MethodSpec builderMethod() { .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .returns(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) .addStatement("return $T.builder()", authSchemeSpecUtils.parametersDefaultImplName()) + .addJavadoc("Get a new builder for creating a {@link $T}.", + authSchemeSpecUtils.parametersInterfaceName()) .build(); } private TypeSpec builderInterfaceSpec() { TypeSpec.Builder b = TypeSpec.interfaceBuilder(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) - .addModifiers(Modifier.PUBLIC, Modifier.STATIC); + .addModifiers(Modifier.PUBLIC, Modifier.STATIC) + .addJavadoc("A builder for a {@link $T}.", authSchemeSpecUtils.parametersInterfaceName()); addBuilderSetterMethods(b); b.addMethod(MethodSpec.methodBuilder("build") .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) .returns(className()) + .addJavadoc("Returns a {@link $T} object that is created from the properties that have been set " + + "on the builder.", authSchemeSpecUtils.parametersInterfaceName()) .build()); return b.build(); @@ -92,6 +96,7 @@ private void addAccessorMethods(TypeSpec.Builder b) { b.addMethod(MethodSpec.methodBuilder("operation") .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) .returns(String.class) + .addJavadoc("Returns the operation for which to resolve the auth scheme.") .build()); if (authSchemeSpecUtils.usesSigV4()) { @@ -99,6 +104,8 @@ private void addAccessorMethods(TypeSpec.Builder b) { .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) // TODO: reviewer: Should region be Regions (Regions.class isn't available here though) .returns(ParameterizedTypeName.get(Optional.class, String.class)) + .addJavadoc("Returns the region. The region is optional. The region parameter may be used " + + "with $S auth scheme. By default, the region will be empty.", "aws.auth#sigv4") .build()); } } @@ -108,6 +115,7 @@ private void addBuilderSetterMethods(TypeSpec.Builder b) { .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) .addParameter(ParameterSpec.builder(String.class, "operation").build()) .returns(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) + .addJavadoc("Set the operation for which to resolve the auth scheme.") .build()); if (authSchemeSpecUtils.usesSigV4()) { @@ -115,6 +123,8 @@ private void addBuilderSetterMethods(TypeSpec.Builder b) { .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) .addParameter(ParameterSpec.builder(String.class, "region").build()) .returns(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) + .addJavadoc("Set the region. The region parameter may be used with the $S auth scheme.", + "aws.auth#sigv4") // TODO: Could the known auth schemes be defined somewhere? .build()); } } diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java index ec6a6bde5ef6..fca568e9edf1 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java @@ -88,6 +88,7 @@ private MethodSpec defaultProviderMethod() { return MethodSpec.methodBuilder("defaultProvider") .addModifiers(Modifier.PUBLIC, Modifier.STATIC) .returns(className()) + .addJavadoc("Get the default auth scheme provider.") .addStatement("return $T.create()", authSchemeSpecUtils.providerDefaultImplName()) .build(); } @@ -95,7 +96,7 @@ private MethodSpec defaultProviderMethod() { private CodeBlock interfaceJavadoc() { CodeBlock.Builder b = CodeBlock.builder(); - b.add("An auth scheme provider for $N. The auth scheme provider takes a set of parameters using {@link $T}, and " + b.add("An auth scheme provider for $N service. The auth scheme provider takes a set of parameters using {@link $T}, and " + "resolves a list of {@link $T} based on the given parameters.", intermediateModel.getMetadata().getServiceName(), authSchemeSpecUtils.parametersInterfaceName(), diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java index 8a2bebb0f7d0..4eee9014f033 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java @@ -63,7 +63,6 @@ public TypeName resolverReturnType() { } public boolean usesSigV4() { - // TODO: reviewer: Does the below method usage change with sigV4a? return AuthUtils.usesAwsAuth(intermediateModel); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java index 7895c5dcf892..ac0076a525eb 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java @@ -12,17 +12,41 @@ @SdkPublicApi public interface QueryAuthSchemeParams { + /** + * Get a new builder for creating a {@link QueryAuthSchemeParams}. + */ static Builder builder() { return DefaultQueryAuthSchemeParams.builder(); } + /** + * Returns the operation for which to resolve the auth scheme. + */ String operation(); + + /** + * Returns the region. The region is optional. The region parameter may be used with "aws.auth#sigv4" auth scheme. + * By default, the region will be empty. + */ Optional region(); + /** + * A builder for a {@link QueryAuthSchemeParams}. + */ interface Builder { + /** + * Set the operation for which to resolve the auth scheme. + */ Builder operation(String operation); + + /** + * Set the region. The region parameter may be used with the "aws.auth#sigv4" auth scheme. + */ Builder region(String region); + /** + * Returns a {@link QueryAuthSchemeParams} object that is created from the properties that have been set on the builder. + */ QueryAuthSchemeParams build(); } } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java index 5da78daf3f44..39cd9d21595e 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java @@ -9,7 +9,7 @@ import software.amazon.awssdk.services.query.authscheme.internal.DefaultQueryAuthSchemeProvider; /** - * An auth scheme provider for Query. The auth scheme provider takes a set of parameters using + * An auth scheme provider for Query service. The auth scheme provider takes a set of parameters using * {@link QueryAuthSchemeParams}, and resolves a list of {@link HttpAuthOption} based on the given parameters. */ @Generated("software.amazon.awssdk:codegen") @@ -29,6 +29,9 @@ default List resolveAuthScheme(Consumer Date: Wed, 24 May 2023 11:02:08 -0700 Subject: [PATCH 5/6] Use ".auth.scheme" for java package Also, removed/updated some TODOs. --- .../tasks/AuthSchemeGeneratorTasks.java | 8 ++-- .../awssdk/codegen/internal/Constant.java | 2 +- .../scheme}/AuthSchemeParamsSpec.java | 7 ++- .../scheme}/AuthSchemeProviderSpec.java | 2 +- .../scheme}/AuthSchemeSpecUtils.java | 2 +- .../scheme}/DefaultAuthSchemeParamsSpec.java | 2 +- .../DefaultAuthSchemeProviderSpec.java | 2 +- .../scheme}/AuthSchemeSpecTest.java | 2 +- .../scheme}/auth-scheme-params.java | 19 +++++++- .../scheme}/auth-scheme-provider.java | 19 +++++++- .../scheme}/default-auth-scheme-params.java | 19 +++++++- .../scheme/default-auth-scheme-provider.java | 43 +++++++++++++++++++ .../default-auth-scheme-provider.java | 28 ------------ 13 files changed, 107 insertions(+), 48 deletions(-) rename codegen/src/main/java/software/amazon/awssdk/codegen/poet/{authscheme => auth/scheme}/AuthSchemeParamsSpec.java (95%) rename codegen/src/main/java/software/amazon/awssdk/codegen/poet/{authscheme => auth/scheme}/AuthSchemeProviderSpec.java (98%) rename codegen/src/main/java/software/amazon/awssdk/codegen/poet/{authscheme => auth/scheme}/AuthSchemeSpecUtils.java (97%) rename codegen/src/main/java/software/amazon/awssdk/codegen/poet/{authscheme => auth/scheme}/DefaultAuthSchemeParamsSpec.java (99%) rename codegen/src/main/java/software/amazon/awssdk/codegen/poet/{authscheme => auth/scheme}/DefaultAuthSchemeProviderSpec.java (98%) rename codegen/src/test/java/software/amazon/awssdk/codegen/poet/{authscheme => auth/scheme}/AuthSchemeSpecTest.java (97%) rename codegen/src/test/resources/software/amazon/awssdk/codegen/poet/{authscheme => auth/scheme}/auth-scheme-params.java (66%) rename codegen/src/test/resources/software/amazon/awssdk/codegen/poet/{authscheme => auth/scheme}/auth-scheme-provider.java (65%) rename codegen/src/test/resources/software/amazon/awssdk/codegen/poet/{authscheme => auth/scheme}/default-auth-scheme-params.java (67%) create mode 100644 codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-provider.java delete mode 100644 codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-provider.java diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AuthSchemeGeneratorTasks.java b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AuthSchemeGeneratorTasks.java index 095853439d32..eaff0a1bd10c 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AuthSchemeGeneratorTasks.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/emitters/tasks/AuthSchemeGeneratorTasks.java @@ -20,10 +20,10 @@ import software.amazon.awssdk.codegen.emitters.GeneratorTask; import software.amazon.awssdk.codegen.emitters.GeneratorTaskParams; import software.amazon.awssdk.codegen.emitters.PoetGeneratorTask; -import software.amazon.awssdk.codegen.poet.authscheme.AuthSchemeParamsSpec; -import software.amazon.awssdk.codegen.poet.authscheme.AuthSchemeProviderSpec; -import software.amazon.awssdk.codegen.poet.authscheme.DefaultAuthSchemeParamsSpec; -import software.amazon.awssdk.codegen.poet.authscheme.DefaultAuthSchemeProviderSpec; +import software.amazon.awssdk.codegen.poet.auth.scheme.AuthSchemeParamsSpec; +import software.amazon.awssdk.codegen.poet.auth.scheme.AuthSchemeProviderSpec; +import software.amazon.awssdk.codegen.poet.auth.scheme.DefaultAuthSchemeParamsSpec; +import software.amazon.awssdk.codegen.poet.auth.scheme.DefaultAuthSchemeProviderSpec; public final class AuthSchemeGeneratorTasks extends BaseGeneratorTasks { private final GeneratorTaskParams generatorTaskParams; diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/internal/Constant.java b/codegen/src/main/java/software/amazon/awssdk/codegen/internal/Constant.java index eb7baf141d4a..3b59808a594a 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/internal/Constant.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/internal/Constant.java @@ -71,7 +71,7 @@ public final class Constant { public static final String PACKAGE_NAME_RULES_PATTERN = "%s.endpoints"; // TODO: reviewer: maybe just auth instead of authscheme? or auth.scheme? - public static final String PACKAGE_NAME_AUTH_SCHEME_PATTERN = "%s.authscheme"; + public static final String PACKAGE_NAME_AUTH_SCHEME_PATTERN = "%s.auth.scheme"; public static final String PACKAGE_NAME_SMOKE_TEST_PATTERN = "%s.smoketests"; diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeParamsSpec.java similarity index 95% rename from codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java rename to codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeParamsSpec.java index 1a2cc4fbd1f0..ec43d09f75b5 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeParamsSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeParamsSpec.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.authscheme; +package software.amazon.awssdk.codegen.poet.auth.scheme; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.CodeBlock; @@ -28,7 +28,6 @@ import software.amazon.awssdk.codegen.poet.ClassSpec; import software.amazon.awssdk.codegen.poet.PoetUtils; -// TODO: reviewer: Params v/s Parameters? public class AuthSchemeParamsSpec implements ClassSpec { private final IntermediateModel intermediateModel; private final AuthSchemeSpecUtils authSchemeSpecUtils; @@ -102,7 +101,7 @@ private void addAccessorMethods(TypeSpec.Builder b) { if (authSchemeSpecUtils.usesSigV4()) { b.addMethod(MethodSpec.methodBuilder("region") .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) - // TODO: reviewer: Should region be Regions (Regions.class isn't available here though) + // TODO: Should region be Regions? (Regions.class isn't available here though) .returns(ParameterizedTypeName.get(Optional.class, String.class)) .addJavadoc("Returns the region. The region is optional. The region parameter may be used " + "with $S auth scheme. By default, the region will be empty.", "aws.auth#sigv4") @@ -124,7 +123,7 @@ private void addBuilderSetterMethods(TypeSpec.Builder b) { .addParameter(ParameterSpec.builder(String.class, "region").build()) .returns(authSchemeSpecUtils.parametersInterfaceBuilderInterfaceName()) .addJavadoc("Set the region. The region parameter may be used with the $S auth scheme.", - "aws.auth#sigv4") // TODO: Could the known auth schemes be defined somewhere? + "aws.auth#sigv4") // TODO: Reference the SigV4 AuthScheme when implemented .build()); } } diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeProviderSpec.java similarity index 98% rename from codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java rename to codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeProviderSpec.java index fca568e9edf1..11d38010b696 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeProviderSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeProviderSpec.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.authscheme; +package software.amazon.awssdk.codegen.poet.auth.scheme; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.CodeBlock; diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeSpecUtils.java similarity index 97% rename from codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java rename to codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeSpecUtils.java index 4eee9014f033..edafa4f734a4 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecUtils.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeSpecUtils.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.authscheme; +package software.amazon.awssdk.codegen.poet.auth.scheme; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.ParameterizedTypeName; diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/DefaultAuthSchemeParamsSpec.java similarity index 99% rename from codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java rename to codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/DefaultAuthSchemeParamsSpec.java index 5e21add9a762..348fc99ef408 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeParamsSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/DefaultAuthSchemeParamsSpec.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.authscheme; +package software.amazon.awssdk.codegen.poet.auth.scheme; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.FieldSpec; diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeProviderSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/DefaultAuthSchemeProviderSpec.java similarity index 98% rename from codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeProviderSpec.java rename to codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/DefaultAuthSchemeProviderSpec.java index 06e5748b2962..fb6e48a17e77 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/authscheme/DefaultAuthSchemeProviderSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/DefaultAuthSchemeProviderSpec.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.authscheme; +package software.amazon.awssdk.codegen.poet.auth.scheme; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.FieldSpec; diff --git a/codegen/src/test/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecTest.java b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeSpecTest.java similarity index 97% rename from codegen/src/test/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecTest.java rename to codegen/src/test/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeSpecTest.java index 82d45d05e79b..ab98b57fc30e 100644 --- a/codegen/src/test/java/software/amazon/awssdk/codegen/poet/authscheme/AuthSchemeSpecTest.java +++ b/codegen/src/test/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeSpecTest.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.authscheme; +package software.amazon.awssdk.codegen.poet.auth.scheme; import static org.hamcrest.MatcherAssert.assertThat; import static software.amazon.awssdk.codegen.poet.PoetMatchers.generatesTo; diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-params.java similarity index 66% rename from codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java rename to codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-params.java index ac0076a525eb..236e16f66c03 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-params.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-params.java @@ -1,9 +1,24 @@ -package software.amazon.awssdk.services.query.authscheme; +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.auth.scheme; import java.util.Optional; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.annotations.SdkPublicApi; -import software.amazon.awssdk.services.query.authscheme.internal.DefaultQueryAuthSchemeParams; +import software.amazon.awssdk.services.query.auth.scheme.internal.DefaultQueryAuthSchemeParams; /** * The parameters object used to resolve the auth schemes for the Query service. diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-provider.java similarity index 65% rename from codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java rename to codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-provider.java index 39cd9d21595e..fd244acc3393 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/auth-scheme-provider.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-provider.java @@ -1,4 +1,19 @@ -package software.amazon.awssdk.services.query.authscheme; +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.auth.scheme; import java.util.List; import java.util.function.Consumer; @@ -6,7 +21,7 @@ import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.http.auth.spi.AuthSchemeProvider; import software.amazon.awssdk.http.auth.spi.HttpAuthOption; -import software.amazon.awssdk.services.query.authscheme.internal.DefaultQueryAuthSchemeProvider; +import software.amazon.awssdk.services.query.auth.scheme.internal.DefaultQueryAuthSchemeProvider; /** * An auth scheme provider for Query service. The auth scheme provider takes a set of parameters using diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-params.java similarity index 67% rename from codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-params.java rename to codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-params.java index 232b18ee77f4..adee5f0707fd 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-params.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-params.java @@ -1,9 +1,24 @@ -package software.amazon.awssdk.services.query.authscheme.internal; +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.auth.scheme; import java.util.Optional; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.annotations.SdkInternalApi; -import software.amazon.awssdk.services.query.authscheme.QueryAuthSchemeParams; +import software.amazon.awssdk.services.query.auth.scheme.QueryAuthSchemeParams; import software.amazon.awssdk.utils.Validate; @Generated("software.amazon.awssdk:codegen") diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-provider.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-provider.java new file mode 100644 index 000000000000..c07f7f5c3526 --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-provider.java @@ -0,0 +1,43 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.codegen.poet.auth.scheme; + +import java.util.ArrayList; +import java.util.List; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.http.auth.spi.HttpAuthOption; +import software.amazon.awssdk.services.query.auth.scheme.QueryAuthSchemeParams; +import software.amazon.awssdk.services.query.auth.scheme.QueryAuthSchemeProvider; + +@Generated("software.amazon.awssdk:codegen") +@SdkInternalApi +public final class DefaultQueryAuthSchemeProvider implements QueryAuthSchemeProvider { + + private static final DefaultQueryAuthSchemeProvider DEFAULT = new DefaultQueryAuthSchemeProvider(); + + private DefaultQueryAuthSchemeProvider() { + } + + public static DefaultQueryAuthSchemeProvider create() { + return DEFAULT; + } + + @Override + public List resolveAuthScheme(QueryAuthSchemeParams authSchemeParams) { + return new ArrayList<>(); + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-provider.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-provider.java deleted file mode 100644 index 57158eaf2841..000000000000 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/authscheme/default-auth-scheme-provider.java +++ /dev/null @@ -1,28 +0,0 @@ -package software.amazon.awssdk.services.query.authscheme.internal; - -import java.util.ArrayList; -import java.util.List; -import software.amazon.awssdk.annotations.Generated; -import software.amazon.awssdk.annotations.SdkInternalApi; -import software.amazon.awssdk.http.auth.spi.HttpAuthOption; -import software.amazon.awssdk.services.query.authscheme.QueryAuthSchemeParams; -import software.amazon.awssdk.services.query.authscheme.QueryAuthSchemeProvider; - -@Generated("software.amazon.awssdk:codegen") -@SdkInternalApi -public final class DefaultQueryAuthSchemeProvider implements QueryAuthSchemeProvider { - - private static final DefaultQueryAuthSchemeProvider DEFAULT = new DefaultQueryAuthSchemeProvider(); - - private DefaultQueryAuthSchemeProvider() { - } - - public static DefaultQueryAuthSchemeProvider create() { - return DEFAULT; - } - - @Override - public List resolveAuthScheme(QueryAuthSchemeParams authSchemeParams) { - return new ArrayList<>(); - } -} From 54f74d55b7b1e53302806f0a243af826faa7536d Mon Sep 17 00:00:00 2001 From: Jaykumar Gosar Date: Wed, 24 May 2023 11:41:16 -0700 Subject: [PATCH 6/6] Fix java package in expected test output --- .../awssdk/codegen/poet/auth/scheme/auth-scheme-params.java | 2 +- .../awssdk/codegen/poet/auth/scheme/auth-scheme-provider.java | 2 +- .../codegen/poet/auth/scheme/default-auth-scheme-params.java | 2 +- .../codegen/poet/auth/scheme/default-auth-scheme-provider.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-params.java index 236e16f66c03..9bbc556dbe27 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-params.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-params.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.auth.scheme; +package software.amazon.awssdk.services.query.auth.scheme; import java.util.Optional; import software.amazon.awssdk.annotations.Generated; diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-provider.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-provider.java index fd244acc3393..3e13b9e21128 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-provider.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/auth-scheme-provider.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.auth.scheme; +package software.amazon.awssdk.services.query.auth.scheme; import java.util.List; import java.util.function.Consumer; diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-params.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-params.java index adee5f0707fd..d6ae018038a8 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-params.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-params.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.auth.scheme; +package software.amazon.awssdk.services.query.auth.scheme.internal; import java.util.Optional; import software.amazon.awssdk.annotations.Generated; diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-provider.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-provider.java index c07f7f5c3526..e0cecbe054b1 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-provider.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/default-auth-scheme-provider.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.codegen.poet.auth.scheme; +package software.amazon.awssdk.services.query.auth.scheme.internal; import java.util.ArrayList; import java.util.List;