X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2Faccount%2FIssueCertificateForm.java;h=da3a85b3a6f945abfa56acd02f0674fe74e4f178;hb=ed26a914878caf7fc51262a759d21f9313943cfa;hp=e8e50001506da91a20f7bd7c88e7b1b8b7ab1267;hpb=606cafcb5da873370c9b614d7951c164159681ad;p=gigi.git diff --git a/src/org/cacert/gigi/pages/account/IssueCertificateForm.java b/src/org/cacert/gigi/pages/account/IssueCertificateForm.java index e8e50001..da3a85b3 100644 --- a/src/org/cacert/gigi/pages/account/IssueCertificateForm.java +++ b/src/org/cacert/gigi/pages/account/IssueCertificateForm.java @@ -7,21 +7,19 @@ import java.security.PublicKey; import java.security.interfaces.DSAPublicKey; import java.security.interfaces.ECPublicKey; import java.security.interfaces.RSAPublicKey; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; import java.util.Base64; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.cacert.gigi.Certificate; import org.cacert.gigi.Digest; +import org.cacert.gigi.EmailAddress; import org.cacert.gigi.Language; import org.cacert.gigi.User; -import org.cacert.gigi.database.DatabaseConnection; +import org.cacert.gigi.Certificate.CSRType; import org.cacert.gigi.output.Form; import org.cacert.gigi.output.template.HashAlgorithms; import org.cacert.gigi.output.template.IterableDataset; @@ -39,6 +37,8 @@ import sun.security.pkcs10.PKCS10; public class IssueCertificateForm extends Form { User u; Digest selectedDigest = Digest.getDefault(); + boolean login; + String csr; private final static Template t = new Template(IssueCertificateForm.class.getResource("IssueCertificateForm.templ")); @@ -47,12 +47,19 @@ public class IssueCertificateForm extends Form { u = LoginPage.getUser(hsr); } + Certificate result; + private CSRType csrType; + + public Certificate getResult() { + return result; + } + @Override public boolean submit(PrintWriter out, HttpServletRequest req) { String csr = req.getParameter("CSR"); - String spkac = req.getParameter("spkac"); + String spkac = req.getParameter("SPKAC"); try { - if (csr != null && !"".equals(csr)) { + if (csr != null) { PKCS10 parsed = parseCSR(csr); out.println(parsed.getSubjectName().getCommonName()); out.println(parsed.getSubjectName().getCountry()); @@ -73,7 +80,33 @@ public class IssueCertificateForm extends Form { out.println(epk.getParams().getCurve()); } out.println("
digest: sha256
"); - + this.csr = csr; + this.csrType = CSRType.CSR; + } else if (spkac != null) { + this.csr = "SPKAC=" + spkac.replaceAll("[\r\n]", ""); + this.csrType = CSRType.SPKAC; + } else { + login = "1".equals(req.getParameter("login")); + String hashAlg = req.getParameter("hash_alg"); + if (hashAlg != null) { + selectedDigest = Digest.valueOf(hashAlg); + } + if (req.getParameter("CCA") == null) { + outputError(out, req, "You need to accept the CCA."); + return false; + } + System.out.println("issuing " + selectedDigest); + result = new Certificate(LoginPage.getUser(req).getId(), "/commonName=CAcert WoT User", + selectedDigest.toString(), this.csr, this.csrType); + try { + result.issue().waitFor(60000); + return true; + } catch (SQLException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return false; } } catch (IOException e) { e.printStackTrace(); @@ -83,19 +116,6 @@ public class IssueCertificateForm extends Form { return false; } - private void issue(HttpServletRequest req, HttpServletResponse resp, String csr) throws IOException { - Certificate c = new Certificate(LoginPage.getUser(req).getId(), "/commonName=CAcert WoT User", "sha256", csr); - c.issue(); - try { - c.waitFor(60000); - resp.sendRedirect(MailCertificates.PATH + "/" + c.getSerial()); - } catch (SQLException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - private PKCS10 parseCSR(String csr) throws IOException, GeneralSecurityException { csr = csr.replaceFirst("-----BEGIN (NEW )?CERTIFICATE REQUEST-----", ""); csr = csr.replaceFirst("-----END (NEW )?CERTIFICATE REQUEST-----", ""); @@ -111,33 +131,23 @@ public class IssueCertificateForm extends Form { HashMap vars2 = new HashMap(vars); vars2.put("CCA", "CCA"); - try { - PreparedStatement ps = DatabaseConnection.getInstance().prepare( - "SELECT `id`,`email` from `email` WHERE `memid`=? AND `deleted`=0"); - ps.setInt(1, u.getId()); - final ResultSet rs = ps.executeQuery(); - vars2.put("emails", new IterableDataset() { + final EmailAddress[] ea = u.getEmails(); + vars2.put("emails", new IterableDataset() { + int count; - @Override - public boolean next(Language l, Map vars) { - try { - if (!rs.next()) { - return false; - } - vars.put("id", rs.getString(1)); - vars.put("value", rs.getString(2)); - return true; - } catch (SQLException e) { - e.printStackTrace(); - } + @Override + public boolean next(Language l, Map vars) { + if (count >= ea.length) { return false; } - }); - vars2.put("hashs", new HashAlgorithms(selectedDigest)); - t.output(out, l, vars2); - } catch (SQLException e) { - e.printStackTrace(); - } + vars.put("id", ea[count].getId()); + vars.put("value", ea[count].getAddress()); + count++; + return true; + } + }); + vars2.put("hashs", new HashAlgorithms(selectedDigest)); + t.output(out, l, vars2); } }