Skip to content

Commit 5737437

Browse files
author
Santiago Gonzalez
committed
Add appName and appVersion headers.
1 parent 3a00e31 commit 5737437

13 files changed

+171
-104
lines changed

src/main/java/com/microsoft/aad/msal4j/AuthenticationResultSupplier.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public IAuthenticationResult get() {
4949

5050
try(TelemetryHelper telemetryHelper =
5151
clientApplication.getServiceBundle().getTelemetryManager().createTelemetryHelper(
52-
msalRequest.requestContext().getTelemetryRequestId(),
52+
msalRequest.requestContext().telemetryRequestId(),
5353
msalRequest.application().clientId(),
5454
apiEvent,
5555
true)) {
@@ -81,7 +81,7 @@ public IAuthenticationResult get() {
8181
return result;
8282
}
8383

84-
void logResult(AuthenticationResult result, ClientDataHttpHeaders headers)
84+
void logResult(AuthenticationResult result, HttpHeaders headers)
8585
{
8686
if (!StringHelper.isBlank(result.accessToken())) {
8787

@@ -120,11 +120,11 @@ void logResult(AuthenticationResult result, ClientDataHttpHeaders headers)
120120

121121
private ApiEvent initializeApiEvent(MsalRequest msalRequest){
122122
ApiEvent apiEvent = new ApiEvent(clientApplication.logPii());
123-
msalRequest.requestContext().setTelemetryRequestId(
123+
msalRequest.requestContext().telemetryRequestId(
124124
clientApplication.getServiceBundle().getTelemetryManager().generateRequestId());
125-
apiEvent.setApiId(msalRequest.requestContext().getAcquireTokenPublicApi().getApiId());
126-
apiEvent.setCorrelationId(msalRequest.requestContext().getCorrelationId());
127-
apiEvent.setRequestId(msalRequest.requestContext().getTelemetryRequestId());
125+
apiEvent.setApiId(msalRequest.requestContext().publicApi().getApiId());
126+
apiEvent.setCorrelationId(msalRequest.requestContext().correlationId());
127+
apiEvent.setRequestId(msalRequest.requestContext().telemetryRequestId());
128128
apiEvent.setWasSuccessful(false);
129129

130130
if(clientApplication instanceof ConfidentialClientApplication){

src/main/java/com/microsoft/aad/msal4j/ClientApplicationBase.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,24 @@ abstract class ClientApplicationBase implements IClientApplicationBase {
5959

6060
@Accessors(fluent = true)
6161
@Getter
62-
public Proxy proxy;
62+
private Proxy proxy;
6363

6464
@Accessors(fluent = true)
6565
@Getter
66-
public SSLSocketFactory sslSocketFactory;
66+
private SSLSocketFactory sslSocketFactory;
6767

6868
@Accessors(fluent = true)
6969
@Getter
7070
protected TokenCache tokenCache;
7171

72+
@Accessors(fluent = true)
73+
@Getter
74+
private String applicationName;
75+
76+
@Accessors(fluent = true)
77+
@Getter
78+
private String applicationVersion;
79+
7280
@Override
7381
public CompletableFuture<IAuthenticationResult> acquireToken(AuthorizationCodeParameters parameters) {
7482

@@ -138,7 +146,10 @@ public CompletableFuture<Set<IAccount>> getAccounts() {
138146

139147
@Override
140148
public CompletableFuture removeAccount(IAccount account) {
141-
RemoveAccountRunnable runnable = new RemoveAccountRunnable(this, account);
149+
MsalRequest msalRequest = new MsalRequest(this, null,
150+
createRequestContext(PublicApi.REMOVE_ACCOUNTS)){};
151+
152+
RemoveAccountRunnable runnable = new RemoveAccountRunnable(msalRequest, account);
142153

143154
CompletableFuture<Void> future =
144155
serviceBundle.getExecutorService() != null ? CompletableFuture.runAsync(runnable, serviceBundle.getExecutorService())
@@ -149,7 +160,7 @@ public CompletableFuture removeAccount(IAccount account) {
149160
AuthenticationResult acquireTokenCommon(MsalRequest msalRequest, Authority requestAuthority)
150161
throws Exception {
151162

152-
ClientDataHttpHeaders headers = msalRequest.headers();
163+
HttpHeaders headers = msalRequest.headers();
153164

154165
if (logPii) {
155166
log.debug(LogHelper.createMessage(
@@ -198,10 +209,7 @@ private AuthenticationResultSupplier getAuthenticationResultSupplier(MsalRequest
198209
}
199210

200211
RequestContext createRequestContext(PublicApi publicApi) {
201-
return new RequestContext(
202-
clientId,
203-
correlationId(),
204-
publicApi);
212+
return new RequestContext(this, publicApi);
205213
}
206214

207215
ServiceBundle getServiceBundle() {
@@ -233,6 +241,8 @@ abstract static class Builder<T extends Builder<T>> {
233241
private IHttpClient httpClient;
234242
private Consumer<List<HashMap<String, String>>> telemetryConsumer;
235243
private Boolean onlySendFailureTelemetry = false;
244+
private String applicationName;
245+
private String applicationVersion;
236246
private ITokenCacheAccessAspect tokenCacheAccessAspect;
237247

238248
/**
@@ -383,6 +393,16 @@ T onlySendFailureTelemetry(Boolean val) {
383393
return self();
384394
}
385395

396+
T applicationName(String val) {
397+
applicationName = val;
398+
return self();
399+
}
400+
401+
T applicationVersion(String val) {
402+
applicationVersion = val;
403+
return self();
404+
}
405+
386406
/**
387407
* Sets ITokenCacheAccessAspect to be used for cache_data persistence.
388408
*
@@ -415,6 +435,8 @@ private static Authority createDefaultAADAuthority() {
415435
validateAuthority = builder.validateAuthority;
416436
correlationId = builder.correlationId;
417437
logPii = builder.logPii;
438+
applicationName = builder.applicationName;
439+
applicationVersion = builder.applicationVersion;
418440
telemetryConsumer = builder.telemetryConsumer;
419441
proxy = builder.proxy;
420442
sslSocketFactory = builder.sslSocketFactory;

src/main/java/com/microsoft/aad/msal4j/DeviceCodeFlowRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ private DeviceCode parseJsonToDeviceCodeAndSetParameters(
8585
DeviceCode result;
8686
result = JsonHelper.convertJsonToObject(json, DeviceCode.class);
8787

88-
String correlationIdHeader = headers.get(ClientDataHttpHeaders.CORRELATION_ID_HEADER_NAME);
88+
String correlationIdHeader = headers.get(HttpHeaders.CORRELATION_ID_HEADER_NAME);
8989
if(correlationIdHeader != null){
9090
result.correlationId(correlationIdHeader);
9191
}

src/main/java/com/microsoft/aad/msal4j/ClientDataHttpHeaders.java renamed to src/main/java/com/microsoft/aad/msal4j/HttpHeaders.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55

66
import java.util.Collections;
77
import java.util.HashMap;
8-
import java.util.List;
98
import java.util.Map;
109
import java.util.function.BiConsumer;
1110

12-
final class ClientDataHttpHeaders {
11+
final class HttpHeaders {
1312

1413
private final static String PRODUCT_HEADER_NAME = "x-client-SKU";
1514
private final static String PRODUCT_HEADER_VALUE = "MSAL.Java";
@@ -23,6 +22,12 @@ final class ClientDataHttpHeaders {
2322
private final static String OS_HEADER_NAME = "x-client-OS";
2423
private final static String OS_HEADER_VALUE = System.getProperty("os.name");
2524

25+
private final static String APPLICATION_NAME_HEADER_NAME = "x-app-name";
26+
private final String applicationNameHeaderValue;
27+
28+
private final static String APPLICATION_VERSION_HEADER_NAME = "x-app-ver";
29+
private final String applicationVersionHeaderValue;
30+
2631
final static String CORRELATION_ID_HEADER_NAME = "client-request-id";
2732
private final String correlationIdHeaderValue;
2833

@@ -32,13 +37,11 @@ final class ClientDataHttpHeaders {
3237
private final String headerValues;
3338
private final Map<String, String> headerMap = new HashMap<>();
3439

35-
ClientDataHttpHeaders(final String correlationId) {
36-
if (!StringHelper.isBlank(correlationId)) {
37-
this.correlationIdHeaderValue = correlationId;
38-
}
39-
else {
40-
this.correlationIdHeaderValue = RequestContext.generateNewCorrelationId();
41-
}
40+
HttpHeaders(final RequestContext requestContext) {
41+
correlationIdHeaderValue = requestContext.correlationId();
42+
applicationNameHeaderValue = requestContext.applicationName();
43+
applicationVersionHeaderValue = requestContext.applicationVersion();
44+
4245
this.headerValues = initHeaderMap();
4346
}
4447

@@ -55,6 +58,8 @@ private String initHeaderMap() {
5558
init.accept(CPU_HEADER_NAME, CPU_HEADER_VALUE);
5659
init.accept(REQUEST_CORRELATION_ID_IN_RESPONSE_HEADER_NAME, REQUEST_CORRELATION_ID_IN_RESPONSE_HEADER_VALUE);
5760
init.accept(CORRELATION_ID_HEADER_NAME, this.correlationIdHeaderValue);
61+
init.accept(APPLICATION_NAME_HEADER_NAME, this.applicationNameHeaderValue);
62+
init.accept(APPLICATION_VERSION_HEADER_NAME, this.applicationVersionHeaderValue);
5863

5964
return sb.toString();
6065
}
@@ -73,10 +78,9 @@ public String toString() {
7378
}
7479

7580
private static String getProductVersion() {
76-
if (ClientDataHttpHeaders.class.getPackage().getImplementationVersion() == null) {
81+
if (HttpHeaders.class.getPackage().getImplementationVersion() == null) {
7782
return "1.0";
7883
}
79-
return ClientDataHttpHeaders.class.getPackage()
80-
.getImplementationVersion();
84+
return HttpHeaders.class.getPackage().getImplementationVersion();
8185
}
8286
}

src/main/java/com/microsoft/aad/msal4j/HttpHelper.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ static IHttpResponse executeHttpRequest(final HttpRequest httpRequest,
2121
IHttpResponse httpResponse;
2222

2323
try(TelemetryHelper telemetryHelper = serviceBundle.getTelemetryManager().createTelemetryHelper(
24-
requestContext.getTelemetryRequestId(),
25-
requestContext.getClientId(),
24+
requestContext.telemetryRequestId(),
25+
requestContext.clientId(),
2626
httpEvent,
2727
false)){
2828

@@ -54,7 +54,7 @@ private static void addRequestInfoToTelemetry(final HttpRequest httpRequest, Htt
5454
}
5555
} catch(Exception ex){
5656
String correlationId = httpRequest.headerValue(
57-
ClientDataHttpHeaders.CORRELATION_ID_HEADER_NAME);
57+
HttpHeaders.CORRELATION_ID_HEADER_NAME);
5858

5959
log.warn(LogHelper.createMessage("Setting URL telemetry fields failed: " +
6060
LogHelper.getPiiScrubbedDetails(ex),
@@ -93,11 +93,11 @@ private static void verifyReturnedCorrelationId(final HttpRequest httpRequest,
9393
IHttpResponse httpResponse) {
9494

9595
String sentCorrelationId = httpRequest.headerValue(
96-
ClientDataHttpHeaders.CORRELATION_ID_HEADER_NAME);
96+
HttpHeaders.CORRELATION_ID_HEADER_NAME);
9797

9898
String returnedCorrelationId = HttpUtils.headerValue(
9999
httpResponse.headers(),
100-
ClientDataHttpHeaders.CORRELATION_ID_HEADER_NAME);
100+
HttpHeaders.CORRELATION_ID_HEADER_NAME);
101101

102102
if (StringHelper.isBlank(returnedCorrelationId) ||
103103
!returnedCorrelationId.equals(sentCorrelationId)) {

src/main/java/com/microsoft/aad/msal4j/MsalRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ abstract class MsalRequest {
1919
private final RequestContext requestContext;
2020

2121
@Getter(value = AccessLevel.PACKAGE, lazy = true)
22-
private final ClientDataHttpHeaders headers = new ClientDataHttpHeaders(requestContext.getCorrelationId());
22+
private final HttpHeaders headers = new HttpHeaders(requestContext);
2323
}
2424

2525

src/main/java/com/microsoft/aad/msal4j/PublicApi.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ enum PublicApi {
1313
ACQUIRE_TOKEN_FOR_CLIENT(729),
1414
ACQUIRE_TOKEN_BY_AUTHORIZATION_CODE(831),
1515
ACQUIRE_TOKEN_SILENTLY(800),
16-
GET_ACCOUNTS(801);
16+
GET_ACCOUNTS(801),
17+
REMOVE_ACCOUNTS(802);
1718

1819
private final int apiId;
1920

src/main/java/com/microsoft/aad/msal4j/RemoveAccountRunnable.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,13 @@
88

99
class RemoveAccountRunnable implements Runnable {
1010

11-
ClientDataHttpHeaders headers;
12-
ClientApplicationBase clientApplication;
11+
private RequestContext requestContext;
12+
private ClientApplicationBase clientApplication;
1313
IAccount account;
1414

15-
RemoveAccountRunnable
16-
(ClientApplicationBase clientApplication, IAccount account) {
17-
this.clientApplication = clientApplication;
18-
this.headers = new ClientDataHttpHeaders(clientApplication.correlationId());
15+
RemoveAccountRunnable(MsalRequest msalRequest, IAccount account) {
16+
this.clientApplication = msalRequest.application();
17+
this.requestContext = msalRequest.requestContext();
1918
this.account = account;
2019
}
2120

@@ -30,7 +29,7 @@ public void run() {
3029
} catch (Exception ex) {
3130
clientApplication.log.error(
3231
LogHelper.createMessage("Execution of " + this.getClass() + " failed.",
33-
this.headers.getHeaderCorrelationIdValue()), ex);
32+
requestContext.correlationId()), ex);
3433

3534
throw new CompletionException(ex);
3635
}

src/main/java/com/microsoft/aad/msal4j/RequestContext.java

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,42 @@
33

44
package com.microsoft.aad.msal4j;
55

6+
import lombok.AccessLevel;
7+
import lombok.Getter;
8+
import lombok.Setter;
9+
import lombok.experimental.Accessors;
10+
611
import java.util.UUID;
712

13+
@Accessors(fluent = true)
14+
@Getter(AccessLevel.PACKAGE)
815
class RequestContext {
916

17+
@Setter(AccessLevel.PACKAGE)
1018
private String telemetryRequestId;
1119
private String clientId;
1220
private String correlationId;
1321
private PublicApi publicApi;
14-
15-
public RequestContext(String clientId, String correlationId, PublicApi publicApi){
16-
this.clientId = StringHelper.isBlank(clientId) ? "unset_client_id" : clientId;
17-
this.publicApi= publicApi;
18-
this.correlationId = StringHelper.isBlank(correlationId) ?
22+
private String applicationName;
23+
private String applicationVersion;
24+
25+
public RequestContext(ClientApplicationBase clientApplication, PublicApi publicApi){
26+
this.clientId = StringHelper.isBlank(clientApplication.clientId()) ?
27+
"unset_client_id" :
28+
clientApplication.clientId();
29+
this.applicationName = StringHelper.isBlank(clientApplication.applicationName()) ?
30+
"" :
31+
clientApplication.applicationName();
32+
33+
this.applicationVersion = StringHelper.isBlank(clientApplication.applicationVersion()) ?
34+
"" :
35+
clientApplication.applicationVersion();
36+
37+
this.correlationId = StringHelper.isBlank(clientApplication.correlationId()) ?
1938
generateNewCorrelationId() :
20-
correlationId;
21-
}
22-
23-
public String getTelemetryRequestId() {
24-
return telemetryRequestId;
25-
}
26-
27-
public void setTelemetryRequestId(String telemetryRequestId) {
28-
this.telemetryRequestId = telemetryRequestId;
29-
}
30-
31-
public String getClientId() {
32-
return clientId;
33-
}
34-
35-
public String getCorrelationId(){
36-
return correlationId;
37-
}
39+
clientApplication.correlationId();
3840

39-
public PublicApi getAcquireTokenPublicApi(){
40-
return publicApi;
41+
this.publicApi = publicApi;
4142
}
4243

4344
static String generateNewCorrelationId(){

src/test/java/com/microsoft/aad/msal4j/CacheFormatTests.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public void tokenCacheEntitiesFormatTest(String folder) throws URISyntaxExceptio
126126

127127
String tokenResponse = getTokenResponse(folder);
128128

129-
PublicClientApplication app = PublicClientApplication.builder(CLIENT_ID).build();
129+
PublicClientApplication app = PublicClientApplication.builder(CLIENT_ID).correlationId("correlation_id").build();
130130

131131
AuthorizationCodeParameters parameters =
132132
AuthorizationCodeParameters.builder
@@ -136,8 +136,7 @@ public void tokenCacheEntitiesFormatTest(String folder) throws URISyntaxExceptio
136136
MsalRequest msalRequest = new AuthorizationCodeRequest(
137137
parameters,
138138
app,
139-
new RequestContext(CLIENT_ID, "correlation_id",
140-
PublicApi.ACQUIRE_TOKEN_BY_AUTHORIZATION_CODE));
139+
new RequestContext(app, PublicApi.ACQUIRE_TOKEN_BY_AUTHORIZATION_CODE));
141140

142141
ServiceBundle serviceBundle = new ServiceBundle(
143142
null,

0 commit comments

Comments
 (0)