From 4c8b6366533470495cfc5fb384a494cbc61abfea Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Thu, 31 Mar 2016 19:26:26 +0200 Subject: [PATCH] upd: better error reporting from cert-gen api --- src/org/cacert/gigi/GigiApiException.java | 22 ++++++++++++++++++- .../cacert/gigi/api/CreateCertificate.java | 9 +++++--- .../output/template/TranslateCommand.java | 4 ++++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/org/cacert/gigi/GigiApiException.java b/src/org/cacert/gigi/GigiApiException.java index 944fe645..c2a60e69 100644 --- a/src/org/cacert/gigi/GigiApiException.java +++ b/src/org/cacert/gigi/GigiApiException.java @@ -13,6 +13,8 @@ import org.cacert.gigi.output.template.TranslateCommand; public class GigiApiException extends Exception { + private static final Language PLAIN_LANGUAGE = Language.getInstance(Locale.ENGLISH); + private static final long serialVersionUID = -164928670180852588L; private SQLException e; @@ -68,6 +70,24 @@ public class GigiApiException extends Exception { } + public void formatPlain(PrintWriter out) { + if (isInternalError()) { + out.println(PLAIN_LANGUAGE.getTranslation("An internal error ouccured.")); + } + HashMap map = new HashMap<>(); + for (Outputable message : messages) { + if (message instanceof TranslateCommand) { + String m = ((TranslateCommand) message).getRaw(); + // Skip HTML Entities + out.println(PLAIN_LANGUAGE.getTranslation(m)); + } else { + map.clear(); + message.output(out, PLAIN_LANGUAGE, map); + out.println(); + } + } + } + public boolean isEmpty() { return e == null && messages.size() == 0; } @@ -81,7 +101,7 @@ public class GigiApiException extends Exception { HashMap map = new HashMap<>(); for (Outputable message : messages) { map.clear(); - message.output(pw, Language.getInstance(Locale.ENGLISH), map); + message.output(pw, PLAIN_LANGUAGE, map); } pw.flush(); diff --git a/src/org/cacert/gigi/api/CreateCertificate.java b/src/org/cacert/gigi/api/CreateCertificate.java index a8462857..d21b9c47 100644 --- a/src/org/cacert/gigi/api/CreateCertificate.java +++ b/src/org/cacert/gigi/api/CreateCertificate.java @@ -1,6 +1,7 @@ package org.cacert.gigi.api; import java.io.IOException; +import java.io.PrintWriter; import java.security.GeneralSecurityException; import javax.servlet.http.HttpServletRequest; @@ -48,11 +49,13 @@ public class CreateCertificate extends APIPoint { resp.getWriter().println(PEM.encode("CERTIFICATE", result.cert().getEncoded())); return; } catch (GeneralSecurityException e) { - e.printStackTrace(); + resp.sendError(500, "Crypto failed"); } catch (GigiApiException e) { - e.printStackTrace(); + resp.setStatus(500); + PrintWriter wr = resp.getWriter(); + e.formatPlain(wr); } catch (InterruptedException e) { - e.printStackTrace(); + resp.sendError(500, "Interrupted"); } } } diff --git a/src/org/cacert/gigi/output/template/TranslateCommand.java b/src/org/cacert/gigi/output/template/TranslateCommand.java index cae48a63..7b7014e0 100644 --- a/src/org/cacert/gigi/output/template/TranslateCommand.java +++ b/src/org/cacert/gigi/output/template/TranslateCommand.java @@ -18,4 +18,8 @@ public final class TranslateCommand implements Outputable { public void output(PrintWriter out, Language l, Map vars) { out.print(HTMLEncoder.encodeHTML(l.getTranslation(raw))); } + + public String getRaw() { + return raw; + } } -- 2.39.2