package org.cacert.gigi.pages.admin.support;
import java.io.IOException;
-import java.security.GeneralSecurityException;
-import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.cacert.gigi.dbObjects.Certificate;
-import org.cacert.gigi.dbObjects.CertificateProfile;
+import org.cacert.gigi.GigiApiException;
+import org.cacert.gigi.dbObjects.Domain;
import org.cacert.gigi.dbObjects.EmailAddress;
+import org.cacert.gigi.dbObjects.SupportedUser;
import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.localisation.Language;
-import org.cacert.gigi.output.DateSelector;
+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);
final EmailAddress[] addrs = user.getEmails();
@Override
public boolean next(Language l, Map<String, Object> vars) {
- String address = addrs[i].getAddress();
- if ( !address.equals(user.getEmail())) {
- vars.put("secmail", address);
+ 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;
+ }
}
- i++;
- return i != addrs.length - 1;
+ return false;
}
});
- final Certificate[] certs = user.getCertificates(true);
- final CertificateProfile[] profiles = CertificateProfile.getAll();
- vars.put("types", new IterableDataset() {
- int typeIndex = 0;
+ 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 (typeIndex > profiles.length - 1) {
+ if (point >= doms.length) {
return false;
}
- int valid = 0;
- int total = 0;
- long lastExpire = Long.MIN_VALUE;
- for (int i = 0; i < certs.length; i++) {
- try {
- if (certs[i].getProfile().getId() != profiles[typeIndex].getId()) {
- continue;
- }
- total++;
- certs[i].cert().checkValidity();
- lastExpire = Math.max(lastExpire, certs[i].cert().getNotAfter().getTime());
- valid++;
- } catch (GeneralSecurityException | IOException e) {
- continue;
- }
- }
- vars.put("total", total);
- vars.put("profile", profiles[typeIndex].getVisibleName());
- vars.put("valid", valid);
- vars.put("exp", total - valid);
- vars.put("rev", "TODO");
- if (lastExpire == Long.MIN_VALUE) {
- vars.put("lastdate", "-");
- } else {
- vars.put("lastdate", DateSelector.getDateFormat().format(new Date(lastExpire)));
- }
- typeIndex++;
+ 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, targetUser));
getDefaultTemplate().output(resp.getWriter(), getLanguage(req), vars);
}
+
+ @Override
+ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
+ try {
+ 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();
+ e.format(resp.getWriter(), getLanguage(req));
+ }
+ super.doPost(req, resp);
+ }
+
+ @Override
+ public boolean isPermitted(AuthorizationContext ac) {
+ return ac != null && ac.canSupport();
+ }
}