X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FdbObjects%2FCATS.java;h=a353e1684e7ff9bd81c63bf1cd3f5966b8bc7ca1;hp=700d76ee21175291101fadf1a5dde1bab532a275;hb=f39e1a18e4ceed8ad6edb7fc4b7e4d1879703dd5;hpb=aa5723dbb64ec8efa63909d39ff72364f0a5ee96 diff --git a/src/org/cacert/gigi/dbObjects/CATS.java b/src/org/cacert/gigi/dbObjects/CATS.java index 700d76ee..a353e168 100644 --- a/src/org/cacert/gigi/dbObjects/CATS.java +++ b/src/org/cacert/gigi/dbObjects/CATS.java @@ -9,11 +9,45 @@ import org.cacert.gigi.database.GigiResultSet; public class CATS { - private static HashMap names = new HashMap<>(); + public enum CATSType { + ASSURER_CHALLENGE("Agent Qualifying Challenge"), + + ORG_AGENT_CHALLENGE("Organisation Agent Qualifying Challenge"), + + TTP_AGENT_CHALLENGE("TTP Agent Qualifying Challenge"), + + TTP_TOPUP_AGENT_CHALLENGE_NAME("TTP TOPUP Agent Qualifying Challenge"), + + CODE_SIGNING_CHALLENGE_NAME("Code Signing Challenge"), + + ORG_ADMIN_DP_CHALLENGE_NAME("Organisation Administrator Data Protection Challenge"), + + SUPPORT_DP_CHALLENGE_NAME("Support Data Protection Challenge"); + + private final String displayName; + + private final int id; + + private CATSType(String displayName) { + this.displayName = displayName; + id = getID(displayName); + } + + public String getDisplayName() { + return displayName; + } - public static final String ASSURER_CHALLENGE_NAME = "Assurer's Challenge"; + public int getId() { + return id; + } + } - public static final int ASSURER_CHALLENGE_ID; + /** + * The maximal number of months a passed test is considered "recent". + */ + public static final int TEST_MONTHS = 12; + + private static HashMap names = new HashMap<>(); private CATS() { @@ -26,7 +60,6 @@ public class CATS { names.put(res.getString(2), res.getInt(1)); } } - ASSURER_CHALLENGE_ID = getID(ASSURER_CHALLENGE_NAME); } public static synchronized int getID(String name) { @@ -42,14 +75,34 @@ public class CATS { return i; } + public static void enterResult(User user, CATSType testType, Date passDate, String language, String version) { + enterResult(user, testType.id, passDate, language, version); + } + public static void enterResult(User user, String testType, Date passDate, String language, String version) { + enterResult(user, getID(testType), passDate, language, version); + } + + private static void enterResult(User user, int testTypeId, Date passDate, String language, String version) { + try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `cats_passed` SET `user_id`=?, `variant_id`=?, `pass_date`=?, `language`=?, `version`=?")) { ps.setInt(1, user.getId()); - ps.setInt(2, getID(testType)); + ps.setInt(2, testTypeId); ps.setTimestamp(3, new Timestamp(passDate.getTime())); ps.setString(4, language); ps.setString(5, version); ps.execute(); } } + + public static boolean isInCatsLimit(int uID, int testID) { + try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT 1 FROM `cats_passed` WHERE `user_id` = ? AND `variant_id` = ? AND`pass_date` > (now() - interval '1 months' * ?)")) { + ps.setInt(1, uID); + ps.setInt(2, testID); + ps.setInt(3, TEST_MONTHS); + + GigiResultSet rs = ps.executeQuery(); + return rs.next(); + } + } }