X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=util-testing%2Fclub%2Fwpia%2Fgigi%2Fpages%2FManager.java;h=7dabe4f2720e1836dfa5e383df61a433ae80310f;hp=f48c5bed3d836c1d2a8542047bdfe9d30007eadc;hb=3889444cb95132e342e4b7156245dd032ed3b16b;hpb=39f9de33cf93e893cf61a3f21a2af61c7b1eebfc
diff --git a/util-testing/club/wpia/gigi/pages/Manager.java b/util-testing/club/wpia/gigi/pages/Manager.java
index f48c5bed..7dabe4f2 100644
--- a/util-testing/club/wpia/gigi/pages/Manager.java
+++ b/util-testing/club/wpia/gigi/pages/Manager.java
@@ -7,6 +7,7 @@ import java.security.GeneralSecurityException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
+import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Calendar;
@@ -36,6 +37,8 @@ import club.wpia.gigi.dbObjects.CATS.CATSType;
import club.wpia.gigi.dbObjects.Certificate;
import club.wpia.gigi.dbObjects.Certificate.CertificateStatus;
import club.wpia.gigi.dbObjects.CertificateOwner;
+import club.wpia.gigi.dbObjects.Contract;
+import club.wpia.gigi.dbObjects.Contract.ContractType;
import club.wpia.gigi.dbObjects.Country;
import club.wpia.gigi.dbObjects.Digest;
import club.wpia.gigi.dbObjects.Domain;
@@ -44,6 +47,7 @@ import club.wpia.gigi.dbObjects.DomainPingExecution;
import club.wpia.gigi.dbObjects.DomainPingType;
import club.wpia.gigi.dbObjects.EmailAddress;
import club.wpia.gigi.dbObjects.Group;
+import club.wpia.gigi.dbObjects.Name;
import club.wpia.gigi.dbObjects.NamePart;
import club.wpia.gigi.dbObjects.NamePart.NamePartType;
import club.wpia.gigi.dbObjects.User;
@@ -162,6 +166,9 @@ public class Manager extends Page {
ps.setString(6, getRandomCountry().getCode());
ps.execute();
}
+ if ( !Contract.hasSignedContract(u, ContractType.RA_AGENT_CONTRACT)) {
+ new Contract(u, ContractType.RA_AGENT_CONTRACT);
+ }
return u;
}
}
@@ -170,6 +177,17 @@ public class Manager extends Page {
CATS.enterResult(u, t, new Date(System.currentTimeMillis()), "en_EN", "1");
}
+ private void expireCATS(User u, CATSType t) {
+ try (GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `cats_passed` SET `pass_date`=? WHERE `user_id`=? AND `variant_id`=? AND `pass_date`>?")) {
+ ps.setTimestamp(1, new Timestamp(System.currentTimeMillis() - DayDate.MILLI_DAY * 367));
+ ps.setInt(2, u.getId());
+ ps.setInt(3, t.getId());
+ ps.setTimestamp(4, new Timestamp(System.currentTimeMillis() - DayDate.MILLI_DAY * 366));
+ ps.execute();
+ ps.close();
+ }
+ }
+
private static Manager instance;
private static final Template t = new Template(Manager.class.getResource("ManagerMails.templ"));
@@ -302,6 +320,7 @@ public class Manager extends Page {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ AuthorizationContext sessionAc = (AuthorizationContext) req.getSession().getAttribute(Gigi.AUTH_CONTEXT);
if (req.getParameter("create") != null) {
String prefix = req.getParameter("prefix");
String domain = req.getParameter("suffix");
@@ -325,17 +344,17 @@ public class Manager extends Page {
throw new Error(e);
}
} else if (req.getParameter("addpriv") != null || req.getParameter("delpriv") != null) {
- User u = User.getByEmail(req.getParameter("email"));
- if (u == null) {
+ User userByEmail = User.getByEmail(req.getParameter("email"));
+ if (userByEmail == null) {
resp.getWriter().println("User not found.");
return;
}
try {
if (req.getParameter("addpriv") != null) {
- u.grantGroup(getSupporter(), Group.getByString(req.getParameter("priv")));
+ userByEmail.grantGroup(getSupporter(), Group.getByString(req.getParameter("priv")));
resp.getWriter().println("Privilege granted");
} else {
- u.revokeGroup(getSupporter(), Group.getByString(req.getParameter("priv")));
+ userByEmail.revokeGroup(getSupporter(), Group.getByString(req.getParameter("priv")));
resp.getWriter().println("Privilege revoked");
}
} catch (GigiApiException e) {
@@ -346,69 +365,116 @@ 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");
+ String catsTypeId = req.getParameter("catsType");
User byEmail = User.getByEmail(mail);
if (byEmail == null) {
resp.getWriter().println("User not found.");
return;
}
- if (testId == null) {
+ if (catsTypeId == null) {
resp.getWriter().println("No test given.");
return;
}
- CATSType test = CATSType.values()[Integer.parseInt(testId)];
+ CATSType test = null;
+ try {
+ test = CATSType.values()[Integer.parseInt(catsTypeId)];
+ } catch (NumberFormatException e) {
+ resp.getWriter().println("No valid integer given.");
+ return;
+ }
passCATS(byEmail, test);
resp.getWriter().println("Test '" + test.getDisplayName() + "' was added to user account.");
+ } else if (req.getParameter("catsexpire") != null) {
+ String mail = req.getParameter("catsEmail");
+ String catsTypeId = req.getParameter("catsType");
+ User userByEmail = User.getByEmail(mail);
+ if (userByEmail == null) {
+ resp.getWriter().println("User not found.");
+ return;
+ }
+ if (catsTypeId == null) {
+ resp.getWriter().println("No test given.");
+ return;
+ }
+ CATSType test = null;
+ try {
+ test = CATSType.values()[Integer.parseInt(catsTypeId)];
+ } catch (NumberFormatException e) {
+ resp.getWriter().println("No valid integer given.");
+ return;
+ }
+ expireCATS(userByEmail, test);
+ resp.getWriter().println("Test '" + test.getDisplayName() + "' is set expired for user account.");
} else if (req.getParameter("verify") != null) {
String mail = req.getParameter("verifyEmail");
String verificationPoints = req.getParameter("verificationPoints");
- User byEmail = User.getByEmail(mail);
+ User userByEmail = User.getByEmail(mail);
- if (byEmail == null) {
+ if (userByEmail == null) {
resp.getWriter().println("User not found.");
return;
}
int vp = 0;
- int agentNumber = 0;
+ int verifications = 0;
+ String info = "";
try {
try {
vp = Integer.parseInt(verificationPoints);
} catch (NumberFormatException e) {
- throw new GigiApiException("No valid Verification Points entered.");
+ resp.getWriter().println("The value for Verification Points must be an integer.");
+ vp = 0;
}
- if (vp > 100) { // only allow max 100 Verification points
- vp = 100;
- }
+ int agentNumber = addVerificationPoints(vp, userByEmail);
while (vp > 0) {
int currentVP = 10;
if (vp < 10) {
currentVP = vp;
}
- Notary.verify(getAgent(agentNumber), byEmail, byEmail.getPreferredName(), byEmail.getDoB(), currentVP, "Testmanager Verify up code", validVerificationDateString(), VerificationType.FACE_TO_FACE, getRandomCountry());
+ if (Notary.checkVerificationIsPossible(getAgent(agentNumber), userByEmail.getPreferredName())) {
+
+ Notary.verify(getAgent(agentNumber), userByEmail, userByEmail.getPreferredName(), userByEmail.getDoB(), currentVP, "Testmanager Verify up code", validVerificationDateString(), VerificationType.FACE_TO_FACE, getRandomCountry());
+ vp -= currentVP;
+ verifications += 1;
+
+ }
agentNumber += 1;
- vp -= currentVP;
+ if (agentNumber >= agents.length) {
+ info = "
The limit of agents is reached. You cannot add any more Verification Points to the preferred name of this user using this method.";
+ break;
+ }
}
} catch (GigiApiException e) {
throw new Error(e);
}
- resp.getWriter().println("User has been verified " + agentNumber + " times.");
+ resp.getWriter().println("User has been verified " + verifications + " times." + info);
+ } else if (req.getParameter("verifyexpire") != null) {
+ String mail = req.getParameter("verifyEmail");
+ User byEmail = User.getByEmail(mail);
+ if (byEmail == null) {
+ resp.getWriter().println("User not found.");
+ return;
+ } else {
+ setVerificationDateToPast(byEmail.getPreferredName());
+ }
+
+ resp.getWriter().println("Verification set to time past the limit.");
} else if (req.getParameter("letverify") != null) {
String mail = req.getParameter("letverifyEmail");
- User byEmail = User.getByEmail(mail);
- if (byEmail == null || !byEmail.canVerify()) {
+ User userByEmail = User.getByEmail(mail);
+ if (userByEmail == null || !userByEmail.canVerify()) {
resp.getWriter().println("User not found, or found user is not allowed to verify.");
} else {
try {
for (int i = 0; i < 25; i++) {
User a = getAgent(i);
- Notary.verify(byEmail, a, a.getNames()[0], a.getDoB(), 10, "Testmanager exp up code", validVerificationDateString(), VerificationType.FACE_TO_FACE, getRandomCountry());
+ Notary.verify(userByEmail, a, a.getNames()[0], a.getDoB(), 10, "Testmanager exp up code", validVerificationDateString(), VerificationType.FACE_TO_FACE, getRandomCountry());
}
resp.getWriter().println("Successfully added experience points.");
} catch (GigiApiException e) {
@@ -416,9 +482,9 @@ public class Manager extends Page {
}
}
} else if (req.getParameter("addEmail") != null) {
- User u = User.getByEmail(req.getParameter("addEmailEmail"));
+ User userByEmail = User.getByEmail(req.getParameter("addEmailEmail"));
try {
- EmailAddress ea = new EmailAddress(u, req.getParameter("addEmailNew"), Locale.ENGLISH);
+ EmailAddress ea = new EmailAddress(userByEmail, req.getParameter("addEmailNew"), Locale.ENGLISH);
verify(ea.getAddress(), ea);
} catch (IllegalArgumentException e) {
e.printStackTrace();
@@ -427,7 +493,7 @@ public class Manager extends Page {
e.format(resp.getWriter(), Language.getInstance(Locale.ENGLISH), getDefaultVars(req));
}
} else if (req.getParameter("addCert") != null) {
- User u = User.getByEmail(req.getParameter("addCertEmail"));
+ User userByEmail = User.getByEmail(req.getParameter("addCertEmail"));
try {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(4096);
@@ -438,10 +504,10 @@ public class Manager extends Page {
byte[] res = s.getEncoded(sign);
- CertificateRequest cr = new CertificateRequest(new AuthorizationContext(u, u), Base64.getEncoder().encodeToString(res), "challenge");
- cr.update(CertificateRequest.DEFAULT_CN, Digest.SHA512.toString(), "client", null, "", "email:" + u.getEmail());
+ CertificateRequest cr = new CertificateRequest(new AuthorizationContext(userByEmail, userByEmail, sessionAc.isStronglyAuthenticated()), Base64.getEncoder().encodeToString(res), "challenge");
+ cr.update(CertificateRequest.DEFAULT_CN, Digest.SHA512.toString(), "client", null, "", "email:" + userByEmail.getEmail());
Certificate draft = cr.draft();
- draft.issue(null, "2y", u).waitFor(10000);
+ draft.issue(null, "2y", userByEmail).waitFor(10000);
if (draft.getStatus() == CertificateStatus.ISSUED) {
resp.getWriter().println("added certificate");
} else {
@@ -464,10 +530,54 @@ public class Manager extends Page {
pingExempt.remove(dom);
resp.getWriter().println("Updated domains exempt from pings. Current set:
");
resp.getWriter().println(HTMLEncoder.encodeHTML(pingExempt.toString()));
+ } else if (req.getParameter("makeAgent") != null) {
+ User userByEmail = User.getByEmail(req.getParameter("agentEmail"));
+ if (userByEmail == null) {
+ resp.getWriter().println("User not found, or found user is not allowed to verify.");
+ } else {
+ if (userByEmail.getVerificationPoints() < 100) {
+ addVerificationPoints(100, userByEmail);
+ }
+ if ( !userByEmail.hasPassedCATS()) {
+ passCATS(userByEmail, CATSType.AGENT_CHALLENGE);
+ }
+ if ( !Contract.hasSignedContract(userByEmail, Contract.ContractType.RA_AGENT_CONTRACT)) {
+ try {
+ new Contract(userByEmail, Contract.ContractType.RA_AGENT_CONTRACT);
+ } catch (GigiApiException e) {
+ throw new Error(e);
+ }
+ }
+ resp.getWriter().println("User has all requirements to be an RA Agent");
+ }
}
resp.getWriter().println("
Go back");
}
+ private int addVerificationPoints(int vp, User byEmail) throws Error {
+ int agentNumber = 0;
+
+ try {
+ if (vp > 100) { // only allow max 100 Verification points
+ vp = 100;
+ }
+
+ while (vp > 0) {
+ int currentVP = 10;
+ if (vp < 10) {
+ currentVP = vp;
+ }
+ Notary.verify(getAgent(agentNumber), byEmail, byEmail.getPreferredName(), byEmail.getDoB(), currentVP, "Testmanager Verify up code", validVerificationDateString(), VerificationType.FACE_TO_FACE, getRandomCountry());
+ agentNumber += 1;
+ vp -= currentVP;
+ }
+
+ } catch (GigiApiException e) {
+ throw new Error(e);
+ }
+ return agentNumber;
+ }
+
private void fetchMails(HttpServletRequest req, HttpServletResponse resp, String mail) throws IOException {
final LinkedList mails = emails.get(mail);
HashMap vars = new HashMap<>();
@@ -536,4 +646,18 @@ public class Manager extends Page {
form.output(resp.getWriter(), getLanguage(req), vars);
}
+
+ private static void setVerificationDateToPast(Name name) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ Calendar c = Calendar.getInstance();
+ c.setTimeInMillis(System.currentTimeMillis());
+ c.add(Calendar.MONTH, -TimeConditions.getInstance().getVerificationMonths());
+ String date = sdf.format(new Date(c.getTimeInMillis()));
+ GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `notary` SET `date`=? WHERE `to`=? AND `date`>?");
+ ps.setString(1, date);
+ ps.setInt(2, name.getId());
+ ps.setString(3, date);
+ ps.execute();
+ ps.close();
+ }
}