]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java
upd: use a more strict pattern for handling forms
[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.pages.LoginPage;
22
23 public class SupportUserDetailsForm extends Form {
24
25     private static final Template t = new Template(FindUserByDomainForm.class.getResource("SupportUserDetailsForm.templ"));
26
27     private SupportedUser user;
28
29     private DateSelector dobSelector;
30
31     private GroupSelector value = new GroupSelector("groupToModify", true);
32
33     private boolean wasWithPasswordReset = false;
34
35     public SupportUserDetailsForm(HttpServletRequest hsr, SupportedUser user) {
36         super(hsr);
37         this.user = user;
38         dobSelector = new DateSelector("dobd", "dobm", "doby", user.getTargetUser().getDoB());
39     }
40
41     @Override
42     public boolean submit(HttpServletRequest req) throws GigiApiException {
43         if (user.getTicket() == null) {
44             throw new GigiApiException("No ticket number set.");
45         }
46         if (user.getTargetUser() == LoginPage.getUser(req)) {
47             throw new GigiApiException("Supporter may not modify himself.");
48         }
49         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) {
50             throw new GigiApiException("More than one action requested!");
51         }
52         if (req.getParameter("addGroup") != null || req.getParameter("removeGroup") != null) {
53             value.update(req);
54             Group toMod = value.getGroup();
55             if (req.getParameter("addGroup") != null) {
56                 user.grant(toMod);
57             } else {
58                 user.revoke(toMod);
59             }
60             return true;
61         }
62         if (req.getParameter("resetPass") != null) {
63             String aword = req.getParameter("aword");
64             if (aword == null || aword.equals("")) {
65                 throw new GigiApiException("An A-Word is required to perform a password reset.");
66             }
67             user.triggerPasswordReset(aword, req);
68             wasWithPasswordReset = true;
69             return true;
70         }
71         dobSelector.update(req);
72         if ( !dobSelector.isValid()) {
73             throw new GigiApiException("Invalid date of birth!");
74         }
75         user.setDob(dobSelector.getDate());
76         return true;
77     }
78
79     public boolean wasWithPasswordReset() {
80         return wasWithPasswordReset;
81     }
82
83     @Override
84     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
85         User user = this.user.getTargetUser();
86         vars.put("mail", user.getEmail());
87         vars.put("status", l.getTranslation(user.isValidEmail(user.getEmail()) ? "verified" : "not verified"));
88         vars.put("exNames", new ArrayIterable<Name>(user.getNames()) {
89
90             @Override
91             public void apply(Name t, Language l, Map<String, Object> vars) {
92                 vars.put("name", t);
93                 vars.put("points", Integer.toString(t.getAssurancePoints()));
94             }
95
96         });
97         vars.put("assurer", user.canAssure());
98         vars.put("dob", dobSelector);
99         vars.put("assurancepoints", user.getAssurancePoints());
100         vars.put("exppoints", user.getExperiencePoints());
101         final Set<Group> gr = user.getGroups();
102         vars.put("support-groups", new GroupIterator(gr.iterator(), true));
103         vars.put("groups", new GroupIterator(gr.iterator(), false));
104         vars.put("groupSelector", value);
105         t.output(out, l, vars);
106     }
107
108 }