]> WPIA git - gigi.git/blob - src/club/wpia/gigi/output/CertificateIterable.java
fix: ResultSet.getDate is often wrong as it fetches day-precision times
[gigi.git] / src / club / wpia / gigi / output / CertificateIterable.java
1 package club.wpia.gigi.output;
2
3 import java.io.IOException;
4 import java.security.GeneralSecurityException;
5 import java.security.cert.X509Certificate;
6 import java.util.Date;
7 import java.util.Map;
8
9 import club.wpia.gigi.dbObjects.Certificate;
10 import club.wpia.gigi.dbObjects.Certificate.CertificateStatus;
11 import club.wpia.gigi.localisation.Language;
12 import club.wpia.gigi.output.template.IterableDataset;
13 import club.wpia.gigi.util.CalendarUtil;
14
15 public class CertificateIterable implements IterableDataset {
16
17     private Certificate[] certificates;
18
19     public static final int EXPIRING_IN_DAYS = 14;
20
21     public CertificateIterable(Certificate[] certificates) {
22         this.certificates = certificates;
23     }
24
25     private int i = 0;
26
27     @Override
28     public boolean next(Language l, Map<String, Object> vars) {
29         if (i >= certificates.length) {
30             return false;
31         }
32         Certificate c = certificates[i++];
33         vars.put("state", c.getStatus());
34         vars.put("CN", c.getDistinguishedName());
35         vars.put("serial", c.getSerial());
36         vars.put("digest", c.getMessageDigest());
37         vars.put("profile", c.getProfile().getVisibleName());
38         try {
39             CertificateStatus st = c.getStatus();
40             vars.put("revokable", st != CertificateStatus.REVOKED && st == CertificateStatus.ISSUED);
41             String issuedWarning = "";
42             String expiredWarning = "";
43             if (st == CertificateStatus.ISSUED || st == CertificateStatus.REVOKED) {
44                 X509Certificate cert = c.cert();
45                 vars.put("issued", cert.getNotBefore());
46                 vars.put("expire", cert.getNotAfter());
47
48                 if (cert.getNotBefore().after(new Date())) {
49                     issuedWarning = "bg-warning";
50                 }
51                 vars.put("classIssued", issuedWarning);
52
53                 if (cert.getNotAfter().before(CalendarUtil.timeDifferenceDays(EXPIRING_IN_DAYS))) {
54                     expiredWarning = "bg-warning";
55                 }
56                 if (cert.getNotAfter().before(new Date())) {
57                     expiredWarning = "bg-danger";
58                 }
59                 vars.put("classExpired", expiredWarning);
60             } else {
61                 vars.put("issued", l.getTranslation("N/A"));
62                 vars.put("expire", l.getTranslation("N/A"));
63             }
64
65             if (st == CertificateStatus.REVOKED) {
66                 vars.put("revoked", c.getRevocationDate());
67             } else {
68                 vars.put("revoked", l.getTranslation("N/A"));
69             }
70         } catch (IOException e) {
71             e.printStackTrace();
72         } catch (GeneralSecurityException e) {
73             e.printStackTrace();
74         }
75         vars.put("login", c.isLoginEnabled());
76         return true;
77     }
78 }