[jboss-svn-commits] JBL Code SVN: r18693 - labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 5 06:08:00 EST 2008


Author: adamw
Date: 2008-03-05 06:08:00 -0500 (Wed, 05 Mar 2008)
New Revision: 18693

Added:
   labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/NukesConnector.java
   labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/UserInfo.java
Modified:
   labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/LabsLoginModule.java
Log:
Login fix

Modified: labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/LabsLoginModule.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/LabsLoginModule.java	2008-03-05 10:23:16 UTC (rev 18692)
+++ labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/LabsLoginModule.java	2008-03-05 11:08:00 UTC (rev 18693)
@@ -23,9 +23,6 @@
 
 import java.security.Principal;
 import java.security.acl.Group;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.Statement;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -37,7 +34,6 @@
 import javax.security.auth.Subject;
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.login.LoginException;
-import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 
 import org.jboss.forge.common.ForgeHelper;
@@ -63,6 +59,7 @@
  *
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
  * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
  */
 public class LabsLoginModule extends UsernamePasswordLoginModule {
 
@@ -72,8 +69,6 @@
 
     protected String havingRole;
 
-    protected String jbossDB;
-
     private static final String PASS_TOKEN = "AutoLoginToken.";
 
     private static final String TOKENIZER = "<!AutoLoginTokenizer!>";
@@ -85,6 +80,8 @@
     private UserProfileModule userProfileModule;
     private MembershipModule membershipModule;
 
+    private NukesConnector nukesConnector;
+
     public void initialize(Subject subject, CallbackHandler callbackHandler,
                            Map sharedState, Map options) {
         super.initialize(subject, callbackHandler, sharedState, options);
@@ -93,7 +90,7 @@
         userModuleJNDIName = (String) options.get("userModuleJNDIName");
         additionalRole = (String) options.get("additionalRole");
         havingRole = (String) options.get("havingRole");
-        jbossDB = (String) options.get("jbossdb");
+        String jbossDB = (String) options.get("jbossdb");
 
         try {
             userModule = (UserModule) new InitialContext().lookup("java:portal/UserModule");
@@ -109,6 +106,8 @@
         log.trace("additionalRole = " + additionalRole);
         log.trace("havingRole = " + havingRole);
         log.trace("jbossdb = " + jbossDB);
+
+        nukesConnector = new NukesConnector(jbossDB);
     }
 
     protected boolean validatePassword(String inputPassword,
@@ -205,37 +204,22 @@
     }
 
     private String checkIfPasswordChanged(User user) throws LoginException {
-        String password = null;
+        String password;
 
-        if (!getUsername().equals("admin")) {
+        if (!"admin".equals(getUsername())) {
             /*
                 * check if password in the main db changed (not for admin account)
                 */
             try {
-                DataSource ds = (DataSource) new InitialContext()
-                        .lookup(jbossDB);
+                password = nukesConnector.checkIfUserPasswordChanged(getUsername());
 
-                Connection conn = ds.getConnection();
-
-                Statement st = conn.createStatement();
-
-                String sql = "SELECT * FROM nuke_users WHERE pn_uname='"
-                        + getUsername() + "';";
-
-                ResultSet rs = st.executeQuery(sql);
-
-                if (rs.next()) {
-                    if (!user.validatePassword(rs.getString("pn_pass"))) {
-                        /*
-                               * User user = userModule
-                               * .findUserByUserName(getUsername());
-                               */
-                        user.updatePassword(rs.getString("pn_pass"));
-                    }
-                    password = rs.getString("pn_pass");
+                if (!user.validatePassword(password)) {
+                    /*
+                    * User user = userModule
+                    * .findUserByUserName(getUsername());
+                    */
+                    user.updatePassword(password);
                 }
-
-                conn.close();
             } catch (Exception e) {
                 log.error("Couldn't connect to nukes database", e);
                 throw new LoginException(e.toString());
@@ -260,61 +244,39 @@
                 * and user
                 */
 
-            DataSource ds = (DataSource) new InitialContext().lookup(jbossDB);
+            try {
+                // System.out.println("Taking pass for user " +
+                // getUsername());
 
-            Connection conn = ds.getConnection();
+                UserInfo userInfo = nukesConnector.lookForNewUser(log, getUsername());
 
-            Statement st = conn.createStatement();
+                if (userInfo == null) {
+                    return null;
+                }
 
-            log.debug("Looking for the user " + getUsername()
-                    + " in the JBoss Database");
+                User user = userModule.createUser(getUsername(), userInfo.getPass());
+                userProfileModule.setProperty(user, User.INFO_USER_EMAIL_REAL, userInfo.getEmail());
+                userProfileModule.setProperty(user, User.INFO_USER_EMAIL_FAKE, userInfo.getFemail());
+                userProfileModule.setProperty(user, User.INFO_USER_NAME_GIVEN, userInfo.getFname());
+                userProfileModule.setProperty(user, User.INFO_USER_NAME_FAMILY, userInfo.getLname());
+                userProfileModule.setProperty(user, User.INFO_USER_ENABLED, true);
 
-            String sql = "SELECT * FROM nuke_users WHERE pn_uname='"
-                    + getUsername() + "';";
+                log.info("User " + getUsername() + " added to Labs Database.");
 
-            ResultSet rs = st.executeQuery(sql);
-
-            User user = null;
-
-            if (rs.next()) {
-                log.debug("User " + getUsername()
-                        + " found in the JBoss Database.");
-                try {
-                    // System.out.println("Taking pass for user " +
-                    // getUsername());
-
-                    user = userModule.createUser(getUsername(), rs
-                            .getString("pn_pass"));
-                    userProfileModule.setProperty(user, User.INFO_USER_EMAIL_REAL, rs.getString("pn_email"));
-                    userProfileModule.setProperty(user, User.INFO_USER_EMAIL_FAKE, rs.getString("pn_femail"));
-                    userProfileModule.setProperty(user, User.INFO_USER_NAME_GIVEN, rs.getString("pn_fname"));
-                    userProfileModule.setProperty(user, User.INFO_USER_NAME_FAMILY, rs.getString("pn_lname"));
-                    userProfileModule.setProperty(user, User.INFO_USER_ENABLED, true);
-
-                    log.info("User " + getUsername()
-                            + " added to Labs Database.");
-
-                    // Add the user to the default
-                    // user role
-                    String defaultRole = "User";// getPortletConfig().getInitParameter(UserPortletConstants.DEFAULT_ROLE);
-                    if (defaultRole != null) {
-                        Set roleSet = new HashSet();
-                        Role role = roleModule.findRoleByName(defaultRole);
-                        if (role != null) {
-                            roleSet.add(role);
-                            membershipModule.assignRoles(user, roleSet);
-                        } else {
-                            log
-                                    .error("The role you specified as default role does not exist, check your portlet configuration");
-                        }
+                // Add the user to the default
+                // user role
+                String defaultRole = "User";// getPortletConfig().getInitParameter(UserPortletConstants.DEFAULT_ROLE);
+                if (defaultRole != null) {
+                    Set roleSet = new HashSet();
+                    Role role = roleModule.findRoleByName(defaultRole);
+                    if (role != null) {
+                        roleSet.add(role);
+                        membershipModule.assignRoles(user, roleSet);
                     } else {
-                        log
-                                .info("You didn't specify a default role in the portlet init configuration, please refer to the documentation");
+                        log.error("The role you specified as default role does not exist, check your portlet configuration");
                     }
-                } catch (IllegalArgumentException e) {
-                    log.error("Cannot create user " + getUsername(), e);
-
-                    throw new LoginException(e.toString());
+                } else {
+                    log.info("You didn't specify a default role in the portlet init configuration, please refer to the documentation");
                 }
 
                 if (user != null
@@ -324,16 +286,15 @@
                           * User has been just created and it's only in the defaule
                           * role.
                           */
-                    password = rs.getString("pn_pass");
+                    password = userInfo.getPass();
                 } else {
                     return null;
                 }
+            } catch (IllegalArgumentException e) {
+                log.error("Cannot create user " + getUsername(), e);
 
-            } else {
-                log.info("User " + getUsername()
-                        + " couldn't been found in the JBoss Database.");
+                throw new LoginException(e.toString());
             }
-            conn.close();
         } catch (Exception e) {
             log.error("Couldn't connect to nukes database", e);
             throw new LoginException(e.toString());

Added: labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/NukesConnector.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/NukesConnector.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/NukesConnector.java	2008-03-05 11:08:00 UTC (rev 18693)
@@ -0,0 +1,102 @@
+package org.jboss.labs.login;
+
+import org.jboss.logging.Logger;
+import org.jboss.portal.common.transaction.Transactions;
+
+import javax.sql.DataSource;
+import javax.naming.InitialContext;
+import javax.transaction.TransactionManager;
+import java.sql.Connection;
+import java.sql.Statement;
+import java.sql.ResultSet;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class NukesConnector {
+    private String jbossDB;
+
+    public NukesConnector(String jbossDB) {
+        this.jbossDB = jbossDB;
+    }
+
+    public String checkIfUserPasswordChanged(final String username) throws Exception {
+        final TransactionManager tm = (TransactionManager) new InitialContext()
+                .lookup("java:/TransactionManager");
+
+        return (String) Transactions.requiresNew(tm,
+                new Transactions.Runnable() {
+                    public Object run() throws Exception {
+                        return checkIfUserPasswordChangedInternal(username);
+                    }
+                });
+    }
+
+    public UserInfo lookForNewUser(final Logger log, final String username) throws Exception {
+        final TransactionManager tm = (TransactionManager) new InitialContext()
+                        .lookup("java:/TransactionManager");
+
+                return (UserInfo) Transactions.requiresNew(tm,
+                new Transactions.Runnable() {
+                    public Object run() throws Exception {
+                        return lookForNewUserInternal(log, username);
+                    }
+                });
+    }
+
+    public String checkIfUserPasswordChangedInternal(String username) throws Exception {
+        DataSource ds = (DataSource) new InitialContext()
+                .lookup(jbossDB);
+
+        Connection conn = ds.getConnection();
+
+        Statement st = conn.createStatement();
+
+        String sql = "SELECT * FROM nuke_users WHERE pn_uname='"
+                + username + "';";
+
+        ResultSet rs = st.executeQuery(sql);
+
+        String password = null;
+        if (rs.next()) {
+            password = rs.getString("pn_pass");
+        }
+
+        conn.close();
+
+        return password;
+    }
+
+    public UserInfo lookForNewUserInternal(Logger log, String username) throws Exception {
+        DataSource ds = (DataSource) new InitialContext().lookup(jbossDB);
+
+        Connection conn = ds.getConnection();
+
+        Statement st = conn.createStatement();
+
+        log.debug("Looking for the user " + username
+                + " in the JBoss Database");
+
+        String sql = "SELECT * FROM nuke_users WHERE pn_uname='"
+                + username + "';";
+
+        ResultSet rs = st.executeQuery(sql);
+
+        UserInfo userInfo = null;
+        if (rs.next()) {
+            log.debug("User " + username + " found in the JBoss Database.");
+            // System.out.println("Taking pass for user " +
+            // getUsername());
+
+            userInfo = new UserInfo(rs.getString("pn_pass"), rs.getString("pn_email"),
+                    rs.getString("pn_femail"), rs.getString("pn_fname"), rs.getString("pn_lname"));
+
+        } else {
+            log.info("User " + username
+                    + " couldn't been found in the JBoss Database.");
+        }
+        conn.close();
+
+        return userInfo;
+    }
+}

Added: labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/UserInfo.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/UserInfo.java	                        (rev 0)
+++ labs/jbosslabs/trunk/portal-extensions/forge-login/src/java/org/jboss/labs/login/UserInfo.java	2008-03-05 11:08:00 UTC (rev 18693)
@@ -0,0 +1,40 @@
+package org.jboss.labs.login;
+
+/**
+ * @author <a href="mailto:adam at warski.org">Adam Warski</a>
+ */
+public class UserInfo {
+    private String pass;
+    private String email;
+    private String femail;
+    private String fname;
+    private String lname;
+
+    public UserInfo(String pass, String email, String femail, String fname, String lname) {
+        this.pass = pass;
+        this.email = email;
+        this.femail = femail;
+        this.fname = fname;
+        this.lname = lname;
+    }
+
+    public String getPass() {
+        return pass;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public String getFemail() {
+        return femail;
+    }
+
+    public String getFname() {
+        return fname;
+    }
+
+    public String getLname() {
+        return lname;
+    }
+}




More information about the jboss-svn-commits mailing list