]> WPIA git - gigi.git/blob - src/org/cacert/gigi/dbObjects/CertificateOwner.java
UPD: Cleanup User-class.
[gigi.git] / src / org / cacert / gigi / dbObjects / CertificateOwner.java
1 package org.cacert.gigi.dbObjects;
2
3 import java.util.LinkedList;
4
5 import org.cacert.gigi.database.DatabaseConnection;
6 import org.cacert.gigi.database.GigiPreparedStatement;
7 import org.cacert.gigi.database.GigiResultSet;
8
9 public abstract class CertificateOwner implements IdCachable {
10
11     private static final ObjectCache<CertificateOwner> myCache = new ObjectCache<>();
12
13     private int id;
14
15     protected CertificateOwner(int id) {
16         this.id = id;
17     }
18
19     protected CertificateOwner() {
20         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `certOwners` DEFAULT VALUES");
21         ps.execute();
22         id = ps.lastInsertId();
23         myCache.put(this);
24     }
25
26     public int getId() {
27         return id;
28     }
29
30     public static synchronized CertificateOwner getById(int id) {
31         CertificateOwner u = myCache.get(id);
32         if (u == null) {
33             GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT *, `users`.`id` AS uid, `organisations`.`id` AS oid FROM `certOwners` LEFT JOIN `users` ON `users`.`id`=`certOwners`.`id` LEFT JOIN `organisations` ON `organisations`.`id` = `certOwners`.`id` WHERE `certOwners`.`id`=? AND `deleted` is null");
34             ps.setInt(1, id);
35             try (GigiResultSet rs = ps.executeQuery()) {
36                 if ( !rs.next()) {
37                     return null;
38                 }
39                 if (rs.getString("uid") != null) {
40                     myCache.put(u = new User(rs));
41                 } else if (rs.getString("oid") != null) {
42                     myCache.put(u = new Organisation(rs));
43                 } else {
44                     System.err.print("Malformed cert owner: " + id);
45                 }
46             }
47         }
48         return u;
49     }
50
51     public Domain[] getDomains() {
52         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `id` FROM `domains` WHERE `memid`=? AND `deleted` IS NULL");
53         ps.setInt(1, getId());
54
55         try (GigiResultSet rs = ps.executeQuery()) {
56             LinkedList<Domain> data = new LinkedList<Domain>();
57
58             while (rs.next()) {
59                 data.add(Domain.getById(rs.getInt(1)));
60             }
61
62             return data.toArray(new Domain[0]);
63         }
64     }
65
66     public Certificate[] getCertificates(boolean includeRevoked) {
67         GigiPreparedStatement ps;
68         if (includeRevoked) {
69             ps = DatabaseConnection.getInstance().prepare("SELECT id FROM certs WHERE memid=?");
70         } else {
71             ps = DatabaseConnection.getInstance().prepare("SELECT id FROM certs WHERE memid=? AND revoked IS NULL");
72         }
73         ps.setInt(1, getId());
74
75         try (GigiResultSet rs = ps.executeQuery()) {
76             LinkedList<Certificate> data = new LinkedList<Certificate>();
77
78             while (rs.next()) {
79                 data.add(Certificate.getById(rs.getInt(1)));
80             }
81
82             return data.toArray(new Certificate[0]);
83         }
84     }
85
86     public boolean isValidDomain(String domainname) {
87         for (Domain d : getDomains()) {
88             String sfx = d.getSuffix();
89             if (domainname.equals(sfx) || domainname.endsWith("." + sfx)) {
90                 return true;
91             }
92         }
93
94         return false;
95     }
96
97     public abstract boolean isValidEmail(String email);
98
99     public void delete() {
100         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("UPDATE `certOwners` SET `deleted`=NOW() WHERE `id`=?");
101         ps.setInt(1, getId());
102         ps.execute();
103         myCache.remove(this);
104     }
105
106 }