From 0c207a41dca8c839e5e52cee0299d95887b374fe Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Thu, 4 Sep 2014 19:33:39 +0200 Subject: [PATCH] UPD: cleanup notary-assurance API --- .../cacert/gigi/pages/wot/AssuranceForm.java | 40 ++++--------- src/org/cacert/gigi/pages/wot/AssurePage.java | 10 ++-- src/org/cacert/gigi/util/Notary.java | 60 ++++++++++++------- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/org/cacert/gigi/pages/wot/AssuranceForm.java b/src/org/cacert/gigi/pages/wot/AssuranceForm.java index 3df39942..bb378dfb 100644 --- a/src/org/cacert/gigi/pages/wot/AssuranceForm.java +++ b/src/org/cacert/gigi/pages/wot/AssuranceForm.java @@ -2,21 +2,19 @@ package org.cacert.gigi.pages.wot; import java.io.PrintWriter; import java.sql.SQLException; -import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.Form; import org.cacert.gigi.output.template.Template; import org.cacert.gigi.pages.Page; import org.cacert.gigi.util.Notary; -import org.cacert.gigi.util.Notary.AssuranceResult; public class AssuranceForm extends Form { @@ -58,40 +56,28 @@ public class AssuranceForm extends Form { outputError(out, req, "You failed to check all boxes to validate" + " your adherence to the rules and policies of CAcert"); } - if (req.getParameter("date") == null || req.getParameter("date").equals("")) { - outputError(out, req, "You must enter the date when you met the assuree."); - } else { - try { - Date d = sdf.parse(req.getParameter("date")); - if (d.getTime() > System.currentTimeMillis()) { - outputError(out, req, "You must not enter a date in the future."); - } - } catch (ParseException e) { - outputError(out, req, "You must enter the date in this format: YYYY-MM-DD."); - } - } - // check location, min 3 characters - if (req.getParameter("location") == null || req.getParameter("location").equals("")) { - outputError(out, req, "You failed to enter a location of your meeting."); - } else if (req.getParameter("location").length() <= 2) { - outputError(out, req, "You must enter a location with at least 3 characters eg town and country."); - } - // TODO checkPoints + int pointsI = 0; String points = req.getParameter("points"); if (points == null || "".equals(points)) { outputError(out, req, "For an assurance, you need to enter points."); + } else { + try { + pointsI = Integer.parseInt(points); + } catch (NumberFormatException e) { + outputError(out, req, "The points entered were not a number."); + } } + if (isFailed(out)) { return false; } try { - AssuranceResult success = Notary.assure(Page.getUser(req), assuree, Integer.parseInt(req.getParameter("points")), req.getParameter("location"), req.getParameter("date")); - if (success != AssuranceResult.ASSURANCE_SUCCEDED) { - outputError(out, req, success.getMessage()); - } - return success == AssuranceResult.ASSURANCE_SUCCEDED; + Notary.assure(Page.getUser(req), assuree, pointsI, req.getParameter("location"), req.getParameter("date")); + return true; } catch (SQLException e) { e.printStackTrace(); + } catch (GigiApiException e) { + e.format(out, Page.getLanguage(req)); } return false; diff --git a/src/org/cacert/gigi/pages/wot/AssurePage.java b/src/org/cacert/gigi/pages/wot/AssurePage.java index 3c58b5bc..f87afd07 100644 --- a/src/org/cacert/gigi/pages/wot/AssurePage.java +++ b/src/org/cacert/gigi/pages/wot/AssurePage.java @@ -10,6 +10,7 @@ import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.output.DateSelector; @@ -18,7 +19,6 @@ import org.cacert.gigi.output.template.Template; import org.cacert.gigi.pages.LoginPage; import org.cacert.gigi.pages.Page; import org.cacert.gigi.util.Notary; -import org.cacert.gigi.util.Notary.AssuranceResult; public class AssurePage extends Page { @@ -56,10 +56,10 @@ public class AssurePage extends Page { private void outputForm(HttpServletRequest req, PrintWriter out, AssuranceForm form) { User myself = LoginPage.getUser(req); - AssuranceResult check = Notary.checkAssuranceIsPossible(myself, form.getAssuree()); - if (check != AssuranceResult.ASSURANCE_SUCCEDED) { - out.println(translate(req, check.getMessage())); - return; + try { + Notary.checkAssuranceIsPossible(myself, form.getAssuree()); + } catch (GigiApiException e) { + e.format(out, Page.getLanguage(req)); } form.output(out, getLanguage(req), new HashMap()); diff --git a/src/org/cacert/gigi/util/Notary.java b/src/org/cacert/gigi/util/Notary.java index 46a2c3ad..7f937236 100644 --- a/src/org/cacert/gigi/util/Notary.java +++ b/src/org/cacert/gigi/util/Notary.java @@ -3,9 +3,13 @@ package org.cacert.gigi.util; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.text.ParseException; +import java.util.Date; +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.dbObjects.User; +import org.cacert.gigi.output.DateSelector; public class Notary { @@ -20,9 +24,9 @@ public class Notary { q.execute(); } - public static AssuranceResult checkAssuranceIsPossible(User assurer, User target) { + public static void checkAssuranceIsPossible(User assurer, User target) throws GigiApiException { if (assurer.getId() == target.getId()) { - return AssuranceResult.CANNOT_ASSURE_SELF; + throw new GigiApiException("You cannot assure yourself."); } try { PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT 1 FROM `notary` where `to`=? and `from`=? AND `deleted`=0"); @@ -31,43 +35,54 @@ public class Notary { ResultSet rs = ps.executeQuery(); if (rs.next()) { rs.close(); - return AssuranceResult.ALREADY_ASSUREED; + throw new GigiApiException("You have already assured this member."); } rs.close(); if ( !assurer.canAssure()) { - return AssuranceResult.NO_ASSURER; + throw new GigiApiException("You are not an assurer."); } } catch (SQLException e) { - e.printStackTrace(); + throw new GigiApiException(e); } - return AssuranceResult.ASSURANCE_SUCCEDED; } - public enum AssuranceResult { - NO_ASSURER("You are not an assurer."), ALREADY_ASSUREED("You already assured this person."), CANNOT_ASSURE_SELF("Cannot assure myself."), ASSURANCE_SUCCEDED(""), ASSUREE_CHANGED("Person details changed. Please start over again."), POINTS_OUT_OF_RANGE("Points out of range."); + public synchronized static void assure(User assurer, User target, int awarded, String location, String date) throws SQLException, GigiApiException { + GigiApiException gae = new GigiApiException(); - private final String message; - - private AssuranceResult(String message) { - this.message = message; + if (date == null || date.equals("")) { + gae.mergeInto(new GigiApiException("You must enter the date when you met the assuree.")); + } else { + try { + Date d = DateSelector.getDateFormat().parse(date); + if (d.getTime() > System.currentTimeMillis()) { + gae.mergeInto(new GigiApiException("You must not enter a date in the future.")); + } + } catch (ParseException e) { + gae.mergeInto(new GigiApiException("You must enter the date in this format: YYYY-MM-DD.")); + } } - - public String getMessage() { - return message; + // check location, min 3 characters + if (location == null || location.equals("")) { + gae.mergeInto(new GigiApiException("You failed to enter a location of your meeting.")); + } else if (location.length() <= 2) { + gae.mergeInto(new GigiApiException("You must enter a location with at least 3 characters eg town and country.")); } - } - public synchronized static AssuranceResult assure(User assurer, User target, int awarded, String location, String date) throws SQLException { - AssuranceResult can = checkAssuranceIsPossible(assurer, target); - if (can != AssuranceResult.ASSURANCE_SUCCEDED) { - return can; + try { + checkAssuranceIsPossible(assurer, target); + } catch (GigiApiException e) { + gae.mergeInto(e); } + User u = new User(target.getId()); if ( !u.equals(target)) { - return AssuranceResult.ASSUREE_CHANGED; + gae.mergeInto(new GigiApiException("The person you are assuring changed his personal details.")); } if (awarded > assurer.getMaxAssurePoints() || awarded < 0) { - return AssuranceResult.POINTS_OUT_OF_RANGE; + gae.mergeInto(new GigiApiException("The points you are trying to award are out of range.")); + } + if ( !gae.isEmpty()) { + throw gae; } PreparedStatement ps = DatabaseConnection.getInstance().prepare("INSERT INTO `notary` SET `from`=?, `to`=?, `points`=?, `location`=?, `date`=?"); @@ -79,6 +94,5 @@ public class Notary { ps.execute(); assurer.invalidateMadeAssurances(); target.invalidateReceivedAssurances(); - return AssuranceResult.ASSURANCE_SUCCEDED; } } -- 2.39.2