java/nekurak.net-web/src/java/cz/frantovo/nekurak/rest/HlasovaniREST.java
author František Kučera <franta-hg@frantovo.cz>
Sat, 15 Jan 2011 18:14:15 +0100
changeset 174 ca3c7dd220fe
parent 145 0efefbf5f8b6
child 183 96abaf49fc7a
permissions -rw-r--r--
CSRF/XSRF ochrana při hlasování.
     1 package cz.frantovo.nekurak.rest;
     2 
     3 import cz.frantovo.nekurak.posluchac.OchranaProtiCSRF;
     4 import cz.frantovo.nekurak.util.HttpPozadavek;
     5 import cz.frantovo.nekurak.web.HledacSluzby;
     6 import cz.frantovo.nekurak.xml.HlasXML;
     7 import javax.servlet.http.HttpServletRequest;
     8 import javax.ws.rs.Consumes;
     9 import javax.ws.rs.POST;
    10 import javax.ws.rs.Path;
    11 import javax.ws.rs.Produces;
    12 import javax.ws.rs.core.Context;
    13 
    14 @Path("hlas")
    15 public class HlasovaniREST {
    16 
    17 	@Context
    18 	HttpServletRequest pozadavek;
    19 	private static final String MIME_XML = "text/xml";
    20 	private static final String MIME_TEXT = "text/plain";
    21 	private HledacSluzby hledac = new HledacSluzby();
    22 
    23 	@POST
    24 	@Consumes(MIME_XML)
    25 	@Produces(MIME_TEXT)
    26 	public String hlasuj(HlasXML xml) {
    27 		zkontrolujCSRF(pozadavek, xml);
    28 		hledac.getPodnikEJB().hlasuj(xml.getPodnik(), xml.isKourit(), HttpPozadavek.getIPadresa(pozadavek));
    29 		return "ok";
    30 	}
    31 
    32 	private static void zkontrolujCSRF(HttpServletRequest pozadavek, HlasXML xml) throws RuntimeException {
    33 		String csrfTokenOcekavany = (String) pozadavek.getSession().getAttribute(OchranaProtiCSRF.NAZEV_ATRIBUTU);
    34 		String csrfTokenObdrzeny = xml.getCsrfToken();
    35 		if (csrfTokenOcekavany == null || !csrfTokenOcekavany.equals(csrfTokenObdrzeny)) {
    36 			throw new RuntimeException("CSRF token zaslaný klientem neodpovídá očekávanému.");
    37 		}
    38 	}
    39 }