]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java
fix: ResultSet.getDate is often wrong as it fetches day-precision times
[gigi.git] / src / org / cacert / gigi / pages / admin / support / SupportUserDetailsForm.java
1 package org.cacert.gigi.pages.admin.support;
2
3 import java.io.PrintWriter;
4 import java.util.Map;
5 import java.util.Set;
6
7 import javax.servlet.http.HttpServletRequest;
8
9 import org.cacert.gigi.GigiApiException;
10 import org.cacert.gigi.dbObjects.Group;
11 import org.cacert.gigi.dbObjects.Name;
12 import org.cacert.gigi.dbObjects.SupportedUser;
13 import org.cacert.gigi.dbObjects.User;
14 import org.cacert.gigi.localisation.Language;
15 import org.cacert.gigi.output.ArrayIterable;
16 import org.cacert.gigi.output.DateSelector;
17 import org.cacert.gigi.output.GroupIterator;
18 import org.cacert.gigi.output.GroupSelector;
19 import org.cacert.gigi.output.template.Form;
20 import org.cacert.gigi.output.template.Template;
21 import org.cacert.gigi.output.template.TranslateCommand;
22 import org.cacert.gigi.pages.LoginPage;
23
24 public class SupportUserDetailsForm extends Form {
25
26     private static final Template t = new Template(FindUserByDomainForm.class.getResource("SupportUserDetailsForm.templ"));
27
28     private SupportedUser user;
29
30     private DateSelector dobSelector;
31
32     private GroupSelector value = new GroupSelector("groupToModify", true);
33
34     public SupportUserDetailsForm(HttpServletRequest hsr, SupportedUser user) {
35         super(hsr);
36         this.user = user;
37         dobSelector = new DateSelector("dobd", "dobm", "doby", user.getTargetUser().getDoB());
38     }
39
40     @Override
41     public SubmissionResult submit(HttpServletRequest req) throws GigiApiException {
42         if (user.getTicket() == null) {
43             throw new GigiApiException("No ticket number set.");
44         }
45         if (user.getTargetUser() == LoginPage.getUser(req)) {
46             throw new GigiApiException("Supporter may not modify himself.");
47         }
48         if ((req.getParameter("detailupdate") != null ? 1 : 0) + (req.getParameter("addGroup") != null ? 1 : 0) + (req.getParameter("removeGroup") != null ? 1 : 0) + (req.getParameter("resetPass") != null ? 1 : 0) != 1) {
49             throw new GigiApiException("More than one action requested!");
50         }
51         if (req.getParameter("addGroup") != null || req.getParameter("removeGroup") != null) {
52             value.update(req);
53             Group toMod = value.getGroup();
54             if (req.getParameter("addGroup") != null) {
55                 user.grant(toMod);
56             } else {
57                 user.revoke(toMod);
58             }
59             return new RedirectResult(req.getPathInfo());
60         }
61         if (req.getParameter("resetPass") != null) {
62             String aword = req.getParameter("aword");
63             if (aword == null || aword.equals("")) {
64                 throw new GigiApiException("An A-Word is required to perform a password reset.");
65             }
66             user.triggerPasswordReset(aword, req);
67             return new SuccessMessageResult(new TranslateCommand("Password reset successful."));
68         }
69         dobSelector.update(req);
70         if ( !dobSelector.isValid()) {
71             throw new GigiApiException("Invalid date of birth!");
72         }
73         user.setDob(dobSelector.getDate());
74         return new RedirectResult(req.getPathInfo());
75     }
76
77     @Override
78     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
79         User user = this.user.getTargetUser();
80         vars.put("mail", user.getEmail());
81         vars.put("status", l.getTranslation(user.isValidEmail(user.getEmail()) ? "verified" : "not verified"));
82         vars.put("exNames", new ArrayIterable<Name>(user.getNames()) {
83
84             @Override
85             public void apply(Name t, Language l, Map<String, Object> vars) {
86                 vars.put("name", t);
87                 vars.put("points", Integer.toString(t.getAssurancePoints()));
88             }
89
90         });
91         vars.put("assurer", user.canAssure());
92         vars.put("dob", dobSelector);
93         vars.put("assurancepoints", user.getAssurancePoints());
94         vars.put("exppoints", user.getExperiencePoints());
95         final Set<Group> gr = user.getGroups();
96         vars.put("support-groups", new GroupIterator(gr.iterator(), true));
97         vars.put("groups", new GroupIterator(gr.iterator(), false));
98         vars.put("groupSelector", value);
99         t.output(out, l, vars);
100     }
101
102 }