package fi.otavanopisto.pyramus.views.users; import java.util.logging.Logger; import javax.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils; import fi.internetix.smvc.controllers.PageRequestContext; import fi.otavanopisto.pyramus.framework.PyramusViewController; import fi.otavanopisto.pyramus.framework.UserRole; import fi.otavanopisto.pyramus.plugin.auth.AuthenticationProvider; import fi.otavanopisto.pyramus.plugin.auth.AuthenticationProviderVault; /** * The controller responsible of logging the user out. */ public class LogoutViewController extends PyramusViewController { /** * Processes the page request. Simply invalidates the session of the logged in user * and redirects back to the index page of the application. * * @param requestContext Page request context */ public void process(PageRequestContext requestContext) { HttpSession session = requestContext.getRequest().getSession(true); String redirectUrl = null; String authenticationProviderName = (String) session.getAttribute("authenticationProvider"); if (StringUtils.isNotBlank(authenticationProviderName)) { AuthenticationProvider authenticationProvider = AuthenticationProviderVault.getInstance().getAuthenticationProvider(authenticationProviderName); if (authenticationProvider == null) { Logger.getLogger(getClass().getName()).severe(String.format("Could not find authenticationProvider %s", authenticationProviderName)); } else { redirectUrl = authenticationProvider.logout(requestContext); } } if (StringUtils.isNotBlank(redirectUrl)) { requestContext.setRedirectURL(redirectUrl); } else { if (requestContext.getLoggedUserId() != null) { session.invalidate(); } redirectUrl = requestContext.getString("redirectUrl"); if (StringUtils.isBlank(redirectUrl)) { redirectUrl = requestContext.getRequest().getContextPath() + "/index.page"; } requestContext.setRedirectURL(redirectUrl); } } /** * Returns the roles allowed to access this page. Logging out is available * for all logged in users. * * @return The roles allowed to access this page */ public UserRole[] getAllowedRoles() { return new UserRole[] { UserRole.EVERYONE }; } }