package org.ovirt.engine.core.services; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.aaa.SsoOAuthServiceUtils; import org.ovirt.engine.core.utils.serialization.json.JsonObjectSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SsoLogoutServlet extends HttpServlet { private static final long serialVersionUID = 9210030009170727847L; private static final Logger log = LoggerFactory.getLogger(SsoLogoutServlet.class); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { log.debug("Entered SsoLogoutServlet"); String token = request.getParameter("token"); String scope = request.getParameter("scope"); Map<String, Object> revokeResponse = SsoOAuthServiceUtils.revoke(token, scope); String error = (String) revokeResponse.get("error"); if (StringUtils.isNotEmpty(error)) { log.error("Unable to logout user: {}", error); } try (OutputStream os = response.getOutputStream()) { String jsonPayload = new JsonObjectSerializer().serialize(revokeResponse); response.setContentType("application/json"); byte[] jsonPayloadBytes = jsonPayload.getBytes(StandardCharsets.UTF_8.name()); response.setContentLength(jsonPayloadBytes.length); os.write(jsonPayloadBytes); log.trace("Sending json data {}", jsonPayload); } log.debug("Exiting SsoLogoutServlet"); } }