]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/dbObjects/SupportedUser.java
FIX: Only revoke issued certs
[gigi.git] / src / org / cacert / gigi / dbObjects / SupportedUser.java
index 4ee121007863f4167679936b111b506948a59c47..447825ba8eeb3c81b161d3aaa71bd31152a02d88 100644 (file)
@@ -2,8 +2,10 @@ package org.cacert.gigi.dbObjects;
 
 import java.sql.Date;
 
+import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.database.DatabaseConnection;
 import org.cacert.gigi.database.GigiPreparedStatement;
+import org.cacert.gigi.dbObjects.Certificate.CertificateStatus;
 
 public class SupportedUser {
 
@@ -14,27 +16,42 @@ public class SupportedUser {
     public SupportedUser(User target, User supporter, String ticket) {
         this.supporter = supporter;
         this.target = target;
+        this.ticket = ticket;
     }
 
-    public void setName(String fname, String mname, String lname, String suffix) {
+    public boolean setName(Name newName) throws GigiApiException {
+        if (newName.equals(target.getName())) {
+            return false;
+        }
         writeSELog("SE Name change");
-        target.setName(new Name(fname, lname, mname, suffix));
+        target.setName(newName);
+        return true;
     }
 
-    public void setDob(Date dob) {
+    public boolean setDob(Date dob) throws GigiApiException {
+        if (dob.toString().equals(target.getDoB().toString())) {
+            return false;
+        }
         writeSELog("SE dob change");
-        target.setDob(dob);
+        target.setDoB(dob);
+        return true;
     }
 
-    public void revokeAllCertificates() {
+    public void revokeAllCertificates() throws GigiApiException {
         writeSELog("SE Revoke certificates");
         Certificate[] certs = target.getCertificates(false);
+        // TODO Check for open jobs!
         for (int i = 0; i < certs.length; i++) {
-            certs[i].revoke();
+            if (certs[i].getStatus() == CertificateStatus.ISSUED) {
+                certs[i].revoke();
+            }
         }
     }
 
-    public void writeSELog(String type) {
+    private void writeSELog(String type) throws GigiApiException {
+        if (ticket == null) {
+            throw new GigiApiException("No ticket set!");
+        }
         GigiPreparedStatement prep = DatabaseConnection.getInstance().prepare("INSERT INTO adminLog SET uid=?, admin=?, type=?, information=?");
         prep.setInt(1, target.getId());
         prep.setInt(2, supporter.getId());
@@ -43,4 +60,24 @@ public class SupportedUser {
         prep.executeUpdate();
     }
 
+    public int getId() {
+        return target.getId();
+    }
+
+    public Certificate[] getCertificates(boolean includeRevoked) {
+        return target.getCertificates(includeRevoked);
+    }
+
+    public String getTicket() {
+        return ticket;
+    }
+
+    public User getTargetUser() {
+        return target;
+    }
+
+    public void submitSupportAction() throws GigiApiException {
+        target.rawUpdateUserData();
+    }
+
 }