package fi.otavanopisto.muikku.plugins.websocket; import java.util.Date; import java.util.UUID; import javax.ejb.Stateful; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.plugin.PluginRESTService; import fi.otavanopisto.muikku.plugins.websocket.WebSocketTicket; import fi.otavanopisto.muikku.rest.RESTPermitUnimplemented; import fi.otavanopisto.muikku.session.SessionController; @Stateful @Path("/websocket") @RequestScoped @Produces ("application/json") public class WebSocketRESTService extends PluginRESTService { private static final long serialVersionUID = 8566984492048734313L; @Inject private SessionController sessionController; @Inject private WebSocketTicketController webSocketTicketController; @Context private HttpServletRequest request; @POST @Path ("/ticket") @RESTPermitUnimplemented public Response createTicket() { UserEntity userEntity = sessionController.getLoggedUserEntity(); Long userEntityId = userEntity != null ? userEntity.getId() : null; Date timestamp = new Date(); String ip = request.getRemoteAddr(); String ticket = UUID.randomUUID().toString(); webSocketTicketController.createTicket(ticket, userEntityId, ip, timestamp); return Response.ok(new WebSocketTicketRESTModel(ticket)).build(); } @GET @Path ("/ticket/{TICKET}/check") @RESTPermitUnimplemented public Response check(@PathParam("TICKET") String ticketStr) { WebSocketTicket ticket = webSocketTicketController.findTicket(ticketStr); if (ticket != null) { UserEntity user = sessionController.getLoggedUserEntity(); Long userId = user != null ? user.getId() : null; boolean valid = userId != null ? userId.equals(ticket.getUser()) : ticket.getUser() == null; if (valid) return Response.noContent().build(); else return Response.status(Response.Status.NOT_FOUND).build(); } else return Response.status(Response.Status.NOT_FOUND).build(); } }