X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2Forga%2FViewOrgPage.java;h=49833e572b55a00baf600d3fa8cd130128905f47;hb=d23d7a6fa9dc38c6193fea70017e0bff11257be5;hp=06ed58fd8797b8bfe95fe62f83d842074d2e4028;hpb=5f0c781007ae0ddce24057654a0ab095bc2a2b5b;p=gigi.git diff --git a/src/org/cacert/gigi/pages/orga/ViewOrgPage.java b/src/org/cacert/gigi/pages/orga/ViewOrgPage.java index 06ed58fd..49833e57 100644 --- a/src/org/cacert/gigi/pages/orga/ViewOrgPage.java +++ b/src/org/cacert/gigi/pages/orga/ViewOrgPage.java @@ -3,6 +3,7 @@ package org.cacert.gigi.pages.orga; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; @@ -12,15 +13,20 @@ import org.cacert.gigi.GigiApiException; import org.cacert.gigi.dbObjects.Organisation; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.localisation.Language; -import org.cacert.gigi.output.Form; +import org.cacert.gigi.output.template.Form; import org.cacert.gigi.output.template.IterableDataset; import org.cacert.gigi.output.template.Template; +import org.cacert.gigi.pages.LoginPage; import org.cacert.gigi.pages.Page; +import org.cacert.gigi.pages.account.domain.DomainManagementForm; +import org.cacert.gigi.util.AuthorizationContext; public class ViewOrgPage extends Page { private final Template orgas = new Template(ViewOrgPage.class.getResource("ViewOrgs.templ")); + private final Template mainTempl = new Template(ViewOrgPage.class.getResource("EditOrg.templ")); + public static final String DEFAULT_PATH = "/orga"; public ViewOrgPage() { @@ -28,14 +34,44 @@ public class ViewOrgPage extends Page { } @Override - public boolean isPermitted(User u) { - return u != null && u.isInGroup(CreateOrgPage.ORG_ASSURER); + public boolean isPermitted(AuthorizationContext ac) { + return ac != null && (ac.isInGroup(CreateOrgPage.ORG_ASSURER) || ac.getActor().getOrganisations(true).size() != 0); } @Override public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { try { - Form.getForm(req, CreateOrgForm.class).submit(resp.getWriter(), req); + User u = LoginPage.getUser(req); + if (req.getParameter("do_affiliate") != null || req.getParameter("del") != null) { + AffiliationForm form = Form.getForm(req, AffiliationForm.class); + if (form.submit(resp.getWriter(), req)) { + resp.sendRedirect(DEFAULT_PATH + "/" + form.getOrganisation().getId()); + } + return; + } else { + if ( !u.isInGroup(CreateOrgPage.ORG_ASSURER)) { + resp.sendError(403, "Access denied"); + return; + } + + if (req.getParameter("addDomain") != null) { + OrgDomainAddForm form = Form.getForm(req, OrgDomainAddForm.class); + if (form.submit(resp.getWriter(), req)) { + resp.sendRedirect(DEFAULT_PATH + "/" + form.getOrganisation().getId()); + } + } else if (req.getParameter("delete") != null) { + DomainManagementForm form = Form.getForm(req, DomainManagementForm.class); + if (form.submit(resp.getWriter(), req)) { + resp.sendRedirect(DEFAULT_PATH + "/" + form.getTarget().getId()); + } + } else { + CreateOrgForm form = Form.getForm(req, CreateOrgForm.class); + if (form.submit(resp.getWriter(), req)) { + resp.sendRedirect(DEFAULT_PATH + "/" + form.getResult().getId()); + } + } + } + } catch (GigiApiException e) { e.format(resp.getWriter(), getLanguage(req)); } @@ -43,39 +79,67 @@ public class ViewOrgPage extends Page { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + User u = LoginPage.getUser(req); String idS = req.getPathInfo(); Language lang = getLanguage(req); PrintWriter out = resp.getWriter(); if (idS.length() < DEFAULT_PATH.length() + 2) { final Organisation[] orgas = Organisation.getOrganisations(0, 30); HashMap map = new HashMap<>(); - map.put("orgas", new IterableDataset() { - - int count = 0; - - @Override - public boolean next(Language l, Map vars) { - if (count >= orgas.length) - return false; - Organisation org = orgas[count++]; - System.out.println(org.getId()); - vars.put("id", Integer.toString(org.getId())); - vars.put("name", org.getName()); - vars.put("country", org.getState()); - return true; - } - }); + final List myOrgs = u.getOrganisations(true); + final boolean orgAss = u.isInGroup(CreateOrgPage.ORG_ASSURER); + if (orgAss) { + map.put("orgas", makeOrgDataset(orgas)); + } else { + map.put("orgas", makeOrgDataset(myOrgs.toArray(new Organisation[myOrgs.size()]))); + } this.orgas.output(out, lang, map); return; } idS = idS.substring(DEFAULT_PATH.length() + 1); int id = Integer.parseInt(idS); - Organisation o = Organisation.getById(id); - if (o == null) { + Organisation o; + try { + o = Organisation.getById(id); + } catch (IllegalArgumentException e) { resp.sendError(404); return; } - new CreateOrgForm(req, o).output(out, lang, new HashMap()); - out.println(lang.getTranslation("WARNING: updating the data will revoke all issued certificates.")); + final List myOrgs = u.getOrganisations(); + final boolean orgAss = u.isInGroup(CreateOrgPage.ORG_ASSURER); + if ( !orgAss && !myOrgs.contains(o)) { + resp.sendError(404); + return; + } + HashMap vars = new HashMap<>(); + if (orgAss) { + vars.put("editForm", new CreateOrgForm(req, o)); + vars.put("affForm", new AffiliationForm(req, o)); + vars.put("mgmDom", new DomainManagementForm(req, o, true)); + vars.put("addDom", new OrgDomainAddForm(req, o)); + } else { + vars.put("affForm", new AffiliationForm(req, o)); + vars.put("orgName", o.getName()); + } + mainTempl.output(out, lang, vars); + } + + private IterableDataset makeOrgDataset(final Organisation[] orgas) { + return new IterableDataset() { + + int count = 0; + + @Override + public boolean next(Language l, Map vars) { + if (count >= orgas.length) { + return false; + } + Organisation org = orgas[count++]; + vars.put("id", Integer.toString(org.getId())); + vars.put("name", org.getName()); + vars.put("country", org.getState()); + return true; + } + }; } }