diff --git a/changelog.txt b/changelog.txt index 708709aa94..9f5d216597 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,7 +1,6 @@ V.Next --------- - [MINOR] Add flight to control silent token timeout (#2311) -- [PATCH] Handle Receiver Callback Exception in CommandDispatcher interactive command (#2305) - [MINOR] Add IpcStrategyWithBackup (#2301) - [PATCH] Fix MSAL Issue 1864 (#2280) - [MINOR] Add AccountManagerBackupIpcStrategyTargetingSpecificBrokerApp (#2294) diff --git a/common/src/main/java/com/microsoft/identity/common/internal/controllers/LocalMSALController.java b/common/src/main/java/com/microsoft/identity/common/internal/controllers/LocalMSALController.java index 7d94cff59f..d768b3e23b 100644 --- a/common/src/main/java/com/microsoft/identity/common/internal/controllers/LocalMSALController.java +++ b/common/src/main/java/com/microsoft/identity/common/internal/controllers/LocalMSALController.java @@ -72,7 +72,6 @@ import com.microsoft.identity.common.java.result.GenerateShrResult; import com.microsoft.identity.common.java.result.LocalAuthenticationResult; import com.microsoft.identity.common.java.telemetry.TelemetryEventStrings; -import com.microsoft.identity.common.java.util.ResultFuture; import com.microsoft.identity.common.java.util.ResultUtil; import com.microsoft.identity.common.java.util.ThreadUtils; import com.microsoft.identity.common.java.util.ported.PropertyBag; @@ -82,6 +81,7 @@ import java.util.List; import java.util.Set; import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import lombok.EqualsAndHashCode; @@ -93,9 +93,6 @@ public class LocalMSALController extends BaseController { @SuppressWarnings(WarningType.rawtype_warning) private IAuthorizationStrategy mAuthorizationStrategy = null; - @SuppressWarnings({WarningType.rawtype_warning, WarningType.unchecked_warning}) - private ResultFuture mAuthorizationResultFuture = null; - @SuppressWarnings(WarningType.rawtype_warning) private AuthorizationRequest mAuthorizationRequest = null; @@ -231,14 +228,12 @@ private AuthorizationResult performAuthorizationRequest(@NonNull final OAuth2Str mAuthorizationRequest = getAuthorizationRequest(strategy, parameters); // Suppressing unchecked warnings due to casting of AuthorizationRequest to GenericAuthorizationRequest and AuthorizationStrategy to GenericAuthorizationStrategy in the arguments of call to requestAuthorization method - mAuthorizationResultFuture = strategy.requestAuthorization( + @SuppressWarnings(WarningType.unchecked_warning) final Future future = strategy.requestAuthorization( mAuthorizationRequest, mAuthorizationStrategy ); - AuthorizationResult result = mAuthorizationResultFuture.get(); - mAuthorizationResultFuture = null; - return result; + return future.get(); } @Override @@ -258,17 +253,7 @@ public void onFinishAuthorizationSession(int requestCode, .put(TelemetryEventStrings.Key.REQUEST_CODE, String.valueOf(requestCode)) ); - try { - mAuthorizationStrategy.completeAuthorization(requestCode, RawAuthorizationResult.fromPropertyBag(data)); - } catch (Exception e){ - // If the future is somehow initialized and waiting, give the future an exception - if (mAuthorizationResultFuture != null && !mAuthorizationResultFuture.isDone()) { - mAuthorizationResultFuture.setException(e); - } else { - // Best Effort - throw e; - } - } + mAuthorizationStrategy.completeAuthorization(requestCode, RawAuthorizationResult.fromPropertyBag(data)); Telemetry.emit( new ApiEndEvent() diff --git a/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/activedirectoryfederationservices/ActiveDirectoryFederationServices2012R2OAuth2Strategy.java b/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/activedirectoryfederationservices/ActiveDirectoryFederationServices2012R2OAuth2Strategy.java index 1bc000275e..8b11673fb2 100644 --- a/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/activedirectoryfederationservices/ActiveDirectoryFederationServices2012R2OAuth2Strategy.java +++ b/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/activedirectoryfederationservices/ActiveDirectoryFederationServices2012R2OAuth2Strategy.java @@ -43,7 +43,7 @@ import com.microsoft.identity.common.java.providers.oauth2.TokenRequest; import com.microsoft.identity.common.java.providers.oauth2.TokenResponse; -import com.microsoft.identity.common.java.util.ResultFuture; +import java.util.concurrent.Future; /** * Azure Active Directory Federation Services 2012 R2 OAuth Strategy @@ -70,7 +70,7 @@ public ActiveDirectoryFederationServices2012R2OAuth2Strategy(OAuth2Configuration // Suppressing unchecked warnings due to casting of AuthorizationRequest to GenericAuthorizationRequest and AuthorizationStrategy to GenericAuthorizationStrategy in the arguments of call to super class' method requestAuthorization @SuppressWarnings(WarningType.unchecked_warning) @Override - public ResultFuture requestAuthorization(AuthorizationRequest request, IAuthorizationStrategy IAuthorizationStrategy) + public Future requestAuthorization(AuthorizationRequest request, IAuthorizationStrategy IAuthorizationStrategy) throws ClientException { return super.requestAuthorization(request, IAuthorizationStrategy); } diff --git a/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/activedirectoryfederationservices/ActiveDirectoryFederationServices2016OAuth2Strategy.java b/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/activedirectoryfederationservices/ActiveDirectoryFederationServices2016OAuth2Strategy.java index d507d6fcda..206a3b27ea 100644 --- a/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/activedirectoryfederationservices/ActiveDirectoryFederationServices2016OAuth2Strategy.java +++ b/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/activedirectoryfederationservices/ActiveDirectoryFederationServices2016OAuth2Strategy.java @@ -43,7 +43,7 @@ import com.microsoft.identity.common.java.providers.oauth2.TokenRequest; import com.microsoft.identity.common.java.providers.oauth2.TokenResponse; -import com.microsoft.identity.common.java.util.ResultFuture; +import java.util.concurrent.Future; /** * Azure Active Directory Federation Services 2016 oAuth2 Strategy. @@ -68,7 +68,7 @@ public ActiveDirectoryFederationServices2016OAuth2Strategy(OAuth2Configuration c // Suppressing unchecked warnings due to casting of AuthorizationRequest to GenericAuthorizationRequest and AuthorizationStrategy to GenericAuthorizationStrategy in the arguments of call to super class' method requestAuthorization @SuppressWarnings(WarningType.unchecked_warning) @Override - public ResultFuture requestAuthorization(AuthorizationRequest request, IAuthorizationStrategy IAuthorizationStrategy) throws ClientException { + public Future requestAuthorization(AuthorizationRequest request, IAuthorizationStrategy IAuthorizationStrategy) throws ClientException { return super.requestAuthorization(request, IAuthorizationStrategy); } diff --git a/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/azureactivedirectoryb2c/AzureActiveDirectoryB2COAuth2Strategy.java b/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/azureactivedirectoryb2c/AzureActiveDirectoryB2COAuth2Strategy.java index 8ae2ebb653..f8d3d2a205 100644 --- a/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/azureactivedirectoryb2c/AzureActiveDirectoryB2COAuth2Strategy.java +++ b/common/src/main/java/com/microsoft/identity/common/internal/providers/microsoft/azureactivedirectoryb2c/AzureActiveDirectoryB2COAuth2Strategy.java @@ -43,7 +43,7 @@ import com.microsoft.identity.common.java.providers.oauth2.TokenResponse; import com.microsoft.identity.common.java.providers.oauth2.TokenResult; -import com.microsoft.identity.common.java.util.ResultFuture; +import java.util.concurrent.Future; /** * Azure Active Directory B2C OAuth Strategy. @@ -68,7 +68,7 @@ public AzureActiveDirectoryB2COAuth2Strategy(OAuth2Configuration config, OAuth2S // Suppressing unchecked warnings due to casting of AuthorizationRequest to GenericAuthorizationRequest and AuthorizationStrategy to GenericAuthorizationStrategy in the arguments of call to super class' method requestAuthorization @SuppressWarnings(WarningType.unchecked_warning) @Override - public ResultFuture requestAuthorization(AuthorizationRequest request, IAuthorizationStrategy authorizationStrategy) throws ClientException { + public Future requestAuthorization(AuthorizationRequest request, IAuthorizationStrategy authorizationStrategy) throws ClientException { return super.requestAuthorization(request, authorizationStrategy); } diff --git a/common/src/main/java/com/microsoft/identity/common/internal/ui/browser/BrowserAuthorizationStrategy.java b/common/src/main/java/com/microsoft/identity/common/internal/ui/browser/BrowserAuthorizationStrategy.java index e9ffbe6f8b..916f873663 100644 --- a/common/src/main/java/com/microsoft/identity/common/internal/ui/browser/BrowserAuthorizationStrategy.java +++ b/common/src/main/java/com/microsoft/identity/common/internal/ui/browser/BrowserAuthorizationStrategy.java @@ -44,6 +44,7 @@ import com.microsoft.identity.common.logging.Logger; import java.net.URI; +import java.util.concurrent.Future; import static com.microsoft.identity.common.java.AuthenticationConstants.UIRequest.BROWSER_FLOW; @@ -74,7 +75,7 @@ public void setBrowser(final Browser browser) { } @Override - public ResultFuture requestAuthorization( + public Future requestAuthorization( GenericAuthorizationRequest authorizationRequest, GenericOAuth2Strategy oAuth2Strategy) throws ClientException { diff --git a/common/src/main/java/com/microsoft/identity/common/internal/ui/webview/EmbeddedWebViewAuthorizationStrategy.java b/common/src/main/java/com/microsoft/identity/common/internal/ui/webview/EmbeddedWebViewAuthorizationStrategy.java index 572328dcd6..b096cabf7f 100644 --- a/common/src/main/java/com/microsoft/identity/common/internal/ui/webview/EmbeddedWebViewAuthorizationStrategy.java +++ b/common/src/main/java/com/microsoft/identity/common/internal/ui/webview/EmbeddedWebViewAuthorizationStrategy.java @@ -45,6 +45,7 @@ import com.microsoft.identity.common.logging.Logger; import java.net.URI; +import java.util.concurrent.Future; /** * Serve as a class to do the OAuth2 auth code grant flow with Android embedded web view. @@ -75,8 +76,8 @@ public EmbeddedWebViewAuthorizationStrategy(@NonNull Context applicationContext, * The activity result is set in Authorization.setResult() and passed to the onActivityResult() of the calling activity. */ @Override - public ResultFuture requestAuthorization(GenericAuthorizationRequest authorizationRequest, - GenericOAuth2Strategy oAuth2Strategy) throws ClientException { + public Future requestAuthorization(GenericAuthorizationRequest authorizationRequest, + GenericOAuth2Strategy oAuth2Strategy) throws ClientException { final String methodTag = TAG + ":requestAuthorization"; mAuthorizationResultFuture = new ResultFuture<>(); mOAuth2Strategy = oAuth2Strategy; diff --git a/common4j/src/main/com/microsoft/identity/common/java/controllers/CommandDispatcher.java b/common4j/src/main/com/microsoft/identity/common/java/controllers/CommandDispatcher.java index fbeac9e4e5..0b4a9bb357 100644 --- a/common4j/src/main/com/microsoft/identity/common/java/controllers/CommandDispatcher.java +++ b/common4j/src/main/com/microsoft/identity/common/java/controllers/CommandDispatcher.java @@ -753,16 +753,10 @@ public void run() { EstsTelemetry.getInstance().emitApiId(command.getPublicApiId()); - final BaseException[] receiverException = new BaseException[1]; - final LocalBroadcaster.IReceiverCallback resultReceiver = new LocalBroadcaster.IReceiverCallback() { @Override public void onReceive(@NonNull PropertyBag dataBag) { - try { - completeInteractive(dataBag); - } catch (final Exception e) { - receiverException[0] = ExceptionAdapter.baseExceptionFromException(e); - } + completeInteractive(dataBag); } }; @@ -779,12 +773,6 @@ public void onReceive(@NonNull PropertyBag dataBag) { LocalBroadcaster.INSTANCE.unregisterCallback(RETURN_AUTHORIZATION_REQUEST_RESULT); - // If we received an exception during the receiver callback execution, - // we should set that as the command result - if (receiverException[0] != null) { - commandResult = CommandResult.of(CommandResult.ResultStatus.ERROR, receiverException[0], correlationId); - } - Logger.info(TAG + methodName, "Completed interactive request for correlation id : **" + correlationId + statusMsg(commandResult.getStatus().getLogStatus())); diff --git a/common4j/src/main/com/microsoft/identity/common/java/providers/oauth2/IAuthorizationStrategy.java b/common4j/src/main/com/microsoft/identity/common/java/providers/oauth2/IAuthorizationStrategy.java index f43f117df0..9a69fae8c1 100644 --- a/common4j/src/main/com/microsoft/identity/common/java/providers/oauth2/IAuthorizationStrategy.java +++ b/common4j/src/main/com/microsoft/identity/common/java/providers/oauth2/IAuthorizationStrategy.java @@ -26,7 +26,7 @@ import com.microsoft.identity.common.java.exception.ClientException; import com.microsoft.identity.common.java.providers.RawAuthorizationResult; -import com.microsoft.identity.common.java.util.ResultFuture; +import java.util.concurrent.Future; import edu.umd.cs.findbugs.annotations.NonNull; @@ -43,8 +43,8 @@ public interface IAuthorizationStrategy< /** * Perform the authorization request. */ - ResultFuture requestAuthorization(GenericAuthorizationRequest authorizationRequest, - GenericOAuth2Strategy oAuth2Strategy) + Future requestAuthorization(GenericAuthorizationRequest authorizationRequest, + GenericOAuth2Strategy oAuth2Strategy) throws ClientException; /** diff --git a/common4j/src/main/com/microsoft/identity/common/java/providers/oauth2/OAuth2Strategy.java b/common4j/src/main/com/microsoft/identity/common/java/providers/oauth2/OAuth2Strategy.java index 7091327873..1cc5193819 100644 --- a/common4j/src/main/com/microsoft/identity/common/java/providers/oauth2/OAuth2Strategy.java +++ b/common4j/src/main/com/microsoft/identity/common/java/providers/oauth2/OAuth2Strategy.java @@ -55,7 +55,6 @@ import com.microsoft.identity.common.java.util.CommonURIBuilder; import com.microsoft.identity.common.java.util.IClockSkewManager; import com.microsoft.identity.common.java.util.ObjectMapper; -import com.microsoft.identity.common.java.util.ResultFuture; import com.microsoft.identity.common.java.util.StringUtil; import java.io.IOException; @@ -67,6 +66,7 @@ import java.util.Locale; import java.util.Map; import java.util.TreeMap; +import java.util.concurrent.Future; import javax.net.ssl.HttpsURLConnection; @@ -138,14 +138,14 @@ public OAuth2Strategy(GenericOAuth2Configuration config, * @param authorizationStrategy generic authorization strategy. * @return GenericAuthorizationResponse */ - public ResultFuture requestAuthorization( + public Future requestAuthorization( final GenericAuthorizationRequest request, final GenericAuthorizationStrategy authorizationStrategy) throws ClientException { validateAuthorizationRequest(request); // Suppressing unchecked warnings due to casting an object in reference of current class to the child class GenericOAuth2Strategy while calling method requestAuthorization() - @SuppressWarnings(WarningType.unchecked_warning) final ResultFuture authorizationFuture = + @SuppressWarnings(WarningType.unchecked_warning) final Future authorizationFuture = authorizationStrategy.requestAuthorization(request, this); Telemetry.emit(new UiShownEvent().putVisible(TelemetryEventStrings.Value.TRUE)); diff --git a/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/MockStrategyWithMockedHttpResponse.java b/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/MockStrategyWithMockedHttpResponse.java index 5700389de4..08816ff963 100644 --- a/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/MockStrategyWithMockedHttpResponse.java +++ b/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/MockStrategyWithMockedHttpResponse.java @@ -30,6 +30,8 @@ import com.microsoft.identity.common.java.util.ResultFuture; import com.microsoft.identity.internal.testutils.mocks.MockSuccessAuthorizationResultMockedTests; +import java.util.concurrent.Future; + public class MockStrategyWithMockedHttpResponse extends ResourceOwnerPasswordCredentialsTestStrategy { /** @@ -49,7 +51,7 @@ public MockStrategyWithMockedHttpResponse(MicrosoftStsOAuth2Configuration config * @return GenericAuthorizationResponse */ @Override - public ResultFuture requestAuthorization( + public Future requestAuthorization( final MicrosoftStsAuthorizationRequest request, final IAuthorizationStrategy IAuthorizationStrategy) { final MockSuccessAuthorizationResultMockedTests authorizationResult = new MockSuccessAuthorizationResultMockedTests(); diff --git a/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/MockTestStrategy.java b/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/MockTestStrategy.java index 4dc0322929..d7ab80e65c 100644 --- a/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/MockTestStrategy.java +++ b/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/MockTestStrategy.java @@ -42,6 +42,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.concurrent.Future; public class MockTestStrategy extends ResourceOwnerPasswordCredentialsTestStrategy { @@ -62,7 +63,7 @@ public MockTestStrategy(MicrosoftStsOAuth2Configuration config) throws ClientExc * @return GenericAuthorizationResponse */ @Override - public ResultFuture requestAuthorization( + public Future requestAuthorization( final MicrosoftStsAuthorizationRequest request, final IAuthorizationStrategy IAuthorizationStrategy) { final MockSuccessAuthorizationResultMockedTests authorizationResult = new MockSuccessAuthorizationResultMockedTests(); diff --git a/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/ResourceOwnerPasswordCredentialsTestStrategy.java b/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/ResourceOwnerPasswordCredentialsTestStrategy.java index 8c653f86b0..7bd4f462fd 100644 --- a/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/ResourceOwnerPasswordCredentialsTestStrategy.java +++ b/testutils/src/main/java/com/microsoft/identity/internal/testutils/strategies/ResourceOwnerPasswordCredentialsTestStrategy.java @@ -41,6 +41,8 @@ import com.microsoft.identity.internal.testutils.labutils.LabConfig; import com.microsoft.identity.internal.testutils.mocks.MockSuccessAuthorizationResultNetworkTests; +import java.util.concurrent.Future; + public class ResourceOwnerPasswordCredentialsTestStrategy extends MicrosoftStsOAuth2Strategy { public static final String USERNAME_EMPTY_OR_NULL = "username_empty_or_null"; @@ -74,7 +76,7 @@ public ResourceOwnerPasswordCredentialsTestStrategy(final MicrosoftStsOAuth2Conf * @return GenericAuthorizationResponse */ @Override - public ResultFuture requestAuthorization( + public Future requestAuthorization( final MicrosoftStsAuthorizationRequest request, final IAuthorizationStrategy IAuthorizationStrategy) { final MockSuccessAuthorizationResultNetworkTests authorizationResult = new MockSuccessAuthorizationResultNetworkTests();