X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FdbObjects%2FCertificateOwner.java;h=cc96ade7c39a5f3e532986cf3ed68a5378f0f24b;hp=8ba04feece6b42e7bfb4445b761be1469208876d;hb=dea55fb19948e7fa05e4b9369873e96360a5064a;hpb=a0232b6e40e7e09767f0444d24e18bf12dafc362 diff --git a/src/org/cacert/gigi/dbObjects/CertificateOwner.java b/src/org/cacert/gigi/dbObjects/CertificateOwner.java index 8ba04fee..cc96ade7 100644 --- a/src/org/cacert/gigi/dbObjects/CertificateOwner.java +++ b/src/org/cacert/gigi/dbObjects/CertificateOwner.java @@ -1,12 +1,20 @@ package org.cacert.gigi.dbObjects; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamException; +import java.io.Serializable; import java.util.LinkedList; import java.util.List; +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.GigiPreparedStatement; import org.cacert.gigi.database.GigiResultSet; -public abstract class CertificateOwner implements IdCachable { +public abstract class CertificateOwner implements IdCachable, Serializable { + + private static final long serialVersionUID = -672580485730247314L; private static final ObjectCache myCache = new ObjectCache<>(); @@ -44,6 +52,8 @@ public abstract class CertificateOwner implements IdCachable { } else { System.err.print("Malformed cert owner: " + id); } + } catch (GigiApiException e) { + throw new Error(e); } } } @@ -116,7 +126,7 @@ public abstract class CertificateOwner implements IdCachable { } public static CertificateOwner getByEnabledSerial(String serial) { - try (GigiPreparedStatement prep = new GigiPreparedStatement("SELECT `memid` FROM `certs` WHERE serial=? AND `disablelogin`='0' AND `revoked` is NULL")) { + try (GigiPreparedStatement prep = new GigiPreparedStatement("SELECT `memid` FROM `certs` INNER JOIN `logincerts` ON `logincerts`.`id`=`certs`.`id` WHERE serial=? AND `revoked` is NULL")) { prep.setString(1, serial.toLowerCase()); GigiResultSet res = prep.executeQuery(); if (res.next()) { @@ -125,4 +135,31 @@ public abstract class CertificateOwner implements IdCachable { return null; } } + + private void writeObject(ObjectOutputStream oos) throws IOException { + oos.writeLong(getId()); + } + + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + id = (int) ois.readLong(); + } + + protected Object readResolve() throws ObjectStreamException { + /** + * Returning the Object by looking up its ID in the cache. + * + * @see http://www.javalobby.org/java/forums/t17491.html + * @see http://www.jguru.com/faq/view.jsp?EID=44039 + * @see http://thecodersbreakfast.net/ + * ?post/2011/05/12/Serialization-and-magic-methods + */ + CertificateOwner co = getById(this.getId()); + + if (null == co) { + throw new Error("Unknown Certificate Owner"); + } + + return co; + } + }