X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2Faccount%2FMyDetailsForm.java;h=f5b6f514fc6c3c9eca77816f5ab00a8b1d1eeefe;hp=4faa66276d98d44971ce1f1ba93793062fb8cea0;hb=abff88a2bf173198fe55c35ead97c9c7cdb5924c;hpb=cfccf094c856476a7618edfe4dc8ff1c2e198b1a diff --git a/src/org/cacert/gigi/pages/account/MyDetailsForm.java b/src/org/cacert/gigi/pages/account/MyDetailsForm.java index 4faa6627..f5b6f514 100644 --- a/src/org/cacert/gigi/pages/account/MyDetailsForm.java +++ b/src/org/cacert/gigi/pages/account/MyDetailsForm.java @@ -1,92 +1,166 @@ package org.cacert.gigi.pages.account; -import java.io.InputStreamReader; import java.io.PrintWriter; -import java.sql.SQLException; import java.util.Map; +import java.util.Set; + import javax.servlet.http.HttpServletRequest; import org.cacert.gigi.GigiApiException; -import org.cacert.gigi.User; +import org.cacert.gigi.dbObjects.Group; +import org.cacert.gigi.dbObjects.Name; +import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.localisation.Language; -import org.cacert.gigi.output.CertificateValiditySelector; +import org.cacert.gigi.output.ArrayIterable; +import org.cacert.gigi.output.CountrySelector; import org.cacert.gigi.output.DateSelector; -import org.cacert.gigi.output.Form; +import org.cacert.gigi.output.GroupIterator; +import org.cacert.gigi.output.GroupSelector; +import org.cacert.gigi.output.NameInput; +import org.cacert.gigi.output.template.Form; import org.cacert.gigi.output.template.Template; -import org.cacert.gigi.pages.Page; -import org.cacert.gigi.util.HTMLEncoder; public class MyDetailsForm extends Form { - private static Template assured = new Template(MyDetails.class.getResource("MyDetailsFormAssured.templ")); + private static final Template assured = new Template(MyDetails.class.getResource("MyDetailsFormAssured.templ")); - private static Template templ; - static { - templ = new Template(new InputStreamReader(MyDetailsForm.class.getResourceAsStream("MyDetailsForm.templ"))); - } + private static final Template templ = new Template(MyDetailsForm.class.getResource("MyDetailsForm.templ")); + + private static final Template names = new Template(MyDetailsForm.class.getResource("NamesForm.templ")); + + private static final Template roles = new Template(MyDetailsForm.class.getResource("MyDetailsRoles.templ")); private User target; private DateSelector ds; + private NameInput ni; + + private CountrySelector cs; + + private GroupSelector selectedGroup = new GroupSelector("groupToModify", false); + public MyDetailsForm(HttpServletRequest hsr, User target) { super(hsr); this.target = target; - this.ds = new DateSelector("day", "month", "year", target.getDob()); + ni = new NameInput(); + + this.ds = new DateSelector("day", "month", "year", target.getDoB()); + + if (target.getResidenceCountry() == null) { + this.cs = new CountrySelector("residenceCountry", true); + } else { + this.cs = new CountrySelector("residenceCountry", true, target.getResidenceCountry()); + } } @Override - public boolean submit(PrintWriter out, HttpServletRequest req) { + public SubmissionResult submit(HttpServletRequest req) throws GigiApiException { try { - if (target.getAssurancePoints() == 0) { - String newFname = req.getParameter("fname").trim(); - String newLname = req.getParameter("lname").trim(); - String newMname = req.getParameter("mname").trim(); - String newSuffix = req.getParameter("suffix").trim(); - if ((newFname.isEmpty() && !target.getFname().isEmpty()) || (newLname.isEmpty() && !target.getLname().isEmpty()) || (newMname.isEmpty() && !target.getMname().isEmpty()) || (newSuffix.isEmpty() && !target.getSuffix().isEmpty())) { - throw new GigiApiException("Names couldn't be removed."); + String rn = req.getParameter("removeName"); + if (rn != null) { + Name n = Name.getById(Integer.parseInt(rn)); + if (n.getOwner() != target) { + throw new GigiApiException("Cannot remove a name that does not belong to this account."); + } + if (n.equals(target.getPreferredName())) { + throw new GigiApiException("Cannot remove the account's preferred name."); + } + n.remove(); + return new RedirectResult(MyDetails.PATH); + } + String dn = req.getParameter("deprecateName"); + if (dn != null) { + Name n = Name.getById(Integer.parseInt(dn)); + if (n.getOwner() != target) { + throw new GigiApiException("Cannot deprecate a name that does not belong to this account."); + } + if (n.equals(target.getPreferredName())) { + throw new GigiApiException("Cannot deprecate the account's preferred name."); } - target.setFname(newFname); - target.setLname(newLname); - target.setMname(newMname); - target.setSuffix(newSuffix); + n.deprecate(); + return new RedirectResult(MyDetails.PATH); + } + String pn = req.getParameter("preferred"); + if (pn != null) { + Name n = Name.getById(Integer.parseInt(pn)); + target.setPreferredName(n); + return new RedirectResult(MyDetails.PATH); + } + + String action = req.getParameter("action"); + if ("addName".equals(action)) { + ni.update(req); + ni.createName(target); + return new RedirectResult(MyDetails.PATH); + } else if ("updateDoB".equals(action)) { ds.update(req); - target.setDob(ds.getDate()); - target.updateUserData(); + target.setDoB(ds.getDate()); + return new RedirectResult(MyDetails.PATH); + } else if ("updateResidenceCountry".equals(action)) { + cs.update(req); + target.setResidenceCountry(cs.getCountry()); + return new RedirectResult(MyDetails.PATH); + } else if ("addGroup".equals(action) || "removeGroup".equals(action)) { + selectedGroup.update(req); + Group toMod = selectedGroup.getGroup(); + if ("addGroup".equals(action)) { + target.grantGroup(target, toMod); + } else { + target.revokeGroup(target, toMod); + } + return new RedirectResult(MyDetails.PATH); } else { - throw new GigiApiException("No change after assurance allowed."); + throw new GigiApiException("Invalid action."); } - } catch (SQLException e) { - new GigiApiException(e).format(out, Page.getLanguage(req)); - return false; - } catch (GigiApiException e) { - e.format(out, Page.getLanguage(req)); - return false; + } catch (NumberFormatException e) { - new GigiApiException("Invalid value.").format(out, Page.getLanguage(req)); - return false; + throw new GigiApiException("Invalid value."); } - return false; } @Override protected void outputContent(PrintWriter out, Language l, Map vars) { - vars.put("fname", HTMLEncoder.encodeHTML(target.getFname())); - vars.put("mname", target.getMname() == null ? "" : HTMLEncoder.encodeHTML(target.getMname())); - vars.put("lname", HTMLEncoder.encodeHTML(target.getLname())); - vars.put("suffix", target.getSuffix() == null ? "" : HTMLEncoder.encodeHTML(target.getSuffix())); - vars.put("details", ""); - try { - if (target.getAssurancePoints() == 0) { - vars.put("DoB", ds); - templ.output(out, l, vars); - } else { - vars.put("DoB", CertificateValiditySelector.getDateFormat().format(target.getDob())); - assured.output(out, l, vars); + vars.put("exNames", new ArrayIterable(target.getNames()) { + + Name preferred = target.getPreferredName(); + + @Override + public void apply(Name t, Language l, Map vars) { + if (t.equals(preferred)) { + vars.put("preferred", " disabled"); + vars.put("deprecated", " disabled"); + } else { + if (t.isDeprecated()) { + vars.put("deprecated", " disabled"); + } else { + vars.put("deprecated", ""); + } + vars.put("preferred", ""); + } + vars.put("name", t); + vars.put("id", t.getId()); + vars.put("npoints", Integer.toString(t.getAssurancePoints())); } - } catch (SQLException e) { - e.printStackTrace(); + + }); + vars.put("name", ni); + names.output(out, l, vars); + + vars.put("residenceCountry", cs); + if (target.getReceivedAssurances().length == 0) { + vars.put("DoB", ds); + templ.output(out, l, vars); + } else { + vars.put("DoB", target.getDoB()); + assured.output(out, l, vars); } + + final Set gr = target.getGroups(); + vars.put("support-groups", new GroupIterator(gr.iterator(), true)); + vars.put("groups", new GroupIterator(gr.iterator(), false)); + vars.put("groupSelector", selectedGroup); + roles.output(out, l, vars); } }