diff --git a/msal/src/main/java/com/microsoft/identity/client/PublicClientApplicationConfiguration.java b/msal/src/main/java/com/microsoft/identity/client/PublicClientApplicationConfiguration.java index e62d8c2294..141b954a74 100644 --- a/msal/src/main/java/com/microsoft/identity/client/PublicClientApplicationConfiguration.java +++ b/msal/src/main/java/com/microsoft/identity/client/PublicClientApplicationConfiguration.java @@ -44,15 +44,11 @@ import static com.microsoft.identity.client.PublicClientApplicationConfiguration.SerializedNames.WEBAUTHN_VERSION; import static com.microsoft.identity.client.PublicClientApplicationConfiguration.SerializedNames.WEB_VIEW_ZOOM_CONTROLS_ENABLED; import static com.microsoft.identity.client.PublicClientApplicationConfiguration.SerializedNames.WEB_VIEW_ZOOM_ENABLED; -import static com.microsoft.identity.client.exception.MsalClientException.APP_MANIFEST_VALIDATION_ERROR; import android.Manifest; import android.content.Context; -import android.content.Intent; -import android.content.pm.ActivityInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.content.pm.Signature; import android.net.Uri; import android.text.TextUtils; @@ -641,107 +637,9 @@ private void verifyRedirectUriWithAppSignature() throws MsalClientException { } } - /** - * Ensures that the developer has properly configured their - * AndroidManifest to expose the BrowserTabActivity. - * - * @param context the context of the application - * @param url the redirect uri of the app - * @return a boolean indicating if BrowserTabActivity is configured or not - */ - private static boolean validateCustomTabRedirectActivity(@NonNull final Context context, - @NonNull final String url) throws MsalClientException { - final String methodTag = TAG + ":validateCustomTabRedirectActivity"; - final PackageManager packageManager = context.getPackageManager(); - - if (packageManager == null) { - return false; - } - - final Intent intent = new Intent(); - intent.setAction(Intent.ACTION_VIEW); - intent.addCategory(Intent.CATEGORY_DEFAULT); - intent.addCategory(Intent.CATEGORY_BROWSABLE); - intent.setDataAndNormalize(Uri.parse(url)); - - final List resolveInfoList = packageManager.queryIntentActivities( - intent, - PackageManager.GET_RESOLVED_FILTER - ); - - // resolve info list will never be null, if no matching activities are found, empty list will be returned. - boolean hasActivity = false; - - for (final ResolveInfo info : resolveInfoList) { - final ActivityInfo activityInfo = info.activityInfo; - String activityClassName = BrowserTabActivity.class.getName(); - - //If we're using authorization in current task... then we need to look for that activity - if(LibraryConfiguration.getInstance().isAuthorizationInCurrentTask()){ - activityClassName = CurrentTaskBrowserTabActivity.class.getName(); - } - - if (activityInfo.name.equals(activityClassName) && - activityInfo.packageName.equals(context.getPackageName())) { - hasActivity = true; - } else { - // another application is listening for this url scheme, don't open - // Custom Tab for security reasons - com.microsoft.identity.common.logging.Logger.warn( - methodTag, - String.format("Another application %s is listening for the URL scheme %s", activityInfo.packageName, url) - ); - throw new MsalClientException( - MsalClientException.MULTIPLE_APPS_LISTENING_CUSTOM_URL_SCHEME, - "More than one app is listening for the URL scheme defined for BrowserTabActivity in the AndroidManifest." + - " The package name of this other app is: " + activityInfo.packageName - ); - } - } - - return hasActivity; - } - @SuppressWarnings("PMD") public void checkIntentFilterAddedToAppManifestForBrokerFlow() throws MsalClientException { final String methodTag = TAG + ":checkIntentFilterAddedToAppManifestForBrokerFlow"; - if ((getAuthorizationAgent() == AuthorizationAgent.DEFAULT - || getAuthorizationAgent() == AuthorizationAgent.BROWSER)) { - - final boolean hasCustomTabRedirectActivity = validateCustomTabRedirectActivity( - mAppContext, - mRedirectUri - ); - - if (!hasCustomTabRedirectActivity) { - String activityClassName = BrowserTabActivity.class.getSimpleName(); - - if (LibraryConfiguration.getInstance().isAuthorizationInCurrentTask()){ - activityClassName = CurrentTaskBrowserTabActivity.class.getSimpleName(); - } - - final Uri redirectUri = Uri.parse(mRedirectUri); - - throw new MsalClientException( - APP_MANIFEST_VALIDATION_ERROR, - "Intent filter for: " + - activityClassName + - " is missing. " + - " Please make sure you have the following activity in your AndroidManifest.xml \n\n" + - "" + "\n" + - "\t" + "" + "\n" + - "\t\t" + "" + "\n" + - "\t\t" + "" + "\n" + - "\t\t" + "" + "\n" + - "\t\t" + "" + "\n" + - "\t" + "" + "\n" + - "" + "\n"); - } - } - if (!mUseBroker) { return; } diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/shadows/ShadowPublicClientApplicationConfiguration.java b/msal/src/test/java/com/microsoft/identity/client/e2e/shadows/ShadowPublicClientApplicationConfiguration.java deleted file mode 100644 index 33fc1d067a..0000000000 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/shadows/ShadowPublicClientApplicationConfiguration.java +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// All rights reserved. -// -// This code is licensed under the MIT License. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files(the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions : -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -package com.microsoft.identity.client.e2e.shadows; - -import android.content.Context; - -import androidx.annotation.NonNull; - -import com.microsoft.identity.client.PublicClientApplicationConfiguration; -import com.microsoft.identity.client.internal.MsalUtils; - -import org.robolectric.annotation.Implements; - -@Implements(PublicClientApplicationConfiguration.class) -public class ShadowPublicClientApplicationConfiguration { - - // mocking this to assume we have custom tab redirect activity during tests - public static boolean validateCustomTabRedirectActivity(@NonNull final Context context, - @NonNull final String url) { - return true; - } -} diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/AcquireTokenMockTest.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/AcquireTokenMockTest.java index eb5df1d62b..b813ac616f 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/AcquireTokenMockTest.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/AcquireTokenMockTest.java @@ -46,7 +46,6 @@ import com.microsoft.identity.client.e2e.shadows.ShadowAndroidSdkStorageEncryptionManager; import com.microsoft.identity.client.e2e.shadows.ShadowMockAuthority; import com.microsoft.identity.client.e2e.shadows.ShadowOpenIdProviderConfigurationClient; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.shadows.ShadowStrategyResultServerError; import com.microsoft.identity.client.e2e.shadows.ShadowStrategyResultUnsuccessful; import com.microsoft.identity.client.e2e.tests.AcquireTokenAbstractTest; @@ -93,7 +92,6 @@ ShadowAndroidSdkStorageEncryptionManager.class, ShadowMockAuthority.class, ShadowHttpClient.class, - ShadowPublicClientApplicationConfiguration.class, ShadowOpenIdProviderConfigurationClient.class }) public abstract class AcquireTokenMockTest extends AcquireTokenAbstractTest { diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/CommandResultCachingTest.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/CommandResultCachingTest.java index a87d2f7e5a..706aa604be 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/CommandResultCachingTest.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/CommandResultCachingTest.java @@ -34,7 +34,6 @@ import com.microsoft.identity.http.HttpRequestInterceptor; import com.microsoft.identity.http.HttpRequestMatcher; import com.microsoft.identity.shadow.ShadowHttpClient; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.shadows.ShadowAndroidSdkStorageEncryptionManager; import com.microsoft.identity.client.e2e.tests.AcquireTokenAbstractTest; import com.microsoft.identity.client.e2e.utils.AcquireTokenTestHelper; @@ -69,7 +68,6 @@ ShadowAndroidSdkStorageEncryptionManager.class, ShadowMockAuthority.class, ShadowHttpClient.class, - ShadowPublicClientApplicationConfiguration.class, ShadowOpenIdProviderConfigurationClient.class }) public final class CommandResultCachingTest extends AcquireTokenAbstractTest { diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/CrossCloudGuestAccountTest.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/CrossCloudGuestAccountTest.java index 13728e5734..f180bc6d03 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/CrossCloudGuestAccountTest.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/CrossCloudGuestAccountTest.java @@ -36,7 +36,6 @@ import com.microsoft.identity.client.MultiTenantAccount; import com.microsoft.identity.client.SilentAuthenticationCallback; import com.microsoft.identity.client.e2e.shadows.ShadowAuthorityForMockHttpResponse; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.shadows.ShadowAndroidSdkStorageEncryptionManager; import com.microsoft.identity.client.e2e.tests.AcquireTokenAbstractTest; import com.microsoft.identity.client.e2e.utils.RoboTestUtils; @@ -77,7 +76,6 @@ @Config(shadows = { ShadowAndroidSdkStorageEncryptionManager.class, ShadowAuthorityForMockHttpResponse.class, - ShadowPublicClientApplicationConfiguration.class, ShadowHttpClient.class, }, sdk = {Build.VERSION_CODES.N}) public class CrossCloudGuestAccountTest extends AcquireTokenAbstractTest { diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/DeviceCodeFlowApiTest.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/DeviceCodeFlowApiTest.java index 433332fc91..877c9c8afe 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/DeviceCodeFlowApiTest.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/DeviceCodeFlowApiTest.java @@ -39,7 +39,6 @@ import com.microsoft.identity.client.e2e.shadows.ShadowDeviceCodeFlowCommandAuthError; import com.microsoft.identity.client.e2e.shadows.ShadowDeviceCodeFlowCommandSuccessful; import com.microsoft.identity.client.e2e.shadows.ShadowDeviceCodeFlowCommandTokenError; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.tests.PublicClientApplicationAbstractTest; import com.microsoft.identity.client.e2e.utils.RoboTestUtils; import com.microsoft.identity.client.exception.MsalException; @@ -78,7 +77,6 @@ * of the protocol. Will be extended to test individual aspects of the flow. */ @RunWith(RobolectricTestRunner.class) -@Config(shadows = {ShadowPublicClientApplicationConfiguration.class}) @SuppressWarnings("unchecked") public class DeviceCodeFlowApiTest extends PublicClientApplicationAbstractTest { diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/DeviceCodeFlowWithClaimsApiTest.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/DeviceCodeFlowWithClaimsApiTest.java index 98dd07d1f0..dc9c15a999 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/DeviceCodeFlowWithClaimsApiTest.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/DeviceCodeFlowWithClaimsApiTest.java @@ -40,7 +40,6 @@ import com.microsoft.identity.client.e2e.shadows.ShadowDeviceCodeFlowCommandAuthError; import com.microsoft.identity.client.e2e.shadows.ShadowDeviceCodeFlowCommandSuccessful; import com.microsoft.identity.client.e2e.shadows.ShadowDeviceCodeFlowCommandTokenError; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.tests.PublicClientApplicationAbstractTest; import com.microsoft.identity.client.e2e.utils.RoboTestUtils; import com.microsoft.identity.client.exception.MsalException; @@ -81,7 +80,6 @@ */ @Ignore @RunWith(RobolectricTestRunner.class) -@Config(shadows = {ShadowPublicClientApplicationConfiguration.class}) @SuppressWarnings("unchecked") public class DeviceCodeFlowWithClaimsApiTest extends PublicClientApplicationAbstractTest { diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/SingleAccountOverloadsMockedTest.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/SingleAccountOverloadsMockedTest.java index 7ed429e4e4..aa208c12a2 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/SingleAccountOverloadsMockedTest.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/SingleAccountOverloadsMockedTest.java @@ -38,7 +38,6 @@ import com.microsoft.identity.client.Prompt; import com.microsoft.identity.client.SingleAccountPublicClientApplication; import com.microsoft.identity.client.e2e.shadows.ShadowAuthorityForMockHttpResponse; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.shadows.ShadowOpenIdProviderConfigurationClient; import com.microsoft.identity.client.e2e.shadows.ShadowAndroidSdkStorageEncryptionManager; import com.microsoft.identity.client.e2e.tests.AcquireTokenAbstractTest; @@ -77,7 +76,6 @@ @Config(shadows = { ShadowAndroidSdkStorageEncryptionManager.class, ShadowAuthorityForMockHttpResponse.class, - ShadowPublicClientApplicationConfiguration.class, ShadowHttpClient.class, ShadowOpenIdProviderConfigurationClient.class }) diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/SingleAccountOverloadsWithParametersMockedTest.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/SingleAccountOverloadsWithParametersMockedTest.java index cc3517485d..47f993dc8f 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/SingleAccountOverloadsWithParametersMockedTest.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/mocked/SingleAccountOverloadsWithParametersMockedTest.java @@ -16,7 +16,6 @@ import com.microsoft.identity.client.e2e.shadows.ShadowAndroidSdkStorageEncryptionManager; import com.microsoft.identity.client.e2e.shadows.ShadowAuthorityForMockHttpResponse; import com.microsoft.identity.client.e2e.shadows.ShadowOpenIdProviderConfigurationClient; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.tests.AcquireTokenAbstractTest; import com.microsoft.identity.client.e2e.utils.AcquireTokenTestHelper; import com.microsoft.identity.client.e2e.utils.RoboTestUtils; @@ -55,7 +54,6 @@ @Config(shadows = { ShadowAndroidSdkStorageEncryptionManager.class, ShadowAuthorityForMockHttpResponse.class, - ShadowPublicClientApplicationConfiguration.class, ShadowHttpClient.class, ShadowOpenIdProviderConfigurationClient.class }) diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/AcquireTokenNetworkTest.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/AcquireTokenNetworkTest.java index 4931f70221..6a0f48f78e 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/AcquireTokenNetworkTest.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/AcquireTokenNetworkTest.java @@ -26,7 +26,6 @@ import com.microsoft.identity.client.AcquireTokenSilentParameters; import com.microsoft.identity.client.e2e.rules.NetworkTestsRuleChain; import com.microsoft.identity.client.e2e.shadows.ShadowAuthority; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.shadows.ShadowAndroidSdkStorageEncryptionManager; import com.microsoft.identity.client.e2e.tests.AcquireTokenAbstractTest; import com.microsoft.identity.client.e2e.utils.AcquireTokenTestHelper; @@ -52,7 +51,7 @@ import static com.microsoft.identity.client.e2e.utils.RoboTestUtils.flushScheduler; @RunWith(RobolectricTestRunner.class) -@Config(shadows = {ShadowAndroidSdkStorageEncryptionManager.class, ShadowAuthority.class, ShadowPublicClientApplicationConfiguration.class}) +@Config(shadows = {ShadowAndroidSdkStorageEncryptionManager.class, ShadowAuthority.class}) public abstract class AcquireTokenNetworkTest extends AcquireTokenAbstractTest implements IAcquireTokenNetworkTest { protected String mUsername; diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/GuestAccountAcquireTokenNetworkTests.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/GuestAccountAcquireTokenNetworkTests.java index c95e83d86b..8478b7e78d 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/GuestAccountAcquireTokenNetworkTests.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/GuestAccountAcquireTokenNetworkTests.java @@ -3,7 +3,6 @@ import com.microsoft.identity.client.MultiTenantAccount; import com.microsoft.identity.client.e2e.rules.NetworkTestsRuleChain; import com.microsoft.identity.client.e2e.shadows.ShadowAuthority; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.shadows.ShadowAndroidSdkStorageEncryptionManager; import com.microsoft.identity.client.e2e.tests.AcquireTokenAbstractTest; import com.microsoft.identity.client.e2e.utils.AcquireTokenTestHelper; @@ -25,7 +24,7 @@ import static com.microsoft.identity.internal.testutils.TestConstants.Scopes.USER_READ_SCOPE; @RunWith(RobolectricTestRunner.class) -@Config(shadows = {ShadowAndroidSdkStorageEncryptionManager.class, ShadowAuthority.class, ShadowPublicClientApplicationConfiguration.class}) +@Config(shadows = {ShadowAndroidSdkStorageEncryptionManager.class, ShadowAuthority.class}) public class GuestAccountAcquireTokenNetworkTests extends AcquireTokenAbstractTest { @Rule diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/MultiAccountAndResourceAcquireTokenNetworkTests.java b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/MultiAccountAndResourceAcquireTokenNetworkTests.java index dc59f3aa87..e6711879de 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/MultiAccountAndResourceAcquireTokenNetworkTests.java +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/MultiAccountAndResourceAcquireTokenNetworkTests.java @@ -26,7 +26,6 @@ import com.microsoft.identity.client.IAccount; import com.microsoft.identity.client.e2e.rules.NetworkTestsRuleChain; import com.microsoft.identity.client.e2e.shadows.ShadowAuthority; -import com.microsoft.identity.client.e2e.shadows.ShadowPublicClientApplicationConfiguration; import com.microsoft.identity.client.e2e.shadows.ShadowAndroidSdkStorageEncryptionManager; import com.microsoft.identity.client.e2e.tests.AcquireTokenAbstractTest; import com.microsoft.identity.client.e2e.utils.AcquireTokenTestHelper; @@ -52,7 +51,7 @@ import static com.microsoft.identity.internal.testutils.TestConstants.Scopes.USER_READ_SCOPE; @RunWith(RobolectricTestRunner.class) -@Config(shadows = {ShadowAndroidSdkStorageEncryptionManager.class, ShadowAuthority.class, ShadowPublicClientApplicationConfiguration.class}) +@Config(shadows = {ShadowAndroidSdkStorageEncryptionManager.class, ShadowAuthority.class}) public class MultiAccountAndResourceAcquireTokenNetworkTests extends AcquireTokenAbstractTest { @Rule