X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2Forga%2FCreateOrgForm.java;h=194fe529ce7a997f7a08ce94389393a1e2f073bf;hp=4cd37b9a7705e0dd755ab5ba9424b4bd1a4d0ea0;hb=680b03f826182ea5d743b9fa6bc4b5b16e001e10;hpb=cd14b85c60f736a643842b421b11f41d8fca86c7 diff --git a/src/org/cacert/gigi/pages/orga/CreateOrgForm.java b/src/org/cacert/gigi/pages/orga/CreateOrgForm.java index 4cd37b9a..194fe529 100644 --- a/src/org/cacert/gigi/pages/orga/CreateOrgForm.java +++ b/src/org/cacert/gigi/pages/orga/CreateOrgForm.java @@ -6,9 +6,14 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.dbObjects.CountryCode; +import org.cacert.gigi.dbObjects.CountryCode.CountryCodeType; import org.cacert.gigi.dbObjects.Organisation; +import org.cacert.gigi.email.EmailProvider; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.template.Form; +import org.cacert.gigi.output.template.IterableDataset; +import org.cacert.gigi.output.template.SprintfCommand; import org.cacert.gigi.output.template.Template; import org.cacert.gigi.pages.LoginPage; @@ -26,32 +31,100 @@ public class CreateOrgForm extends Form { private String l = ""; + private String email = ""; + + private String optionalName = ""; + + private String postalAddress = ""; + + private boolean isEdit = false; + + private CountryCode[] countryCode; + public CreateOrgForm(HttpServletRequest hsr) { super(hsr); + try { + countryCode = CountryCode.getCountryCodes(CountryCodeType.CODE_2_CHARS); + } catch (GigiApiException e) { + throw new Error(e); // should not happen + } } public CreateOrgForm(HttpServletRequest hsr, Organisation t) { - super(hsr); + this(hsr); + isEdit = true; result = t; o = t.getName(); c = t.getState(); st = t.getProvince(); l = t.getCity(); + email = t.getContactEmail(); + optionalName = t.getOptionalName(); + postalAddress = t.getPostalAddress(); } @Override public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException { - o = req.getParameter("O"); - c = req.getParameter("C"); - st = req.getParameter("ST"); - l = req.getParameter("L"); - if (result != null) { - result.update(o, c, st, l); + String action = req.getParameter("action"); + if (action == null) { + return false; + } + + if (action.equals("new")) { + checkCertData(req); + checkOrganisationData(req); + Organisation ne = new Organisation(o, c, st, l, email, optionalName, postalAddress, LoginPage.getUser(req)); + result = ne; + return true; + } else if (action.equals("updateOrganisationData")) { + checkOrganisationData(req); + result.updateOrgData(email, optionalName, postalAddress); return true; + } else if (action.equals("updateCertificateData")) { + checkCertData(req); + result.updateCertData(o, c, st, l); + return true; + } + + return false; + } + + private void checkOrganisationData(HttpServletRequest req) throws GigiApiException { + email = extractParam(req, "contact"); + optionalName = extractParam(req, "optionalName"); + postalAddress = extractParam(req, "postalAddress"); + if ( !EmailProvider.isValidMailAddress(email)) { + throw new GigiApiException("Contact email is not a valid email address"); } - Organisation ne = new Organisation(o, c, st, l, LoginPage.getUser(req)); - result = ne; - return true; + } + + private void checkCertData(HttpServletRequest req) throws GigiApiException { + o = extractParam(req, "O"); + c = extractParam(req, "C").toUpperCase(); + st = extractParam(req, "ST"); + l = extractParam(req, "L"); + + if (o.length() > 64 || o.length() < 1) { + throw new GigiApiException(SprintfCommand.createSimple("{0} not given or longer than {1} characters", "Organisation name", 64)); + } + + CountryCode.checkCountryCode(c, CountryCodeType.CODE_2_CHARS); + + if (st.length() > 128 || st.length() < 1) { + throw new GigiApiException(SprintfCommand.createSimple("{0} not given or longer than {1} characters", "State/county", 128)); + } + + if (l.length() > 128 || l.length() < 1) { + throw new GigiApiException(SprintfCommand.createSimple("{0} not given or longer than {1} characters", "Town/suburb", 128)); + } + } + + private String extractParam(HttpServletRequest req, String name) { + String parameter = req.getParameter(name); + if (parameter == null) { + return ""; + } + return parameter.trim(); } public Organisation getResult() { @@ -64,6 +137,34 @@ public class CreateOrgForm extends Form { vars.put("C", c); vars.put("ST", st); vars.put("L", this.l); + vars.put("email", email); + vars.put("optionalName", optionalName); + vars.put("postalAddress", postalAddress); + vars.put("countryCode", new IterableDataset() { + + int i = 0; + + @Override + public boolean next(Language l, Map vars) { + if (i >= countryCode.length) { + return false; + } + CountryCode t = countryCode[i++]; + vars.put("id", t.getId()); + vars.put("cc", t.getCountryCode()); + vars.put("display", t.getCountry()); + if (t.getCountryCode().equals(c)) { + vars.put("selected", "selected"); + } else { + vars.put("selected", ""); + } + return true; + } + }); + // vars.put("countryCode", countryCode); + if (isEdit) { + vars.put("edit", true); + } t.output(out, l, vars); } }