package org.ovirt.engine.core.services; import java.io.IOException; import java.net.HttpURLConnection; import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.ovirt.engine.core.bll.interfaces.BackendInternal; import org.ovirt.engine.core.common.action.TerminateSessionsForTokenParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SsoCallbackServlet extends HttpServlet { private static final long serialVersionUID = 6329289042799650200L; private static Logger log = LoggerFactory.getLogger(SsoCallbackServlet.class); @Inject private BackendInternal backend; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { log.debug("Calling SsoCallbackServlet with queryString '{}'", request.getQueryString()); String event = request.getParameter("event"); String accessToken = request.getParameter("token"); switch(event) { case "logout": handleLogout(accessToken, response); break; default: response.setStatus(HttpURLConnection.HTTP_INTERNAL_ERROR); log.error("Unsupported event '{}'", event); break; } } private void handleLogout(String accessToken, HttpServletResponse response) { VdcReturnValueBase returnValue = backend.runInternalAction(VdcActionType.TerminateSessionsForToken, new TerminateSessionsForTokenParameters(accessToken)); if (returnValue.getSucceeded()) { response.setStatus(HttpURLConnection.HTTP_OK); log.debug("Invalidate Sessions for access token '{}' succeeded", accessToken); } else { response.setStatus(HttpURLConnection.HTTP_INTERNAL_ERROR); log.debug("Invalidate Sessions for access token '{}' failed", accessToken); } } }