package ru.semiot.platform.apigateway.rest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.semiot.commons.restapi.MediaType; import ru.semiot.platform.apigateway.utils.Credentials; import ru.semiot.platform.apigateway.utils.DataBase; import javax.ejb.Stateless; import javax.inject.Inject; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.container.AsyncResponse; import javax.ws.rs.container.Suspended; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; @Path("/user") @Stateless public class UserResource { private static final Logger logger = LoggerFactory.getLogger(UserResource.class); private static final String USER_INFORMATION = "{\"username\": \"${USERNAME}\", \"password\": \"${PASSWORD}\", \"role\": \"${ROLE}\"}"; @Inject private DataBase db; @Context private UriInfo uriInfo; @GET @Produces(MediaType.APPLICATION_JSON) public void getUser(@Context HttpServletRequest req, @Suspended AsyncResponse response) { Credentials credentials = db.getUser(req.getRemoteUser()); if (credentials != null) { String message = USER_INFORMATION .replace("${USERNAME}", credentials.getLogin()) .replace("${PASSWORD}", credentials.getPassword()) .replace("${ROLE}", credentials.getRole()); response.resume(Response.ok(message).build()); } else { response.resume(Response.status(Response.Status.UNAUTHORIZED).build()); } } @GET @Path("/logout") public Response logout(@Context HttpServletRequest req) { try { if (req.getSession(false) != null) { //Invalidates the current session req.getSession(false).invalidate(); } req.logout(); return Response.seeOther(uriInfo.getBaseUriBuilder().replacePath("/").build()) .header(HttpHeaders.CACHE_CONTROL, "no-cache, no-store") .header(HttpHeaders.EXPIRES, new java.util.Date().toString()) .build(); } catch (ServletException e) { logger.error(e.getMessage(), e); return Response.serverError().build(); } } }