package service.rest; import gamification.ExecuteAction; import gamification.Player; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringWriter; import java.util.List; import javax.persistence.EntityTransaction; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.FormParam; 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.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.xml.bind.annotation.XmlRootElement; import org.apache.commons.io.IOUtils; import persistency.entities.Comment; import persistency.entities.LoggedUser; import persistency.entities.Session; import persistency.exposed.CommentsExposedBasic; import persistency.exposed.LoggedUserExposed; import persistency.exposed.SessionExposedBasic; import service.rest.wrappers.CommentBasic; import utils.Status.STATE; import admin.AppControl; import com.google.gson.Gson; @Path("codes") @Produces({ MediaType.APPLICATION_JSON }) public class CodesResource { @POST @Consumes(MediaType.APPLICATION_JSON) public Response submitCode(@Context HttpServletRequest request, @PathParam("id") String sessionId) throws IOException{ Gson g = new Gson(); if(!AppControl.writeMode(request)){ return Response.status(Status.PRECONDITION_FAILED).entity(g.toJson(new utils.Status(STATE.ERROR, "Codes are disabled at the moment, try again later."))).build(); } Data fromJson = g.fromJson(new InputStreamReader(request.getInputStream(), "UTF-8"), Data.class); LoggedUserExposed pe = new LoggedUserExposed(); LoggedUser person = pe.getCurrentUser(request); if(person == null){ return Response.status(Status.BAD_REQUEST).build(); } if(!person.canEnterCodes()){ ExecuteAction.getInstance().execute("hacker", person, null); return Response.status(Status.PRECONDITION_FAILED).entity(g.toJson(new utils.Status(STATE.ERROR, "User cannot enter more codes, 10 wrong attempts detected.<br/>One time award of 20 points will be given."))).build(); } Player player = person.getPlayer(); if(player.getRankInt() < 2){ return Response.status(Status.PRECONDITION_FAILED).entity(g.toJson(new utils.Status(STATE.ERROR, "You have to reach level Gold in order to participate in the challenge."))).build(); } utils.Status status = ExecuteAction.getInstance().execute(null, person, fromJson.code.toLowerCase()); if(status.severity == STATE.OK){ return Response.ok(g.toJson(status)).build(); } else { person.strike(); pe.updateEntity(person); status.message = status.message + "<br> User will not be able to submit codes after " +person.getStrikesLeft() +" more wrong codes."; return Response.status(Status.NOT_ACCEPTABLE).entity(g.toJson(status)).build(); } } @XmlRootElement public class Data { private String code; } }