Skip to content

Commit

Permalink
Merge pull request #382 from AzureAD/oldalton/appname_and_version
Browse files Browse the repository at this point in the history
Added app name and version change to MSAL
  • Loading branch information
oldalton authored Oct 26, 2018
2 parents 4266cb5 + 96f29e2 commit f6359db
Show file tree
Hide file tree
Showing 10 changed files with 83 additions and 74 deletions.
1 change: 1 addition & 0 deletions MSAL/src/requests/MSALRequestParameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
@property NSUUID *correlationId;
@property NSString *logComponent;
@property NSString *telemetryRequestId;
@property NSDictionary *appRequestMetadata;

@property (readonly) MSIDConfiguration *msidConfiguration;
@property MSIDOauth2Factory *msidOAuthFactory;
Expand Down
31 changes: 31 additions & 0 deletions MSAL/src/requests/MSALRequestParameters.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,40 @@
#import "NSOrderedSet+MSIDExtensions.h"
#import "MSIDAuthorityFactory.h"
#import "MSALAuthority.h"
#import "MSIDConstants.h"

@implementation MSALRequestParameters

- (instancetype)init
{
self = [super init];

if (self)
{
[self initDefaultAppMetadata];
}

return self;
}

- (void)initDefaultAppMetadata
{
NSDictionary *metadata = [[NSBundle mainBundle] infoDictionary];

NSString *appName = metadata[@"CFBundleDisplayName"];

if (!appName)
{
appName = metadata[@"CFBundleName"];
}

NSString *appVer = metadata[@"CFBundleShortVersionString"];

_appRequestMetadata = @{MSID_VERSION_KEY: @MSAL_VERSION_STRING,
MSID_APP_NAME_KEY: appName ? appName : @"",
MSID_APP_VER_KEY: appVer ? appVer : @""};
}

- (void)setScopesFromArray:(NSArray<NSString *> *)scopes
{
NSMutableArray *scopesLowercase = [NSMutableArray new];
Expand Down
5 changes: 1 addition & 4 deletions MSAL/test/unit/MSALAcquireTokenTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -1099,11 +1099,8 @@ - (void)addTestTokenResponseWithResponseScopes:(NSString *)responseScopes
NSDictionary *clientInfo = @{ @"uid" : @"1", @"utid" : [MSALTestIdTokenUtil defaultTenantId]};

// Token request response.
NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:[MSIDTestRequireValueSentinel new] forKey:@"client-request-id"];

NSString *url = [NSString stringWithFormat:@"%@/oauth2/v2.0/token", authority];

Expand Down
22 changes: 5 additions & 17 deletions MSAL/test/unit/MSALInteractiveRequestTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -153,12 +153,9 @@ - (void)testInteractiveRequestFlow_whenValid_shouldReturnResultWithNoError
completionHandler(oauthResponse, nil);
}];

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];


NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token";

MSIDTestURLResponse *response =
Expand Down Expand Up @@ -379,11 +376,8 @@ - (void)testInteractiveRequestFlow_whenValidWithUser_shouldReturnResultWithNoErr
completionHandler(oauthResponse, nil);
}];

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token";

Expand Down Expand Up @@ -499,11 +493,8 @@ - (void)testInteractiveRequestFlow_whenUserMismatch_shouldReturnNilResultWithErr
completionHandler(oauthResponse, nil);
}];

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token";

Expand Down Expand Up @@ -592,11 +583,8 @@ - (void)testInteractiveRequestFlow_whenNoAccessTokenReturned_shouldReturnError
completionHandler(oauthResponse, nil);
}];

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token";

Expand Down
32 changes: 8 additions & 24 deletions MSAL/test/unit/MSALSilentRequestTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -262,10 +262,8 @@ - (void)testAtsAuthorityATExpired
error:nil];
XCTAssertTrue(result);

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token?slice=myslice";
Expand Down Expand Up @@ -366,10 +364,8 @@ - (void)testAtsAuthority_whenATExpiresIn50WithinExpirationBuffer100_shouldReAcqu
error:nil];
XCTAssertTrue(result);

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token?slice=myslice";
Expand Down Expand Up @@ -469,10 +465,8 @@ - (void)testAtsHomeAuthorityATExpired
error:nil];
XCTAssertTrue(result);

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/1234-5678-90abcdefg/oauth2/v2.0/token";
Expand Down Expand Up @@ -652,10 +646,8 @@ - (void)testAtsAuthorityForceUpdate
result = [self.tokenCacheAccessor removeToken:accessToken context:nil error:nil];
XCTAssertTrue(result);

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token";
Expand Down Expand Up @@ -807,10 +799,8 @@ - (void)testAtsAuthorityForceUpdateUserNotMatch
result = [self.tokenCacheAccessor removeToken:accessToken context:nil error:nil];
XCTAssertTrue(result);

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token";
Expand Down Expand Up @@ -918,10 +908,8 @@ - (void)testSilentRequest_whenForceUpdateAndNoATReturned_shouldReturnError
result = [self.tokenCacheAccessor removeToken:accessToken context:nil error:nil];
XCTAssertTrue(result);

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token";
Expand Down Expand Up @@ -1028,10 +1016,8 @@ - (void)testSilentRequest_whenResiliencyErrorReturned_shouldRetryRequestOnceAndS
MSIDTestURLResponse *oidcResponse = [MSIDTestURLResponse oidcResponseForAuthority:@"https://login.microsoftonline.com/common"];
[MSIDTestURLSession addResponses:@[discoveryResponse, oidcResponse]];

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

// Create failing response first
Expand Down Expand Up @@ -1154,10 +1140,8 @@ - (void)testSilentRequest_when429ThrottledErrorReturned_shouldReturnAllHeadersAn
MSIDTestURLResponse *oidcResponse = [MSIDTestURLResponse oidcResponseForAuthority:@"https://login.microsoftonline.com/common"];
[MSIDTestURLSession addResponses:@[discoveryResponse, oidcResponse]];

NSMutableDictionary *reqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[reqHeaders setObject:@"true" forKey:@"return-client-request-id"];
NSMutableDictionary *reqHeaders = [[MSIDTestURLResponse msalDefaultRequestHeaders] mutableCopy];
[reqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
[reqHeaders setObject:@"application/json" forKey:@"Accept"];
[reqHeaders setObject:correlationId.UUIDString forKey:@"client-request-id"];

NSString *url = @"https://login.microsoftonline.com/common/oauth2/v2.0/token?slice=myslice";
Expand Down
2 changes: 2 additions & 0 deletions MSAL/test/unit/ios/unit-test-host/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>UnitTestHost</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
Expand Down
6 changes: 6 additions & 0 deletions MSAL/test/unit/telemetry/MSALTelemetryDispatcherTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ - (NSString *)logComponent
return nil;
}

- (NSDictionary *)appRequestMetadata
{
return nil;
}


- (NSURLSession *)urlSession
{
return nil;
Expand Down
2 changes: 2 additions & 0 deletions MSAL/test/unit/utils/MSIDTestURLResponse+MSAL.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@

@interface MSIDTestURLResponse (MSAL)

+ (NSDictionary *)msalDefaultRequestHeaders;

+ (MSIDTestURLResponse *)discoveryResponseForAuthority:(NSString *)authority;

+ (MSIDTestURLResponse *)oidcResponseForAuthority:(NSString *)authority;
Expand Down
54 changes: 26 additions & 28 deletions MSAL/test/unit/utils/MSIDTestURLResponse+MSAL.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,28 @@

@implementation MSIDTestURLResponse (MSAL)

+ (NSDictionary *)msalDefaultRequestHeaders
{
static NSDictionary *s_msalHeaders = nil;
static dispatch_once_t headersOnce;

dispatch_once(&headersOnce, ^{
NSMutableDictionary *headers = [[MSIDDeviceId deviceId] mutableCopy];
headers[@"return-client-request-id"] = @"true";
headers[@"client-request-id"] = [MSIDTestRequireValueSentinel sentinel];
headers[@"Accept"] = @"application/json";
headers[@"x-app-name"] = @"UnitTestHost";
headers[@"x-app-ver"] = @"1.0";

s_msalHeaders = [headers copy];
});

return s_msalHeaders;
}

+ (MSIDTestURLResponse *)oidcResponseForAuthority:(NSString *)authority
{
NSMutableDictionary *oidcReqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[oidcReqHeaders setObject:@"true" forKey:@"return-client-request-id"];
[oidcReqHeaders setObject:[MSIDTestRequireValueSentinel new] forKey:@"client-request-id"];
[oidcReqHeaders setObject:@"application/json" forKey:@"Accept"];
NSDictionary *oidcReqHeaders = [self msalDefaultRequestHeaders];

NSDictionary *oidcJson =
@{ @"token_endpoint" : [NSString stringWithFormat:@"%@/oauth2/v2.0/token", authority],
Expand Down Expand Up @@ -75,11 +91,8 @@ + (MSIDTestURLResponse *)discoveryResponseForAuthority:(NSString *)authority

MSIDTestURLResponse *discoveryResponse = [MSIDTestURLResponse request:[NSURL URLWithString:requestUrl]
reponse:httpResponse];
NSMutableDictionary *headers = [[MSIDDeviceId deviceId] mutableCopy];
headers[@"Accept"] = @"application/json";
headers[@"return-client-request-id"] = @"true";
headers[@"client-request-id"] = [MSIDTestRequireValueSentinel new];
discoveryResponse->_requestHeaders = headers;
NSDictionary *headers = [self msalDefaultRequestHeaders];
discoveryResponse->_requestHeaders = [headers mutableCopy];

NSString *tenantDiscoveryEndpoint = [NSString stringWithFormat:@"%@/v2.0/.well-known/openid-configuration", authority];

Expand All @@ -106,10 +119,7 @@ + (MSIDTestURLResponse *)oidcResponseForAuthority:(NSString *)authority
responseUrl:(NSString *)responseAuthority
query:(NSString *)query
{
NSMutableDictionary *oidcReqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[oidcReqHeaders setObject:@"true" forKey:@"return-client-request-id"];
[oidcReqHeaders setObject:[MSIDTestRequireValueSentinel new] forKey:@"client-request-id"];
[oidcReqHeaders setObject:@"application/json" forKey:@"Accept"];
NSDictionary *oidcReqHeaders = [self msalDefaultRequestHeaders];

NSString *queryString = query ? [NSString stringWithFormat:@"?%@", query] : @"";

Expand All @@ -136,11 +146,7 @@ + (MSIDTestURLResponse *)rtResponseForScopes:(MSALScopes *)scopes
tenantId:(NSString *)tid
user:(MSALAccount *)user
{
NSMutableDictionary *tokenReqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[tokenReqHeaders setObject:@"application/json" forKey:@"Accept"];
[tokenReqHeaders setObject:[MSIDTestRequireValueSentinel new] forKey:@"client-request-id"];
[tokenReqHeaders setObject:@"true" forKey:@"return-client-request-id"];
[tokenReqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
NSDictionary *tokenReqHeaders = [self msalDefaultRequestHeaders];

MSIDTestURLResponse *tokenResponse =
[MSIDTestURLResponse requestURLString:[NSString stringWithFormat:@"%@/oauth2/v2.0/token", authority]
Expand Down Expand Up @@ -175,11 +181,7 @@ + (MSIDTestURLResponse *)errorRtResponseForScopes:(MSALScopes *)scopes
errorDescription:(NSString *)errorDescription
subError:(NSString *)subError
{
NSMutableDictionary *tokenReqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[tokenReqHeaders setObject:@"application/json" forKey:@"Accept"];
[tokenReqHeaders setObject:[MSIDTestRequireValueSentinel new] forKey:@"client-request-id"];
[tokenReqHeaders setObject:@"true" forKey:@"return-client-request-id"];
[tokenReqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
NSDictionary *tokenReqHeaders = [self msalDefaultRequestHeaders];

MSIDTestURLResponse *tokenResponse =
[MSIDTestURLResponse requestURLString:[NSString stringWithFormat:@"%@/oauth2/v2.0/token", authority]
Expand Down Expand Up @@ -220,11 +222,7 @@ + (MSIDTestURLResponse *)authCodeResponse:(NSString *)authcode
scopes:(MSALScopes *)scopes
clientInfo:(NSDictionary *)clientInfo
{
NSMutableDictionary *tokenReqHeaders = [[MSIDDeviceId deviceId] mutableCopy];
[tokenReqHeaders setObject:@"application/json" forKey:@"Accept"];
[tokenReqHeaders setObject:[MSIDTestRequireValueSentinel new] forKey:@"client-request-id"];
[tokenReqHeaders setObject:@"true" forKey:@"return-client-request-id"];
[tokenReqHeaders setObject:@"application/x-www-form-urlencoded" forKey:@"Content-Type"];
NSDictionary *tokenReqHeaders = [self msalDefaultRequestHeaders];

NSMutableDictionary *tokenQPs = [NSMutableDictionary new];
if (query)
Expand Down

0 comments on commit f6359db

Please sign in to comment.