]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java
add: password-reset with assurance from support side
[gigi.git] / src / org / cacert / gigi / pages / admin / support / SupportUserDetailsForm.java
1 package org.cacert.gigi.pages.admin.support;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.net.URLEncoder;
6 import java.util.Map;
7
8 import javax.servlet.http.HttpServletRequest;
9
10 import org.cacert.gigi.GigiApiException;
11 import org.cacert.gigi.dbObjects.Group;
12 import org.cacert.gigi.dbObjects.Name;
13 import org.cacert.gigi.dbObjects.SupportedUser;
14 import org.cacert.gigi.dbObjects.User;
15 import org.cacert.gigi.email.Sendmail;
16 import org.cacert.gigi.localisation.Language;
17 import org.cacert.gigi.output.DateSelector;
18 import org.cacert.gigi.output.template.Form;
19 import org.cacert.gigi.output.template.Template;
20 import org.cacert.gigi.pages.Page;
21 import org.cacert.gigi.pages.PasswordResetPage;
22 import org.cacert.gigi.util.RandomToken;
23 import org.cacert.gigi.util.ServerConstants;
24
25 public class SupportUserDetailsForm extends Form {
26
27     private static Template t;
28
29     private SupportedUser user;
30
31     private DateSelector dobSelector;
32
33     static {
34         t = new Template(FindDomainForm.class.getResource("SupportUserDetailsForm.templ"));
35     }
36
37     public SupportUserDetailsForm(HttpServletRequest hsr, SupportedUser user) {
38         super(hsr);
39         this.user = user;
40         dobSelector = new DateSelector("dobd", "dobm", "doby", user.getTargetUser().getDoB());
41     }
42
43     @Override
44     public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException {
45         if (user.getTicket() == null) {
46             return false;
47         }
48         if (req.getParameter("resetPass") != null) {
49             String aword = req.getParameter("aword");
50             if (aword == null || aword.equals("")) {
51                 throw new GigiApiException("An A-Word is required to perform a password reset.");
52             }
53             String ptok = RandomToken.generateToken(32);
54             int id = user.getTargetUser().generatePasswordResetTicket(Page.getUser(req), ptok, aword);
55             try {
56                 Language l = Language.getInstance(user.getTargetUser().getPreferredLocale());
57                 StringBuffer body = new StringBuffer();
58                 body.append(l.getTranslation("Hi,") + "\n\n");
59                 body.append(l.getTranslation("A password reset was triggered. Please enter the required text sent to you by support on this page: \nhttps://"));
60                 body.append(ServerConstants.getWwwHostNamePortSecure() + PasswordResetPage.PATH);
61                 body.append("?id=");
62                 body.append(id);
63                 body.append("&token=");
64                 body.append(URLEncoder.encode(ptok, "UTF-8"));
65                 body.append("\n");
66                 body.append("\n");
67                 body.append(l.getTranslation("Best regards"));
68                 body.append("\n");
69                 body.append(l.getTranslation("CAcert.org Support!"));
70                 Sendmail.getInstance().sendmail(user.getTargetUser().getEmail(), "[CAcert.org] " + l.getTranslation("Password reset by support."), body.toString(), "support@cacert.org", null, null, null, null, false);
71                 out.println(Page.getLanguage(req).getTranslation("Password reset successful."));
72             } catch (IOException e) {
73                 e.printStackTrace();
74             }
75             return true;
76         }
77         dobSelector.update(req);
78         String fname = req.getParameter("fname");
79         String mname = req.getParameter("mname");
80         String lname = req.getParameter("lname");
81         String suffix = req.getParameter("suffix");
82         if (fname == null || mname == null || lname == null | suffix == null) {
83             throw new GigiApiException("Incomplete request!");
84         }
85         if ( !dobSelector.isValid()) {
86             throw new GigiApiException("Invalid date of birth!");
87         }
88         Name newName = new Name(fname, lname, mname, suffix);
89         if (user.setDob(dobSelector.getDate()) | user.setName(newName)) {
90             user.submitSupportAction();
91         }
92         return true;
93     }
94
95     @Override
96     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
97         User user = this.user.getTargetUser();
98         Name name = user.getName();
99         vars.put("mail", user.getEmail());
100         vars.put("fname", name.getFname());
101         vars.put("mname", name.getMname());
102         vars.put("lname", name.getLname());
103         vars.put("suffix", name.getSuffix());
104         vars.put("assurer", user.canAssure());
105         vars.put("dob", dobSelector);
106         vars.put("blockedassurer", user.isInGroup(Group.BLOCKEDASSURER));
107         vars.put("codesign", user.isInGroup(Group.CODESIGNING));
108         vars.put("orgassurer", user.isInGroup(Group.ORGASSURER));
109         vars.put("assurancepoints", user.getAssurancePoints());
110         vars.put("blockedassuree", user.isInGroup(Group.BLOCKEDASSUREE));
111         vars.put("ttpassurer", user.isInGroup(Group.TTP_ASSURER));
112         vars.put("ttpapplicant", user.isInGroup(Group.TTP_APPLICANT));
113         vars.put("blockedlogin", user.isInGroup(Group.BLOCKEDLOGIN));
114         vars.put("supporter", user.isInGroup(Group.SUPPORTER));
115         vars.put("id", user.getId());
116         t.output(out, l, vars);
117     }
118
119 }