Skip to content

Commit

Permalink
Merge branch 'dev' into somalaya/naaTestsWithMSA
Browse files Browse the repository at this point in the history
  • Loading branch information
somalaya authored Jan 17, 2024
2 parents 96b76d3 + 1e7f00e commit ebd335a
Show file tree
Hide file tree
Showing 36 changed files with 543 additions and 202 deletions.
7 changes: 7 additions & 0 deletions changelog
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
MSAL Wiki : https://github.com/AzureAD/microsoft-authentication-library-for-android/wiki

vNext
----------
- [MINOR] Add isQRPinAvailable API to MSAL IPublicClientApplication (#1931)
- [MINOR] Add PreferredAuthMethod to interactive token flow (#1964)

Version 5.0.0
----------
- [MINOR] Update common @17.0.0
- [MINOR] Add consumer rule to remove native auth from msal by default (#1986)
- [MAJOR] Consuming Credential Manager from common (brings minCompileSdk 34) (#1987)

Expand Down
2 changes: 1 addition & 1 deletion common
Submodule common updated 94 files
+9 −3 changelog.txt
+4 −0 common/src/androidTest/java/com/microsoft/identity/common/CommandDispatcherTest.java
+18 −1 common/src/main/java/com/microsoft/identity/common/adal/internal/AuthenticationConstants.java
+6 −0 common/src/main/java/com/microsoft/identity/common/internal/broker/BrokerRequest.java
+1 −0 ...src/main/java/com/microsoft/identity/common/internal/broker/ipc/AbstractIpcStrategyWithServiceValidation.kt
+2 −0 common/src/main/java/com/microsoft/identity/common/internal/broker/ipc/BrokerOperationBundle.java
+50 −0 common/src/main/java/com/microsoft/identity/common/internal/commands/IsQrPinAvailableCommand.kt
+68 −0 common/src/main/java/com/microsoft/identity/common/internal/controllers/BrokerMsalController.java
+20 −0 common/src/main/java/com/microsoft/identity/common/internal/controllers/LocalMSALController.java
+10 −2 common/src/main/java/com/microsoft/identity/common/internal/platform/AndroidPlatformUtil.java
+1 −0 common/src/main/java/com/microsoft/identity/common/internal/request/MsalBrokerRequestAdapter.java
+18 −0 common/src/main/java/com/microsoft/identity/common/internal/result/MsalBrokerResultAdapter.java
+10 −10 .../main/java/com/microsoft/identity/common/nativeauth/internal/commands/SignInWithContinuationTokenCommand.kt
+9 −0 common/src/main/java/com/microsoft/identity/common/nativeauth/internal/controllers/BaseNativeAuthController.kt
+61 −67 common/src/main/java/com/microsoft/identity/common/nativeauth/internal/controllers/NativeAuthMsalController.kt
+11 −11 common/src/main/java/com/microsoft/identity/common/nativeauth/internal/util/CommandUtil.java
+55 −45 ...soft/identity/common/internal/providers/microsoft/nativeauth/integration/ResetPasswordOAuth2StrategyTest.kt
+45 −48 ...om/microsoft/identity/common/internal/providers/microsoft/nativeauth/integration/SignInOAuthStrategyTest.kt
+48 −55 ...m/microsoft/identity/common/internal/providers/microsoft/nativeauth/integration/SignUpOAuth2StrategyTest.kt
+28 −25 ...t/identity/common/internal/providers/microsoft/nativeauth/integration/scenario/ResetPasswordScenarioTest.kt
+14 −14 ...icrosoft/identity/common/internal/providers/microsoft/nativeauth/integration/scenario/SignUpScenarioTest.kt
+41 −45 common/src/test/java/com/microsoft/identity/common/nativeauth/internal/controllers/NativeAuthControllerTest.kt
+0 −45 common/src/test/java/com/microsoft/identity/common/nativeauth/util/ApiConstants.kt
+32 −27 common/src/test/java/com/microsoft/identity/common/nativeauth/util/CommandResultUtilTest.kt
+3 −0 ...on4j/src/main/com/microsoft/identity/common/java/commands/parameters/InteractiveTokenCommandParameters.java
+11 −6 common4j/src/main/com/microsoft/identity/common/java/controllers/BaseController.java
+1 −0 common4j/src/main/com/microsoft/identity/common/java/eststelemetry/PublicApiId.java
+46 −0 common4j/src/main/com/microsoft/identity/common/java/exception/BrokerRequiredException.kt
+2 −2 ...microsoft/identity/common/java/nativeauth/commands/parameters/ResetPasswordResendCodeCommandParameters.java
+2 −2 ...microsoft/identity/common/java/nativeauth/commands/parameters/ResetPasswordSubmitCodeCommandParameters.java
+2 −2 ...ft/identity/common/java/nativeauth/commands/parameters/ResetPasswordSubmitNewPasswordCommandParameters.java
+2 −2 ...in/com/microsoft/identity/common/java/nativeauth/commands/parameters/SignInResendCodeCommandParameters.java
+2 −2 ...in/com/microsoft/identity/common/java/nativeauth/commands/parameters/SignInSubmitCodeCommandParameters.java
+2 −2 ...om/microsoft/identity/common/java/nativeauth/commands/parameters/SignInSubmitPasswordCommandParameters.java
+4 −4 ...osoft/identity/common/java/nativeauth/commands/parameters/SignInWithContinuationTokenCommandParameters.java
+2 −2 ...main/com/microsoft/identity/common/java/nativeauth/commands/parameters/SignUpContinueCommandParameters.java
+2 −2 ...in/com/microsoft/identity/common/java/nativeauth/commands/parameters/SignUpResendCodeCommandParameters.java
+2 −2 ...on4j/src/main/com/microsoft/identity/common/java/nativeauth/controllers/results/INativeAuthCommandResult.kt
+4 −4 ...4j/src/main/com/microsoft/identity/common/java/nativeauth/controllers/results/ResetPasswordCommandResult.kt
+7 −7 common4j/src/main/com/microsoft/identity/common/java/nativeauth/controllers/results/SignInCommandResult.kt
+8 −6 common4j/src/main/com/microsoft/identity/common/java/nativeauth/controllers/results/SignUpCommandResult.kt
+2 −2 common4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/NativeAuthConstants.kt
+2 −2 common4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/NativeAuthOAuth2Configuration.kt
+14 −14 common4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/NativeAuthOAuth2Strategy.kt
+24 −24 common4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/NativeAuthRequestProvider.kt
+19 −32 common4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/NativeAuthResponseHandler.kt
+6 −6 ...n4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/interactors/ResetPasswordInteractor.kt
+8 −8 common4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/interactors/SignInInteractor.kt
+2 −2 common4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/interactors/SignUpInteractor.kt
+5 −5 ...microsoft/identity/common/java/nativeauth/providers/requests/resetpassword/ResetPasswordChallengeRequest.kt
+5 −5 .../microsoft/identity/common/java/nativeauth/providers/requests/resetpassword/ResetPasswordContinueRequest.kt
+5 −5 ...soft/identity/common/java/nativeauth/providers/requests/resetpassword/ResetPasswordPollCompletionRequest.kt
+1 −1 ...com/microsoft/identity/common/java/nativeauth/providers/requests/resetpassword/ResetPasswordStartRequest.kt
+5 −5 ...om/microsoft/identity/common/java/nativeauth/providers/requests/resetpassword/ResetPasswordSubmitRequest.kt
+5 −5 .../src/main/com/microsoft/identity/common/java/nativeauth/providers/requests/signin/SignInChallengeRequest.kt
+14 −15 ...on4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/requests/signin/SignInTokenRequest.kt
+5 −5 .../src/main/com/microsoft/identity/common/java/nativeauth/providers/requests/signup/SignUpChallengeRequest.kt
+4 −4 ...j/src/main/com/microsoft/identity/common/java/nativeauth/providers/requests/signup/SignUpContinueRequest.kt
+1 −1 ...on4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/requests/signup/SignUpStartRequest.kt
+0 −1 common4j/src/main/com/microsoft/identity/common/java/nativeauth/providers/responses/ApiErrorResult.kt
+3 −12 ...soft/identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordChallengeApiResponse.kt
+1 −3 ...rosoft/identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordChallengeApiResult.kt
+21 −13 ...osoft/identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordContinueApiResponse.kt
+3 −4 ...crosoft/identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordContinueApiResult.kt
+23 −14 ...identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordPollCompletionApiResponse.kt
+2 −3 ...t/identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordPollCompletionApiResult.kt
+4 −9 ...icrosoft/identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordStartApiResponse.kt
+1 −3 .../microsoft/identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordStartApiResult.kt
+7 −10 ...crosoft/identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordSubmitApiResponse.kt
+3 −4 ...microsoft/identity/common/java/nativeauth/providers/responses/resetpassword/ResetPasswordSubmitApiResult.kt
+5 −16 ...main/com/microsoft/identity/common/java/nativeauth/providers/responses/signin/SignInChallengeApiResponse.kt
+2 −4 ...c/main/com/microsoft/identity/common/java/nativeauth/providers/responses/signin/SignInChallengeApiResult.kt
+8 −33 .../main/com/microsoft/identity/common/java/nativeauth/providers/responses/signin/SignInInitiateApiResponse.kt
+1 −2 ...rc/main/com/microsoft/identity/common/java/nativeauth/providers/responses/signin/SignInInitiateApiResult.kt
+17 −28 ...src/main/com/microsoft/identity/common/java/nativeauth/providers/responses/signin/SignInTokenApiResponse.kt
+2 −2 ...j/src/main/com/microsoft/identity/common/java/nativeauth/providers/responses/signin/SignInTokenApiResult.kt
+5 −16 ...main/com/microsoft/identity/common/java/nativeauth/providers/responses/signup/SignUpChallengeApiResponse.kt
+2 −8 ...c/main/com/microsoft/identity/common/java/nativeauth/providers/responses/signup/SignUpChallengeApiResult.kt
+47 −42 .../main/com/microsoft/identity/common/java/nativeauth/providers/responses/signup/SignUpContinueApiResponse.kt
+7 −5 ...rc/main/com/microsoft/identity/common/java/nativeauth/providers/responses/signup/SignUpContinueApiResult.kt
+16 −32 ...src/main/com/microsoft/identity/common/java/nativeauth/providers/responses/signup/SignUpStartApiResponse.kt
+5 −12 ...j/src/main/com/microsoft/identity/common/java/nativeauth/providers/responses/signup/SignUpStartApiResult.kt
+4 −8 common4j/src/main/com/microsoft/identity/common/java/nativeauth/util/ApiErrorResponseUtil.kt
+19 −0 common4j/src/main/com/microsoft/identity/common/java/providers/microsoft/MicrosoftAuthorizationRequest.java
+1 −0 common4j/src/main/com/microsoft/identity/common/java/telemetry/TelemetryEventStrings.java
+35 −0 common4j/src/main/com/microsoft/identity/common/java/ui/PreferredAuthMethod.kt
+61 −78 common4j/src/test/com/microsoft/identity/common/java/nativeauth/providers/NativeAuthRequestHandlerTest.kt
+322 −566 common4j/src/test/com/microsoft/identity/common/java/nativeauth/providers/NativeAuthResponseHandlerTest.kt
+16 −0 ...on4j/src/test/com/microsoft/identity/common/java/providers/microsoft/MicrosoftAuthorizationRequestTest.java
+1 −1 common4j/src/testFixtures/java/com/microsoft/identity/common/nativeauth/ApiConstants.kt
+2 −2 common4j/src/testFixtures/java/com/microsoft/identity/common/nativeauth/MockApiResponseType.kt
+1 −1 common4j/versioning/version.properties
+1 −0 testutils/src/main/java/com/microsoft/identity/internal/testutils/TestConstants.java
+1 −1 versioning/version.properties
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@

import android.app.Activity;

import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.microsoft.identity.common.java.ui.PreferredAuthMethod;

import java.util.List;
import java.util.Map;

Expand All @@ -43,11 +46,14 @@ public class AcquireTokenParameters extends TokenParameters {
private List<Map.Entry<String, String>> mExtraQueryStringParameters;
private AuthenticationCallback mCallback;

private PreferredAuthMethod mPreferredAuthMethod;

public AcquireTokenParameters(AcquireTokenParameters.Builder builder) {
super(builder);
mActivity = builder.mActivity;
mFragment = builder.mFragment;
mLoginHint = builder.mLoginHint;
mPreferredAuthMethod = builder.mPreferredAuthMethod;
mPrompt = builder.mPrompt;
mExtraScopesToConsent = builder.mExtraScopesToConsent;
mExtraQueryStringParameters = builder.mExtraQueryStringParameters;
Expand Down Expand Up @@ -86,6 +92,15 @@ void setLoginHint(String loginHint) {
this.mLoginHint = loginHint;
}

/**
* Gets the preferred authentication method sent along with the authorization request.
* @return The preferred authentication method or null if not set.
*/
@Nullable
public PreferredAuthMethod getPreferredAuthMethod() {
return mPreferredAuthMethod;
}

/**
* Controls the value of the prompt parameter sent along with the authorization request.
*
Expand Down Expand Up @@ -137,6 +152,8 @@ public static class Builder extends TokenParameters.Builder<AcquireTokenParamete
private Activity mActivity;
private Fragment mFragment;
private String mLoginHint;

private PreferredAuthMethod mPreferredAuthMethod;
private Prompt mPrompt;
private List<String> mExtraScopesToConsent;
private List<Map.Entry<String, String>> mExtraQueryStringParameters;
Expand All @@ -157,6 +174,12 @@ public AcquireTokenParameters.Builder withLoginHint(String loginHint) {
return self();
}

@Nullable
public AcquireTokenParameters.Builder withPreferredAuthMethod(final PreferredAuthMethod preferredAuthMethod) {
mPreferredAuthMethod = preferredAuthMethod;
return self();
}

public AcquireTokenParameters.Builder withPrompt(Prompt prompt) {
mPrompt = prompt;
return self();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

import com.microsoft.identity.client.claims.ClaimsRequest;
import com.microsoft.identity.client.exception.MsalException;
import com.microsoft.identity.common.java.exception.BaseException;
import com.microsoft.identity.common.java.util.TaskCompletedCallbackWithError;

import java.util.Date;
Expand Down Expand Up @@ -144,6 +145,14 @@ void acquireToken(@NonNull final Activity activity,
*/
boolean isSharedDevice();

/**
* Returns whether the application can support the QR code scanning + PIN protocol.
*
* @return true if the device supports the QR code scanning + PIN protocol, false otherwise.
* @throws BaseException if the broker is required but not installed.
*/
boolean isQRPinAvailable() throws BaseException;

/**
* Signs the provided {@link PoPAuthenticationScheme} parameters into a JWT on behalf of the
* provided {@link IAccount}.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
import com.microsoft.identity.common.internal.cache.SharedPreferencesFileManager;
import com.microsoft.identity.common.internal.commands.GenerateShrCommand;
import com.microsoft.identity.common.internal.commands.GetDeviceModeCommand;
import com.microsoft.identity.common.internal.commands.IsQrPinAvailableCommand;
import com.microsoft.identity.common.internal.controllers.LocalMSALController;
import com.microsoft.identity.common.internal.migration.AdalMigrationAdapter;
import com.microsoft.identity.common.internal.migration.TokenMigrationCallback;
Expand All @@ -105,21 +106,25 @@
import com.microsoft.identity.common.java.commands.CommandCallback;
import com.microsoft.identity.common.java.commands.DeviceCodeFlowCommand;
import com.microsoft.identity.common.java.commands.DeviceCodeFlowCommandCallback;
import com.microsoft.identity.common.java.commands.ICommandResult;
import com.microsoft.identity.common.java.commands.InteractiveTokenCommand;
import com.microsoft.identity.common.java.commands.SilentTokenCommand;
import com.microsoft.identity.common.java.commands.parameters.CommandParameters;
import com.microsoft.identity.common.java.commands.parameters.DeviceCodeFlowCommandParameters;
import com.microsoft.identity.common.java.commands.parameters.GenerateShrCommandParameters;
import com.microsoft.identity.common.java.commands.parameters.InteractiveTokenCommandParameters;
import com.microsoft.identity.common.java.commands.parameters.SilentTokenCommandParameters;
import com.microsoft.identity.common.java.controllers.BaseController;
import com.microsoft.identity.common.java.controllers.CommandDispatcher;
import com.microsoft.identity.common.java.controllers.CommandResult;
import com.microsoft.identity.common.java.controllers.ExceptionAdapter;
import com.microsoft.identity.common.java.dto.AccountRecord;
import com.microsoft.identity.common.java.eststelemetry.PublicApiId;
import com.microsoft.identity.common.java.exception.BaseException;
import com.microsoft.identity.common.java.exception.ClientException;
import com.microsoft.identity.common.java.exception.ErrorStrings;
import com.microsoft.identity.common.java.exception.ServiceException;
import com.microsoft.identity.common.java.exception.UserCancelException;
import com.microsoft.identity.common.java.opentelemetry.AttributeName;
import com.microsoft.identity.common.java.opentelemetry.OTelUtility;
import com.microsoft.identity.common.java.opentelemetry.OtelContextExtension;
Expand All @@ -129,6 +134,7 @@
import com.microsoft.identity.common.java.providers.microsoft.MicrosoftRefreshToken;
import com.microsoft.identity.common.java.providers.microsoft.azureactivedirectory.AzureActiveDirectory;
import com.microsoft.identity.common.java.providers.oauth2.OAuth2TokenCache;
import com.microsoft.identity.common.java.result.FinalizableResultFuture;
import com.microsoft.identity.common.java.result.GenerateShrResult;
import com.microsoft.identity.common.java.result.ILocalAuthenticationResult;
import com.microsoft.identity.common.java.result.LocalAuthenticationResult;
Expand Down Expand Up @@ -1463,6 +1469,68 @@ public boolean isSharedDevice() {
return mPublicClientConfiguration.getIsSharedDevice();
}

/**
* Returns whether the application supports the QR code scanning + PIN protocol.
*
* @return true if the device supports the QR code scanning + PIN protocol, false otherwise.
*/
@Override
public boolean isQRPinAvailable() throws BaseException {
final String methodTag = TAG + ":isQRPinAvailable";

final CommandParameters params = CommandParametersAdapter.createCommandParameters(
mPublicClientConfiguration,
mPublicClientConfiguration.getOAuth2TokenCache()
);

final BaseController controller = new MSALControllerFactory(mPublicClientConfiguration)
.getDefaultController(CommandParametersAdapter.getRequestAuthority(mPublicClientConfiguration));

final IsQrPinAvailableCommand command = new IsQrPinAvailableCommand(
params,
controller,
new CommandCallback<Boolean, BaseException>() {
@Override
public void onError(BaseException error) {
Logger.error(methodTag, "Unexpected error on isQRPinAvailable", error);
}
@Override
public void onTaskCompleted(Boolean isQrPinAvailable) {
Logger.info(methodTag, "is QR + PIN available? " + isQrPinAvailable );
}
@Override
public void onCancel() {
// Should not be reached.
}
},
PublicApiId.PCA_IS_QR_PIN_AVAILABLE
);

final ResultFuture<CommandResult> future = CommandDispatcher.submitSilentReturningFuture(command);

try {
final CommandResult commandResult = future.get();
switch (commandResult.getStatus()) {
case COMPLETED:
Logger.info(methodTag, "is QR + PIN available? " + commandResult.getResult());
return (Boolean) commandResult.getResult();
case ERROR:
final BaseException exception = (BaseException) commandResult.getResult();
Logger.error(methodTag, "Unexpected error on isQRPinAvailable", exception);
throw exception;
case CANCEL:
Logger.warn(methodTag, "isQRPinAvailable was cancelled");
return false;
default:
Logger.warn(methodTag, "Unexpected status on isQRPinAvailable: " + commandResult.getStatus());
return false;
}
} catch (final InterruptedException | ExecutionException e) {
Logger.error(methodTag, "Unexpected error on isQRPinAvailable", e);
return false;
}
}

@Override
public String generateSignedHttpRequest(@NonNull final IAccount account,
@NonNull final PoPAuthenticationScheme popParameters) throws MsalException {
Expand Down
Loading

0 comments on commit ebd335a

Please sign in to comment.