]> WPIA git - gigi.git/commitdiff
add: new test types for CATS and handling in gigi test manager
authorINOPIAE <m.maengel@inopiae.de>
Thu, 7 Jul 2016 07:33:16 +0000 (09:33 +0200)
committerFelix Dörre <felix@dogcraft.de>
Fri, 8 Jul 2016 21:55:40 +0000 (23:55 +0200)
Change-Id: Ia0a5aa22c9f38122d22917436d1f99ddf0e57357

src/org/cacert/gigi/Gigi.java
src/org/cacert/gigi/database/DatabaseConnection.java
src/org/cacert/gigi/database/tableStructure.sql
src/org/cacert/gigi/database/upgrade/from_16.sql [new file with mode: 0644]
src/org/cacert/gigi/dbObjects/CATS.java
src/org/cacert/gigi/dbObjects/User.java
tests/org/cacert/gigi/api/ImportCATSResult.java
tests/org/cacert/gigi/pages/account/TestTrainings.java
tests/org/cacert/gigi/testUtils/ManagedTest.java
util-testing/org/cacert/gigi/pages/Manager.java
util-testing/org/cacert/gigi/pages/Manager.templ

index 58e7b11d8a3dc8533a430f579e3bd06f3c9a4eed..cb8c389e2fae0a1b68bc640b5652e9528779aea9 100644 (file)
@@ -23,7 +23,7 @@ import javax.servlet.http.HttpSession;
 import org.cacert.gigi.database.DatabaseConnection;
 import org.cacert.gigi.database.DatabaseConnection.Link;
 import org.cacert.gigi.dbObjects.CACertificate;
-import org.cacert.gigi.dbObjects.CATS;
+import org.cacert.gigi.dbObjects.CATS.CATSType;
 import org.cacert.gigi.dbObjects.CertificateProfile;
 import org.cacert.gigi.dbObjects.DomainPingConfiguration;
 import org.cacert.gigi.localisation.Language;
@@ -254,7 +254,7 @@ public final class Gigi extends HttpServlet {
         try (Link l = DatabaseConnection.newLink(false)) {
             CACertificate.getById(1);
             CertificateProfile.getById(1);
-            CATS.getID(CATS.ASSURER_CHALLENGE_NAME);
+            CATSType.ASSURER_CHALLENGE.getDisplayName();
         } catch (InterruptedException e) {
             throw new Error(e);
         }
index abd4c93d641cb7d734f245695044b592479e0da2..f2c5d5fa3c09719dd570fe25b868699d9fc521df 100644 (file)
@@ -122,7 +122,7 @@ public class DatabaseConnection {
 
     }
 
-    public static final int CURRENT_SCHEMA_VERSION = 16;
+    public static final int CURRENT_SCHEMA_VERSION = 17;
 
     public static final int CONNECTION_TIMEOUT = 24 * 60 * 60;
 
index eddd1a6b31ece7e93b5895bb5ec0be3456618b2e..cc2aebd01f5f01f7fa5b09c24295b357f8af9003 100644 (file)
@@ -319,6 +319,15 @@ CREATE TABLE "cats_type" (
   UNIQUE ("type_text")
 );
 
+# Add values to table "cats_type"
+INSERT INTO `cats_type` (`type_text`) VALUES ('Agent Qualifying Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('Organisation Agent Qualifying Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('TTP Agent Qualifying Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('TTP TOPUP Agent Qualifying Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('Code Signing Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('Organisation Administrator Data Protection Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('Support Data Protection Challenge');
+
 DROP TABLE IF EXISTS "arbitrations";
 CREATE TABLE IF NOT EXISTS "arbitrations" (
   "user" int NOT NULL,
@@ -376,7 +385,7 @@ CREATE TABLE "schemeVersion" (
   "version" smallint NOT NULL,
   PRIMARY KEY ("version")
 );
-INSERT INTO "schemeVersion" (version)  VALUES(16);
+INSERT INTO "schemeVersion" (version)  VALUES(17);
 
 DROP TABLE IF EXISTS `passwordResetTickets`;
 CREATE TABLE `passwordResetTickets` (
diff --git a/src/org/cacert/gigi/database/upgrade/from_16.sql b/src/org/cacert/gigi/database/upgrade/from_16.sql
new file mode 100644 (file)
index 0000000..021e630
--- /dev/null
@@ -0,0 +1,8 @@
+UPDATE `cats_type` SET `type_text` = 'Agent Qualifying Challenge' WHERE `type_text` = 'Assurer''s Challenge';
+
+INSERT INTO `cats_type` (`type_text`) VALUES ('Organisation Agent Qualifying Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('TTP Agent Qualifying Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('TTP TOPUP Agent Qualifying Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('Code Signing Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('Organisation Administrator Data Protection Challenge');
+INSERT INTO `cats_type` (`type_text`) VALUES ('Support Data Protection Challenge');
index 700d76ee21175291101fadf1a5dde1bab532a275..cac16694d81a83954b3d12288edbd9d7c36124d7 100644 (file)
@@ -9,11 +9,40 @@ import org.cacert.gigi.database.GigiResultSet;
 
 public class CATS {
 
-    private static HashMap<String, Integer> 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"),
 
-    public static final String ASSURER_CHALLENGE_NAME = "Assurer's Challenge";
+        SUPPORT_DP_CHALLENGE_NAME("Support Data Protection Challenge");
 
-    public static final int ASSURER_CHALLENGE_ID;
+        private final String displayName;
+
+        private final int id;
+
+        private CATSType(String displayName) {
+            this.displayName = displayName;
+            id = getID(displayName);
+        }
+
+        public String getDisplayName() {
+            return displayName;
+        }
+
+        public int getId() {
+            return id;
+        }
+    }
+
+    private static HashMap<String, Integer> names = new HashMap<>();
 
     private CATS() {
 
@@ -26,7 +55,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,10 +70,19 @@ 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);
index 370790c91f9db8bd641528325e594b19e6949cdc..7c45661e8a13dab11a72c3392ea1b82610b7d93e 100644 (file)
@@ -11,6 +11,7 @@ import java.util.Set;
 import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.database.GigiPreparedStatement;
 import org.cacert.gigi.database.GigiResultSet;
+import org.cacert.gigi.dbObjects.CATS.CATSType;
 import org.cacert.gigi.localisation.Language;
 import org.cacert.gigi.output.DateSelector;
 import org.cacert.gigi.pages.PasswordResetPage;
@@ -161,7 +162,7 @@ public class User extends CertificateOwner {
     public boolean hasPassedCATS() {
         try (GigiPreparedStatement query = new GigiPreparedStatement("SELECT 1 FROM `cats_passed` where `user_id`=? AND `variant_id`=?")) {
             query.setInt(1, getId());
-            query.setInt(2, CATS.ASSURER_CHALLENGE_ID);
+            query.setInt(2, CATSType.ASSURER_CHALLENGE.getId());
             try (GigiResultSet rs = query.executeQuery()) {
                 if (rs.next()) {
                     return true;
index 30d3ffff7e214b9b9bd74ecb1ab515f1ae51acc1..3fe6a63c52ecd668d3104baae06b731e09c93a6f 100644 (file)
@@ -17,7 +17,7 @@ import java.security.PrivateKey;
 import java.security.cert.X509Certificate;
 
 import org.cacert.gigi.GigiApiException;
-import org.cacert.gigi.dbObjects.CATS;
+import org.cacert.gigi.dbObjects.CATS.CATSType;
 import org.cacert.gigi.dbObjects.Certificate;
 import org.cacert.gigi.dbObjects.Certificate.CSRType;
 import org.cacert.gigi.dbObjects.Certificate.SANType;
@@ -73,7 +73,7 @@ public class ImportCATSResult extends ClientTest {
         apiImport(u2, "Test Training");
         assertEquals(1, u2.getTrainings().length);
         assertFalse(u2.hasPassedCATS());
-        apiImport(u2, CATS.ASSURER_CHALLENGE_NAME);
+        apiImport(u2, CATSType.ASSURER_CHALLENGE.getDisplayName());
         assertEquals(2, u2.getTrainings().length);
         assertTrue(u2.hasPassedCATS());
 
index 22bd4a175b6e22c169a50c72730201b845ac782a..7a30a3dccff941b7be89eba6f020ea38a5566868 100644 (file)
@@ -8,6 +8,7 @@ import java.security.GeneralSecurityException;
 import java.sql.Date;
 
 import org.cacert.gigi.dbObjects.CATS;
+import org.cacert.gigi.dbObjects.CATS.CATSType;
 import org.cacert.gigi.testUtils.ClientTest;
 import org.cacert.gigi.testUtils.IOUtils;
 import org.cacert.gigi.util.HTMLEncoder;
@@ -19,11 +20,11 @@ public class TestTrainings extends ClientTest {
 
     @Test
     public void testShow() throws IOException, GeneralSecurityException {
-        CATS.enterResult(u, CATS.ASSURER_CHALLENGE_NAME, new Date(System.currentTimeMillis()), "en_US", "1");
+        CATS.enterResult(u, CATSType.ASSURER_CHALLENGE, new Date(System.currentTimeMillis()), "en_US", "1");
         CATS.enterResult(u, "Special Case Test", new Date(System.currentTimeMillis()), "spLan", "v23");
         String res = IOUtils.readURL(get(UserTrainings.PATH));
         assertThat(res, containsString("Special Case Test"));
-        assertThat(res, containsString(HTMLEncoder.encodeHTML(CATS.ASSURER_CHALLENGE_NAME)));
+        assertThat(res, containsString(HTMLEncoder.encodeHTML(CATSType.ASSURER_CHALLENGE.getDisplayName())));
         assertThat(res, containsString("en_US, 1"));
         assertThat(res, containsString("v23"));
         assertThat(res, containsString("spLan"));
index 6fa11a91eb8fa1cc9fffaa3df84a73f4c6c6f61d..61689b55f8835235de2e62944ed16ddcfe9a0906 100644 (file)
@@ -38,7 +38,7 @@ import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.database.GigiPreparedStatement;
 import org.cacert.gigi.database.GigiResultSet;
 import org.cacert.gigi.database.SQLFileManager.ImportType;
-import org.cacert.gigi.dbObjects.CATS;
+import org.cacert.gigi.dbObjects.CATS.CATSType;
 import org.cacert.gigi.dbObjects.Domain;
 import org.cacert.gigi.dbObjects.DomainPingType;
 import org.cacert.gigi.dbObjects.EmailAddress;
@@ -344,7 +344,7 @@ public class ManagedTest extends ConfiguredTest {
     public static void makeAssurer(int uid) {
         try (GigiPreparedStatement ps1 = new GigiPreparedStatement("INSERT INTO cats_passed SET user_id=?, variant_id=?, language='en_EN', version=1")) {
             ps1.setInt(1, uid);
-            ps1.setInt(2, CATS.ASSURER_CHALLENGE_ID);
+            ps1.setInt(2, CATSType.ASSURER_CHALLENGE.getId());
             ps1.execute();
         }
 
index ceadd0389bcf354d48f13a9013d5f01767ab8819..6c45d34678b75e8e67065f34532786789495faa1 100644 (file)
@@ -9,6 +9,7 @@ import java.security.KeyPairGenerator;
 import java.security.Signature;
 import java.util.Base64;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -28,6 +29,8 @@ import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.crypto.SPKAC;
 import org.cacert.gigi.database.GigiPreparedStatement;
 import org.cacert.gigi.dbObjects.Assurance.AssuranceType;
+import org.cacert.gigi.dbObjects.CATS;
+import org.cacert.gigi.dbObjects.CATS.CATSType;
 import org.cacert.gigi.dbObjects.Certificate;
 import org.cacert.gigi.dbObjects.Certificate.CertificateStatus;
 import org.cacert.gigi.dbObjects.CertificateOwner;
@@ -104,7 +107,7 @@ public class Manager extends Page {
                 System.out.println("Creating assurer");
                 createUser(mail);
                 u = User.getByEmail(mail);
-                passCATS(u);
+                passCATS(u, CATSType.ASSURER_CHALLENGE);
                 ps.setInt(1, u.getId());
                 ps.setInt(2, u.getId());
                 ps.setInt(3, 100);
@@ -116,11 +119,8 @@ public class Manager extends Page {
         }
     }
 
-    private void passCATS(User u) {
-        try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO cats_passed SET user_id=?, variant_id=1, language='en_EN', version=1")) {
-            ps.setInt(1, u.getId());
-            ps.execute();
-        }
+    private void passCATS(User u, CATSType t) {
+        CATS.enterResult(u, t, new Date(System.currentTimeMillis()), "en_EN", "1");
     }
 
     private static Manager instance;
@@ -246,13 +246,19 @@ public class Manager extends Page {
             fetchMails(req, resp, mail);
         } else if (req.getParameter("cats") != null) {
             String mail = req.getParameter("catsEmail");
+            String testId = req.getParameter("catsType");
             User byEmail = User.getByEmail(mail);
             if (byEmail == null) {
                 resp.getWriter().println("User not found.");
                 return;
             }
-            passCATS(byEmail);
-            resp.getWriter().println("User has been passed CATS");
+            if (testId == null) {
+                resp.getWriter().println("No test given.");
+                return;
+            }
+            CATSType test = CATSType.values()[Integer.parseInt(testId)];
+            passCATS(byEmail, test);
+            resp.getWriter().println("Test '" + test.getDisplayName() + "' was added to user account.");
         } else if (req.getParameter("assure") != null) {
             String mail = req.getParameter("assureEmail");
             User byEmail = User.getByEmail(mail);
@@ -375,7 +381,24 @@ public class Manager extends Page {
             fetchMails(req, resp, mail);
             return;
         }
+        HashMap<String, Object> vars = new HashMap<>();
+        vars.put("cats_types", new IterableDataset() {
 
-        form.output(resp.getWriter(), getLanguage(req), new HashMap<String, Object>());
+            CATSType[] type = CATSType.values();
+
+            int i = 0;
+
+            @Override
+            public boolean next(Language l, Map<String, Object> vars) {
+                if (i >= type.length) {
+                    return false;
+                }
+                CATSType t = type[i++];
+                vars.put("id", i - 1);
+                vars.put("name", t.getDisplayName());
+                return true;
+            }
+        });
+        form.output(resp.getWriter(), getLanguage(req), vars);
     }
 }
index 8c32a8c9c3a8ad49094c9193209d8bf620b41230..d1cb1f62732ae612d2c55b27ad5d3341d8e7ea81 100644 (file)
@@ -45,6 +45,11 @@ Add CATs entry:
 </td><td>
 Email: <input type="text" name="catsEmail"/>
 </td><td>
+<select name="catsType">
+<? foreach($cats_types) { ?>
+<option value="<?=$id?>"><?=$name?></option>
+<? } ?>
+</select>
 <input type="submit" value="Add CATs" name="cats"/>
 </td></tr>
 <tr><td>