]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/pages/LoginPage.java
Convert strange flags to Groups.
[gigi.git] / src / org / cacert / gigi / pages / LoginPage.java
index 2dde41299251b9c0a9a35e704fbf58302896377f..e647c053bd553b75934cc833aca375dc49f279b3 100644 (file)
@@ -4,16 +4,17 @@ import static org.cacert.gigi.Gigi.*;
 
 import java.io.IOException;
 import java.security.cert.X509Certificate;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
-import org.cacert.gigi.User;
 import org.cacert.gigi.database.DatabaseConnection;
+import org.cacert.gigi.database.GigiPreparedStatement;
+import org.cacert.gigi.database.GigiResultSet;
+import org.cacert.gigi.dbObjects.Group;
+import org.cacert.gigi.dbObjects.User;
+import org.cacert.gigi.localisation.Language;
 import org.cacert.gigi.util.PasswordHash;
 
 public class LoginPage extends Page {
@@ -65,22 +66,15 @@ public class LoginPage extends Page {
     private void tryAuthWithUnpw(HttpServletRequest req) {
         String un = req.getParameter("username");
         String pw = req.getParameter("password");
-        try {
-            PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `password`, `id` FROM `users` WHERE `email`=? AND locked='0' AND verified='1'");
-            ps.setString(1, un);
-            ResultSet rs = ps.executeQuery();
-            if (rs.next()) {
-                if (PasswordHash.verifyHash(pw, rs.getString(1))) {
-                    req.getSession().invalidate();
-                    HttpSession hs = req.getSession();
-                    hs.setAttribute(LOGGEDIN, true);
-                    hs.setAttribute(USER, new User(rs.getInt(2)));
-                }
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `password`, `id` FROM `users` WHERE `email`=? AND verified='1'");
+        ps.setString(1, un);
+        GigiResultSet rs = ps.executeQuery();
+        if (rs.next()) {
+            if (PasswordHash.verifyHash(pw, rs.getString(1))) {
+                loginSession(req, User.getById(rs.getInt(2)));
             }
-            rs.close();
-        } catch (SQLException e) {
-            e.printStackTrace();
         }
+        rs.close();
     }
 
     public static User getUser(HttpServletRequest req) {
@@ -89,20 +83,26 @@ public class LoginPage extends Page {
 
     private void tryAuthWithCertificate(HttpServletRequest req, X509Certificate x509Certificate) {
         String serial = x509Certificate.getSerialNumber().toString(16).toUpperCase();
-        try {
-            PreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `memid` FROM `certs` WHERE `serial`=? AND `disablelogin`='0' AND `revoked` = " + "'0000-00-00 00:00:00'");
-            ps.setString(1, serial);
-            ResultSet rs = ps.executeQuery();
-            if (rs.next()) {
-                req.getSession().invalidate();
-                HttpSession hs = req.getSession();
-                hs.setAttribute(LOGGEDIN, true);
-                hs.setAttribute(USER, new User(rs.getInt(1)));
-            }
-            rs.close();
-        } catch (SQLException e) {
-            e.printStackTrace();
+        GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `memid` FROM `certs` WHERE `serial`=? AND `disablelogin`='0' AND `revoked` = '0000-00-00 00:00:00'");
+        ps.setString(1, serial);
+        GigiResultSet rs = ps.executeQuery();
+        if (rs.next()) {
+            loginSession(req, User.getById(rs.getInt(1)));
+        }
+        rs.close();
+    }
+
+    private static final Group LOGIN_BLOCKED = Group.getByString("blockedlogin");
+
+    private void loginSession(HttpServletRequest req, User user) {
+        if (user.isInGroup(LOGIN_BLOCKED)) {
+            return;
         }
+        req.getSession().invalidate();
+        HttpSession hs = req.getSession();
+        hs.setAttribute(LOGGEDIN, true);
+        hs.setAttribute(Language.SESSION_ATTRIB_NAME, user.getPreferredLocale());
+        hs.setAttribute(USER, user);
     }
 
     @Override