use of com.okta.oidc.AuthenticationResultHandler.StateResult in project okta-oidc-android by okta.
the class AuthenticationResultHandlerTest method setAuthenticationListener.
@Test
public void setAuthenticationListener() throws InterruptedException {
AuthenticationResultHandler.handler().mCachedResult = StateResult.canceled();
AuthenticationResultHandler.handler().mCachedResultType = ResultType.SIGN_IN;
final StateResult[] resultFromListener = new StateResult[1];
final ResultType[] typeFromListener = new ResultType[1];
CountDownLatch latch = new CountDownLatch(1);
AuthResultListener listener = (result, type) -> {
resultFromListener[0] = result;
typeFromListener[0] = type;
latch.countDown();
};
AuthenticationResultHandler.handler().setAuthenticationListener(listener);
latch.await();
assertEquals(resultFromListener[0].getStatus(), CANCELED);
assertEquals(typeFromListener[0], ResultType.SIGN_IN);
assertNull(AuthenticationResultHandler.handler().mCachedResult);
assertNull(AuthenticationResultHandler.handler().mCachedResultType);
}
use of com.okta.oidc.AuthenticationResultHandler.StateResult in project okta-oidc-android by okta.
the class AuthenticationResultHandlerTest method onActivityResultSignOutFailed.
@Test
public void onActivityResultSignOutFailed() throws InterruptedException {
Intent intent = new Intent();
intent.setData(Uri.parse("com.okta.test:/authorize?error=" + TestValues.ERROR));
CountDownLatch latch = new CountDownLatch(1);
final StateResult[] stateResult = new StateResult[1];
final ResultType[] stateType = new ResultType[1];
AuthenticationResultHandler.handler().setAuthenticationListener((result, type) -> {
stateResult[0] = result;
stateType[0] = type;
latch.countDown();
});
AuthenticationResultHandler.handler().onActivityResult(REQUEST_CODE_SIGN_OUT, RESULT_OK, intent);
latch.await();
assertNotNull(stateResult[0]);
assertEquals(stateResult[0].getStatus(), Status.ERROR);
assertEquals(stateResult[0].getException().error, TestValues.ERROR);
assertEquals(stateType[0], ResultType.SIGN_OUT);
assertNull(AuthenticationResultHandler.handler().mCachedResult);
assertNull(AuthenticationResultHandler.handler().mCachedResultType);
}
use of com.okta.oidc.AuthenticationResultHandler.StateResult in project okta-oidc-android by okta.
the class SyncWebAuthClientImpl method signOutOfOkta.
@Override
@AnyThread
public Result signOutOfOkta(@NonNull final Activity activity) {
try {
mOktaState.setCurrentState(State.SIGN_OUT_REQUEST);
WebRequest request;
request = new LogoutRequest.Builder().provideConfiguration(mOktaState.getProviderConfiguration()).config(mOidcConfig).tokenResponse(mOktaState.getTokenResponse()).state(CodeVerifierUtil.generateRandomState()).create();
mOktaState.save(request);
StateResult logoutResult = startSignOut(activity, request);
return processSignOutResult(logoutResult);
} catch (InterruptedException e) {
return Result.cancel();
} catch (OktaRepository.EncryptionException e) {
return Result.error(EncryptionErrors.byEncryptionException(e));
} catch (AuthorizationException e) {
return Result.error(e);
} catch (NullPointerException e) {
return Result.error(new AuthorizationException(e.getMessage(), e));
} finally {
resetCurrentState();
}
}
use of com.okta.oidc.AuthenticationResultHandler.StateResult in project okta-oidc-android by okta.
the class SyncWebAuthClientImpl method signIn.
@Override
@WorkerThread
public Result signIn(@NonNull final Activity activity, @Nullable AuthenticationPayload payload) {
mCancel.set(false);
try {
if (!isRedirectUrisRegistered(mOidcConfig.getRedirectUri(), activity)) {
String errorDescription = "No uri registered to handle redirect " + "or multiple applications registered";
Log.e(TAG, errorDescription);
throw new AuthorizationException(TYPE_OAUTH_REGISTRATION_ERROR, INVALID_REDIRECT_URI.code, INVALID_REDIRECT_URI.error, errorDescription, null, null);
}
ProviderConfiguration configuration = obtainNewConfiguration();
checkIfCanceled();
WebRequest request = new AuthorizeRequest.Builder().config(mOidcConfig).providerConfiguration(configuration).authenticationPayload(payload).create();
mOktaState.save(request);
mOktaState.setCurrentState(State.SIGN_IN_REQUEST);
StateResult authResult = startSignIn(activity, request);
return processSignInResult(authResult);
} catch (AuthorizationException e) {
return Result.error(e);
} catch (IOException | InterruptedException e) {
return Result.cancel();
} catch (OktaRepository.EncryptionException e) {
return Result.error(EncryptionErrors.byEncryptionException(e));
} finally {
resetCurrentState();
}
}
use of com.okta.oidc.AuthenticationResultHandler.StateResult in project okta-oidc-android by okta.
the class SyncWebAuthClientImpl method startSignIn.
private StateResult startSignIn(Activity activity, WebRequest request) throws InterruptedException {
AtomicReference<StateResult> resultWrapper = new AtomicReference<>();
CountDownLatch latch = new CountDownLatch(1);
if (activity instanceof FragmentActivity) {
if (!((FragmentActivity) activity).getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) {
resetCurrentState();
return StateResult.canceled();
}
activity.runOnUiThread(() -> addLoginFragment(request, mCustomTabOptions, (FragmentActivity) activity, mSupportedBrowsers));
} else {
Intent intent = createAuthIntent(activity, request.toUri(), mCustomTabOptions, mSupportedBrowsers);
activity.startActivityForResult(intent, REQUEST_CODE_SIGN_IN);
}
mHandler.setAuthenticationListener((result, type) -> {
resultWrapper.set(result);
latch.countDown();
});
latch.await();
return resultWrapper.get();
}
Aggregations