use of com.okta.idx.sdk.api.exception.ProcessingException in project okta-idx-java by okta.
the class BaseIDXClient method handleErrorResponse.
private void handleErrorResponse(Request request, Response response) throws IOException, ProcessingException {
int httpStatus = response.getHttpStatus();
String errorMsg = "Request to " + request.getResourceUrl() + " failed.";
JsonNode errorResponseJson;
if (response.getHeaders().getContentType() != null && response.getHeaders().getContentType().toString().contains("application/json") || response.getHeaders().getContentType().toString().contains("application/ion+json")) {
errorResponseJson = objectMapper.readTree(response.getBody());
ErrorResponse errorResponseDetails = objectMapper.convertValue(errorResponseJson, ErrorResponse.class);
if (errorResponseDetails.getError() == null && errorResponseDetails.getMessages() == null) {
getErrorsFromRemediationOptions(errorResponseDetails, errorResponseJson);
}
throw new ProcessingException(httpStatus, errorMsg, errorResponseDetails);
} else {
throw new ProcessingException(httpStatus, errorMsg);
}
}
use of com.okta.idx.sdk.api.exception.ProcessingException in project okta-idx-java by okta.
the class BaseIDXClient method introspect.
@Override
public IDXResponse introspect(IDXClientContext idxClientContext) throws ProcessingException {
IDXResponse idxResponse;
IntrospectRequest introspectRequest = new IntrospectRequest(idxClientContext.getInteractionHandle());
try {
Request request = new DefaultRequest(HttpMethod.POST, clientConfiguration.getBaseUrl() + "/idp/idx/introspect", null, getHttpHeaders(false), new ByteArrayInputStream(objectMapper.writeValueAsBytes(introspectRequest)), -1L);
Response response = requestExecutor.executeRequest(request);
if (response.getHttpStatus() != 200) {
handleErrorResponse(request, response);
}
JsonNode responseJsonNode = objectMapper.readTree(response.getBody());
idxResponse = objectMapper.convertValue(responseJsonNode, IDXResponse.class);
} catch (IOException | HttpException e) {
throw new ProcessingException(e);
}
return idxResponse;
}
use of com.okta.idx.sdk.api.exception.ProcessingException in project okta-idx-java by okta.
the class BaseIDXClient method poll.
@Override
public IDXResponse poll(PollRequest pollRequest, String href) throws ProcessingException {
IDXResponse idxResponse;
try {
Request request = new DefaultRequest(HttpMethod.POST, Strings.hasText(href) ? href : clientConfiguration.getBaseUrl() + "/idp/idx/challenge/poll", null, getHttpHeaders(false), new ByteArrayInputStream(objectMapper.writeValueAsBytes(pollRequest)), -1L);
Response response = requestExecutor.executeRequest(request);
if (response.getHttpStatus() != 200) {
handleErrorResponse(request, response);
}
JsonNode responseJsonNode = objectMapper.readTree(response.getBody());
idxResponse = objectMapper.convertValue(responseJsonNode, IDXResponse.class);
} catch (IOException | HttpException e) {
throw new ProcessingException(e);
}
return idxResponse;
}
use of com.okta.idx.sdk.api.exception.ProcessingException in project okta-idx-java by okta.
the class BaseIDXClient method revokeToken.
@Override
public void revokeToken(String tokenType, String token) throws ProcessingException {
StringBuilder urlParameters = new StringBuilder();
urlParameters.append("client_id=").append(clientConfiguration.getClientId());
if (Strings.hasText(clientConfiguration.getClientSecret())) {
urlParameters.append("&client_secret=").append(clientConfiguration.getClientSecret());
}
urlParameters.append("&token_type_hint=").append(tokenType);
urlParameters.append("&token=").append(token);
try {
Request request = new DefaultRequest(HttpMethod.POST, normalizedIssuerUri(clientConfiguration.getIssuer(), "/v1/revoke"), null, getHttpHeaders(true), new ByteArrayInputStream(urlParameters.toString().getBytes(StandardCharsets.UTF_8)), -1L);
requestExecutor.executeRequest(request);
} catch (HttpException e) {
throw new ProcessingException(e);
}
}
use of com.okta.idx.sdk.api.exception.ProcessingException in project okta-idx-java by okta.
the class IDXAuthenticationWrapper method authenticate.
/**
* Authenticate user with the supplied Authentication options (username and password) and
* returns the Authentication response object that contains:
* - IDX Client context
* - Token (access_token/id_token/refresh_token) object
* - Authentication status
* <p>
* Note: This requires 'Password' as the ONLY required factor in app Sign-on policy configuration.
*
* @param authenticationOptions the Authenticator options
* @return the Authentication response
*/
public AuthenticationResponse authenticate(AuthenticationOptions authenticationOptions, ProceedContext proceedContext) {
try {
// Check if identify flow needs to include credentials
boolean isIdentifyInOneStep = proceedContext.isIdentifyInOneStep();
AuthenticationTransaction identifyTransaction = AuthenticationTransaction.proceed(client, proceedContext, () -> {
IdentifyRequest identifyRequest;
if (isIdentifyInOneStep) {
Credentials credentials = new Credentials();
credentials.setPasscode(authenticationOptions.getPassword());
identifyRequest = IdentifyRequestBuilder.builder().withIdentifier(authenticationOptions.getUsername()).withCredentials(credentials).withStateHandle(proceedContext.getStateHandle()).build();
} else {
identifyRequest = IdentifyRequestBuilder.builder().withIdentifier(authenticationOptions.getUsername()).withStateHandle(proceedContext.getStateHandle()).build();
}
// identify user
return client.identify(identifyRequest, proceedContext.getHref());
});
AuthenticationResponse identifyResponse = identifyTransaction.asAuthenticationResponse();
if (isIdentifyInOneStep || identifyResponse.getErrors() != null && !identifyResponse.getErrors().isEmpty()) {
return identifyResponse;
}
AuthenticationTransaction passwordTransaction = selectPasswordAuthenticatorIfNeeded(identifyTransaction);
AuthenticationTransaction answerTransaction = passwordTransaction.proceed(() -> {
// answer password authenticator challenge
Credentials credentials = new Credentials();
credentials.setPasscode(authenticationOptions.getPassword());
// build answer password authenticator challenge request
AnswerChallengeRequest passwordAuthenticatorAnswerChallengeRequest = AnswerChallengeRequestBuilder.builder().withStateHandle(passwordTransaction.getStateHandle()).withCredentials(credentials).build();
return passwordTransaction.getRemediationOption(RemediationType.CHALLENGE_AUTHENTICATOR).proceed(client, passwordAuthenticatorAnswerChallengeRequest);
});
return answerTransaction.asAuthenticationResponse();
} catch (ProcessingException e) {
return handleProcessingException(e);
} catch (IllegalArgumentException e) {
return handleIllegalArgumentException(e);
}
}
Aggregations