]> WPIA git - gigi.git/blob - src/org/cacert/gigi/api/GigiAPI.java
Empty: Whitespace, serialVersionUID, final classes
[gigi.git] / src / org / cacert / gigi / api / GigiAPI.java
1 package org.cacert.gigi.api;
2
3 import java.io.IOException;
4 import java.io.InputStreamReader;
5 import java.security.GeneralSecurityException;
6 import java.security.cert.X509Certificate;
7
8 import javax.servlet.ServletException;
9 import javax.servlet.ServletInputStream;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 import org.cacert.gigi.GigiApiException;
15 import org.cacert.gigi.dbObjects.Certificate;
16 import org.cacert.gigi.dbObjects.Certificate.CertificateStatus;
17 import org.cacert.gigi.dbObjects.User;
18 import org.cacert.gigi.pages.LoginPage;
19 import org.cacert.gigi.pages.account.certs.CertificateRequest;
20 import org.cacert.gigi.util.Job;
21 import org.cacert.gigi.util.PEM;
22
23 public class GigiAPI extends HttpServlet {
24
25     private static final long serialVersionUID = 659963677032635817L;
26
27     @Override
28     protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
29         String pi = req.getPathInfo();
30         if (pi == null) {
31             return;
32         }
33         if (pi.equals("/security/csp/report")) {
34             ServletInputStream sis = req.getInputStream();
35             InputStreamReader isr = new InputStreamReader(sis, "UTF-8");
36             StringBuffer strB = new StringBuffer();
37             char[] buffer = new char[4 * 1024];
38             int len;
39             while ((len = isr.read(buffer)) > 0) {
40                 strB.append(buffer, 0, len);
41             }
42             System.out.println(strB);
43             return;
44         }
45         X509Certificate cert = LoginPage.getCertificateFromRequest(req);
46         if (cert == null) {
47             resp.sendError(403, "Error, cert authing required.");
48             return;
49         }
50         String serial = LoginPage.extractSerialFormCert(cert);
51         User u = LoginPage.fetchUserBySerial(serial);
52
53         if (pi.equals("/account/certs/new")) {
54
55             if ( !req.getMethod().equals("POST")) {
56                 resp.sendError(500, "Error, POST required.");
57                 return;
58             }
59             if (req.getQueryString() != null) {
60                 resp.sendError(500, "Error, no query String allowed.");
61                 return;
62             }
63             String csr = req.getParameter("csr");
64             if (csr == null) {
65                 resp.sendError(500, "Error, no CSR found");
66                 return;
67             }
68             try {
69                 CertificateRequest cr = new CertificateRequest(u, csr);
70                 Certificate result = cr.draft();
71                 Job job = result.issue(null, "2y");
72                 job.waitFor(60000);
73                 if (result.getStatus() != CertificateStatus.ISSUED) {
74                     resp.sendError(510, "Error, issuing timed out");
75                     return;
76                 }
77                 resp.getWriter().println(PEM.encode("CERTIFICATE", result.cert().getEncoded()));
78             } catch (GeneralSecurityException e) {
79                 e.printStackTrace();
80             } catch (GigiApiException e) {
81                 e.printStackTrace();
82             } catch (InterruptedException e) {
83                 e.printStackTrace();
84             }
85         }
86     }
87 }