[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&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