Skip to content

Commit

Permalink
Migrate azure-security-attestation to stream-style serialization (#40137
Browse files Browse the repository at this point in the history
)

Migrate Attestation to azure-json
  • Loading branch information
alzimmermsft committed Jun 5, 2024
1 parent 0a1712a commit 8ac314b
Show file tree
Hide file tree
Showing 47 changed files with 3,054 additions and 1,171 deletions.
5 changes: 5 additions & 0 deletions sdk/attestation/azure-security-attestation/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@
</properties>

<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-json</artifactId>
<version>1.1.0</version> <!-- {x-version-update;com.azure:azure-json;dependency} -->
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[
{
"extension": "revapi.differences",
"configuration": {
"ignore": true,
"differences": [
{
"regex": true,
"code": "java\\.annotation\\.removed",
"old": ".*? com\\.azure\\.security\\.attestation\\.models.*",
"justification": "Removing Jackson annotations from Attestation in transition to stream-style."
}
]
}
}
]

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import com.azure.core.util.HttpClientOptions;
import com.azure.core.util.builder.ClientBuilderUtil;
import com.azure.core.util.logging.ClientLogger;
import com.azure.core.util.serializer.JacksonAdapter;
import com.azure.security.attestation.implementation.AttestationClientImpl;
import com.azure.security.attestation.models.AttestationPolicySetOptions;
import com.azure.security.attestation.models.AttestationTokenValidationOptions;
Expand All @@ -50,7 +49,8 @@

import static com.azure.core.util.CoreUtils.getApplicationId;

/** This class provides a fluent builder API to help add in the configuration and instantiation of the
/**
* This class provides a fluent builder API to help add in the configuration and instantiation of the
* administrative APIs implemented by the Attestation Service:
* {@link com.azure.security.attestation.AttestationAdministrationClient} and
* {@link com.azure.security.attestation.AttestationAdministrationAsyncClient} classes calling the
Expand Down Expand Up @@ -119,21 +119,18 @@
* <!-- end com.azure.security.attestation.AttestationAdministrationClientBuilder.buildAsyncClient -->
*/
@ServiceClientBuilder(
serviceClients = {
AttestationAdministrationClient.class,
AttestationAdministrationAsyncClient.class,
})
public final class AttestationAdministrationClientBuilder implements
ConfigurationTrait<AttestationAdministrationClientBuilder>,
EndpointTrait<AttestationAdministrationClientBuilder>,
HttpTrait<AttestationAdministrationClientBuilder>,
serviceClients = {
AttestationAdministrationClient.class, AttestationAdministrationAsyncClient.class, })
public final class AttestationAdministrationClientBuilder
implements ConfigurationTrait<AttestationAdministrationClientBuilder>,
EndpointTrait<AttestationAdministrationClientBuilder>, HttpTrait<AttestationAdministrationClientBuilder>,
TokenCredentialTrait<AttestationAdministrationClientBuilder> {
private static final String SDK_NAME = "name";
private static final String SDK_VERSION = "version";
private static final RetryPolicy DEFAULT_RETRY_POLICY = new RetryPolicy("retry-after-ms", ChronoUnit.MILLIS);
private static final ClientOptions DEFAULT_CLIENT_OPTIONS = new ClientOptions();

private final String[] dataplaneScope = new String[] {"https://attest.azure.net/.default"};
private final String[] dataplaneScope = new String[] { "https://attest.azure.net/.default" };

private final ClientLogger logger = new ClientLogger(AttestationAdministrationClientBuilder.class);

Expand Down Expand Up @@ -183,6 +180,7 @@ public AttestationAdministrationClientBuilder() {
* .buildClient&#40;&#41;;
* </pre>
* <!-- end com.azure.security.attestation.AttestationAdministrationClientBuilder.buildClient -->
*
* @return an instance of {@link AttestationClient}.
* @throws IllegalStateException If both {@link #retryOptions(RetryOptions)}
* and {@link #retryPolicy(RetryPolicy)} have been set.
Expand All @@ -193,7 +191,7 @@ public AttestationAdministrationClient buildClient() {

/**
* Builds an instance of AttestationAsyncClient async client.
*
* <p>
* Instantiating a synchronous Attestation client:
* <br>
* <!-- src_embed com.azure.security.attestation.AttestationAdministrationClientBuilder.buildAsyncClient -->
Expand All @@ -204,6 +202,7 @@ public AttestationAdministrationClient buildClient() {
* .buildAsyncClient&#40;&#41;;
* </pre>
* <!-- end com.azure.security.attestation.AttestationAdministrationClientBuilder.buildAsyncClient -->
*
* @return an instance of {@link AttestationClient}.
* @throws IllegalStateException If both {@link #retryOptions(RetryOptions)}
* and {@link #retryPolicy(RetryPolicy)} have been set.
Expand All @@ -212,7 +211,6 @@ public AttestationAdministrationAsyncClient buildAsyncClient() {
return new AttestationAdministrationAsyncClient(buildInnerClient(), this.tokenValidationOptions);
}


/**
* Sets The attestation endpoint URI, for example https://mytenant.attest.azure.net.
*
Expand All @@ -233,6 +231,7 @@ public AttestationAdministrationClientBuilder endpoint(String endpoint) {

/**
* Sets the desired API version for this attestation client.
*
* @param serviceVersion Specifies the API version to use in the outgoing API calls.
* @return the AttestationClientBuilder.
*/
Expand All @@ -241,6 +240,7 @@ public AttestationAdministrationClientBuilder serviceVersion(AttestationServiceV
this.serviceVersion = serviceVersion;
return this;
}

/**
* Sets the {@link TokenCredential} used to authorize requests sent to the service. Refer to the Azure SDK for Java
* <a href="https://aka.ms/azsdk/java/docs/identity">identity and authentication</a>
Expand Down Expand Up @@ -418,30 +418,32 @@ public AttestationAdministrationClientBuilder addPolicy(HttpPipelinePolicy polic
* <p>Because attestation service clients need to have the ability to validate that the data returned by the attestation
* service actually originated from within the service, most Attestation Service APIs embed their response in a
* <a href=https://datatracker.ietf.org/doc/html/rfc7519>RFC 7519 JSON Web Token</a>.</p>
* <p>The {@link AttestationTokenValidationOptions} provides a mechanism for a client to customize the validation
* <p>The {@link AttestationTokenValidationOptions} provides a mechanism for a client to customize the validation
* of responses sent by the attestation service.</p>
* <p>The {@code tokenValidationOptions} property sets the default validation options used by the {@link AttestationClient}
* <p>The {@code tokenValidationOptions} property sets the default validation options used by the {@link AttestationClient}
* or {@link AttestationAsyncClient} returned from this builder.</p>
* <p>Note: most APIs allow this value to be overridden on a per-api basis if that flexibility is needed.</p>
*
* <!-- src_embed com.azure.security.attestation.AttestationAdministrationClientBuilder.buildClientWithValidation -->
* <pre>
* AttestationAdministrationClient validatedClient = new AttestationAdministrationClientBuilder&#40;&#41;
* .endpoint&#40;endpoint&#41;
* .tokenValidationOptions&#40;new AttestationTokenValidationOptions&#40;&#41;
* &#47;&#47; Allow 10 seconds of clock drift between attestation service and client.
* .setValidationSlack&#40;Duration.ofSeconds&#40;10&#41;&#41;
* .setValidationCallback&#40;&#40;token, signer&#41; -&gt; &#123; &#47;&#47; Perform custom validation steps.
* System.out.printf&#40;&quot;Validate token signed by signer %s&#92;n&quot;,
* signer.getCertificates&#40;&#41;.get&#40;0&#41;.getSubjectDN&#40;&#41;.toString&#40;&#41;&#41;;
* &#125;&#41;&#41;
* .buildClient&#40;&#41;;
* </pre>
* <!-- end com.azure.security.attestation.AttestationAdministrationClientBuilder.buildClientWithValidation -->
* <p>Note: most APIs allow this value to be overridden on a per-api basis if that flexibility is needed.</p>
*
* <!-- src_embed com.azure.security.attestation.AttestationAdministrationClientBuilder.buildClientWithValidation -->
* <pre>
* AttestationAdministrationClient validatedClient = new AttestationAdministrationClientBuilder&#40;&#41;
* .endpoint&#40;endpoint&#41;
* .tokenValidationOptions&#40;new AttestationTokenValidationOptions&#40;&#41;
* &#47;&#47; Allow 10 seconds of clock drift between attestation service and client.
* .setValidationSlack&#40;Duration.ofSeconds&#40;10&#41;&#41;
* .setValidationCallback&#40;&#40;token, signer&#41; -&gt; &#123; &#47;&#47; Perform custom validation steps.
* System.out.printf&#40;&quot;Validate token signed by signer %s&#92;n&quot;,
* signer.getCertificates&#40;&#41;.get&#40;0&#41;.getSubjectDN&#40;&#41;.toString&#40;&#41;&#41;;
* &#125;&#41;&#41;
* .buildClient&#40;&#41;;
* </pre>
* <!-- end com.azure.security.attestation.AttestationAdministrationClientBuilder.buildClientWithValidation -->
*
* @param tokenValidationOptions - Validation options used when validating JSON Web Tokens returned by the attestation service.
* @return this {@link AttestationAdministrationClientBuilder}
*/
public AttestationAdministrationClientBuilder tokenValidationOptions(AttestationTokenValidationOptions tokenValidationOptions) {
public AttestationAdministrationClientBuilder tokenValidationOptions(
AttestationTokenValidationOptions tokenValidationOptions) {
this.tokenValidationOptions = tokenValidationOptions;
return this;
}
Expand Down Expand Up @@ -475,8 +477,9 @@ private AttestationClientImpl buildInnerClient() {

// Closest to API goes first, closest to wire goes last.
final List<HttpPipelinePolicy> policies = new ArrayList<>();
policies.add(new UserAgentPolicy(
getApplicationId(localClientOptions, httpLogOptions), CLIENT_NAME, CLIENT_VERSION, buildConfiguration));
policies.add(
new UserAgentPolicy(getApplicationId(localClientOptions, httpLogOptions), CLIENT_NAME, CLIENT_VERSION,
buildConfiguration));
policies.add(new RequestIdPolicy());
policies.add(new AddHeadersFromContextPolicy());

Expand All @@ -495,21 +498,20 @@ private AttestationClientImpl buildInnerClient() {
policies.addAll(perRetryPolicies);

List<HttpHeader> httpHeaderList = new ArrayList<>();
localClientOptions.getHeaders().forEach(
header -> httpHeaderList.add(new HttpHeader(header.getName(), header.getValue())));
localClientOptions.getHeaders()
.forEach(header -> httpHeaderList.add(new HttpHeader(header.getName(), header.getValue())));
policies.add(new AddHeadersPolicy(new HttpHeaders(httpHeaderList)));

HttpPolicyProviders.addAfterRetryPolicies(policies);
policies.add(new HttpLoggingPolicy(httpLogOptions));

// Create a new pipeline based on the policies and with the specified HTTP client.
pipeline = new HttpPipelineBuilder()
.policies(policies.toArray(new HttpPipelinePolicy[0]))
pipeline = new HttpPipelineBuilder().policies(policies.toArray(new HttpPipelinePolicy[0]))
.httpClient(httpClient)
.clientOptions(localClientOptions)
.build();
}

return new AttestationClientImpl(pipeline, JacksonAdapter.createDefaultSerializerAdapter(), endpoint, version.getVersion());
return new AttestationClientImpl(pipeline, endpoint, version.getVersion());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@
import com.azure.core.http.policy.RetryOptions;
import com.azure.core.http.policy.RetryPolicy;
import com.azure.core.http.policy.UserAgentPolicy;
import com.azure.core.util.BinaryData;
import com.azure.core.util.ClientOptions;
import com.azure.core.util.Configuration;
import com.azure.core.util.CoreUtils;
import com.azure.core.util.HttpClientOptions;
import com.azure.core.util.builder.ClientBuilderUtil;
import com.azure.core.util.logging.ClientLogger;
import com.azure.core.util.serializer.JacksonAdapter;
import com.azure.security.attestation.implementation.AttestationClientImpl;
import com.azure.security.attestation.models.AttestationTokenValidationOptions;

Expand All @@ -48,14 +48,15 @@

import static com.azure.core.util.CoreUtils.getApplicationId;

/** This class provides a fluent builder API to help add in the configuration and instantiation of the
* {@link AttestationClient} and {@link AttestationAsyncClient} classes calling the
* {@link AttestationClientBuilder#buildClient()} or {@link AttestationClientBuilder#buildAsyncClient()}.
*
* <p>The minimal configuration option required by {@link AttestationClientBuilder} is {@code String endpoint}.
*
* For the {@link AttestationClient#attestTpm(BinaryData)} API, the client also requires that a {@link TokenCredential} object
* be configured.
/**
* This class provides a fluent builder API to help add in the configuration and instantiation of the
* {@link AttestationClient} and {@link AttestationAsyncClient} classes calling the {@link #buildClient()} or
* {@link #buildAsyncClient()}.
* <p>
* The minimal configuration option required by {@link AttestationClientBuilder} is {@code String endpoint}.
* <p>
* For the {@link AttestationClient#attestTpm(BinaryData)} API, the client also requires that a {@link TokenCredential}
* object be configured.
*
* <p><strong>Instantiate a synchronous Attestation Client</strong></p>
* <!-- src_embed com.azure.security.attestation.AttestationClientBuilder.buildClient -->
Expand All @@ -72,21 +73,17 @@
* .buildAsyncClient&#40;&#41;;
* </pre>
* <!-- end com.azure.security.attestation.AttestationClientBuilder.buildAsyncClient -->
* <p><strong>Build a attestation client for use with the {@link AttestationClient#attestTpm(BinaryData)} API</strong></p>
* <!-- src_embed com.azure.security.attestation.AttestationClientBuilder.buildAsyncClientForTpm -->
* <p><strong>Build a attestation client for use with the {@link AttestationClient#attestTpm(BinaryData)} API</strong></p>
* <!-- src_embed com.azure.security.attestation.AttestationClientBuilder.buildAsyncClientForTpm -->
* <pre>
* AttestationAsyncClient asyncClientForTpm = new AttestationClientBuilder&#40;&#41;
* .endpoint&#40;endpoint&#41;
* .credential&#40;new DefaultAzureCredentialBuilder&#40;&#41;.build&#40;&#41;&#41;
* .buildAsyncClient&#40;&#41;;
* </pre>
* <!-- end com.azure.security.attestation.AttestationClientBuilder.buildAsyncClientForTpm -->
* <!-- end com.azure.security.attestation.AttestationClientBuilder.buildAsyncClientForTpm -->
*/
@ServiceClientBuilder(
serviceClients = {
AttestationClient.class,
AttestationAsyncClient.class,
})
@ServiceClientBuilder(serviceClients = { AttestationClient.class, AttestationAsyncClient.class })
public final class AttestationClientBuilder implements
ConfigurationTrait<AttestationClientBuilder>,
EndpointTrait<AttestationClientBuilder>,
Expand Down Expand Up @@ -138,7 +135,7 @@ public AttestationClientBuilder() {

/**
* Builds an instance of {@link AttestationClient} synchronous client.
*
* <p>
* Instantiating a synchronous Attestation client:
* <br>
* <!-- src_embed com.azure.security.attestation.AttestationClientBuilder.buildClient -->
Expand All @@ -158,7 +155,7 @@ public AttestationClient buildClient() {

/**
* Builds an instance of AttestationAsyncClient async client.
*
* <p>
* Instantiating a synchronous Attestation client:
* <br>
* <!-- src_embed com.azure.security.attestation.AttestationClientBuilder.buildAsyncClient -->
Expand All @@ -177,7 +174,7 @@ public AttestationAsyncClient buildAsyncClient() {
}

/**
* Sets The attestation endpoint URI, for example https://myinstance.attest.azure.net.
* Sets The attestation endpoint URI, for example {@code https://myinstance.attest.azure.net}.
*
* @param endpoint The endpoint to connect to.
* @return the AttestationClientBuilder.
Expand Down Expand Up @@ -296,7 +293,6 @@ public AttestationClientBuilder httpLogOptions(HttpLogOptions httpLogOptions) {

/**
* Sets The retry policy that will attempt to retry failed requests, if applicable.
*
* <p>
* Setting this is mutually exclusive with using {@link #retryOptions(RetryOptions)}.
*
Expand Down Expand Up @@ -478,6 +474,6 @@ private AttestationClientImpl buildInnerClient() {
.build();
}

return new AttestationClientImpl(pipeline, JacksonAdapter.createDefaultSerializerAdapter(), endpoint, version.getVersion());
return new AttestationClientImpl(pipeline, endpoint, version.getVersion());
}
}
Loading

0 comments on commit 8ac314b

Please sign in to comment.