use of org.wso2.carbon.identity.application.authentication.framework.store.LongWaitStatusStoreService 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.store.LongWaitStatusStoreService 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.store.LongWaitStatusStoreService in project carbon-identity-framework by wso2.
the class GraphBasedSequenceHandlerExceptionRetryTest method testExceptionRetry.
public void testExceptionRetry() throws Exception {
JsFunctionRegistryImpl jsFunctionRegistrar = new JsFunctionRegistryImpl();
FrameworkServiceDataHolder.getInstance().setJsFunctionRegistry(jsFunctionRegistrar);
LongWaitStatusDAOImpl daoImpl = new LongWaitStatusDAOImpl();
CacheBackedLongWaitStatusDAO cacheBackedDao = new CacheBackedLongWaitStatusDAO(daoImpl);
FrameworkServiceDataHolder.getInstance().getAuthenticators().add(new FailingMockAuthenticator("FailingMockAuthenticator"));
FrameworkServiceDataHolder.getInstance().setLongWaitStatusStoreService(new LongWaitStatusStoreService(cacheBackedDao, 5000));
jsFunctionRegistrar.register(JsFunctionRegistry.Subsystem.SEQUENCE_HANDLER, "hasAnyOfTheRoles", (BiFunction<JsAuthenticatedUser, List<String>, Boolean>) this::hasAnyOfTheRolesFunction);
ServiceProvider sp1 = getTestServiceProvider("js-sp-exception-retry.xml");
AuthenticationContext context = getAuthenticationContext(sp1);
context.setSessionIdentifier("1234");
SequenceConfig sequenceConfig = configurationLoader.getSequenceConfig(context, Collections.emptyMap(), sp1);
context.setSequenceConfig(sequenceConfig);
HttpServletRequest req = createMockHttpServletRequest();
HttpServletResponse resp = mock(HttpServletResponse.class);
UserCoreUtil.setDomainInThreadLocal("test_domain");
graphBasedSequenceHandler.handle(req, resp, context);
Integer currentAttempts = (Integer) context.getProperties().get(CONTEXT_ATTRIBUTE_NAME_CURRENT_FAIL_TRIES);
Assert.assertNotNull(currentAttempts);
Assert.assertEquals(currentAttempts.intValue(), 2);
}
use of org.wso2.carbon.identity.application.authentication.framework.store.LongWaitStatusStoreService in project identity-conditional-auth-functions by wso2-extensions.
the class HTTPPostFunctionImplTest method initClass.
@BeforeClass
protected void initClass() throws Exception {
super.setUp();
LongWaitStatusDAOImpl daoImpl = new LongWaitStatusDAOImpl();
CacheBackedLongWaitStatusDAO cacheBackedDao = new CacheBackedLongWaitStatusDAO(daoImpl);
int connectionTimeout = 5000;
LongWaitStatusStoreService longWaitStatusStoreService = new LongWaitStatusStoreService(cacheBackedDao, connectionTimeout);
FrameworkServiceDataHolder.getInstance().setLongWaitStatusStoreService(longWaitStatusStoreService);
sequenceHandlerRunner.registerJsFunction("httpPost", new HTTPPostFunctionImpl());
}
use of org.wso2.carbon.identity.application.authentication.framework.store.LongWaitStatusStoreService 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