From 0176ca7cda25ad88e9faa116ffa139ca926de273 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Thu, 7 Apr 2016 13:36:17 +0200 Subject: [PATCH] add: nucleus assurance --- .../gigi/database/DatabaseConnection.java | 2 +- .../cacert/gigi/database/tableStructure.sql | 6 ++--- .../cacert/gigi/database/upgrade/from_8.sql | 3 +++ src/org/cacert/gigi/dbObjects/Assurance.java | 2 +- src/org/cacert/gigi/dbObjects/Group.java | 2 +- src/org/cacert/gigi/util/Notary.java | 25 +++++++++++++++++++ .../org/cacert/gigi/pages/Manager.templ | 1 + 7 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 src/org/cacert/gigi/database/upgrade/from_8.sql diff --git a/src/org/cacert/gigi/database/DatabaseConnection.java b/src/org/cacert/gigi/database/DatabaseConnection.java index 525ce44f..bf7cd3be 100644 --- a/src/org/cacert/gigi/database/DatabaseConnection.java +++ b/src/org/cacert/gigi/database/DatabaseConnection.java @@ -99,7 +99,7 @@ public class DatabaseConnection { } - public static final int CURRENT_SCHEMA_VERSION = 8; + public static final int CURRENT_SCHEMA_VERSION = 9; public static final int CONNECTION_TIMEOUT = 24 * 60 * 60; diff --git a/src/org/cacert/gigi/database/tableStructure.sql b/src/org/cacert/gigi/database/tableStructure.sql index a6aaf385..e49b84af 100644 --- a/src/org/cacert/gigi/database/tableStructure.sql +++ b/src/org/cacert/gigi/database/tableStructure.sql @@ -262,7 +262,7 @@ CREATE INDEX ON "jobs" ("state"); DROP TABLE IF EXISTS "notary"; DROP TYPE IF EXISTS "notaryType"; -CREATE TYPE "notaryType" AS enum('Face to Face Meeting', 'TOPUP', 'TTP-Assisted'); +CREATE TYPE "notaryType" AS enum('Face to Face Meeting', 'TOPUP', 'TTP-Assisted', 'Nucleus Bonus'); CREATE TABLE "notary" ( "id" serial NOT NULL, @@ -327,7 +327,7 @@ CREATE TABLE IF NOT EXISTS "arbitrations" ( DROP TABLE IF EXISTS "user_groups"; DROP TYPE IF EXISTS "userGroup"; -CREATE TYPE "userGroup" AS enum('supporter','arbitrator','blockedassuree','blockedassurer','blockedlogin','ttp-assurer','ttp-applicant', 'codesigning', 'orgassurer', 'blockedcert'); +CREATE TYPE "userGroup" AS enum('supporter','arbitrator','blockedassuree','blockedassurer','blockedlogin','ttp-assurer','ttp-applicant', 'codesigning', 'orgassurer', 'blockedcert', 'nucleus-assurer'); CREATE TABLE IF NOT EXISTS "user_groups" ( "id" serial NOT NULL, @@ -374,7 +374,7 @@ CREATE TABLE "schemeVersion" ( "version" smallint NOT NULL, PRIMARY KEY ("version") ); -INSERT INTO "schemeVersion" (version) VALUES(8); +INSERT INTO "schemeVersion" (version) VALUES(9); DROP TABLE IF EXISTS `passwordResetTickets`; CREATE TABLE `passwordResetTickets` ( diff --git a/src/org/cacert/gigi/database/upgrade/from_8.sql b/src/org/cacert/gigi/database/upgrade/from_8.sql new file mode 100644 index 00000000..7e20cf36 --- /dev/null +++ b/src/org/cacert/gigi/database/upgrade/from_8.sql @@ -0,0 +1,3 @@ +ALTER TYPE "notaryType" ADD VALUE 'Nucleus Bonus'; + +ALTER TYPE "userGroup" ADD VALUE 'nucleus-assurer'; diff --git a/src/org/cacert/gigi/dbObjects/Assurance.java b/src/org/cacert/gigi/dbObjects/Assurance.java index 8f172e51..65a5a599 100644 --- a/src/org/cacert/gigi/dbObjects/Assurance.java +++ b/src/org/cacert/gigi/dbObjects/Assurance.java @@ -6,7 +6,7 @@ import org.cacert.gigi.dbObjects.wrappers.DataContainer; public class Assurance { public enum AssuranceType { - FACE_TO_FACE("Face to Face Meeting"), TOPUP("TOPUP"), TTP_ASSISTED("TTP-Assisted"); + FACE_TO_FACE("Face to Face Meeting"), TOPUP("TOPUP"), TTP_ASSISTED("TTP-Assisted"), NUCLEUS("Nucleus Bonus"); private final String description; diff --git a/src/org/cacert/gigi/dbObjects/Group.java b/src/org/cacert/gigi/dbObjects/Group.java index 685c27e1..296b4dfa 100644 --- a/src/org/cacert/gigi/dbObjects/Group.java +++ b/src/org/cacert/gigi/dbObjects/Group.java @@ -4,7 +4,7 @@ import org.cacert.gigi.database.GigiPreparedStatement; import org.cacert.gigi.database.GigiResultSet; public enum Group { - SUPPORTER("supporter"), ARBITRATOR("arbitrator"), BLOCKEDASSURER("blockedassurer"), BLOCKEDASSUREE("blockedassuree"), BLOCKEDLOGIN("blockedlogin"), BLOCKEDCERT("blockedcert"), TTP_ASSURER("ttp-assurer"), TTP_APPLICANT("ttp-applicant"), CODESIGNING("codesigning"), ORGASSURER("orgassurer"); + SUPPORTER("supporter"), ARBITRATOR("arbitrator"), BLOCKEDASSURER("blockedassurer"), BLOCKEDASSUREE("blockedassuree"), BLOCKEDLOGIN("blockedlogin"), BLOCKEDCERT("blockedcert"), TTP_ASSURER("ttp-assurer"), TTP_APPLICANT("ttp-applicant"), CODESIGNING("codesigning"), ORGASSURER("orgassurer"), NUCLEUS_ASSURER("nucleus-assurer"); private final String dbName; diff --git a/src/org/cacert/gigi/util/Notary.java b/src/org/cacert/gigi/util/Notary.java index 2f3a3aec..aa806fa9 100644 --- a/src/org/cacert/gigi/util/Notary.java +++ b/src/org/cacert/gigi/util/Notary.java @@ -129,6 +129,8 @@ public class Notary { if (type == AssuranceType.FACE_TO_FACE) { assureF2F(assurer, assuree, awarded, location, date); + } else if (type == AssuranceType.NUCLEUS) { + assureNucleus(assurer, assuree, awarded, location, date); } else if (type == AssuranceType.TTP_ASSISTED) { assureTTP(assurer, assuree, awarded, location, date); } else { @@ -189,4 +191,27 @@ public class Notary { } throw new GigiApiException("Assurance type not possible."); } + + private static void assureNucleus(User assurer, User assuree, int awarded, String location, String date) throws GigiApiException { + may(assurer, assuree, AssuranceType.NUCLEUS); + // Do up to 35 points as f2f + int f2fPoints = Math.min(35, awarded); + assureF2F(assurer, assuree, f2fPoints, location, date); + + awarded -= f2fPoints; + if (awarded <= 0) { + return; + } + + // Assure remaining points as "Nucleus Bonus" + // Valid for 4 Weeks = 28 days + try (GigiPreparedStatement ps = new GigiPreparedStatement("INSERT INTO `notary` SET `from`=?, `to`=?, `points`=?, `location`=?, `date`=?, `method`='Nucleus Bonus', `expire` = CURRENT_TIMESTAMP + interval '28 days'")) { + ps.setInt(1, assurer.getId()); + ps.setInt(2, assuree.getId()); + ps.setInt(3, awarded); + ps.setString(4, location); + ps.setString(5, date); + ps.execute(); + } + } } diff --git a/util-testing/org/cacert/gigi/pages/Manager.templ b/util-testing/org/cacert/gigi/pages/Manager.templ index 434ccf97..9735e9a5 100644 --- a/util-testing/org/cacert/gigi/pages/Manager.templ +++ b/util-testing/org/cacert/gigi/pages/Manager.templ @@ -24,6 +24,7 @@ Email: + -- 2.39.2