+ } else if (req.getParameter("addEmail") != null) {
+ User u = User.getByEmail(req.getParameter("addEmailEmail"));
+ try {
+ EmailAddress ea = new EmailAddress(u, req.getParameter("addEmailNew"), Locale.ENGLISH);
+ if (f != null) {
+ String hash = (String) f.get(ea);
+ ea.verify(hash);
+ resp.getWriter().println("Email added and verified");
+ } else {
+ resp.getWriter().println("Email added but verificatio failed.");
+ }
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ resp.getWriter().println("An internal error occured.");
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ resp.getWriter().println("An internal error occured.");
+ } catch (GigiApiException e) {
+ e.format(resp.getWriter(), Language.getInstance(Locale.ENGLISH));
+ }
+ } else if (req.getParameter("addCert") != null) {
+ User u = User.getByEmail(req.getParameter("addCertEmail"));
+ try {
+ KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
+ kpg.initialize(4096);
+ KeyPair kp = kpg.generateKeyPair();
+ SPKAC s = new SPKAC((X509Key) kp.getPublic(), "challange");
+ Signature sign = Signature.getInstance("SHA512withRSA");
+ sign.initSign(kp.getPrivate());
+
+ byte[] res = s.getEncoded(sign);
+
+ CertificateRequest cr = new CertificateRequest(new AuthorizationContext(u, u), Base64.getEncoder().encodeToString(res), "challange");
+ cr.update(CertificateRequest.DEFAULT_CN, Digest.SHA512.toString(), "client", null, "", "email:" + u.getEmail(), resp.getWriter(), req);
+ Certificate draft = cr.draft();
+ draft.issue(null, "2y", u).waitFor(10000);
+ if (draft.getStatus() == CertificateStatus.ISSUED) {
+ resp.getWriter().println("added certificate");
+ } else {
+ resp.getWriter().println("signer failed");
+ }
+ } catch (GeneralSecurityException e1) {
+ e1.printStackTrace();
+ resp.getWriter().println("error");
+ } catch (GigiApiException e) {
+ e.format(resp.getWriter(), Language.getInstance(Locale.ENGLISH));
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ resp.getWriter().println("interrupted");
+ }
+