Change-Id: Iaa547ef712d05f53455a8b4805eff41686c13dd8
18 files changed:
vars.put("content", content);
if (currentAuthContext != null) {
// TODO maybe move this information into the AuthContext object
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);
}
vars.put("authContext", currentAuthContext);
}
import org.cacert.gigi.GigiApiException;
import org.cacert.gigi.database.GigiPreparedStatement;
import org.cacert.gigi.database.GigiResultSet;
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;
import org.cacert.gigi.util.KeyStorage;
import org.cacert.gigi.util.Notary;
* This certificate is not in the database, has no id and only exists as
* this java object.
*/
* This certificate is not in the database, has no id and only exists as
* this java object.
*/
/**
* The certificate has been signed. It is stored in the database.
* {@link Certificate#cert()} is valid.
*/
/**
* The certificate has been signed. It is stored in the database.
* {@link Certificate#cert()} is valid.
*/
/**
* The certificate has been revoked.
*/
/**
* The certificate has been revoked.
*/
/**
* If this certificate cannot be updated because an error happened in
* the signer.
*/
/**
* If this certificate cannot be updated because an error happened in
* the signer.
*/
- private CertificateStatus() {}
+ private final Outputable name;
+
+ private CertificateStatus(String codename) {
+ this.name = new TranslateCommand(codename);
+
+ }
+
+ public Outputable getName() {
+ return name;
+ }
package org.cacert.gigi.dbObjects;
package org.cacert.gigi.dbObjects;
+import org.cacert.gigi.output.template.Outputable;
+import org.cacert.gigi.output.template.TranslateCommand;
+
- 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) {
private Digest(String explanation) {
+ exp = new TranslateCommand(explanation);
- public String getExp() {
+ public Outputable getExp() {
import org.cacert.gigi.database.GigiPreparedStatement;
import org.cacert.gigi.database.GigiResultSet;
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;
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;
private Group(String name) {
dbName = name;
+ tc = new TranslateCommand(name);
}
public static Group getByString(String name) {
}
public static Group getByString(String name) {
+
+ public Outputable getName() {
+ return tc;
+ }
return false;
}
Certificate c = certificates[i++];
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());
vars.put("CN", c.getDistinguishedName());
vars.put("serial", c.getSerial());
vars.put("digest", c.getMessageDigest());
Digest d = length[i++];
vars.put("algorithm", d.toString());
vars.put("name", d.toString());
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;
}
vars.put("checked", selected == d ? " checked='checked'" : "");
return true;
}
package org.cacert.gigi.output.template;
import java.io.PrintWriter;
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;
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;
private final String variable;
+
+ @Override
+ public void addTranslations(Collection<String> s) {
+ body.addTranslations(s);
+ }
package org.cacert.gigi.output.template;
import java.io.PrintWriter;
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 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;
private final String variable;
+ @Override
+ public void addTranslations(Collection<String> s) {
+ iftrue.addTranslations(s);
+ if (iffalse != null) {
+ iffalse.addTranslations(s);
+ }
+ }
+
package org.cacert.gigi.output.template;
import java.io.PrintWriter;
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 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;
private final String raw;
public void output(PrintWriter out, Language l, Map<String, Object> vars) {
Template.outputVar(out, l, vars, raw, unescaped);
}
public void output(PrintWriter out, Language l, Map<String, Object> vars) {
Template.outputVar(out, l, vars, raw, unescaped);
}
+
+ @Override
+ public void addTranslations(Collection<String> s) {}
package org.cacert.gigi.output.template;
import java.io.PrintWriter;
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;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.cacert.gigi.localisation.Language;
import org.cacert.gigi.util.HTMLEncoder;
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;
private final String text;
}
out.print(HTMLEncoder.encodeHTML(parts.substring(pos)));
}
}
out.print(HTMLEncoder.encodeHTML(parts.substring(pos)));
}
+
+ @Override
+ public void addTranslations(Collection<String> s) {
+ s.add(text);
+ }
import java.net.URISyntaxException;
import java.net.URL;
import java.text.SimpleDateFormat;
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;
import java.util.Date;
import java.util.LinkedList;
import java.util.Map;
private ParseResult parse(Reader r) throws IOException {
LinkedList<String> splitted = new LinkedList<String>();
private ParseResult parse(Reader r) throws IOException {
LinkedList<String> splitted = new LinkedList<String>();
- LinkedList<Outputable> commands = new LinkedList<Outputable>();
+ LinkedList<Translatable> commands = new LinkedList<Translatable>();
StringBuffer buf = new StringBuffer();
String blockType = null;
outer:
StringBuffer buf = new StringBuffer();
String blockType = null;
outer:
}
}
splitted.add(buf.toString());
}
}
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 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("!'")) {
if (s2.startsWith("=_")) {
final String raw = s2.substring(2);
if ( !s2.contains("$") && !s2.contains("!'")) {
out.print(s == null ? "null" : (unescaped ? s.toString() : HTMLEncoder.encodeHTML(s.toString())));
}
}
out.print(s == null ? "null" : (unescaped ? s.toString() : HTMLEncoder.encodeHTML(s.toString())));
}
}
+
+ public void addTranslations(Collection<String> s) {
+ data.addTranslations(s);
+ }
package org.cacert.gigi.output.template;
import java.io.PrintWriter;
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 java.util.Map;
import org.cacert.gigi.localisation.Language;
-class TemplateBlock implements Outputable {
+class TemplateBlock implements Translatable {
private String[] contents;
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;
}
this.contents = contents;
this.vars = vars;
}
+ public void addTranslations(Collection<String> s) {
+ for (Translatable t : vars) {
+ t.addTranslations(s);
+ }
+ }
+
--- /dev/null
+package org.cacert.gigi.output.template;
+
+import java.util.Collection;
+
+public interface Translatable extends Outputable {
+
+ public void addTranslations(Collection<String> s);
+}
package org.cacert.gigi.output.template;
import java.io.PrintWriter;
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;
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;
private final String raw;
public String getRaw() {
return raw;
}
public String getRaw() {
return raw;
}
+
+ @Override
+ public void addTranslations(Collection<String> s) {
+ s.add(raw);
+ }
import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.localisation.Language;
import org.cacert.gigi.output.template.Form;
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;
import org.cacert.gigi.util.AuthorizationContext;
import org.cacert.gigi.util.PasswordHash;
import org.cacert.gigi.util.ServerConstants;
}
}
loginSession(req, User.getById(rs.getInt(2)));
}
}
loginSession(req, User.getById(rs.getInt(2)));
- req.getSession().setAttribute(LOGIN_METHOD, "Password");
+ req.getSession().setAttribute(LOGIN_METHOD, new TranslateCommand("Password"));
loginSession(req, user);
req.getSession().setAttribute(CERT_SERIAL, serial);
req.getSession().setAttribute(CERT_ISSUER, x509Certificate.getIssuerDN());
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) {
}
public static String extractSerialFormCert(X509Certificate x509Certificate) {
return false;
}
Group g = i.next();
return false;
}
Group g = i.next();
- vars.put("group_name", l.getTranslation("Group: " + g.getDatabaseName()));
+ vars.put("group_name", g.getName());
testFails(CertificateStatus.ISSUED, c);
X509Certificate cert = c.cert();
assertNotNull(login(pk, cert));
testFails(CertificateStatus.ISSUED, c);
X509Certificate cert = c.cert();
assertNotNull(login(pk, cert));
- assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH)), "<td>(?:revoked|issued)</td>"));
- assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH + "?withRevoked")), "<td>(?:revoked|issued)</td>"));
+ assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH)), "<td>(?:REVOKED|ISSUED)</td>"));
+ assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH + "?withRevoked")), "<td>(?:REVOKED|ISSUED)</td>"));
c.revoke().waitFor(60000);
testFails(CertificateStatus.REVOKED, c);
assertNull(login(pk, cert));
c.revoke().waitFor(60000);
testFails(CertificateStatus.REVOKED, c);
assertNull(login(pk, cert));
- assertEquals(0, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH)), "<td>(?:revoked|issued)</td>"));
- assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH + "?withRevoked")), "<td>(?:revoked|issued)</td>"));
+ assertEquals(0, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH)), "<td>(?:REVOKED|ISSUED)</td>"));
+ assertEquals(1, countRegex(IOUtils.readURL(get(cookie, Certificates.PATH + "?withRevoked")), "<td>(?:REVOKED|ISSUED)</td>"));
}
private void testFails(CertificateStatus status, Certificate c) throws IOException, GeneralSecurityException, SQLException, GigiApiException {
}
private void testFails(CertificateStatus status, Certificate c) throws IOException, GeneralSecurityException, SQLException, GigiApiException {
import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.localisation.Language;
import org.cacert.gigi.output.template.Template;
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;
import org.cacert.gigi.pages.Page;
import org.cacert.gigi.pages.account.certs.CertificateRequest;
import org.cacert.gigi.pages.main.RegisterPage;
sess.setAttribute(LOGGEDIN, true);
sess.setAttribute(Language.SESSION_ATTRIB_NAME, user.getPreferredLocale());
sess.setAttribute(AUTH_CONTEXT, new AuthorizationContext(user, user));
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;
}
resp.getWriter().println("ticket consumed");
ticketUsed = true;
}