X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Fclub%2Fwpia%2Fgigi%2Fpages%2Fadmin%2Fsupport%2FFindCertPage.java;fp=src%2Fclub%2Fwpia%2Fgigi%2Fpages%2Fadmin%2Fsupport%2FFindCertPage.java;h=0d2edbc9bb9032feeb6701a2c3b304621d43d463;hp=0000000000000000000000000000000000000000;hb=bccd4cc0dba0f89aa045b113bac46eb8cc1dab4e;hpb=c9ed09f0007fc2c813815be927a5a24b23dab83c diff --git a/src/club/wpia/gigi/pages/admin/support/FindCertPage.java b/src/club/wpia/gigi/pages/admin/support/FindCertPage.java new file mode 100644 index 00000000..0d2edbc9 --- /dev/null +++ b/src/club/wpia/gigi/pages/admin/support/FindCertPage.java @@ -0,0 +1,89 @@ +package club.wpia.gigi.pages.admin.support; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import club.wpia.gigi.dbObjects.Certificate; +import club.wpia.gigi.dbObjects.Certificate.SubjectAlternateName; +import club.wpia.gigi.localisation.Language; +import club.wpia.gigi.output.ArrayIterable; +import club.wpia.gigi.output.template.Form; +import club.wpia.gigi.output.template.IterableDataset; +import club.wpia.gigi.output.template.SprintfCommand; +import club.wpia.gigi.pages.LoginPage; +import club.wpia.gigi.pages.Page; +import club.wpia.gigi.pages.account.certs.Certificates; +import club.wpia.gigi.util.AuthorizationContext; + +public class FindCertPage extends Page { + + public static final String PATH = "/support/find/certs"; + + public FindCertPage() { + super("Find Certificate"); + } + + @Override + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + new FindCertForm(req).output(resp.getWriter(), Page.getLanguage(req), new HashMap()); + } + + @Override + public boolean beforePost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + return Form.getForm(req, FindCertForm.class).submitExceptionProtected(req, resp); + } + + @Override + public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + if ( !Form.printFormErrors(req, resp.getWriter())) { + final Certificate[] certs = ((FindCertForm.FindResult) req.getAttribute(Form.SUBMIT_RESULT)).getCerts(); + if (certs.length == 1) { + resp.sendRedirect(Certificates.SUPPORT_PATH + "/" + certs[0].getSerial()); + } else { + HashMap vars = new HashMap(); + Language l = LoginPage.getLanguage(req); + if (certs.length >= 100) { + vars.put("limit", l.getTranslation("100 or more entries available, only the first 100 are displayed.")); + } else { + vars.put("limit", SprintfCommand.createSimple("{0} entries found", certs.length)); + } + vars.put("certtable", new ArrayIterable(certs) { + + @Override + public void apply(Certificate t, Language l, Map vars) { + vars.put("id", t.getId()); + vars.put("serial", t.getSerial()); + + final List san = t.getSANs(); + vars.put("san", new IterableDataset() { + + int j = 0; + + @Override + public boolean next(Language l, Map vars) { + if (j == san.size()) { + return false; + } + vars.put("entry", san.get(j).getName() + (j < san.size() - 1 ? ", " : "")); + j++; + return true; + } + + }); + } + }); + getDefaultTemplate().output(resp.getWriter(), getLanguage(req), vars); + } + } + } + + @Override + public boolean isPermitted(AuthorizationContext ac) { + return ac != null && ac.canSupport(); + } +}