franta-hg@110: package cz.frantovo.nekurak.rest; franta-hg@110: franta-hg@174: import cz.frantovo.nekurak.posluchac.OchranaProtiCSRF; franta-hg@110: import cz.frantovo.nekurak.util.HttpPozadavek; franta-hg@110: import cz.frantovo.nekurak.web.HledacSluzby; franta-hg@110: import cz.frantovo.nekurak.xml.HlasXML; franta-hg@110: import javax.servlet.http.HttpServletRequest; franta-hg@110: import javax.ws.rs.Consumes; franta-hg@110: import javax.ws.rs.POST; franta-hg@110: import javax.ws.rs.Path; franta-hg@110: import javax.ws.rs.Produces; franta-hg@110: import javax.ws.rs.core.Context; franta-hg@110: franta-hg@110: @Path("hlas") franta-hg@110: public class HlasovaniREST { franta-hg@110: franta-hg@145: @Context franta-hg@145: HttpServletRequest pozadavek; franta-hg@145: private static final String MIME_XML = "text/xml"; franta-hg@145: private static final String MIME_TEXT = "text/plain"; franta-hg@145: private HledacSluzby hledac = new HledacSluzby(); franta-hg@110: franta-hg@145: @POST franta-hg@145: @Consumes(MIME_XML) franta-hg@145: @Produces(MIME_TEXT) franta-hg@145: public String hlasuj(HlasXML xml) { franta-hg@174: zkontrolujCSRF(pozadavek, xml); franta-hg@145: hledac.getPodnikEJB().hlasuj(xml.getPodnik(), xml.isKourit(), HttpPozadavek.getIPadresa(pozadavek)); franta-hg@145: return "ok"; franta-hg@145: } franta-hg@174: franta-hg@174: private static void zkontrolujCSRF(HttpServletRequest pozadavek, HlasXML xml) throws RuntimeException { franta-hg@174: String csrfTokenOcekavany = (String) pozadavek.getSession().getAttribute(OchranaProtiCSRF.NAZEV_ATRIBUTU); franta-hg@174: String csrfTokenObdrzeny = xml.getCsrfToken(); franta-hg@174: if (csrfTokenOcekavany == null || !csrfTokenOcekavany.equals(csrfTokenObdrzeny)) { franta-hg@183: String hláška = String.format("CSRF token zaslaný klientem neodpovídá očekávanému. '%1s' != '%2s'", csrfTokenOcekavany, csrfTokenObdrzeny); franta-hg@183: throw new RuntimeException(hláška); franta-hg@174: } franta-hg@174: } franta-hg@110: }