Skip to content

Commit 48800fb

Browse files
committed
Decide to enable/disable single frt based on string flight to allow 3 states:
- On - Off - Ignore, keep as is
1 parent 0fbe5d1 commit 48800fb

File tree

4 files changed

+36
-14
lines changed

4 files changed

+36
-14
lines changed

IdentityCore/src/MSIDConstants.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ typedef NS_ENUM(NSInteger, MSIDIsFRTEnabledStatus)
197197
MSIDIsFRTEnabledStatusDisabledByKeychainItem
198198
};
199199

200+
extern NSString * _Nonnull const MSID_FRT_STATUS_ENABLED;
201+
extern NSString * _Nonnull const MSID_FRT_STATUS_DISABLED;
202+
200203
extern NSString * _Nonnull const MSID_BROWSER_RESPONSE_SWITCH_BROWSER;
201204
extern NSString * _Nonnull const MSID_BROWSER_RESPONSE_SWITCH_BROWSER_RESUME;
202205

IdentityCore/src/MSIDConstants.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@
6464

6565
NSString *const MSID_USE_SINGLE_FRT_KEYCHAIN = @"useSingleFRT";
6666
NSString *const MSID_USE_SINGLE_FRT_KEY = @"use_single_frt";
67+
NSString *const MSID_FRT_STATUS_ENABLED = @"on";
68+
NSString *const MSID_FRT_STATUS_DISABLED = @"off";
6769

6870
NSString *const MSID_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY = @"SHARED_MODE_CURRENT_ACCOUNT_CHANGED";
6971

IdentityCore/src/cache/accessor/MSIDAccountCredentialCache.m

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -568,11 +568,20 @@ - (MSIDIsFRTEnabledStatus)checkFRTEnabled:(nullable id<MSIDRequestContext>)conte
568568
MSIDIsFRTEnabledStatus (^checkFeatureFlagsAndReturn)(MSIDIsFRTEnabledStatus) = ^MSIDIsFRTEnabledStatus(MSIDIsFRTEnabledStatus status)
569569
{
570570

571-
// Check if FRT is enabled by feature flight
571+
// Check if FRT is enabled by feature flight, possible values:
572+
// - MSID_FRT_STATUS_ENABLED => "on": FRT will be enabled
573+
// - MSID_FRT_STATUS_DISABLED => "off": FRT will be disabled
574+
// - nil, empty or any other value: no change to FRT
572575
MSIDFlightManager *flightManager = [MSIDFlightManager sharedInstance];
573-
BOOL flagEnableFRT = [flightManager boolForKey:@"enable_client_sfrt_by_tenant_id"];// || YES; // TODO: Replace this by the constant from the other branch, and remove the hardcoded YES
574-
BOOL flagDisableAllFRT = [flightManager boolForKey:@"disable_client_sfrt_for_all"];
575-
BOOL shouldEnableFRT = flagEnableFRT && !flagDisableAllFRT;
576+
NSString *flagEnableFRT = [flightManager stringForKey:MSID_FLIGHT_CLIENT_SFRT_STATUS];
577+
BOOL shouldEnableFRT = [MSID_FRT_STATUS_ENABLED isEqualToString:flagEnableFRT];
578+
BOOL shouldDisableFRT = [MSID_FRT_STATUS_DISABLED isEqualToString:flagEnableFRT];
579+
580+
if ([NSString msidIsStringNilOrBlank:flagEnableFRT] || (!shouldEnableFRT && !shouldDisableFRT))
581+
{
582+
MSID_LOG_WITH_CTX(MSIDLogLevelError, context, @"FRT flight set to keep current status: %ld", (long)status);
583+
return status;
584+
}
576585
MSIDIsFRTEnabledStatus newStatus = status;
577586
NSError *updateError = nil;
578587

@@ -594,7 +603,7 @@ - (MSIDIsFRTEnabledStatus)checkFRTEnabled:(nullable id<MSIDRequestContext>)conte
594603
[self updateFRTSettings:YES context:context error:&updateError];
595604
newStatus = MSIDIsFRTEnabledStatusEnabled;
596605
}
597-
else if (flagDisableAllFRT)
606+
else if (shouldDisableFRT)
598607
{
599608
[self updateFRTSettings:NO context:context error:&updateError];
600609
newStatus = MSIDIsFRTEnabledStatusDisabledByKeychainItem;
@@ -603,7 +612,7 @@ - (MSIDIsFRTEnabledStatus)checkFRTEnabled:(nullable id<MSIDRequestContext>)conte
603612

604613
// FRT is currently enabled, check to see if should be disabled
605614
case MSIDIsFRTEnabledStatusEnabled:
606-
if (flagDisableAllFRT)
615+
if (shouldDisableFRT)
607616
{
608617
[self updateFRTSettings:NO context:context error:&updateError];
609618
newStatus = MSIDIsFRTEnabledStatusDisabledByKeychainItem;

IdentityCore/src/cache/accessor/MSIDDefaultTokenCacheAccessor.m

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,12 @@ - (MSIDRefreshToken *)getRefreshTokenWithAccount:(MSIDAccountIdentifier *)accoun
132132
context:(id<MSIDRequestContext>)context
133133
error:(NSError *__autoreleasing *)error
134134
{
135-
MSIDIsFRTEnabledStatus frtStatus = [_accountCredentialCache checkFRTEnabled:context error:error];
135+
NSError *frtError = nil;
136+
MSIDIsFRTEnabledStatus frtStatus = [_accountCredentialCache checkFRTEnabled:context error:&frtError];
136137
BOOL frtEnabled = frtStatus == MSIDIsFRTEnabledStatusEnabled;
137-
if (error)
138+
if (frtError)
138139
{
140+
if (error) *error = frtError;
139141
MSID_LOG_WITH_CTX(MSIDLogLevelError, context, @"Error checking FRT enabled status, not using new FRT.");
140142
}
141143

@@ -819,9 +821,11 @@ - (BOOL)validateAndRemoveRefreshToken:(MSIDRefreshToken *)token
819821
context:(id<MSIDRequestContext>)context
820822
error:(NSError *__autoreleasing*)error
821823
{
822-
BOOL frtEnabled = [_accountCredentialCache checkFRTEnabled:context error:error] == MSIDIsFRTEnabledStatusEnabled;
823-
if (error)
824+
NSError *frtError = nil;
825+
BOOL frtEnabled = [_accountCredentialCache checkFRTEnabled:context error:&frtError] == MSIDIsFRTEnabledStatusEnabled;
826+
if (frtError)
824827
{
828+
if (error) *error = frtError;
825829
MSID_LOG_WITH_CTX(MSIDLogLevelError, context, @"Error checking FRT enabled status, not using new FRT.");
826830
}
827831

@@ -1003,11 +1007,13 @@ - (BOOL)saveRefreshTokenWithConfiguration:(MSIDConfiguration *)configuration
10031007

10041008
if (![NSString msidIsStringNilOrBlank:refreshToken.familyId])
10051009
{
1010+
NSError *frtError = nil;
10061011
// Check if FRT is enabled, this will update the configuration object, and then use it to decide if
10071012
// we should save the token as FRT or legacy RT (with familyId, if it contains that value).
1008-
BOOL frtEnabled = [_accountCredentialCache checkFRTEnabled:context error:error] == MSIDIsFRTEnabledStatusEnabled;
1009-
if (error)
1013+
BOOL frtEnabled = [_accountCredentialCache checkFRTEnabled:context error:&frtError] == MSIDIsFRTEnabledStatusEnabled;
1014+
if (frtError)
10101015
{
1016+
if (error) *error = frtError;
10111017
MSID_LOG_WITH_CTX(MSIDLogLevelError, context, @"Error checking FRT enabled status, not saving as new FRT.");
10121018
}
10131019

@@ -1285,9 +1291,11 @@ - (BOOL)saveAccount:(MSIDAccount *)account
12851291
context:(id<MSIDRequestContext>)context
12861292
error:(NSError *__autoreleasing*)error
12871293
{
1288-
BOOL frtEnabled = [_accountCredentialCache checkFRTEnabled:context error:error] == MSIDIsFRTEnabledStatusEnabled;
1289-
if (error)
1294+
NSError *frtError = nil;
1295+
BOOL frtEnabled = [_accountCredentialCache checkFRTEnabled:context error:&frtError] == MSIDIsFRTEnabledStatusEnabled;
1296+
if (frtError)
12901297
{
1298+
if (error) *error = frtError;
12911299
MSID_LOG_WITH_CTX(MSIDLogLevelError, context, @"Error checking FRT enabled status, not using new FRT.");
12921300
}
12931301

0 commit comments

Comments
 (0)