]> WPIA git - gigi.git/blob - src/org/cacert/gigi/output/Form.java
Enforce Output of CSRF token.
[gigi.git] / src / org / cacert / gigi / output / Form.java
1 package org.cacert.gigi.output;
2
3 import java.io.PrintWriter;
4 import java.util.Map;
5
6 import javax.servlet.ServletRequest;
7 import javax.servlet.http.HttpServletRequest;
8
9 import org.cacert.gigi.Language;
10 import org.cacert.gigi.pages.Page;
11 import org.cacert.gigi.util.RandomToken;
12
13 public abstract class Form implements Outputable {
14         String csrf;
15         public Form() {
16                 csrf = RandomToken.generateToken(32);
17         }
18
19         public abstract boolean submit(PrintWriter out, HttpServletRequest req);
20         @Override
21         public final void output(PrintWriter out, Language l,
22                         Map<String, Object> vars) {
23                 out.println("<form method='POST' autocomplete='off'>");
24                 outputContent(out, l, vars);
25                 out.println("<input type='csrf' value='");
26                 out.print(getCSRFToken());
27                 out.println("'></form>");
28         }
29
30         public abstract void outputContent(PrintWriter out, Language l,
31                         Map<String, Object> vars);
32
33         protected void outputError(PrintWriter out, ServletRequest req, String text) {
34                 out.print("<div>");
35                 out.print(Page.translate(req, text));
36                 out.println("</div>");
37         }
38
39         public String getCSRFToken() {
40                 return csrf;
41         }
42
43 }