package net.unicon.cas.addons.info; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import net.unicon.cas.addons.ticket.BulkRetrievalOfTicketsNotSupportedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.Collection; import java.util.HashMap; import java.util.Map; /** * RESTful HTTP resource to expose <code>SingleSignOnSessionsReport</code> as <i>application/json</i> media type. * * @author Dmitriy Kopylenko * @author Unicon, inc. * @since 1.0.3 */ @Component @Path("/") public class SingleSignOnSessionsReportResource { private final SingleSignOnSessionsReport singleSignOnSessionsReport; private final ObjectMapper jsonMapper = new ObjectMapper(); private static final String ROOT_REPORT_ACTIVE_SESSIONS_KEY = "activeSsoSessions"; private static final String ROOT_REPORT_NA_KEY = "notAvailable"; private static final Logger logger = LoggerFactory.getLogger(SingleSignOnSessionsReportResource.class); @Autowired public SingleSignOnSessionsReportResource(SingleSignOnSessionsReport singleSignOnSessionsReport) { this.singleSignOnSessionsReport = singleSignOnSessionsReport; //Configure mapper strategies this.jsonMapper.enable(SerializationFeature.INDENT_OUTPUT); this.jsonMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); } @GET @Produces(MediaType.APPLICATION_JSON) public Response showActiveSsoSessions() { Map<String, Object> sessionsMap = new HashMap<String, Object>(1); Collection<Map<String, Object>> activeSessions = null; String jsonRepresentation = null; try { activeSessions = this.singleSignOnSessionsReport.getActiveSsoSessions(); sessionsMap.put(ROOT_REPORT_ACTIVE_SESSIONS_KEY, activeSessions); } catch (BulkRetrievalOfTicketsNotSupportedException e) { logger.warn(e.getMessage(), e.getCause()); sessionsMap.put(ROOT_REPORT_NA_KEY, e.getMessage()); } try { jsonRepresentation = this.jsonMapper.writeValueAsString(sessionsMap); } catch (JsonProcessingException e) { logger.error("An exception has been caught during an attempt to serialize <active sso sessions report>", e); //HTTP 500 return Response.serverError().build(); } //HTTP 200 return Response.ok(jsonRepresentation).build(); } }