From ec155eec51606c19970c9099ef23f700fb6aa53a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Thu, 19 May 2016 14:46:08 +0200 Subject: [PATCH] additional lang-cleanup Change-Id: Iaa547ef712d05f53455a8b4805eff41686c13dd8 --- src/org/cacert/gigi/Gigi.java | 2 +- .../cacert/gigi/dbObjects/Certificate.java | 21 ++++++++++++++----- src/org/cacert/gigi/dbObjects/Digest.java | 11 ++++++---- src/org/cacert/gigi/dbObjects/Group.java | 9 ++++++++ .../gigi/output/CertificateIterable.java | 2 +- .../cacert/gigi/output/HashAlgorithms.java | 2 +- .../output/template/ForeachStatement.java | 8 ++++++- .../gigi/output/template/IfStatement.java | 11 +++++++++- .../template/OutputVariableCommand.java | 6 +++++- .../gigi/output/template/SprintfCommand.java | 8 ++++++- .../cacert/gigi/output/template/Template.java | 11 +++++++--- .../gigi/output/template/TemplateBlock.java | 13 +++++++++--- .../gigi/output/template/Translatable.java | 8 +++++++ .../output/template/TranslateCommand.java | 8 ++++++- src/org/cacert/gigi/pages/LoginPage.java | 5 +++-- .../admin/support/SupportUserDetailsForm.java | 2 +- tests/org/cacert/gigi/TestCertificate.java | 8 +++---- .../org/cacert/gigi/DevelLauncher.java | 3 ++- 18 files changed, 107 insertions(+), 31 deletions(-) create mode 100644 src/org/cacert/gigi/output/template/Translatable.java diff --git a/src/org/cacert/gigi/Gigi.java b/src/org/cacert/gigi/Gigi.java index 0570416d..71786545 100644 --- a/src/org/cacert/gigi/Gigi.java +++ b/src/org/cacert/gigi/Gigi.java @@ -393,7 +393,7 @@ public final class Gigi extends HttpServlet { vars.put("content", content); if (currentAuthContext != null) { // TODO maybe move this information into the AuthContext object - vars.put("loginMethod", lang.getTranslation((String) req.getSession().getAttribute(LOGIN_METHOD))); + vars.put("loginMethod", req.getSession().getAttribute(LOGIN_METHOD)); vars.put("authContext", currentAuthContext); } diff --git a/src/org/cacert/gigi/dbObjects/Certificate.java b/src/org/cacert/gigi/dbObjects/Certificate.java index 8e66c7f3..541272bd 100644 --- a/src/org/cacert/gigi/dbObjects/Certificate.java +++ b/src/org/cacert/gigi/dbObjects/Certificate.java @@ -19,6 +19,8 @@ import java.util.Map.Entry; import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.GigiPreparedStatement; import org.cacert.gigi.database.GigiResultSet; +import org.cacert.gigi.output.template.Outputable; +import org.cacert.gigi.output.template.TranslateCommand; import org.cacert.gigi.util.KeyStorage; import org.cacert.gigi.util.Notary; @@ -215,25 +217,34 @@ public class Certificate implements IdCachable { * This certificate is not in the database, has no id and only exists as * this java object. */ - DRAFT(), + DRAFT("draft"), /** * The certificate has been signed. It is stored in the database. * {@link Certificate#cert()} is valid. */ - ISSUED(), + ISSUED("issued"), /** * The certificate has been revoked. */ - REVOKED(), + REVOKED("revoked"), /** * If this certificate cannot be updated because an error happened in * the signer. */ - ERROR(); + ERROR("error"); - private CertificateStatus() {} + private final Outputable name; + + private CertificateStatus(String codename) { + this.name = new TranslateCommand(codename); + + } + + public Outputable getName() { + return name; + } } diff --git a/src/org/cacert/gigi/dbObjects/Digest.java b/src/org/cacert/gigi/dbObjects/Digest.java index 01b7c541..59247121 100644 --- a/src/org/cacert/gigi/dbObjects/Digest.java +++ b/src/org/cacert/gigi/dbObjects/Digest.java @@ -1,15 +1,18 @@ package org.cacert.gigi.dbObjects; +import org.cacert.gigi.output.template.Outputable; +import org.cacert.gigi.output.template.TranslateCommand; + public enum Digest { - SHA256("Currently recommended, because the other algorithms" + " might break on some older versions of the GnuTLS library" + " (older than 3.x) still shipped in Debian for example."), SHA384(null), SHA512("Highest protection against hash collision attacks of the algorithms offered here."); + SHA256("Currently recommended, because the other algorithms" + " might break on some older versions of the GnuTLS library" + " (older than 3.x) still shipped in Debian for example."), SHA384(""), SHA512("Highest protection against hash collision attacks of the algorithms offered here."); - private final String exp; + private final Outputable exp; private Digest(String explanation) { - exp = explanation; + exp = new TranslateCommand(explanation); } - public String getExp() { + public Outputable getExp() { return exp; } diff --git a/src/org/cacert/gigi/dbObjects/Group.java b/src/org/cacert/gigi/dbObjects/Group.java index 296b4dfa..48445ffc 100644 --- a/src/org/cacert/gigi/dbObjects/Group.java +++ b/src/org/cacert/gigi/dbObjects/Group.java @@ -2,14 +2,19 @@ package org.cacert.gigi.dbObjects; import org.cacert.gigi.database.GigiPreparedStatement; import org.cacert.gigi.database.GigiResultSet; +import org.cacert.gigi.output.template.Outputable; +import org.cacert.gigi.output.template.TranslateCommand; public enum Group { SUPPORTER("supporter"), ARBITRATOR("arbitrator"), BLOCKEDASSURER("blockedassurer"), BLOCKEDASSUREE("blockedassuree"), BLOCKEDLOGIN("blockedlogin"), BLOCKEDCERT("blockedcert"), TTP_ASSURER("ttp-assurer"), TTP_APPLICANT("ttp-applicant"), CODESIGNING("codesigning"), ORGASSURER("orgassurer"), NUCLEUS_ASSURER("nucleus-assurer"); private final String dbName; + private final TranslateCommand tc; + private Group(String name) { dbName = name; + tc = new TranslateCommand(name); } public static Group getByString(String name) { @@ -36,4 +41,8 @@ public enum Group { return users; } } + + public Outputable getName() { + return tc; + } } diff --git a/src/org/cacert/gigi/output/CertificateIterable.java b/src/org/cacert/gigi/output/CertificateIterable.java index 8bfff7ef..f24d7782 100644 --- a/src/org/cacert/gigi/output/CertificateIterable.java +++ b/src/org/cacert/gigi/output/CertificateIterable.java @@ -26,7 +26,7 @@ public class CertificateIterable implements IterableDataset { return false; } Certificate c = certificates[i++]; - vars.put("state", l.getTranslation(c.getStatus().toString().toLowerCase())); + vars.put("state", c.getStatus()); vars.put("CN", c.getDistinguishedName()); vars.put("serial", c.getSerial()); vars.put("digest", c.getMessageDigest()); diff --git a/src/org/cacert/gigi/output/HashAlgorithms.java b/src/org/cacert/gigi/output/HashAlgorithms.java index 8e13513a..fe29d625 100644 --- a/src/org/cacert/gigi/output/HashAlgorithms.java +++ b/src/org/cacert/gigi/output/HashAlgorithms.java @@ -25,7 +25,7 @@ public class HashAlgorithms implements IterableDataset { Digest d = length[i++]; vars.put("algorithm", d.toString()); vars.put("name", d.toString()); - vars.put("info", l.getTranslation(d.getExp())); + vars.put("info", d.getExp()); vars.put("checked", selected == d ? " checked='checked'" : ""); return true; } diff --git a/src/org/cacert/gigi/output/template/ForeachStatement.java b/src/org/cacert/gigi/output/template/ForeachStatement.java index edabab77..8c12122b 100644 --- a/src/org/cacert/gigi/output/template/ForeachStatement.java +++ b/src/org/cacert/gigi/output/template/ForeachStatement.java @@ -1,12 +1,13 @@ package org.cacert.gigi.output.template; import java.io.PrintWriter; +import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.cacert.gigi.localisation.Language; -public final class ForeachStatement implements Outputable { +public final class ForeachStatement implements Translatable { private final String variable; @@ -28,4 +29,9 @@ public final class ForeachStatement implements Outputable { } } } + + @Override + public void addTranslations(Collection s) { + body.addTranslations(s); + } } diff --git a/src/org/cacert/gigi/output/template/IfStatement.java b/src/org/cacert/gigi/output/template/IfStatement.java index 0347a363..29cfc768 100644 --- a/src/org/cacert/gigi/output/template/IfStatement.java +++ b/src/org/cacert/gigi/output/template/IfStatement.java @@ -1,11 +1,12 @@ package org.cacert.gigi.output.template; import java.io.PrintWriter; +import java.util.Collection; import java.util.Map; import org.cacert.gigi.localisation.Language; -public final class IfStatement implements Outputable { +public final class IfStatement implements Translatable { private final String variable; @@ -36,4 +37,12 @@ public final class IfStatement implements Outputable { } } + @Override + public void addTranslations(Collection s) { + iftrue.addTranslations(s); + if (iffalse != null) { + iffalse.addTranslations(s); + } + } + } diff --git a/src/org/cacert/gigi/output/template/OutputVariableCommand.java b/src/org/cacert/gigi/output/template/OutputVariableCommand.java index b3534edc..908a0377 100644 --- a/src/org/cacert/gigi/output/template/OutputVariableCommand.java +++ b/src/org/cacert/gigi/output/template/OutputVariableCommand.java @@ -1,11 +1,12 @@ package org.cacert.gigi.output.template; import java.io.PrintWriter; +import java.util.Collection; import java.util.Map; import org.cacert.gigi.localisation.Language; -public final class OutputVariableCommand implements Outputable { +public final class OutputVariableCommand implements Translatable { private final String raw; @@ -25,4 +26,7 @@ public final class OutputVariableCommand implements Outputable { public void output(PrintWriter out, Language l, Map vars) { Template.outputVar(out, l, vars, raw, unescaped); } + + @Override + public void addTranslations(Collection s) {} } diff --git a/src/org/cacert/gigi/output/template/SprintfCommand.java b/src/org/cacert/gigi/output/template/SprintfCommand.java index 47389643..07a0b8cc 100644 --- a/src/org/cacert/gigi/output/template/SprintfCommand.java +++ b/src/org/cacert/gigi/output/template/SprintfCommand.java @@ -1,6 +1,7 @@ package org.cacert.gigi.output.template; import java.io.PrintWriter; +import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -10,7 +11,7 @@ import java.util.regex.Pattern; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.util.HTMLEncoder; -public final class SprintfCommand implements Outputable { +public final class SprintfCommand implements Translatable { private final String text; @@ -73,4 +74,9 @@ public final class SprintfCommand implements Outputable { } out.print(HTMLEncoder.encodeHTML(parts.substring(pos))); } + + @Override + public void addTranslations(Collection s) { + s.add(text); + } } diff --git a/src/org/cacert/gigi/output/template/Template.java b/src/org/cacert/gigi/output/template/Template.java index 84727f25..17051595 100644 --- a/src/org/cacert/gigi/output/template/Template.java +++ b/src/org/cacert/gigi/output/template/Template.java @@ -10,6 +10,7 @@ import java.io.Reader; import java.net.URISyntaxException; import java.net.URL; import java.text.SimpleDateFormat; +import java.util.Collection; import java.util.Date; import java.util.LinkedList; import java.util.Map; @@ -91,7 +92,7 @@ public class Template implements Outputable { private ParseResult parse(Reader r) throws IOException { LinkedList splitted = new LinkedList(); - LinkedList commands = new LinkedList(); + LinkedList commands = new LinkedList(); StringBuffer buf = new StringBuffer(); String blockType = null; outer: @@ -144,14 +145,14 @@ public class Template implements Outputable { } } splitted.add(buf.toString()); - return new ParseResult(new TemplateBlock(splitted.toArray(new String[splitted.size()]), commands.toArray(new Outputable[commands.size()])), blockType); + return new ParseResult(new TemplateBlock(splitted.toArray(new String[splitted.size()]), commands.toArray(new Translatable[commands.size()])), blockType); } private boolean endsWith(StringBuffer buf, String string) { return buf.length() >= string.length() && buf.substring(buf.length() - string.length(), buf.length()).equals(string); } - private Outputable parseCommand(String s2) { + private Translatable parseCommand(String s2) { if (s2.startsWith("=_")) { final String raw = s2.substring(2); if ( !s2.contains("$") && !s2.contains("!'")) { @@ -201,4 +202,8 @@ public class Template implements Outputable { out.print(s == null ? "null" : (unescaped ? s.toString() : HTMLEncoder.encodeHTML(s.toString()))); } } + + public void addTranslations(Collection s) { + data.addTranslations(s); + } } diff --git a/src/org/cacert/gigi/output/template/TemplateBlock.java b/src/org/cacert/gigi/output/template/TemplateBlock.java index 15ce4e5b..1e3aac0c 100644 --- a/src/org/cacert/gigi/output/template/TemplateBlock.java +++ b/src/org/cacert/gigi/output/template/TemplateBlock.java @@ -1,17 +1,18 @@ package org.cacert.gigi.output.template; import java.io.PrintWriter; +import java.util.Collection; import java.util.Map; import org.cacert.gigi.localisation.Language; -class TemplateBlock implements Outputable { +class TemplateBlock implements Translatable { private String[] contents; - private Outputable[] vars; + private Translatable[] vars; - public TemplateBlock(String[] contents, Outputable[] vars) { + public TemplateBlock(String[] contents, Translatable[] vars) { this.contents = contents; this.vars = vars; } @@ -26,4 +27,10 @@ class TemplateBlock implements Outputable { } } + public void addTranslations(Collection s) { + for (Translatable t : vars) { + t.addTranslations(s); + } + } + } diff --git a/src/org/cacert/gigi/output/template/Translatable.java b/src/org/cacert/gigi/output/template/Translatable.java new file mode 100644 index 00000000..b15ffb93 --- /dev/null +++ b/src/org/cacert/gigi/output/template/Translatable.java @@ -0,0 +1,8 @@ +package org.cacert.gigi.output.template; + +import java.util.Collection; + +public interface Translatable extends Outputable { + + public void addTranslations(Collection s); +} diff --git a/src/org/cacert/gigi/output/template/TranslateCommand.java b/src/org/cacert/gigi/output/template/TranslateCommand.java index 7b7014e0..9da43524 100644 --- a/src/org/cacert/gigi/output/template/TranslateCommand.java +++ b/src/org/cacert/gigi/output/template/TranslateCommand.java @@ -1,12 +1,13 @@ package org.cacert.gigi.output.template; import java.io.PrintWriter; +import java.util.Collection; import java.util.Map; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.util.HTMLEncoder; -public final class TranslateCommand implements Outputable { +public final class TranslateCommand implements Translatable { private final String raw; @@ -22,4 +23,9 @@ public final class TranslateCommand implements Outputable { public String getRaw() { return raw; } + + @Override + public void addTranslations(Collection s) { + s.add(raw); + } } diff --git a/src/org/cacert/gigi/pages/LoginPage.java b/src/org/cacert/gigi/pages/LoginPage.java index ba6e0eec..23a703ef 100644 --- a/src/org/cacert/gigi/pages/LoginPage.java +++ b/src/org/cacert/gigi/pages/LoginPage.java @@ -20,6 +20,7 @@ import org.cacert.gigi.dbObjects.Group; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.template.Form; +import org.cacert.gigi.output.template.TranslateCommand; import org.cacert.gigi.util.AuthorizationContext; import org.cacert.gigi.util.PasswordHash; import org.cacert.gigi.util.ServerConstants; @@ -114,7 +115,7 @@ public class LoginPage extends Page { } } loginSession(req, User.getById(rs.getInt(2))); - req.getSession().setAttribute(LOGIN_METHOD, "Password"); + req.getSession().setAttribute(LOGIN_METHOD, new TranslateCommand("Password")); } } } @@ -141,7 +142,7 @@ public class LoginPage extends Page { loginSession(req, user); req.getSession().setAttribute(CERT_SERIAL, serial); req.getSession().setAttribute(CERT_ISSUER, x509Certificate.getIssuerDN()); - req.getSession().setAttribute(LOGIN_METHOD, "Certificate"); + req.getSession().setAttribute(LOGIN_METHOD, new TranslateCommand("Certificate")); } public static String extractSerialFormCert(X509Certificate x509Certificate) { diff --git a/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java b/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java index 46b92995..1a700961 100644 --- a/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java +++ b/src/org/cacert/gigi/pages/admin/support/SupportUserDetailsForm.java @@ -138,7 +138,7 @@ public class SupportUserDetailsForm extends Form { return false; } Group g = i.next(); - vars.put("group_name", l.getTranslation("Group: " + g.getDatabaseName())); + vars.put("group_name", g.getName()); return true; } }); diff --git a/tests/org/cacert/gigi/TestCertificate.java b/tests/org/cacert/gigi/TestCertificate.java index 6ec26d42..dd14e8d3 100644 --- a/tests/org/cacert/gigi/TestCertificate.java +++ b/tests/org/cacert/gigi/TestCertificate.java @@ -107,15 +107,15 @@ public class TestCertificate extends ManagedTest { testFails(CertificateStatus.ISSUED, c); X509Certificate cert = c.cert(); assertNotNull(login(pk, cert)); - assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH)), "(?:revoked|issued)")); - assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH + "?withRevoked")), "(?:revoked|issued)")); + assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH)), "(?:REVOKED|ISSUED)")); + assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH + "?withRevoked")), "(?:REVOKED|ISSUED)")); c.revoke().waitFor(60000); testFails(CertificateStatus.REVOKED, c); assertNull(login(pk, cert)); - assertEquals(0, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH)), "(?:revoked|issued)")); - assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH + "?withRevoked")), "(?:revoked|issued)")); + assertEquals(0, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH)), "(?:REVOKED|ISSUED)")); + assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH + "?withRevoked")), "(?:REVOKED|ISSUED)")); } private void testFails(CertificateStatus status, Certificate c) throws IOException, GeneralSecurityException, SQLException, GigiApiException { diff --git a/util-testing/org/cacert/gigi/DevelLauncher.java b/util-testing/org/cacert/gigi/DevelLauncher.java index 8c010bdc..5c292fab 100644 --- a/util-testing/org/cacert/gigi/DevelLauncher.java +++ b/util-testing/org/cacert/gigi/DevelLauncher.java @@ -31,6 +31,7 @@ import org.cacert.gigi.dbObjects.ObjectCache; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.template.Template; +import org.cacert.gigi.output.template.TranslateCommand; import org.cacert.gigi.pages.Page; import org.cacert.gigi.pages.account.certs.CertificateRequest; import org.cacert.gigi.pages.main.RegisterPage; @@ -208,7 +209,7 @@ public class DevelLauncher { sess.setAttribute(LOGGEDIN, true); sess.setAttribute(Language.SESSION_ATTRIB_NAME, user.getPreferredLocale()); sess.setAttribute(AUTH_CONTEXT, new AuthorizationContext(user, user)); - req.getSession().setAttribute(LOGIN_METHOD, "Ticket"); + req.getSession().setAttribute(LOGIN_METHOD, new TranslateCommand("Ticket")); resp.getWriter().println("ticket consumed"); ticketUsed = true; } -- 2.39.2