]> WPIA git - gigi.git/blob - src/club/wpia/gigi/api/CATSResolve.java
chg: enhance type safety of serials
[gigi.git] / src / club / wpia / gigi / api / CATSResolve.java
1 package club.wpia.gigi.api;
2
3 import java.io.IOException;
4 import java.math.BigInteger;
5
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 import club.wpia.gigi.GigiApiException;
10 import club.wpia.gigi.dbObjects.Certificate;
11 import club.wpia.gigi.dbObjects.CertificateOwner;
12 import club.wpia.gigi.dbObjects.Organisation;
13 import club.wpia.gigi.dbObjects.User;
14 import club.wpia.gigi.util.ServerConstants;
15
16 public class CATSResolve extends CATSRestrictedApi {
17
18     public static final String PATH = "/cats/resolve";
19
20     @Override
21     public void processAuthenticated(HttpServletRequest req, HttpServletResponse resp) throws IOException {
22         String target = req.getParameter("serial");
23         if (target == null) {
24             resp.sendError(500, "Error, requires a serial parameter");
25             return;
26         }
27         BigInteger targetSerial;
28         try {
29             targetSerial = Certificate.normalizeSerial(target);
30         } catch (GigiApiException e) {
31             resp.sendError(500, "Error, requires valid serial");
32             return;
33         }
34         Certificate clientCert = Certificate.getBySerial(targetSerial);
35         if (clientCert == null) {
36             resp.sendError(500, "Error, requires valid serial");
37             return;
38         }
39         CertificateOwner o = CertificateOwner.getByEnabledSerial(targetSerial);
40         if (o instanceof Organisation) {
41             Organisation org = (Organisation) o;
42             if (org.isSelfOrganisation()) {
43                 if (hasMail(clientCert, ServerConstants.getQuizAdminMailAddress())) {
44                     resp.setContentType("text/plain; charset=UTF-8");
45                     resp.getWriter().print("admin");
46                     return;
47                 }
48             }
49         }
50         if ( !(o instanceof User)) {
51             resp.sendError(500, "Error, requires valid serial");
52             return;
53         }
54         resp.setContentType("text/plain; charset=UTF-8");
55         resp.getWriter().print(o.getId());
56     }
57 }