1 package club.wpia.gigi.pages.admin.support;
3 import java.io.IOException;
4 import java.util.HashMap;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
10 import club.wpia.gigi.dbObjects.Domain;
11 import club.wpia.gigi.dbObjects.EmailAddress;
12 import club.wpia.gigi.dbObjects.SupportedUser;
13 import club.wpia.gigi.dbObjects.User;
14 import club.wpia.gigi.localisation.Language;
15 import club.wpia.gigi.output.template.Form;
16 import club.wpia.gigi.output.template.IterableDataset;
17 import club.wpia.gigi.output.template.Form.CSRFException;
18 import club.wpia.gigi.pages.LoginPage;
19 import club.wpia.gigi.pages.ManagedMultiFormPage;
20 import club.wpia.gigi.util.AuthorizationContext;
22 public class SupportUserDetailsPage extends ManagedMultiFormPage {
24 public static final String PATH = "/support/user/";
26 public SupportUserDetailsPage() {
27 super("Support: User Details");
31 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
32 User user = getUser(req, resp);
36 SupportedUser targetUser = new SupportedUser(user, getUser(req), LoginPage.getAuthorizationContext(req).getSupporterTicketId());
37 outputContents(req, resp, user, new SupportRevokeCertificatesForm(req, targetUser), new SupportUserDetailsForm(req, targetUser));
40 private User getUser(HttpServletRequest req, HttpServletResponse resp) throws IOException {
42 if ( !req.getPathInfo().endsWith("/")) {
46 String[] idP = req.getPathInfo().split("/");
48 id = Integer.parseInt(idP[idP.length - 1]);
49 } catch (NumberFormatException e) {
53 final User user = User.getById(id);
57 private void outputContents(HttpServletRequest req, HttpServletResponse resp, final User user, SupportRevokeCertificatesForm certificatesForm, SupportUserDetailsForm f) throws IOException {
58 HashMap<String, Object> vars = new HashMap<String, Object>();
59 vars.put("details", f);
60 final EmailAddress[] addrs = user.getEmails();
61 vars.put("emails", new IterableDataset() {
66 public boolean next(Language l, Map<String, Object> vars) {
67 for (; i < addrs.length;) {
68 EmailAddress secAddress = addrs[i++];
69 String address = secAddress.getAddress();
70 if ( !address.equals(user.getEmail())) {
71 vars.put("secmail", address);
72 vars.put("status", l.getTranslation(secAddress.isVerified() ? "verified" : "not verified"));
80 final Domain[] doms = user.getDomains();
81 vars.put("domains", new IterableDataset() {
83 private int point = 0;
86 public boolean next(Language l, Map<String, Object> vars) {
87 if (point >= doms.length) {
90 Domain domain = doms[point];
91 vars.put("domain", domain.getSuffix());
92 vars.put("status", l.getTranslation(domain.isVerified() ? "verified" : "not verified"));
98 vars.put("certifrevoke", certificatesForm);
99 getDefaultTemplate().output(resp.getWriter(), getLanguage(req), vars);
103 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
104 User user = getUser(req, resp);
108 if (Form.printFormErrors(req, resp.getWriter())) {
109 Form f = getForm(req);
110 SupportedUser targetUser = new SupportedUser(user, getUser(req), LoginPage.getAuthorizationContext(req).getSupporterTicketId());
112 if (f instanceof SupportUserDetailsForm) {
113 outputContents(req, resp, user, new SupportRevokeCertificatesForm(req, targetUser), (SupportUserDetailsForm) f);
114 } else if (f instanceof SupportRevokeCertificatesForm) {
115 outputContents(req, resp, user, (SupportRevokeCertificatesForm) f, new SupportUserDetailsForm(req, targetUser));
122 public boolean isPermitted(AuthorizationContext ac) {
123 return ac != null && ac.canSupport();
127 public Form getForm(HttpServletRequest req) throws CSRFException {
128 if (req.getParameter("revokeall") != null) {
129 return Form.getForm(req, SupportRevokeCertificatesForm.class);
130 } else if (req.getParameter("detailupdate") != null || req.getParameter("resetPass") != null || req.getParameter("removeGroup") != null || req.getParameter("addGroup") != null) {
131 return Form.getForm(req, SupportUserDetailsForm.class);