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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import sun.security.x509.X509Key;
import club.wpia.gigi.Gigi;
import club.wpia.gigi.GigiApiException;
import club.wpia.gigi.crypto.SPKAC;
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;
+import club.wpia.gigi.dbObjects.DomainPingConfiguration;
+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.util.HTMLEncoder;
import club.wpia.gigi.util.Notary;
import club.wpia.gigi.util.TimeConditions;
+import sun.security.x509.X509Key;
public class Manager extends Page {
ps.setString(6, getRandomCountry().getCode());
ps.execute();
}
+ new Contract(u, ContractType.RA_AGENT_CONTRACT);
return u;
}
}
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"));
}
@Override
- public void ping(Domain domain, String configuration, CertificateOwner target, int confId) {
- System.out.println("Test: " + domain);
+ public DomainPingExecution ping(Domain domain, String configuration, CertificateOwner target, DomainPingConfiguration conf) {
+ System.err.println("TestManager: " + domain.getSuffix());
if (pingExempt.contains(domain.getSuffix())) {
- enterPingResult(confId, DomainPinger.PING_SUCCEDED, "Succeeded by TestManager pass-by", null);
+ return enterPingResult(conf, DomainPinger.PING_SUCCEDED, "Succeeded by TestManager pass-by", null);
} else {
- dps.get(dpt).ping(domain, configuration, target, confId);
+ DomainPinger pinger = dps.get(dpt);
+ System.err.println("Forward to old pinger: " + pinger);
+ return pinger.ping(domain, configuration, target, conf);
}
}
@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");
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) {
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.</br>");
+ 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 = "<br/>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("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) {
}
}
} 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();
resp.getWriter().println("An internal error occured.");
} catch (GigiApiException e) {
- e.format(resp.getWriter(), Language.getInstance(Locale.ENGLISH));
+ 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);
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 {
e1.printStackTrace();
resp.getWriter().println("error");
} catch (GigiApiException e) {
- e.format(resp.getWriter(), Language.getInstance(Locale.ENGLISH));
+ e.format(resp.getWriter(), Language.getInstance(Locale.ENGLISH), getDefaultVars(req));
}
} else if (req.getParameter("addExDom") != null) {
pingExempt.remove(dom);
resp.getWriter().println("Updated domains exempt from pings. Current set: <br/>");
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("<br/><a href='" + PATH + "'>Go back</a>");
}
+ 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<String> mails = emails.get(mail);
HashMap<String, Object> vars = new HashMap<>();