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;
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);
}
}
- 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;
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,
"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` (
--- /dev/null
+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');
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() {
names.put(res.getString(2), res.getInt(1));
}
}
- ASSURER_CHALLENGE_ID = getID(ASSURER_CHALLENGE_NAME);
}
public static synchronized int getID(String name) {
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);
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;
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;
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;
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());
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;
@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"));
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;
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();
}
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;
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;
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);
}
}
- 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;
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);
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);
}
}
</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>