X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fpages%2FLoginPage.java;h=8129715a99795b6f8f45f6b105008731af56d2ab;hb=50a582e1c456ed43de163c6722cbfcbf88d0070d;hp=91b6b1b7139383ce20c1d44d61e68b8e19a65406;hpb=ec24cf6925bb3729a644580ad4a9375d05883c62;p=gigi.git diff --git a/src/org/cacert/gigi/pages/LoginPage.java b/src/org/cacert/gigi/pages/LoginPage.java index 91b6b1b7..8129715a 100644 --- a/src/org/cacert/gigi/pages/LoginPage.java +++ b/src/org/cacert/gigi/pages/LoginPage.java @@ -20,7 +20,9 @@ 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.util.AuthorizationContext; import org.cacert.gigi.util.PasswordHash; +import org.cacert.gigi.util.ServerConstants; public class LoginPage extends Page { @@ -51,7 +53,11 @@ public class LoginPage extends Page { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - new LoginForm(req).output(resp.getWriter(), getLanguage(req), new HashMap()); + if (req.getHeader("Host").equals(ServerConstants.getSecureHostNamePort())) { + resp.getWriter().println(getLanguage(req).getTranslation("Authentication with certificate failed. Try another certificate or use a password.")); + } else { + new LoginForm(req).output(resp.getWriter(), getLanguage(req), new HashMap()); + } } @Override @@ -114,7 +120,15 @@ public class LoginPage extends Page { } public static User getUser(HttpServletRequest req) { - return (User) req.getSession().getAttribute(USER); + AuthorizationContext ac = getAuthorizationContext(req); + if (ac == null) { + return null; + } + return ac.getActor(); + } + + public static AuthorizationContext getAuthorizationContext(HttpServletRequest req) { + return ((AuthorizationContext) req.getSession().getAttribute(AUTH_CONTEXT)); } private void tryAuthWithCertificate(HttpServletRequest req, X509Certificate x509Certificate) { @@ -134,12 +148,17 @@ public class LoginPage extends Page { } public static User fetchUserBySerial(String serial) { + if ( !serial.matches("[A-Fa-f0-9]+")) { + throw new Error("serial malformed."); + } GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `memid` FROM `certs` WHERE `serial`=? AND `disablelogin`='0' AND `revoked` is NULL"); - ps.setString(1, serial); + ps.setString(1, serial.toLowerCase()); GigiResultSet rs = ps.executeQuery(); User user = null; if (rs.next()) { user = User.getById(rs.getInt(1)); + } else { + System.out.println("User with serial " + serial + " not found."); } rs.close(); return user; @@ -164,11 +183,11 @@ public class LoginPage extends Page { HttpSession hs = req.getSession(); hs.setAttribute(LOGGEDIN, true); hs.setAttribute(Language.SESSION_ATTRIB_NAME, user.getPreferredLocale()); - hs.setAttribute(USER, user); + hs.setAttribute(AUTH_CONTEXT, new AuthorizationContext(user, user)); } @Override - public boolean isPermitted(User u) { - return u == null; + public boolean isPermitted(AuthorizationContext ac) { + return ac == null; } }