X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2Fadmin%2Fsupport%2FSupportUserDetailsPage.java;h=eea69f6dbfcbb9ebe0961157b4b8c78bf920356d;hb=c9ed09f0007fc2c813815be927a5a24b23dab83c;hp=a3195367e2f8d32c955c4c3720d6381c366791bc;hpb=369a3af0785742c3895a6cebe1f3c4947c195696;p=gigi.git diff --git a/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsPage.java b/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsPage.java index a3195367..eea69f6d 100644 --- a/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsPage.java +++ b/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsPage.java @@ -7,37 +7,54 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.dbObjects.Domain; import org.cacert.gigi.dbObjects.EmailAddress; import org.cacert.gigi.dbObjects.SupportedUser; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.template.Form; +import org.cacert.gigi.output.template.Form.CSRFException; import org.cacert.gigi.output.template.IterableDataset; import org.cacert.gigi.pages.LoginPage; -import org.cacert.gigi.pages.Page; +import org.cacert.gigi.pages.ManagedMultiFormPage; import org.cacert.gigi.util.AuthorizationContext; -public class SupportUserDetailsPage extends Page { +public class SupportUserDetailsPage extends ManagedMultiFormPage { public static final String PATH = "/support/user/"; - public SupportUserDetailsPage(String title) { - super(title); + public SupportUserDetailsPage() { + super("Support: User Details"); } @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + User user = getUser(req, resp); + if (user == null) { + return; + } + SupportedUser targetUser = new SupportedUser(user, getUser(req), LoginPage.getAuthorizationContext(req).getSupporterTicketId()); + outputContents(req, resp, user, new SupportRevokeCertificatesForm(req, targetUser), new SupportUserDetailsForm(req, targetUser)); + } + + private User getUser(HttpServletRequest req, HttpServletResponse resp) throws IOException { int id = -1; + if ( !req.getPathInfo().endsWith("/")) { + resp.sendError(404); + return null; + } String[] idP = req.getPathInfo().split("/"); try { id = Integer.parseInt(idP[idP.length - 1]); } catch (NumberFormatException e) { resp.sendError(404); + return null; } final User user = User.getById(id); - SupportedUser targetUser = new SupportedUser(user, getUser(req), LoginPage.getAuthorizationContext(req).getSupporterTicketId()); - SupportUserDetailsForm f = new SupportUserDetailsForm(req, targetUser); + return user; + } + + private void outputContents(HttpServletRequest req, HttpServletResponse resp, final User user, SupportRevokeCertificatesForm certificatesForm, SupportUserDetailsForm f) throws IOException { HashMap vars = new HashMap(); vars.put("details", f); final EmailAddress[] addrs = user.getEmails(); @@ -48,40 +65,71 @@ public class SupportUserDetailsPage extends Page { @Override public boolean next(Language l, Map vars) { for (; i < addrs.length;) { - String address = addrs[i++].getAddress(); + EmailAddress secAddress = addrs[i++]; + String address = secAddress.getAddress(); if ( !address.equals(user.getEmail())) { vars.put("secmail", address); + vars.put("status", l.getTranslation(secAddress.isVerified() ? "verified" : "not verified")); return true; } } return false; } }); - vars.put("certifrevoke", new SupportRevokeCertificatesForm(req, targetUser)); + + final Domain[] doms = user.getDomains(); + vars.put("domains", new IterableDataset() { + + private int point = 0; + + @Override + public boolean next(Language l, Map vars) { + if (point >= doms.length) { + return false; + } + Domain domain = doms[point]; + vars.put("domain", domain.getSuffix()); + vars.put("status", l.getTranslation(domain.isVerified() ? "verified" : "not verified")); + point++; + return true; + } + }); + + vars.put("certifrevoke", certificatesForm); getDefaultTemplate().output(resp.getWriter(), getLanguage(req), vars); } @Override public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { - try { - if (req.getParameter("revokeall") != null) { - if ( !Form.getForm(req, SupportRevokeCertificatesForm.class).submit(resp.getWriter(), req)) { - throw new GigiApiException("No ticket number set."); - } - } else if (req.getParameter("detailupdate") != null) { - if ( !Form.getForm(req, SupportUserDetailsForm.class).submit(resp.getWriter(), req)) { - throw new GigiApiException("No ticket number set."); - } + User user = getUser(req, resp); + if (user == null) { + return; + } + if (Form.printFormErrors(req, resp.getWriter())) { + Form f = getForm(req); + SupportedUser targetUser = new SupportedUser(user, getUser(req), LoginPage.getAuthorizationContext(req).getSupporterTicketId()); + + if (f instanceof SupportUserDetailsForm) { + outputContents(req, resp, user, new SupportRevokeCertificatesForm(req, targetUser), (SupportUserDetailsForm) f); + } else if (f instanceof SupportRevokeCertificatesForm) { + outputContents(req, resp, user, (SupportRevokeCertificatesForm) f, new SupportUserDetailsForm(req, targetUser)); } - } catch (GigiApiException e) { - e.printStackTrace(); - e.format(resp.getWriter(), getLanguage(req)); } - super.doPost(req, resp); + } @Override public boolean isPermitted(AuthorizationContext ac) { return ac != null && ac.canSupport(); } + + @Override + public Form getForm(HttpServletRequest req) throws CSRFException { + if (req.getParameter("revokeall") != null) { + return Form.getForm(req, SupportRevokeCertificatesForm.class); + } else if (req.getParameter("detailupdate") != null || req.getParameter("resetPass") != null || req.getParameter("removeGroup") != null || req.getParameter("addGroup") != null) { + return Form.getForm(req, SupportUserDetailsForm.class); + } + return null; + } }