Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ MSAL Wiki : https://github.com/AzureAD/microsoft-authentication-library-for-andr
vNext
----------
- [PATCH] Add null checks for guest account ids (#2361)
- [MINOR] Fix for App Link Usage in DUNA / SSO scenarios (#2363)

Version 7.0.3
----------
Expand Down
2 changes: 1 addition & 1 deletion common
Submodule common updated 33 files
+12 −0 changelog.txt
+1 −1 common/build.gradle
+1 −1 common/src/main/java/com/microsoft/identity/common/adal/internal/AuthenticationConstants.java
+18 −6 ...src/main/java/com/microsoft/identity/common/internal/providers/oauth2/CurrentTaskAuthorizationActivity.java
+14 −4 common/src/main/java/com/microsoft/identity/common/internal/providers/oauth2/WebViewAuthorizationFragment.java
+1 −0 common/src/main/java/com/microsoft/identity/common/internal/ui/browser/CustomTabsManager.java
+1 −2 common/src/main/java/com/microsoft/identity/common/internal/ui/webview/AzureActiveDirectoryWebViewClient.java
+159 −60 common/src/main/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/DialogHolder.java
+55 −0 common/src/main/java/com/microsoft/identity/common/internal/ui/webview/switchbrowser/SwitchBrowserUriHelper.kt
+1 −0 .../src/test/java/com/microsoft/identity/common/internal/ui/webview/AzureActiveDirectoryWebViewClientTest.java
+225 −0 common/src/test/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/DialogHolderTest.java
+44 −0 ...st/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowExceptionSmartcardDialog.java
+41 −0 ...t/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowSmartcardCertPickerDialog.java
+42 −0 ...c/test/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowSmartcardErrorDialog.java
+41 −0 ...t/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowSmartcardNfcLoadingDialog.java
+41 −0 ...st/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowSmartcardNfcPromptDialog.java
+41 −0 .../java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowSmartcardNfcReminderDialog.java
+48 −0 ...src/test/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowSmartcardPinDialog.java
+42 −0 .../test/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowSmartcardPromptDialog.java
+42 −0 ...ava/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowSmartcardRemovalPromptDialog.java
+41 −0 ...n/src/test/java/com/microsoft/identity/common/internal/ui/webview/certbasedauth/ShadowUserChoiceDialog.java
+4 −4 ...java/com/microsoft/identity/common/internal/ui/webview/challengehandlers/SwitchBrowserRequestHandlerTest.kt
+80 −3 ...ava/com/microsoft/identity/common/internal/ui/webview/switchbrowser/SwitchBrowserProtocolCoordinatorTest.kt
+9 −0 ...src/test/java/com/microsoft/identity/common/internal/ui/webview/switchbrowser/SwitchBrowserUriHelperTest.kt
+6 −0 ...n4j/src/main/com/microsoft/identity/common/java/commands/parameters/BrokerSilentTokenCommandParameters.java
+8 −0 common4j/src/main/com/microsoft/identity/common/java/controllers/BaseController.java
+45 −25 common4j/src/main/com/microsoft/identity/common/java/controllers/ExceptionAdapter.java
+95 −1 common4j/src/main/com/microsoft/identity/common/java/eststelemetry/EstsTelemetry.java
+12 −2 common4j/src/main/com/microsoft/identity/common/java/flighting/CommonFlight.java
+3 −0 common4j/src/main/com/microsoft/identity/common/java/jwt/JwtKeyUseTypes.kt
+7 −1 common4j/src/main/com/microsoft/identity/common/java/opentelemetry/AttributeName.java
+135 −10 common4j/src/test/com/microsoft/identity/common/java/controllers/ExceptionAdapterTests.java
+1 −1 gradle/versions.gradle
2 changes: 1 addition & 1 deletion gradle/versions.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ ext {
androidxCoreVersion = "1.5.0"
annotationVersion = "1.0.0"
appCompatVersion = "1.1.0"
browserVersion = "1.0.0"
browserVersion = "1.7.0"
constraintLayoutVersion = "1.1.3"
dexmakerMockitoVersion = "2.19.0"
espressoCoreVersion = "3.1.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
// THE SOFTWARE.
package com.microsoft.identity.client;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
Expand All @@ -34,8 +35,6 @@
import android.os.Bundle;
import android.widget.Toast;

import androidx.localbroadcastmanager.content.LocalBroadcastManager;

import com.microsoft.identity.common.internal.providers.oauth2.CurrentTaskBrowserAuthorizationFragment;
import com.microsoft.identity.common.internal.util.StringUtil;
import com.microsoft.identity.common.logging.Logger;
Expand All @@ -58,7 +57,7 @@
* <intent-filter>
* <action android:name="android.intent.action.VIEW" />
*
* To receive implicit intents, have to put the activity in the category of default.
* To receive implicit intents, have to put the category of default.
* <category android:name="android.intent.category.DEFAULT" />
*
* The target activity allows itself to be started by a web browser to display data.
Expand All @@ -73,7 +72,6 @@ public final class CurrentTaskBrowserTabActivity extends Activity {
private static final String TAG = CurrentTaskBrowserTabActivity.class.getSimpleName();
private static final int REDIRECT_RECEIVED_CODE = 2;
private BroadcastReceiver mCloseBroadcastReceiver;
//private int mTaskIdResponseFor;


@Override
Expand All @@ -98,17 +96,18 @@ && getIntent() != null
}
}

@SuppressLint("UnspecifiedRegisterReceiverFlag")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

final String methodTag = TAG + ":onActivityResult";

if (resultCode == RESULT_CANCELED) {
// We weren't able to open CurrentTaskAuthorizationActivity from the back stack. Send a broadcast
// instead.
// Send broadcast to notify authorization activity
Intent broadcast = new Intent(REDIRECT_RETURNED_ACTION);
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcast);
broadcast.setPackage(getPackageName()); // Restrict to our app only
sendBroadcast(broadcast);

// Wait for the custom tab to be removed from the back stack before finishing.
mCloseBroadcastReceiver = new BroadcastReceiver() {
Expand All @@ -135,16 +134,28 @@ public void onReceive(Context context, Intent intent) {
}
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(
mCloseBroadcastReceiver,
new IntentFilter(DESTROY_REDIRECT_RECEIVING_ACTIVITY_ACTION)
);

IntentFilter filter = new IntentFilter(DESTROY_REDIRECT_RECEIVING_ACTIVITY_ACTION);
// Use backward-compatible receiver registration
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// Use RECEIVER_NOT_EXPORTED for Android 13+ to prevent external apps from sending broadcasts
registerReceiver(mCloseBroadcastReceiver, filter, Context.RECEIVER_NOT_EXPORTED); // 0x4 = RECEIVER_NOT_EXPORTED
} else {
registerReceiver(mCloseBroadcastReceiver, filter);
}
}
}

@Override
protected void onDestroy() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(mCloseBroadcastReceiver);
final String methodTag = TAG + ":onDestroy";
if (mCloseBroadcastReceiver != null) {
try {
unregisterReceiver(mCloseBroadcastReceiver);
} catch (final Exception e) {
Logger.error(methodTag, "Failed to unregister receiver: " + e.getMessage(), e);
}
}
super.onDestroy();
}

Expand Down