[jboss-cvs] JBossBlog SVN: r325 - in trunk: resources/WEB-INF and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Sep 2 09:52:20 EDT 2008


Author: adamw
Date: 2008-09-02 09:52:19 -0400 (Tue, 02 Sep 2008)
New Revision: 325

Added:
   trunk/src/action/org/jboss/blog/session/security/nukes/
   trunk/src/action/org/jboss/blog/session/security/nukes/NukesSecurityBootstrap.java
   trunk/src/action/org/jboss/blog/session/security/nukes/NukesSecurityService.java
   trunk/src/action/org/jboss/blog/session/security/nukes/NukesUser.java
Modified:
   trunk/resources/META-INF/persistence-prod.xml
   trunk/resources/WEB-INF/components.xml
Log:
Nukes integration

Modified: trunk/resources/META-INF/persistence-prod.xml
===================================================================
--- trunk/resources/META-INF/persistence-prod.xml	2008-08-26 11:48:20 UTC (rev 324)
+++ trunk/resources/META-INF/persistence-prod.xml	2008-09-02 13:52:19 UTC (rev 325)
@@ -23,7 +23,7 @@
         <class>org.jboss.blog.model.security.SecurityMapping</class>
         <class>org.jboss.blog.model.security.SecurityGroup</class>
         <class>org.jboss.blog.model.security.SecurityUser</class>
-        <class>org.jboss.blog.model.shotoku.ShotokuFeed</class>
+        <!--<class>org.jboss.blog.model.shotoku.ShotokuFeed</class>-->
         <class>org.jboss.blog.model.log.PropositionsLog</class>
         <properties>
             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>

Modified: trunk/resources/WEB-INF/components.xml
===================================================================
--- trunk/resources/WEB-INF/components.xml	2008-08-26 11:48:20 UTC (rev 324)
+++ trunk/resources/WEB-INF/components.xml	2008-09-02 13:52:19 UTC (rev 325)
@@ -67,4 +67,11 @@
         <property name="serverAddress">http://localhost:8080</property>
         <property name="contextName">feeds</property>
     </component>
+
+    <component name="externalSecurityService">
+        <property name="dbUrl">jdbc:mysql:///nukes3?useUnicode=true&amp;characterEncoding=UTF-8</property>
+        <property name="dbUserName">root</property>
+        <property name="dbPass" />
+        <property name="initialAdministrator">adamw</property>
+    </component>
 </components>

Copied: trunk/src/action/org/jboss/blog/session/security/nukes/NukesSecurityBootstrap.java (from rev 315, trunk/src/portal/org/jboss/blog/session/security/external/SecurityBootstrap.java)
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/nukes/NukesSecurityBootstrap.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/nukes/NukesSecurityBootstrap.java	2008-09-02 13:52:19 UTC (rev 325)
@@ -0,0 +1,41 @@
+package org.jboss.blog.session.security.nukes;
+
+import org.jboss.seam.annotations.*;
+import org.jboss.seam.ScopeType;
+import org.jboss.blog.session.security.SecurityModBean;
+import org.jboss.blog.model.security.FeedsSecurityRole;
+import org.jboss.blog.model.security.SecurityUser;
+
+import javax.persistence.EntityManager;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+ at Name("nukesSecurityBootstrap")
+ at Scope(ScopeType.STATELESS)
+public class NukesSecurityBootstrap {
+    @In
+    private SecurityModBean securityMod;
+
+    @In
+    private NukesSecurityService externalSecurityService;
+
+    @In
+    private EntityManager entityManager;
+
+    @Observer("org.jboss.blog.postBlogInit")
+    @Transactional
+    public void initAdministrator() {
+        List<SecurityUser> administratorUsers = securityMod.getAdministratorUsers();
+        if (administratorUsers == null || administratorUsers.size() == 0) {
+            securityMod.setRole(FeedsSecurityRole.ADMIN);
+
+            securityMod.setRestrictedSecurityUser(externalSecurityService.getInitialAdministratorUser());
+
+            securityMod.addSecurityUserAsSuperUser();
+
+            entityManager.flush();
+        }
+    }
+}
\ No newline at end of file


Property changes on: trunk/src/action/org/jboss/blog/session/security/nukes/NukesSecurityBootstrap.java
___________________________________________________________________
Name: svn:mergeinfo
   + 

Added: trunk/src/action/org/jboss/blog/session/security/nukes/NukesSecurityService.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/nukes/NukesSecurityService.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/nukes/NukesSecurityService.java	2008-09-02 13:52:19 UTC (rev 325)
@@ -0,0 +1,235 @@
+package org.jboss.blog.session.security.nukes;
+
+import org.jboss.blog.session.security.external.ExternalSecurityService;
+import org.jboss.blog.session.security.external.AbstractExternalSecurityService;
+import org.jboss.blog.session.security.InvalidLoginException;
+import org.jboss.blog.model.security.SecurityUser;
+import org.jboss.blog.model.security.RestrictedSecurityGroup;
+import org.jboss.blog.model.security.RestrictedSecurityUser;
+import org.jboss.blog.model.security.SecurityGroup;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.ScopeType;
+
+import javax.persistence.EntityManager;
+import java.util.List;
+import java.util.Collections;
+import java.sql.*;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ * @author Tomek Szymanski
+ */
+ at Name("externalSecurityService")
+ at AutoCreate
+ at Scope(ScopeType.STATELESS)
+public class NukesSecurityService extends AbstractExternalSecurityService implements ExternalSecurityService {
+    @In
+    private EntityManager entityManager;
+
+    protected EntityManager getEntityManager() {
+        return entityManager;
+    }
+
+    public static String toHexString(byte[] bytes) {
+        if (bytes == null) {
+            throw new IllegalArgumentException("byte array must not be null");
+        }
+        StringBuffer hex = new StringBuffer(bytes.length * 2);
+        for (byte aByte : bytes) {
+            hex.append(Character.forDigit((aByte & 0XF0) >> 4, 16));
+            hex.append(Character.forDigit((aByte & 0X0F), 16));
+        }
+        return hex.toString();
+    }
+
+    public static byte[] md5(String text) {
+        // arguments check
+        if (text == null) {
+            throw new NullPointerException("null text");
+        }
+
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            md.update(text.getBytes());
+            return md.digest();
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException("Cannot find MD5 algorithm");
+        }
+    }
+
+    public SecurityUser authenticate(String username, String password) throws InvalidLoginException {
+        String passHashed = toHexString(md5(password));
+
+        NukesUser nukesUser = getNukesUser(username);
+
+        if (nukesUser != null && nukesUser.getPasswordHash().equals(passHashed)) {
+            SecurityUser securityUser = new SecurityUser();
+            securityUser.setExternalId(nukesUser.getUsername());
+            securityUser.setRealUser(nukesUser);
+
+            return getUnrestrictedSecurityUser(securityUser);
+        } else {
+            throw new InvalidLoginException();
+        }
+    }
+
+    private NukesUser getNukesUser(String username) {
+        Connection c = null;
+
+        try {
+            c = getConnection();
+
+            String sqlQuery = "SELECT * FROM nuke_users WHERE pn_uname = ?";
+
+            PreparedStatement prepStmt = c.prepareStatement(sqlQuery);
+            prepStmt.setString(1, username);
+
+            ResultSet rs = prepStmt.executeQuery();
+
+            if (rs.next()) {
+                return new NukesUser(rs);
+            } else {
+                return null;
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (c != null) {
+                try {
+                    c.close();
+                } catch (SQLException e) {
+                    //noinspection ThrowFromFinallyBlock
+                    throw new RuntimeException(e);
+                }
+            }
+        }
+    }
+
+    private NukesUser getRealUser(RestrictedSecurityUser securityUser) {
+        if (securityUser.getRealUser() == null) {
+            NukesUser user = getNukesUser(securityUser.getExternalId());
+            securityUser.setRealUser(user);
+
+            return user;
+        } else {
+            return (NukesUser) securityUser.getRealUser();
+        }
+    }
+
+    public List<? extends RestrictedSecurityGroup> getAllGroups() {
+        return Collections.emptyList();
+    }
+
+    public List<? extends RestrictedSecurityUser> getUsers(int start, int count) {
+        return Collections.emptyList();
+    }
+
+    public List<? extends RestrictedSecurityUser> getUsers(String filter, int start, int count) {
+        NukesUser nu = getNukesUser(filter);
+        if (nu == null) {
+            return Collections.emptyList();
+        } else {
+            SecurityUser securityUser = new SecurityUser();
+            securityUser.setExternalId(nu.getUsername());
+            securityUser.setRealUser(nu);
+
+            return Collections.singletonList(securityUser);
+        }
+    }
+
+    public List<SecurityGroup> getGroupsOfUser(SecurityUser securityUser) {
+        return Collections.emptyList();
+    }
+
+    public List<? extends RestrictedSecurityUser> getUsersInGroup(RestrictedSecurityGroup securityGroup) {
+        return Collections.emptyList();
+    }
+
+    public String getEmail(RestrictedSecurityUser securityUser) {
+        NukesUser nu = getRealUser(securityUser);
+        if (nu == null) {
+            return "<? " + securityUser.getExternalId() + " ?>";
+        } else {
+            return nu.getEmail();
+        }
+    }
+
+    public String getDisplayName(RestrictedSecurityUser securityUser) {
+        NukesUser nu = getRealUser(securityUser);
+        if (nu == null) {
+            return "<? " + securityUser.getExternalId() + " ?>";
+        } else {
+            return nu.getDisplayName();
+        }
+    }
+
+    public String getDisplayName(RestrictedSecurityGroup securityGroup) {
+        return "";
+    }
+
+    public RestrictedSecurityGroup getAdminGroup() {
+        return null;
+    }
+
+    // Database connection
+
+    private String dbUrl;
+    private String dbUserName;
+    private String dbPass;
+
+    public String getDbUrl() {
+        return dbUrl;
+    }
+
+    public void setDbUrl(String dbUrl) {
+        this.dbUrl = dbUrl;
+    }
+
+    public String getDbUserName() {
+        return dbUserName;
+    }
+
+    public void setDbUserName(String dbUserName) {
+        this.dbUserName = dbUserName;
+    }
+
+    public String getDbPass() {
+        return dbPass;
+    }
+
+    public void setDbPass(String dbPass) {
+        this.dbPass = dbPass;
+    }
+
+    private Connection getConnection() throws Exception {
+        Class.forName("com.mysql.jdbc.Driver").newInstance();
+        return DriverManager.getConnection(dbUrl, dbUserName, dbPass);
+    }
+
+    // Other settings
+
+    private String initialAdministrator;
+
+    public String getInitialAdministrator() {
+        return initialAdministrator;
+    }
+
+    public void setInitialAdministrator(String initialAdministrator) {
+        this.initialAdministrator = initialAdministrator;
+    }
+
+    public RestrictedSecurityUser getInitialAdministratorUser() {
+        NukesUser nu = getNukesUser(initialAdministrator);
+
+        SecurityUser su = new SecurityUser();
+        su.setExternalId(nu.getUsername());
+        su.setRealUser(nu);
+
+        return su;
+    }
+}

Added: trunk/src/action/org/jboss/blog/session/security/nukes/NukesUser.java
===================================================================
--- trunk/src/action/org/jboss/blog/session/security/nukes/NukesUser.java	                        (rev 0)
+++ trunk/src/action/org/jboss/blog/session/security/nukes/NukesUser.java	2008-09-02 13:52:19 UTC (rev 325)
@@ -0,0 +1,68 @@
+package org.jboss.blog.session.security.nukes;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ * @author Tomasz Szymanski
+ */
+public class NukesUser {
+	private Date creationDate;
+	private String email;
+	private Date lastLoggedIn;
+	private String name;
+	private String passHash;
+	private String username;
+	private String firstName;
+	private String lastName;
+
+	public NukesUser(ResultSet rs) throws SQLException {
+		creationDate = rs.getDate("pn_user_regdate");
+		email = rs.getString("pn_email");
+		lastLoggedIn = rs.getDate("pn_last_visit");
+		username = rs.getString("pn_uname");
+		name = rs.getString("pn_name");
+		passHash = rs.getString("pn_pass");
+		firstName = rs.getString("pn_fname");
+		lastName = rs.getString("pn_lname");
+	}
+
+	public Date getCreationDate() {
+		return creationDate;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public Date getLastLoggedIn() {
+		return lastLoggedIn;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getPasswordHash() {
+		return passHash;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public String getLastName() {
+		return lastName;
+	}
+
+    public String getDisplayName() {
+        return firstName + " " + lastName;
+    }
+}
+




More information about the jboss-cvs-commits mailing list