use of org.wso2.carbon.identity.application.authentication.framework.model.LongWaitStatus in project carbon-identity-framework by wso2.
the class CacheBackedLongWaitStatusDAO method getWaitStatus.
public LongWaitStatus getWaitStatus(String waitKey) throws FrameworkException {
LongWaitStatus status = null;
LongWaitResultCacheEntry valueFromCache = LongWaitResultCache.getInstance().getValueFromCache(new LongWaitResultCacheKey(waitKey));
if (valueFromCache != null) {
status = valueFromCache.getWaitStatus();
}
if (status == null) {
status = waitStatusDAO.getWaitStatus(waitKey);
LongWaitResultCacheKey cacheKey = new LongWaitResultCacheKey(waitKey);
LongWaitResultCacheEntry cacheEntry = new LongWaitResultCacheEntry(status);
LongWaitResultCache.getInstance().addToCache(cacheKey, cacheEntry);
}
return status;
}
use of org.wso2.carbon.identity.application.authentication.framework.model.LongWaitStatus in project carbon-identity-framework by wso2.
the class LongWaitStatusDAOImpl method getWaitStatus.
public LongWaitStatus getWaitStatus(String waitKey) throws FrameworkException {
String query = "SELECT WAIT_STATUS FROM IDN_AUTH_WAIT_STATUS WHERE LONG_WAIT_KEY=?";
LongWaitStatus longWaitStatus = new LongWaitStatus();
try (Connection connection = IdentityDatabaseUtil.getSessionDBConnection(false)) {
try (PreparedStatement addPrepStmt = connection.prepareStatement(query)) {
addPrepStmt.setString(1, waitKey);
try (ResultSet resultSet = addPrepStmt.executeQuery()) {
if (resultSet.next()) {
String waitStatus = resultSet.getString("WAIT_STATUS");
if (log.isDebugEnabled()) {
log.debug("Searched for wait status for wait key: " + waitKey + ". Result: " + ("1".equals(waitStatus) ? "WAITING" : "COMPLETED"));
}
if (waitStatus.equals("1")) {
longWaitStatus.setStatus(LongWaitStatus.Status.WAITING);
} else {
longWaitStatus.setStatus(LongWaitStatus.Status.COMPLETED);
}
} else {
longWaitStatus.setStatus(LongWaitStatus.Status.UNKNOWN);
if (log.isDebugEnabled()) {
log.debug("Searched for wait status for wait key: " + waitKey + ". Result: UNKNOWN");
}
}
}
} catch (SQLException e) {
throw new FrameworkException("Error while searching for wait status with key:" + waitKey, e);
}
} catch (SQLException e) {
throw new FrameworkException("Error while searching for wait status with key:" + waitKey, e);
}
if (longWaitStatus.getStatus() == null) {
longWaitStatus.setStatus(LongWaitStatus.Status.UNKNOWN);
}
return longWaitStatus;
}
use of org.wso2.carbon.identity.application.authentication.framework.model.LongWaitStatus in project carbon-identity-framework by wso2.
the class FrameworkServiceComponent method activate.
@SuppressWarnings("unchecked")
@Activate
protected void activate(ComponentContext ctxt) {
FrameworkServiceDataHolder dataHolder = FrameworkServiceDataHolder.getInstance();
dataHolder.setJsFunctionRegistry(new JsFunctionRegistryImpl());
BundleContext bundleContext = ctxt.getBundleContext();
bundleContext.registerService(JsFunctionRegistry.class, dataHolder.getJsFunctionRegistry(), null);
bundleContext.registerService(UserSessionManagementService.class.getName(), new UserSessionManagementServiceImpl(), null);
bundleContext.registerService(HttpIdentityRequestFactory.class.getName(), new SessionExtenderRequestFactory(), null);
bundleContext.registerService(HttpIdentityResponseFactory.class.getName(), new SessionExtenderResponseFactory(), null);
bundleContext.registerService(IdentityProcessor.class.getName(), new SessionExtenderProcessor(), null);
ServerSessionManagementService serverSessionManagementService = new ServerSessionManagementServiceImpl();
bundleContext.registerService(ServerSessionManagementService.class.getName(), serverSessionManagementService, null);
dataHolder.setServerSessionManagementService(serverSessionManagementService);
setAdaptiveAuthExecutionSupervisor();
boolean tenantDropdownEnabled = ConfigurationFacade.getInstance().getTenantDropdownEnabled();
if (tenantDropdownEnabled) {
// Register the tenant management listener for tracking changes to tenants
bundleContext.registerService(TenantMgtListener.class.getName(), new AuthenticationEndpointTenantActivityListener(), null);
if (log.isDebugEnabled()) {
log.debug("AuthenticationEndpointTenantActivityListener is registered. Tenant Domains Dropdown is " + "enabled.");
}
}
AuthenticationMethodNameTranslatorImpl authenticationMethodNameTranslator = new AuthenticationMethodNameTranslatorImpl();
authenticationMethodNameTranslator.initializeConfigsWithServerConfig();
bundleContext.registerService(AuthenticationMethodNameTranslator.class, authenticationMethodNameTranslator, null);
dataHolder.setAuthenticationMethodNameTranslator(authenticationMethodNameTranslator);
// Register Common servlet
Servlet commonAuthServlet = new ContextPathServletAdaptor(new CommonAuthenticationServlet(), COMMON_SERVLET_URL);
Servlet identityServlet = new ContextPathServletAdaptor(new IdentityServlet(), IDENTITY_SERVLET_URL);
Servlet loginContextServlet = new ContextPathServletAdaptor(new LoginContextServlet(), LOGIN_CONTEXT_SERVLET_URL);
try {
httpService.registerServlet(COMMON_SERVLET_URL, commonAuthServlet, null, null);
httpService.registerServlet(IDENTITY_SERVLET_URL, identityServlet, null, null);
httpService.registerServlet(LOGIN_CONTEXT_SERVLET_URL, loginContextServlet, null, null);
} catch (Exception e) {
String errMsg = "Error when registering servlets via the HttpService.";
log.error(errMsg, e);
throw new RuntimeException(errMsg, e);
}
if (promptOnLongWait()) {
Servlet longWaitStatusServlet = new ContextPathServletAdaptor(new LongWaitStatusServlet(), LONGWAITSTATUS_SERVLET_URL);
try {
httpService.registerServlet(LONGWAITSTATUS_SERVLET_URL, longWaitStatusServlet, null, null);
} catch (Exception e) {
String errMsg = "Error when registering longwaitstatus servlet via the HttpService.";
log.error(errMsg, e);
throw new RuntimeException(errMsg, e);
}
}
dataHolder.setBundleContext(bundleContext);
dataHolder.getHttpIdentityRequestFactories().add(new HttpIdentityRequestFactory());
dataHolder.getHttpIdentityResponseFactories().add(new FrameworkLoginResponseFactory());
dataHolder.getHttpIdentityResponseFactories().add(new FrameworkLogoutResponseFactory());
JsGraphBuilderFactory jsGraphBuilderFactory = new JsGraphBuilderFactory();
jsGraphBuilderFactory.init();
UIBasedConfigurationLoader uiBasedConfigurationLoader = new UIBasedConfigurationLoader();
dataHolder.setSequenceLoader(uiBasedConfigurationLoader);
dataHolder.setJsGraphBuilderFactory(jsGraphBuilderFactory);
PostAuthenticationMgtService postAuthenticationMgtService = new PostAuthenticationMgtService();
bundleContext.registerService(PostAuthenticationMgtService.class.getName(), postAuthenticationMgtService, null);
dataHolder.setPostAuthenticationMgtService(postAuthenticationMgtService);
// Registering missing mandatory claim handler as a post authn handler
PostAuthenticationHandler postAuthnMissingClaimHandler = new PostAuthnMissingClaimHandler();
bundleContext.registerService(PostAuthenticationHandler.class.getName(), postAuthnMissingClaimHandler, null);
SSOConsentService ssoConsentService = new SSOConsentServiceImpl();
bundleContext.registerService(SSOConsentService.class.getName(), ssoConsentService, null);
dataHolder.setSSOConsentService(ssoConsentService);
bundleContext.registerService(PostAuthenticationHandler.class.getName(), consentMgtPostAuthnHandler, null);
JITProvisioningIdentityProviderMgtListener jitProvisioningIDPMgtListener = new JITProvisioningIdentityProviderMgtListener();
bundleContext.registerService(IdentityProviderMgtListener.class.getName(), jitProvisioningIDPMgtListener, null);
bundleContext.registerService(ClaimFilter.class.getName(), new DefaultClaimFilter(), null);
// this is done to load SessionDataStore class and start the cleanup tasks.
SessionDataStore.getInstance();
AsyncSequenceExecutor asyncSequenceExecutor = new AsyncSequenceExecutor();
asyncSequenceExecutor.init();
dataHolder.setAsyncSequenceExecutor(asyncSequenceExecutor);
LongWaitStatusDAOImpl daoImpl = new LongWaitStatusDAOImpl();
CacheBackedLongWaitStatusDAO cacheBackedDao = new CacheBackedLongWaitStatusDAO(daoImpl);
String connectionTimeoutString = IdentityUtil.getProperty("AdaptiveAuth.HTTPConnectionTimeout");
int connectionTimeout = 5000;
if (connectionTimeoutString != null) {
try {
connectionTimeout = Integer.parseInt(connectionTimeoutString);
} catch (NumberFormatException e) {
log.error("Error while parsing connection timeout : " + connectionTimeoutString, e);
}
}
LongWaitStatusStoreService longWaitStatusStoreService = new LongWaitStatusStoreService(cacheBackedDao, connectionTimeout);
dataHolder.setLongWaitStatusStoreService(longWaitStatusStoreService);
// Registering JIT, association and domain handler as post authentication handler
PostAuthenticationHandler postJITProvisioningHandler = JITProvisioningPostAuthenticationHandler.getInstance();
bundleContext.registerService(PostAuthenticationHandler.class.getName(), postJITProvisioningHandler, null);
PostAuthenticationHandler postAuthAssociationHandler = PostAuthAssociationHandler.getInstance();
bundleContext.registerService(PostAuthenticationHandler.class.getName(), postAuthAssociationHandler, null);
PostAuthenticationHandler postAuthenticatedUserDomainHandler = PostAuthenticatedSubjectIdentifierHandler.getInstance();
bundleContext.registerService(PostAuthenticationHandler.class.getName(), postAuthenticatedUserDomainHandler, null);
if (log.isDebugEnabled()) {
log.debug("Application Authentication Framework bundle is activated");
}
/**
* Load and reade the require.js file in resources.
*/
this.loadCodeForRequire();
// Set user session mapping enabled.
FrameworkServiceDataHolder.getInstance().setUserSessionMappingEnabled(FrameworkUtils.isUserSessionMappingEnabled());
if (FrameworkServiceDataHolder.getInstance().getSessionSerializer() == null) {
FrameworkServiceDataHolder.getInstance().setSessionSerializer(new JavaSessionSerializer());
}
bundleContext.registerService(ApplicationAuthenticationService.class.getName(), new ApplicationAuthenticationService(), null);
// Note : DO NOT add any activation related code below this point,
// to make sure the server doesn't start up if any activation failures
}
use of org.wso2.carbon.identity.application.authentication.framework.model.LongWaitStatus in project carbon-identity-framework by wso2.
the class LongWaitStatusServlet method doPost.
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (FrameworkUtils.getMaxInactiveInterval() == 0) {
FrameworkUtils.setMaxInactiveInterval(request.getSession().getMaxInactiveInterval());
}
String id = request.getParameter(PROP_WAITING_ID);
if (id == null) {
if (request.getContentType() != null && request.getContentType().startsWith(FrameworkConstants.ContentTypes.TYPE_APPLICATION_JSON)) {
Gson gson = new Gson();
LongWaitStatusRequest longWaitStatusRequest = gson.fromJson(request.getReader(), LongWaitStatusRequest.class);
id = longWaitStatusRequest.getWaitId();
}
}
LongWaitStatusResponse longWaitResponse = new LongWaitStatusResponse();
longWaitResponse.setWaitId(id);
if (id == null) {
longWaitResponse.setStatus(LongWaitStatus.Status.UNKNOWN.name());
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
} else {
LongWaitStatusStoreService longWaitStatusStoreService = FrameworkServiceDataHolder.getInstance().getLongWaitStatusStoreService();
if (longWaitStatusStoreService == null) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} else {
LongWaitStatus longWaitStatus = null;
try {
longWaitStatus = longWaitStatusStoreService.getWait(id);
} catch (FrameworkException e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
if (longWaitStatus == null) {
longWaitResponse.setStatus(LongWaitStatus.Status.COMPLETED.name());
} else {
if (longWaitStatus.getStatus() != null) {
if (longWaitStatus.getStatus() == LongWaitStatus.Status.UNKNOWN) {
longWaitResponse.setStatus(LongWaitStatus.Status.COMPLETED.name());
} else {
longWaitResponse.setStatus(longWaitStatus.getStatus().name());
}
} else {
longWaitResponse.setStatus(LongWaitStatus.Status.COMPLETED.name());
}
}
}
}
response.setContentType(FrameworkConstants.ContentTypes.TYPE_APPLICATION_JSON);
String json = new Gson().toJson(longWaitResponse);
try (PrintWriter out = response.getWriter()) {
out.print(json);
out.flush();
}
}
use of org.wso2.carbon.identity.application.authentication.framework.model.LongWaitStatus in project carbon-identity-framework by wso2.
the class GraphBasedSequenceHandler method handleLongWait.
private boolean handleLongWait(HttpServletRequest request, HttpServletResponse response, AuthenticationContext context, SequenceConfig sequenceConfig, LongWaitNode longWaitNode) throws FrameworkException {
boolean isWaiting;
LongWaitStatusStoreService longWaitStatusStoreService = FrameworkServiceDataHolder.getInstance().getLongWaitStatusStoreService();
LongWaitStatus longWaitStatus = longWaitStatusStoreService.getWait(context.getContextIdentifier());
if (longWaitStatus == null || longWaitStatus.getStatus() == LongWaitStatus.Status.UNKNOWN) {
// This is a initiation of long wait
longWaitStatus = new LongWaitStatus();
int tenantId = IdentityTenantUtil.getTenantId(context.getTenantDomain());
longWaitStatusStoreService.addWait(tenantId, context.getContextIdentifier(), longWaitStatus);
isWaiting = callExternalSystem(request, response, context, sequenceConfig, longWaitNode);
if (promptOnLongWait()) {
if (isWaiting) {
displayLongWait(context, request, response);
}
}
} else {
context.setReturning(false);
// This is a continuation of long wait
isWaiting = LongWaitStatus.Status.COMPLETED != longWaitStatus.getStatus();
longWaitStatusStoreService.removeWait(context.getContextIdentifier());
String outcomeName = (String) context.getProperty(FrameworkConstants.JSAttributes.JS_CALL_AND_WAIT_STATUS);
Map<String, Object> data = (Map<String, Object>) context.getProperty(FrameworkConstants.JSAttributes.JS_CALL_AND_WAIT_DATA);
context.removeProperty(FrameworkConstants.JSAttributes.JS_CALL_AND_WAIT_STATUS);
context.removeProperty(FrameworkConstants.JSAttributes.JS_CALL_AND_WAIT_DATA);
AuthGraphNode nextNode;
if (outcomeName != null) {
executeFunction(outcomeName, longWaitNode, context, data);
nextNode = longWaitNode.getDefaultEdge();
if (nextNode == null) {
log.error("Authentication script does not have applicable event handler for outcome " + outcomeName + " from the long wait process : " + context.getContextIdentifier() + ". So ending the authentication flow. Add the correspoding event handler to the script");
nextNode = new FailNode();
}
} else {
log.error("The outcome from the long wait process " + context.getContextIdentifier() + " is null. Because asyncReturn.accept() has not been used properly in the async process flow" + " of the custom function. So ending the authentication flow. Check the flow in the async" + " process flow of the custom function and add asyncReturn.accept() with the corresponding" + " outcome.");
nextNode = new FailNode();
}
context.setProperty(FrameworkConstants.JSAttributes.PROP_CURRENT_NODE, nextNode);
}
return isWaiting;
}
Aggregations