]> WPIA git - gigi.git/blob - src/club/wpia/gigi/output/CertificateIterable.java
add: handling of who issued a certificate
[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.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.IterableDataset;
14 import club.wpia.gigi.util.CalendarUtil;
15
16 public class CertificateIterable implements IterableDataset {
17
18     private Certificate[] certificates;
19
20     public static final int EXPIRING_IN_DAYS = 14;
21
22     public CertificateIterable(Certificate[] certificates) {
23         this.certificates = certificates;
24     }
25
26     private int i = 0;
27
28     @Override
29     public boolean next(Language l, Map<String, Object> vars) {
30         if (i >= certificates.length) {
31             return false;
32         }
33         Certificate c = certificates[i++];
34         vars.put("state", c.getStatus());
35         vars.put("CN", c.getDistinguishedName());
36         vars.put("serial", c.getSerial());
37         vars.put("digest", c.getMessageDigest());
38         vars.put("profile", c.getProfile().getVisibleName());
39         vars.put("description", c.getDescription());
40         CertificateStatus st = c.getStatus();
41         vars.put("revokable", st != CertificateStatus.REVOKED && st == CertificateStatus.ISSUED);
42         String issuedWarning = "";
43         String expiredWarning = "";
44         vars.put("issued", l.getTranslation("N/A"));
45         vars.put("expire", l.getTranslation("N/A"));
46         vars.put("classIssued", "");
47         vars.put("classExpired", "");
48         vars.put("revoked", l.getTranslation("N/A"));
49         vars.put("actorinitials", l.getTranslation("N/A"));
50         vars.put("actorname", l.getTranslation("N/A"));
51
52         if (c.getActor() != null) {
53             vars.put("actorinitials", c.getActor().getInitials());
54             vars.put("actorname", c.getActor().getPreferredName().toString() + " <" + c.getActor().getEmail() + ">");
55         }
56
57         try {
58             if (st == CertificateStatus.ISSUED || st == CertificateStatus.REVOKED) {
59                 X509Certificate cert = c.cert();
60                 vars.put("issued", cert.getNotBefore());
61                 vars.put("expire", cert.getNotAfter());
62
63                 if (cert.getNotBefore().after(new Date())) {
64                     issuedWarning = "bg-warning";
65                 }
66                 vars.put("classIssued", issuedWarning);
67
68                 if (cert.getNotAfter().before(CalendarUtil.timeDifferenceDays(EXPIRING_IN_DAYS))) {
69                     expiredWarning = "bg-warning";
70                 }
71                 if (cert.getNotAfter().before(new Date())) {
72                     expiredWarning = "bg-danger";
73                 }
74                 vars.put("classExpired", expiredWarning);
75             }
76
77             if (st == CertificateStatus.REVOKED) {
78                 vars.put("revoked", c.getRevocationDate());
79             }
80         } catch (GigiApiException e) {
81             e.printStackTrace();
82         } catch (IOException e) {
83             e.printStackTrace();
84         } catch (GeneralSecurityException e) {
85             e.printStackTrace();
86         }
87         vars.put("login", c.isLoginEnabled());
88         return true;
89     }
90 }