]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/pages/account/certs/Certificates.java
upd: allow exporting of whole cert chains via API
[gigi.git] / src / org / cacert / gigi / pages / account / certs / Certificates.java
index 799927fdb1ca21e6c390f06074c74231e7ad3bc3..d40bbaccb9981853eaefdf76a00c1e4caf8d551f 100644 (file)
@@ -4,7 +4,6 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URLEncoder;
 import java.security.GeneralSecurityException;
-import java.security.cert.X509Certificate;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -21,6 +20,7 @@ import org.cacert.gigi.output.template.Template;
 import org.cacert.gigi.pages.HandlesMixedRequest;
 import org.cacert.gigi.pages.LoginPage;
 import org.cacert.gigi.pages.Page;
+import org.cacert.gigi.util.CertExporter;
 import org.cacert.gigi.util.PEM;
 
 public class Certificates extends Page implements HandlesMixedRequest {
@@ -69,15 +69,12 @@ public class Certificates extends Page implements HandlesMixedRequest {
         boolean crt = false;
         boolean cer = false;
         resp.setContentType("application/pkix-cert");
+        if (req.getParameter("install") != null) {
+            resp.setContentType("application/x-x509-user-cert");
+        }
         if (pi.endsWith(".crt")) {
             crt = true;
             pi = pi.substring(0, pi.length() - 4);
-        } else if (pi.endsWith(".cer")) {
-            if (req.getParameter("install") != null) {
-                resp.setContentType("application/x-x509-user-cert");
-            }
-            cer = true;
-            pi = pi.substring(0, pi.length() - 4);
         } else if (pi.endsWith(".cer")) {
             cer = true;
             pi = pi.substring(0, pi.length() - 4);
@@ -85,29 +82,20 @@ public class Certificates extends Page implements HandlesMixedRequest {
         String serial = pi;
         try {
             Certificate c = Certificate.getBySerial(serial);
-            if (c == null || getUser(req).getId() != c.getOwner().getId()) {
+            if (c == null || LoginPage.getAuthorizationContext(req).getTarget().getId() != c.getOwner().getId()) {
                 resp.sendError(404);
                 return true;
             }
-            X509Certificate cert = c.cert();
             if ( !crt && !cer) {
                 return false;
             }
             ServletOutputStream out = resp.getOutputStream();
+            boolean doChain = req.getParameter("chain") != null;
+            boolean includeAnchor = req.getParameter("noAnchor") == null;
             if (crt) {
-                out.println(PEM.encode("CERTIFICATE", cert.getEncoded()));
-                if (req.getParameter("chain") != null) {
-                    CACertificate ca = c.getParent();
-                    while ( !ca.isSelfsigned()) {
-                        out.println(PEM.encode("CERTIFICATE", ca.getCertificate().getEncoded()));
-                        ca = ca.getParent();
-                    }
-                    if (req.getParameter("noAnchor") == null) {
-                        out.println(PEM.encode("CERTIFICATE", ca.getCertificate().getEncoded()));
-                    }
-                }
+                CertExporter.writeCertCrt(c, out, doChain, includeAnchor);
             } else if (cer) {
-                out.write(cert.getEncoded());
+                CertExporter.writeCertCer(c, out, doChain, includeAnchor);
             }
         } catch (IllegalArgumentException e) {
             resp.sendError(404);
@@ -142,7 +130,7 @@ public class Certificates extends Page implements HandlesMixedRequest {
 
             String serial = pi;
             Certificate c = Certificate.getBySerial(serial);
-            if (c == null || LoginPage.getUser(req).getId() != c.getOwner().getId()) {
+            if (c == null || LoginPage.getAuthorizationContext(req).getTarget().getId() != c.getOwner().getId()) {
                 resp.sendError(404);
                 return;
             }
@@ -150,7 +138,7 @@ public class Certificates extends Page implements HandlesMixedRequest {
             vars.put("serial", URLEncoder.encode(serial, "UTF-8"));
             vars.put("trustchain", new TrustchainIterable(c.getParent()));
             try {
-                vars.put("cert", c.cert());
+                vars.put("cert", PEM.encode("CERTIFICATE", c.cert().getEncoded()));
             } catch (GeneralSecurityException e) {
                 e.printStackTrace();
             }