]> WPIA git - gigi.git/blob - src/club/wpia/gigi/pages/main/CertStatusRequestForm.java
dd863176f52cd6e3b97f82c7486110f4cc17fa2b
[gigi.git] / src / club / wpia / gigi / pages / main / CertStatusRequestForm.java
1 package club.wpia.gigi.pages.main;
2
3 import java.io.PrintWriter;
4 import java.util.Date;
5 import java.util.Map;
6
7 import javax.servlet.http.HttpServletRequest;
8
9 import club.wpia.gigi.GigiApiException;
10 import club.wpia.gigi.dbObjects.Certificate;
11 import club.wpia.gigi.dbObjects.Certificate.CertificateStatus;
12 import club.wpia.gigi.localisation.Language;
13 import club.wpia.gigi.output.template.Form;
14 import club.wpia.gigi.output.template.SprintfCommand;
15 import club.wpia.gigi.output.template.Template;
16 import club.wpia.gigi.output.template.TranslateCommand;
17 import club.wpia.gigi.util.RateLimit;
18 import club.wpia.gigi.util.RateLimit.RateLimitException;
19
20 public class CertStatusRequestForm extends Form {
21
22     private static final Template t = new Template(CertStatusRequestForm.class.getResource("CertStatusForm.templ"));
23
24     // 50 per 5 min
25     public static final RateLimit RATE_LIMIT = new RateLimit(50, 5 * 60 * 1000);
26
27     public static final TranslateCommand NOT_FOUND = new TranslateCommand("Certificate to check not found. Maybe it was issued by a different CA.");
28
29     public CertStatusRequestForm(HttpServletRequest hsr) {
30         super(hsr);
31
32     }
33
34     @Override
35     public SubmissionResult submit(HttpServletRequest req) throws GigiApiException {
36         if (RATE_LIMIT.isLimitExceeded(req.getRemoteAddr())) {
37             throw new RateLimitException();
38         }
39         Certificate c = null;
40         try {
41             c = Certificate.locateCertificate(req.getParameter("serial"), req.getParameter("cert"));
42             if (c == null) {
43                 throw new GigiApiException(NOT_FOUND);
44             }
45         } catch (GigiApiException e) {
46             throw new PermamentFormException(e);
47         }
48
49         if (c.getStatus() == CertificateStatus.REVOKED) {
50             java.util.Date revocationDate = c.getRevocationDate();
51             throw new PermamentFormException(new GigiApiException(SprintfCommand.createSimple("Certificate has been revoked on {0}.", revocationDate)));
52         }
53         if (c.getExpiryDate().before(new Date())) {
54             return new SuccessMessageResult((SprintfCommand.createSimple("Certificate is valid but has expired on {0}.", c.getExpiryDate())));
55         }
56
57         return new SuccessMessageResult(new TranslateCommand("Certificate is valid."));
58     }
59
60     @Override
61     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
62         t.output(out, l, vars);
63     }
64
65 }