]> WPIA git - gigi.git/commitdiff
add: make "time conditions" configurable
authorFelix Dörre <felix@dogcraft.de>
Sun, 24 Jul 2016 20:19:38 +0000 (22:19 +0200)
committerFelix Dörre <felix@dogcraft.de>
Tue, 26 Jul 2016 18:36:13 +0000 (20:36 +0200)
fixes #75

Change-Id: I95c832b6f3a336500f4425d0aa3a68091ae64332

config/gigi.properties.template
src/org/cacert/gigi/Gigi.java
src/org/cacert/gigi/dbObjects/CATS.java
src/org/cacert/gigi/dbObjects/User.java
src/org/cacert/gigi/util/Notary.java
src/org/cacert/gigi/util/TimeConditions.java [new file with mode: 0644]
tests/org/cacert/gigi/testUtils/ConfiguredTest.java

index c34fff171d72835e6e36c5c7f2ec9f4384899524..4d7d8fda6c188e385836c80256aa870fd86823bd 100644 (file)
@@ -16,3 +16,8 @@ sql.user=
 sql.password=
 
 highFinancialValue=/path/to/alexa/list
+
+time.testValidMonths=12
+time.reverificationDays=90
+time.verificationFreshMonths=39
+time.verificationMaxAgeMonths=24
index 19b2f79d02c9b71835923b7561b7b4ee9bf46126..6db616947256f79b994979c7e0f697bb080cae18 100644 (file)
@@ -74,6 +74,7 @@ import org.cacert.gigi.ping.PingerDaemon;
 import org.cacert.gigi.util.AuthorizationContext;
 import org.cacert.gigi.util.DomainAssessment;
 import org.cacert.gigi.util.ServerConstants;
+import org.cacert.gigi.util.TimeConditions;
 
 public final class Gigi extends HttpServlet {
 
@@ -250,6 +251,7 @@ public final class Gigi extends HttpServlet {
             instance = this;
             DomainAssessment.init(conf);
             DatabaseConnection.init(conf);
+            TimeConditions.init(conf);
             this.truststore = truststore;
             pinger = new PingerDaemon(truststore);
             pinger.start();
index a353e1684e7ff9bd81c63bf1cd3f5966b8bc7ca1..df85172871cee09413a02baa34914419b7539208 100644 (file)
@@ -6,6 +6,7 @@ import java.util.HashMap;
 
 import org.cacert.gigi.database.GigiPreparedStatement;
 import org.cacert.gigi.database.GigiResultSet;
+import org.cacert.gigi.util.TimeConditions;
 
 public class CATS {
 
@@ -45,7 +46,7 @@ public class CATS {
     /**
      * The maximal number of months a passed test is considered "recent".
      */
-    public static final int TEST_MONTHS = 12;
+    public static final int TEST_MONTHS = TimeConditions.getInstance().getTestMonths();
 
     private static HashMap<String, Integer> names = new HashMap<>();
 
index 9f5d8e17cf1455a38c3cc7b874300b7f61c55893..18b50f5df5245bc4ec142d8cd16e0f0bfef328fe 100644 (file)
@@ -21,6 +21,7 @@ import org.cacert.gigi.util.DayDate;
 import org.cacert.gigi.util.Notary;
 import org.cacert.gigi.util.PasswordHash;
 import org.cacert.gigi.util.PasswordStrengthChecker;
+import org.cacert.gigi.util.TimeConditions;
 
 /**
  * Represents an acting, assurable, user. Synchronizing on user means: no
@@ -53,7 +54,7 @@ public class User extends CertificateOwner {
     /**
      * Time in months a verification is considered "recent".
      */
-    public static final int VERIFICATION_MONTHS = 39;
+    public static final int VERIFICATION_MONTHS = TimeConditions.getInstance().getVerificationMonths();
 
     private Name preferredName;
 
index 952f7c4ea6c6c1a5d0b9d57249578f84cbe1cf1c..620eb89cb456b44bddc1760dfe5459a8b2fc4393 100644 (file)
@@ -19,11 +19,11 @@ public class Notary {
 
     // minimum date range between 2 verifications of the RA-Agent to the same
     // Applicant
-    public final static int LIMIT_DAYS_VERIFICATION = 90; // conf.getProperty("limit_days_verification");
+    public final static int LIMIT_DAYS_VERIFICATION = TimeConditions.getInstance().getVerificationLimitDays();
 
     // maximum date range from date when the verification took place and the
     // entering to the system
-    public final static int LIMIT_MAX_MONTHS_VERIFICATION = 24; // conf.getProperty("limit_max_months_verification");
+    public final static int LIMIT_MAX_MONTHS_VERIFICATION = TimeConditions.getInstance().getVerificationMaxAgeMonths();
 
     public static void writeUserAgreement(User member, String document, String method, String comment, boolean active, int secmemid) {
         try (GigiPreparedStatement q = new GigiPreparedStatement("INSERT INTO `user_agreements` SET `memid`=?, `secmemid`=?," + " `document`=?,`date`=NOW(), `active`=?,`method`=?,`comment`=?")) {
diff --git a/src/org/cacert/gigi/util/TimeConditions.java b/src/org/cacert/gigi/util/TimeConditions.java
new file mode 100644 (file)
index 0000000..dce9800
--- /dev/null
@@ -0,0 +1,79 @@
+package org.cacert.gigi.util;
+
+import java.util.Properties;
+
+import org.cacert.gigi.dbObjects.CATS;
+
+public class TimeConditions {
+
+    private static TimeConditions instance;
+
+    private final int testValidMonths;
+
+    private final int reverificationDays;
+
+    private final int verificationFreshMonths;
+
+    private final int verificationMaxAgeMonths;
+
+    private TimeConditions(Properties ppts) {
+        testValidMonths = Integer.parseInt(ppts.getProperty("time.testValidMonths", "12"));
+        reverificationDays = Integer.parseInt(ppts.getProperty("time.reverificationDays", "90"));
+        verificationFreshMonths = Integer.parseInt(ppts.getProperty("time.verificationFreshMonths", "39"));
+        verificationMaxAgeMonths = Integer.parseInt(ppts.getProperty("time.verificationMaxAgeMonths", "24"));
+    }
+
+    public static synchronized TimeConditions getInstance() {
+        if (instance == null) {
+            throw new IllegalStateException("TimeConditions class not yet initialised.");
+        }
+        return instance;
+    }
+
+    public static synchronized final void init(Properties ppts) {
+        if (instance != null) {
+            throw new IllegalStateException("TimeConditions class already initialised.");
+        }
+        instance = new TimeConditions(ppts);
+    }
+
+    /**
+     * Maximum time in months that a passed {@link CATS} test is considered
+     * recent.
+     * 
+     * @return the configured number of months
+     */
+    public int getTestMonths() {
+        return testValidMonths;
+    }
+
+    /**
+     * Minimum time in days that needs to have passed in order to verify a name
+     * again.
+     * 
+     * @return the configured number of days
+     */
+    public int getVerificationLimitDays() {
+        return reverificationDays;
+    }
+
+    /**
+     * Maximum time in months that a verification is considered recent.
+     * 
+     * @return the configured number of months
+     */
+    public int getVerificationMonths() {
+        return verificationFreshMonths;
+    }
+
+    /**
+     * Maximum time in months that a verification can be entered after it
+     * occurred. Assuming that the RA-Agent enters the correct date.
+     * 
+     * @return the configured number of months
+     */
+    public int getVerificationMaxAgeMonths() {
+        return verificationMaxAgeMonths;
+    }
+
+}
index dcd39906a434f0b3fb09f937569516d3600c2def..ec589b4b1ffa7c8a69a6eddbb26df92150fb4a18 100644 (file)
@@ -36,6 +36,7 @@ import org.cacert.gigi.util.DomainAssessment;
 import org.cacert.gigi.util.Notary;
 import org.cacert.gigi.util.PEM;
 import org.cacert.gigi.util.ServerConstants;
+import org.cacert.gigi.util.TimeConditions;
 import org.junit.BeforeClass;
 
 import sun.security.pkcs10.PKCS10;
@@ -79,6 +80,7 @@ public abstract class ConfiguredTest {
         }
         Properties props = generateProps();
         ServerConstants.init(props);
+        TimeConditions.init(props);
         DomainAssessment.init(props);
 
         if ( !DatabaseConnection.isInited()) {