import java.io.IOException;
import java.io.PrintWriter;
import java.security.KeyStore;
+import java.security.cert.X509Certificate;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedList;
import org.cacert.gigi.database.DatabaseConnection;
import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.localisation.Language;
-import org.cacert.gigi.output.Form.CSRFException;
import org.cacert.gigi.output.Menu;
-import org.cacert.gigi.output.Outputable;
import org.cacert.gigi.output.PageMenuItem;
import org.cacert.gigi.output.SimpleMenuItem;
+import org.cacert.gigi.output.template.Outputable;
import org.cacert.gigi.output.template.Template;
+import org.cacert.gigi.output.template.Form.CSRFException;
import org.cacert.gigi.pages.LoginPage;
import org.cacert.gigi.pages.LogoutPage;
import org.cacert.gigi.pages.MainPage;
import org.cacert.gigi.pages.account.domain.DomainOverview;
import org.cacert.gigi.pages.account.mail.MailOverview;
import org.cacert.gigi.pages.admin.TTPAdminPage;
+import org.cacert.gigi.pages.error.AccessDenied;
import org.cacert.gigi.pages.error.PageNotFound;
import org.cacert.gigi.pages.main.RegisterPage;
import org.cacert.gigi.pages.orga.CreateOrgPage;
public static final String LOGGEDIN = "loggedin";
+ public static final String CERT_SERIAL = "org.cacert.gigi.serial";
+
+ public static final String CERT_ISSUER = "org.cacert.gigi.issuer";
+
public static final String USER = "user";
private static final long serialVersionUID = -6386785421902852904L;
@Override
public void init() throws ServletException {
if ( !firstInstanceInited) {
+ putPage("/denied", new AccessDenied(), null);
putPage("/error", new PageNotFound(), null);
- putPage("/login", new LoginPage("CAcert - Login"), "CAcert.org");
+ putPage("/login", new LoginPage("Password Login"), "CAcert.org");
+ getMenu("CAcert.org").addItem(new SimpleMenuItem("https://" + ServerConstants.getSecureHostNamePort() + "/login", "Certificate Login") {
+
+ @Override
+ public boolean isPermitted(User u) {
+ return u == null;
+ }
+ });
putPage("/", new MainPage("CAcert - Home"), null);
putPage("/roots", new RootCertPage(truststore), "CAcert.org");
putPage(ChangePasswordPage.PATH, new ChangePasswordPage(), "My Account");
putPage(MyPoints.PATH, new MyPoints("My Points"), "CAcert Web of Trust");
putPage(RequestTTPPage.PATH, new RequestTTPPage(), "CAcert Web of Trust");
putPage(TTPAdminPage.PATH + "/*", new TTPAdminPage(), "Admin");
- putPage(CreateOrgPage.DEFAULT_PATH, new CreateOrgPage(), "Admin");
- putPage(ViewOrgPage.DEFAULT_PATH + "/*", new ViewOrgPage(), "Admin");
+ putPage(CreateOrgPage.DEFAULT_PATH, new CreateOrgPage(), "Organisation Admin");
+ putPage(ViewOrgPage.DEFAULT_PATH + "/*", new ViewOrgPage(), "Organisation Admin");
if (testing) {
try {
Class<?> manager = Class.forName("org.cacert.gigi.pages.Manager");
if (category == null) {
return;
}
+ Menu m = getMenu(category);
+ m.addItem(new PageMenuItem(p));
+
+ }
+
+ private Menu getMenu(String category) {
Menu m = null;
for (Menu menu : categories) {
if (menu.getMenuName().equals(category)) {
m = new Menu(category);
categories.add(m);
}
- m.addItem(new PageMenuItem(p));
-
+ return m;
}
private static String staticTemplateVarHttp;
return;
}
HttpSession hs = req.getSession();
+ String clientSerial = (String) hs.getAttribute(CERT_SERIAL);
+ if (clientSerial != null) {
+ X509Certificate[] cert = (X509Certificate[]) req.getAttribute("javax.servlet.request.X509Certificate");
+ if (cert == null || cert[0] == null//
+ || !cert[0].getSerialNumber().toString(16).toUpperCase().equals(clientSerial) //
+ || !cert[0].getIssuerDN().equals(hs.getAttribute(CERT_ISSUER))) {
+ hs.invalidate();
+ resp.sendError(403, "Certificate mismatch.");
+ return;
+ }
+
+ }
if (req.getParameter("lang") != null) {
Locale l = Language.getLocaleFromString(req.getParameter("lang"));
Language lu = Language.getInstance(l);
vars.put("static", getStaticTemplateVar(isSecure));
vars.put("year", Calendar.getInstance().get(Calendar.YEAR));
vars.put("content", content);
+ if (currentPageUser != null) {
+ vars.put("loggedInAs", currentPageUser.getName().toString());
+ }
resp.setContentType("text/html; charset=utf-8");
baseTemplate.output(resp.getWriter(), Page.getLanguage(req), vars);
} else {