]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/dbObjects/Certificate.java
add: store value for login-enabled for clientCertificates
[gigi.git] / src / org / cacert / gigi / dbObjects / Certificate.java
index 8e66c7f30c3d98c3b123ef9f6f5c73114aa95905..9f3ca3bd92d7c1a760f244c44dc73c69abc1b8f2 100644 (file)
@@ -19,8 +19,9 @@ import java.util.Map.Entry;
 import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.database.GigiPreparedStatement;
 import org.cacert.gigi.database.GigiResultSet;
+import org.cacert.gigi.output.template.Outputable;
+import org.cacert.gigi.output.template.TranslateCommand;
 import org.cacert.gigi.util.KeyStorage;
-import org.cacert.gigi.util.Notary;
 
 public class Certificate implements IdCachable {
 
@@ -139,7 +140,7 @@ public class Certificate implements IdCachable {
         this.owner = owner;
         this.dn = dn;
         if (dn.size() == 0) {
-            throw new GigiApiException("DN must not be empty");
+            throw new GigiApiException("DN must not be empty.");
         }
         dnString = stringifyDN(dn);
         this.md = md;
@@ -215,25 +216,34 @@ public class Certificate implements IdCachable {
          * This certificate is not in the database, has no id and only exists as
          * this java object.
          */
-        DRAFT(),
+        DRAFT("draft"),
         /**
          * The certificate has been signed. It is stored in the database.
          * {@link Certificate#cert()} is valid.
          */
-        ISSUED(),
+        ISSUED("issued"),
 
         /**
          * The certificate has been revoked.
          */
-        REVOKED(),
+        REVOKED("revoked"),
 
         /**
          * If this certificate cannot be updated because an error happened in
          * the signer.
          */
-        ERROR();
+        ERROR("error");
 
-        private CertificateStatus() {}
+        private final Outputable name;
+
+        private CertificateStatus(String codename) {
+            this.name = new TranslateCommand(codename);
+
+        }
+
+        public Outputable getName() {
+            return name;
+        }
 
     }
 
@@ -276,7 +286,6 @@ public class Certificate implements IdCachable {
         if (getStatus() != CertificateStatus.DRAFT) {
             throw new IllegalStateException();
         }
-        Notary.writeUserAgreement(actor, "CCA", "issue certificate", "", true, 0);
 
         return Job.sign(this, start, period);
 
@@ -434,4 +443,28 @@ public class Certificate implements IdCachable {
         }
         return null;
     }
+
+    public void setLoginEnabled(boolean activate) {
+        if (activate) {
+            if ( !isLoginEnabled()) {
+                try (GigiPreparedStatement prep = new GigiPreparedStatement("INSERT INTO `logincerts` SET `id`=?")) {
+                    prep.setInt(1, id);
+                    prep.execute();
+                }
+            }
+        } else {
+            try (GigiPreparedStatement prep = new GigiPreparedStatement("DELETE FROM `logincerts` WHERE `id`=?")) {
+                prep.setInt(1, id);
+                prep.execute();
+            }
+        }
+    }
+
+    public boolean isLoginEnabled() {
+        try (GigiPreparedStatement prep = new GigiPreparedStatement("SELECT 1 FROM `logincerts` WHERE `id`=?")) {
+            prep.setInt(1, id);
+            GigiResultSet res = prep.executeQuery();
+            return res.next();
+        }
+    }
 }