]> WPIA git - gigi.git/blob - src/club/wpia/gigi/pages/account/certs/CertificateModificationForm.java
Merge changes If5eed01f,I88c94e39,If36f5b0a
[gigi.git] / src / club / wpia / gigi / pages / account / certs / CertificateModificationForm.java
1 package club.wpia.gigi.pages.account.certs;
2
3 import java.io.PrintWriter;
4 import java.math.BigInteger;
5 import java.util.LinkedList;
6 import java.util.Map;
7
8 import javax.servlet.http.HttpServletRequest;
9
10 import club.wpia.gigi.GigiApiException;
11 import club.wpia.gigi.dbObjects.Certificate;
12 import club.wpia.gigi.dbObjects.Certificate.RevocationType;
13 import club.wpia.gigi.dbObjects.CertificateOwner;
14 import club.wpia.gigi.dbObjects.Job;
15 import club.wpia.gigi.localisation.Language;
16 import club.wpia.gigi.output.CertificateIterable;
17 import club.wpia.gigi.output.template.Form;
18 import club.wpia.gigi.output.template.Template;
19 import club.wpia.gigi.pages.LoginPage;
20
21 public class CertificateModificationForm extends Form {
22
23     private CertificateOwner target;
24
25     private final boolean withRevoked;
26
27     public CertificateModificationForm(HttpServletRequest hsr, boolean withRevoked) {
28         super(hsr);
29         this.withRevoked = withRevoked;
30         target = LoginPage.getAuthorizationContext(hsr).getTarget();
31     }
32
33     private static final Template certTable = new Template(CertificateIterable.class.getResource("CertificateTable.templ"));
34
35     private static final Template myTemplate = new Template(CertificateModificationForm.class.getResource("CertificateModificationForm.templ"));
36
37     @Override
38     public SubmissionResult submit(HttpServletRequest req) throws GigiApiException {
39         String action = req.getParameter("action");
40         if ( !"revoke".equals(action)) {
41             throw new GigiApiException("Incorrect action given.");
42         }
43         String[] certs = req.getParameterValues("certs[]");
44         if (certs == null) {
45             throw new GigiApiException("No certificates to revoke.");
46         }
47         LinkedList<Job> revokes = new LinkedList<Job>();
48         for (String serial : certs) {
49             Certificate c = Certificate.getBySerial(new BigInteger(serial, 16));
50             if (c == null || c.getOwner() != target) {
51                 continue;
52             }
53             revokes.add(c.revoke(RevocationType.SUPPORT));
54         }
55         long start = System.currentTimeMillis();
56         for (Job job : revokes) {
57             int toWait = (int) (Job.WAIT_MIN + start - System.currentTimeMillis());
58             if (toWait > 0) {
59                 job.waitFor(toWait);
60             } else {
61                 break; // canceled... waited too log
62             }
63         }
64         return new RedirectResult(req.getPathInfo());
65     }
66
67     @Override
68     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
69         vars.put("certs", new CertificateIterable(target.getCertificates(withRevoked)));
70         vars.put("certTable", certTable);
71         if (withRevoked) {
72             vars.put("all", "btn-primary");
73             vars.put("current", "btn-info");
74         } else {
75             vars.put("all", "btn-info");
76             vars.put("current", "btn-primary");
77         }
78         myTemplate.output(out, l, vars);
79     }
80
81 }