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.Group;
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.IterableDataset;
+import org.cacert.gigi.pages.LoginPage;
import org.cacert.gigi.pages.Page;
+import org.cacert.gigi.util.AuthorizationContext;
public class SupportUserDetailsPage extends Page {
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 {
- int id;
+ int id = -1;
+ if ( !req.getPathInfo().endsWith("/")) {
+ resp.sendError(404);
+ }
String[] idP = req.getPathInfo().split("/");
- id = Integer.parseInt(idP[idP.length - 1]);
+ try {
+ id = Integer.parseInt(idP[idP.length - 1]);
+ } catch (NumberFormatException e) {
+ resp.sendError(404);
+ }
final User user = User.getById(id);
- SupportUserDetailsForm f = new SupportUserDetailsForm(req, user);
+ SupportedUser targetUser = new SupportedUser(user, getUser(req), LoginPage.getAuthorizationContext(req).getSupporterTicketId());
+ SupportUserDetailsForm f = new SupportUserDetailsForm(req, targetUser);
HashMap<String, Object> vars = new HashMap<String, Object>();
vars.put("details", f);
- String ticket = (String) req.getSession().getAttribute("ticketNo" + user.getId());
- vars.put("ticketNo", ticket);
final EmailAddress[] addrs = user.getEmails();
vars.put("emails", new IterableDataset() {
@Override
public boolean next(Language l, Map<String, Object> vars) {
- if (i == addrs.length) {
- return false;
+ for (; i < addrs.length;) {
+ 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;
+ }
}
- String address = addrs[i].getAddress();
- i++;
- if ( !address.equals(user.getEmail())) {
- vars.put("secmail", address);
+ return false;
+ }
+ });
+
+ final Domain[] doms = user.getDomains();
+ vars.put("domains", new IterableDataset() {
+
+ private int point = 0;
+
+ @Override
+ public boolean next(Language l, Map<String, Object> 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", new SupportRevokeCertificatesForm(req, new SupportedUser(user, getUser(req), ticket)));
- vars.put("tickethandling", new SupportEnterTicketForm(req, user));
+
+ vars.put("certifrevoke", new SupportRevokeCertificatesForm(req, targetUser));
getDefaultTemplate().output(resp.getWriter(), getLanguage(req), vars);
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
try {
- if (req.getParameter("setTicket") != null) {
-
- if ( !Form.getForm(req, SupportEnterTicketForm.class).submit(resp.getWriter(), req)) {
- throw new GigiApiException("Invalid ticket number!");
- }
- } else if (req.getParameter("revokeall") != null) {
+ 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 || req.getParameter("resetPass") != null || req.getParameter("removeGroup") != null || req.getParameter("addGroup") != null) {
+ if ( !Form.getForm(req, SupportUserDetailsForm.class).submit(resp.getWriter(), req)) {
+ throw new GigiApiException("No ticket number set.");
+ }
}
} catch (GigiApiException e) {
e.printStackTrace();
}
@Override
- public boolean isPermitted(User u) {
- if (u == null) {
- return false;
- }
- return u.isInGroup(Group.SUPPORTER);
+ public boolean isPermitted(AuthorizationContext ac) {
+ return ac != null && ac.canSupport();
}
}