Author: dimuthul
Date: Thu Mar  6 07:49:57 2008
New Revision: 14560

Log:

Decoupling from Default Realm.



Added:
   
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASAccessControlAdmin.java
   
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASAuthorizer.java
Modified:
   
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASRegistryRealm.java
   
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASStrategyImpl.java
   
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASUserStoreAdmin.java
   
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASUserStoreReader.java
   trunk/mashup/java/modules/www/stub_gen.jsp
   trunk/mashup/java/modules/www/tag_cloud.jsp

Added: 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASAccessControlAdmin.java
==============================================================================
--- (empty file)
+++ 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASAccessControlAdmin.java
   Thu Mar  6 07:49:57 2008
@@ -0,0 +1,462 @@
+package org.wso2.mashup.realm.wsas;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.registry.i18n.Messages;
+import org.wso2.registry.users.AccessControlAdmin;
+import org.wso2.registry.users.UserStoreException;
+import org.wso2.registry.users.def.DefaultAccessControlAdmin;
+import org.wso2.registry.users.def.DefaultAuthorizer;
+import org.wso2.registry.users.def.DefaultDataSupplier;
+import org.wso2.registry.users.def.DefaultRealmConfig;
+import org.wso2.registry.users.def.DefaultRealmConstants;
+import org.wso2.usermanager.UserManagerException;
+import org.wso2.usermanager.readwrite.util.UUIDGenerator;
+
+
+public class WSASAccessControlAdmin extends DefaultAuthorizer 
+                                         implements AccessControlAdmin{
+    
+    private static Log log = 
LogFactory.getLog(DefaultAccessControlAdmin.class);
+
+    public WSASAccessControlAdmin(DataSource dataSource, String algo) {
+        super(dataSource, algo);
+    }
+    
+    public WSASAccessControlAdmin(DataSource dataSource, String algo,
+            DefaultDataSupplier store) {
+        super(dataSource, algo, store);
+    }
+
+    public WSASAccessControlAdmin(DataSource dataSource,
+            DefaultDataSupplier store) {
+        super(dataSource, DefaultRealmConfig.PERMISSION_BLOCK_FIRST, store);
+    }
+
+  
+    public void clearUserAuthorization(String userName, String resourceId,
+            String action) throws UserStoreException {
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException(Messages
+                        .getMessage("null_connection"));
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement getPermission = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_PERMISSION));
+            getPermission.setString(1, resourceId);
+            getPermission.setString(2, action);
+
+            ResultSet rs = getPermission.executeQuery();
+            int pid = -1;
+            if (rs.next()) {
+                pid = rs.getInt(data
+                        .getColumnName(DefaultRealmConstants.COLUMN_ID_ID));
+            } else {
+                throw new UserStoreException(Messages.getMessage("nullData"));
+            }
+            PreparedStatement clearUPStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAccessControlAdminSQL(DefaultRealmConstants.DELETE_USER_PERMISSION));
+            clearUPStmt.setString(1, userName);
+            clearUPStmt.setInt(2, pid);
+            clearUPStmt.executeUpdate();
+            dbConnection.commit();
+            getPermission.close();
+            clearUPStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException(Messages
+                    .getMessage("errorModifyingUserStore"), e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException(Messages
+                        .getMessage("errorClosingConnection"), e);
+            }
+        }
+    }
+
+    public void denyUser(String userName, String resourceId, String action)
+            throws UserStoreException {
+        short deny = 0;
+        addAllowDenyUserPermission(userName, resourceId, action, deny);
+    }
+
+    public void authorizeRole(String roleName, String resourceId, String 
action)
+            throws UserStoreException {
+        short allow = 1;
+        addAllowDenyRolePermission(roleName, resourceId, action, allow);
+        
+    }
+
+    public void denyRole(String roleName, String resourceId, String action)
+            throws UserStoreException {
+        short deny = 0;
+        addAllowDenyRolePermission(roleName, resourceId, action, deny);
+    }
+
+    public void clearRoleAuthorization(String roleName, String resourceId,
+            String action) throws UserStoreException {
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException(Messages
+                        .getMessage("null_connection"));
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement getPermission = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_PERMISSION));
+            getPermission.setString(1, resourceId);
+            getPermission.setString(2, action);
+
+            ResultSet rs = getPermission.executeQuery();
+            int pid = -1;
+            if (rs.next()) {
+                pid = rs.getInt(data
+                        .getColumnName(DefaultRealmConstants.COLUMN_ID_ID));
+            } else {
+                throw new UserStoreException(Messages.getMessage("nullData"));
+            }
+
+            PreparedStatement deleteRolesStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAccessControlAdminSQL(DefaultRealmConstants.DELETE_ROLE_PERMISSION));
+            deleteRolesStmt.setString(1, roleName);
+            deleteRolesStmt.setInt(2, pid);
+            deleteRolesStmt.executeUpdate();
+
+            dbConnection.commit();
+            getPermission.close();
+            deleteRolesStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException(Messages
+                    .getMessage("errorModifyingUserStore"), e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException(Messages
+                        .getMessage("errorClosingConnection"), e);
+            }
+        }
+
+    }
+
+    public void clearResourceAuthorizations(String resourceId)
+            throws UserStoreException {
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException(Messages
+                        .getMessage("null_connection"));
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement clearResourceAuthorizationsStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAccessControlAdminSQL(DefaultRealmConstants.DELETE_PERMISSION_ON_RESOURCE));
+            clearResourceAuthorizationsStmt.setString(1, resourceId);
+            clearResourceAuthorizationsStmt.executeUpdate();
+            dbConnection.commit();
+            clearResourceAuthorizationsStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException(Messages
+                    .getMessage("errorModifyingUserStore"), e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException(Messages
+                        .getMessage("errorClosingConnection"), e);
+            }
+        }
+    }
+
+    public void copyAuthorizations(String fromResourceId, String toResourceId)
+            throws UserStoreException {
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement getResourcePermissionStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_RESOURCE_PERMISSION));
+            getResourcePermissionStmt.setString(1, toResourceId);
+            ResultSet rs = getResourcePermissionStmt.executeQuery();
+            if (rs.next()) {
+                throw new UserStoreException(
+                        "copyAuthorizationFailedPermissionExist");
+            }
+
+            getResourcePermissionStmt.setString(1, fromResourceId);
+            rs = getResourcePermissionStmt.executeQuery();
+            PreparedStatement addPermissionStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAccessControlAdminSQL(DefaultRealmConstants.ADD_PERMISSION));
+            while (rs.next()) {
+                String action = rs.getString(data
+                        
.getColumnName(DefaultRealmConstants.COLUMN_ID_ACTION));
+                String oldPermissionId = rs.getString(data
+                        .getColumnName(DefaultRealmConstants.COLUMN_ID_ID));
+                String idPermission = UUIDGenerator.getUUID();
+                addPermissionStmt.setString(1, toResourceId);
+                addPermissionStmt.setString(2, action);
+                addPermissionStmt.setString(3, idPermission);
+                addPermissionStmt.executeUpdate();
+
+                PreparedStatement getRolePermissionStmt = dbConnection
+                        .prepareStatement(data
+                                
.getAuthorizerSQL(DefaultRealmConstants.GET_ROLE_PERMISSION));
+
+                getRolePermissionStmt.setString(1, oldPermissionId);
+                ResultSet rsr = getRolePermissionStmt.executeQuery();
+                PreparedStatement addRolePermissionStmt = dbConnection
+                        .prepareStatement(data
+                                
.getAccessControlAdminSQL(DefaultRealmConstants.ADD_ROLE_PERMISSION));
+
+                while (rsr.next()) {
+                    String idRolePermission = UUIDGenerator.getUUID();
+                    String roleId = rsr
+                            .getString(data
+                                    
.getColumnName(DefaultRealmConstants.COLUMN_ID_ROLE_ID));
+                    short allow = rsr
+                            .getShort(data
+                                    
.getColumnName(DefaultRealmConstants.COLUMN_ID_IS_ALLOWED));
+
+                    addRolePermissionStmt.setString(1, idPermission);
+                    addRolePermissionStmt.setShort(2, allow);
+                    addRolePermissionStmt.setString(3, roleId);
+                    addRolePermissionStmt.setString(4, idRolePermission);
+                    addRolePermissionStmt.executeUpdate();
+                }
+
+                PreparedStatement getUserPermissionStmt = dbConnection
+                        .prepareStatement(data
+                                
.getAuthorizerSQL(DefaultRealmConstants.GET_USER_PERMISSION));
+
+                getUserPermissionStmt.setString(1, oldPermissionId);
+                ResultSet rsu = getUserPermissionStmt.executeQuery();
+
+                PreparedStatement addUserPermissionStmt = dbConnection
+                        .prepareStatement(data
+                                
.getAccessControlAdminSQL(DefaultRealmConstants.ADD_USER_PERMISSION));
+
+                while (rsu.next()) {
+                    String idUserPermission = UUIDGenerator.getUUID();
+                    String userId = rsu
+                            .getString(data
+                                    
.getColumnName(DefaultRealmConstants.COLUMN_ID_USER_ID));
+                    short allow = rsu
+                            .getShort(data
+                                    
.getColumnName(DefaultRealmConstants.COLUMN_ID_IS_ALLOWED));
+
+                    addUserPermissionStmt.setString(1, idPermission);
+                    addUserPermissionStmt.setShort(2, allow);
+                    addUserPermissionStmt.setString(3, userId);
+                    addUserPermissionStmt.setString(4, idUserPermission);
+                    addUserPermissionStmt.executeUpdate();
+                }
+                getRolePermissionStmt.close();
+                addRolePermissionStmt.close();
+                getUserPermissionStmt.close();
+                addUserPermissionStmt.close();
+
+            }
+
+            getResourcePermissionStmt.close();
+            addPermissionStmt.close();
+
+            dbConnection.commit();
+
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorCopyingAuthorizations", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+
+    }
+
+    public void authorizeUser(String userName, String resourceId, String 
action)
+            throws UserStoreException {
+        short allow = 1;
+        addAllowDenyUserPermission(userName, resourceId, action, allow);
+    }
+    
+    
+
+    /**
+     * Gets the permission if it exists, else create the permission and returns
+     * the id.
+     * 
+     * @return
+     */
+    protected String getOrAddPermissionId(Connection dbConnection, String 
resourceId, String action)
+            throws UserStoreException {
+        String permissionId = null;
+        try {
+            PreparedStatement getPermissionStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_PERMISSION));
+            getPermissionStmt.setString(1, resourceId);
+            getPermissionStmt.setString(2, action);
+
+            ResultSet rs = getPermissionStmt.executeQuery();
+
+            if (rs.next()) {
+                permissionId = rs.getString(data
+                        .getColumnName(DefaultRealmConstants.COLUMN_ID_ID));
+            }
+
+            PreparedStatement addPermissionStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAccessControlAdminSQL(DefaultRealmConstants.ADD_PERMISSION));
+
+            if (permissionId == null) {
+                // no permission so add it
+                String idPermission = UUIDGenerator.getUUID();
+                addPermissionStmt.setString(1, resourceId);
+                addPermissionStmt.setString(2, action);
+                addPermissionStmt.setString(3, idPermission);
+                addPermissionStmt.executeUpdate();
+                dbConnection.commit();
+                permissionId = idPermission;
+            }
+
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorModifyingUserStore", e);
+        }
+        return permissionId;
+
+    }
+    
+    
+    protected void addAllowDenyUserPermission(String userName, String 
resourceId, String action, short allow)
+        throws UserStoreException{
+        Connection dbConnection = null;
+        try {
+            
+            String idUserPermission = UUIDGenerator.getUUID();
+           
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            String permissionId = this.getOrAddPermissionId(dbConnection, 
resourceId, action);
+            PreparedStatement clearUPStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAccessControlAdminSQL(DefaultRealmConstants.DELETE_USER_PERMISSION));
+            clearUPStmt.setString(1, userName);
+            clearUPStmt.setString(2, permissionId);
+            clearUPStmt.executeUpdate();
+
+            PreparedStatement addUserPermissionStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAccessControlAdminSQL(DefaultRealmConstants.ADD_USER_PERMISSION));
+            addUserPermissionStmt.setString(1, permissionId);
+            addUserPermissionStmt.setShort(2, allow);
+            addUserPermissionStmt.setString(3, userName);
+            addUserPermissionStmt.setString(4, idUserPermission);
+            addUserPermissionStmt.executeUpdate();
+            dbConnection.commit();
+            addUserPermissionStmt.close();
+            clearUPStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorModifyingUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+
+
+    
+    }
+
+    protected  void addAllowDenyRolePermission(String roleName, String 
resourceId, String action, short allow)
+                                        throws UserStoreException{
+        
+        Connection dbConnection = null;
+        
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            String permissionId = this.getOrAddPermissionId(dbConnection, 
resourceId, action);
+            String idRolePermission = UUIDGenerator.getUUID();
+            
+            // There can be only one permission for a role and a permission
+            PreparedStatement deleteRolesStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAccessControlAdminSQL(DefaultRealmConstants.DELETE_ROLE_PERMISSION));
+            deleteRolesStmt.setString(1, roleName);
+            deleteRolesStmt.setString(2, permissionId);
+            deleteRolesStmt.executeUpdate();
+
+            PreparedStatement addRolePermissionStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAccessControlAdminSQL(DefaultRealmConstants.ADD_ROLE_PERMISSION));
+            addRolePermissionStmt.setString(1, permissionId);
+            addRolePermissionStmt.setShort(2, allow);
+            addRolePermissionStmt.setString(3, roleName);
+            addRolePermissionStmt.setString(4, idRolePermission);
+            addRolePermissionStmt.executeUpdate();
+            dbConnection.commit();
+            addRolePermissionStmt.close();
+            deleteRolesStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorModifyingUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+    }
+
+    
+}

Added: 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASAuthorizer.java
==============================================================================
--- (empty file)
+++ 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASAuthorizer.java
   Thu Mar  6 07:49:57 2008
@@ -0,0 +1,355 @@
+package org.wso2.mashup.realm.wsas;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.registry.users.Authorizer;
+import org.wso2.registry.users.UserStoreException;
+import org.wso2.registry.users.def.DefaultDataSupplier;
+import org.wso2.registry.users.def.DefaultRealmConfig;
+import org.wso2.registry.users.def.DefaultRealmConstants;
+import org.wso2.registry.users.def.util.DefaultDataSupplierImpl;
+
+public class WSASAuthorizer  implements Authorizer {
+
+    /** DBCP datasource */
+    protected DataSource dataSource = null;
+
+    /** The object that pumps sqls */
+    protected DefaultDataSupplier data = null;
+
+    /** logger */
+    private static Log log = LogFactory.getLog(WSASAuthorizer.class);
+
+    /** Algorithm to authorize users */
+    private String algorithm = null;
+
+    public WSASAuthorizer(DataSource dataSource, String algo) {
+        this.dataSource = dataSource;
+        this.data = new DefaultDataSupplierImpl(dataSource);
+        this.algorithm = algo;
+    }
+
+    public WSASAuthorizer(DataSource dataSource, String algo,
+            DefaultDataSupplier strategy) {
+        this.dataSource = dataSource;
+        if (strategy != null) {
+            this.data = strategy;
+        } else {
+            this.data = new DefaultDataSupplierImpl(dataSource);
+        }
+        this.algorithm = algo;
+    }
+
+    public boolean isRoleAuthorized(String roleName, String resourceId,
+            String action) throws UserStoreException {
+
+        Boolean isAuthorized = getRoleAuthorized(roleName, resourceId, action);
+        if (isAuthorized == null) {
+            return false;
+        } else {
+            return isAuthorized.booleanValue();
+        }
+    }
+
+    public boolean isUserAuthorized(String userName, String resourceId,
+            String action) throws UserStoreException {
+        Boolean isAuthorized = null;
+
+        if (algorithm.equals(DefaultRealmConfig.PERMISSION_USER_ONLY)) {
+            isAuthorized = getUserAuthorized(userName, resourceId, action);
+        } else if 
(algorithm.equals(DefaultRealmConfig.PERMISSION_BLOCK_FIRST)) {
+            isAuthorized = getUserAuthorizationConsideringRoles(userName,
+                    resourceId, action);
+        }
+
+        if (isAuthorized == null) {
+            return false;
+        } else {
+            return isAuthorized.booleanValue();
+        }
+    }
+
+    public String[] getAllowedUsersForResource(String resourceId, String 
action)
+            throws UserStoreException {
+        String[] names = new String[0];
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement getAuthorizedUsersForResourceStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_ALLOWED_USERS_ON_RESOURCE));
+            getAuthorizedUsersForResourceStmt.setString(1, resourceId);
+            getAuthorizedUsersForResourceStmt.setString(2, action);
+            ResultSet rs = getAuthorizedUsersForResourceStmt.executeQuery();
+            List lst = new LinkedList();
+            String colName = data
+                    .getColumnName(DefaultRealmConstants.COLUMN_ID_USER_NAME);
+            while (rs.next()) {
+                lst.add(rs.getString(colName));
+            }
+            if (lst.size() > 0) {
+                names = (String[]) lst.toArray(new String[lst.size()]);
+            }
+            getAuthorizedUsersForResourceStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorReadingFromUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+        return names;
+    }
+
+    public String[] getDeniedUsersForResource(String resourceId, String action)
+            throws UserStoreException {
+        String[] names = new String[0];
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement getAuthorizedUsersForResourceStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_DENIED_USERS_ON_RESOURCE));
+            getAuthorizedUsersForResourceStmt.setString(1, resourceId);
+            getAuthorizedUsersForResourceStmt.setString(2, action);
+            ResultSet rs = getAuthorizedUsersForResourceStmt.executeQuery();
+            List lst = new LinkedList();
+            String colName = data
+                    .getColumnName(DefaultRealmConstants.COLUMN_ID_USER_NAME);
+            while (rs.next()) {
+                lst.add(rs.getString(colName));
+            }
+            if (lst.size() > 0) {
+                names = (String[]) lst.toArray(new String[lst.size()]);
+            }
+            getAuthorizedUsersForResourceStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorReadingFromUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+        return names;
+    }
+
+    public String[] getAllowedRolesForResource(String resourceId, String 
action)
+            throws UserStoreException {
+        String[] names = new String[0];
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement getAuthorizedRolesForResourceStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_ALLOWED_ROLES_FOR_RESOURCE));
+            getAuthorizedRolesForResourceStmt.setString(1, resourceId);
+            getAuthorizedRolesForResourceStmt.setString(2, action);
+            ResultSet rs = getAuthorizedRolesForResourceStmt.executeQuery();
+            List lst = new LinkedList();
+            String colName = data
+                    .getColumnName(DefaultRealmConstants.COLUMN_ID_ROLE_NAME);
+            while (rs.next()) {
+                lst.add(rs.getString(colName));
+            }
+            if (lst.size() > 0) {
+                names = (String[]) lst.toArray(new String[lst.size()]);
+            }
+            getAuthorizedRolesForResourceStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorReadingFromUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+        return names;
+    }
+
+    public String[] getDeniedRolesForResource(String resourceId, String action)
+            throws UserStoreException {
+
+        String[] names = new String[0];
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement getAuthorizedRolesForResourceStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_DENIED_ROLES_FOR_RESOURCE));
+            getAuthorizedRolesForResourceStmt.setString(1, resourceId);
+            getAuthorizedRolesForResourceStmt.setString(2, action);
+            ResultSet rs = getAuthorizedRolesForResourceStmt.executeQuery();
+            List lst = new LinkedList();
+            String colName = data
+                    .getColumnName(DefaultRealmConstants.COLUMN_ID_ROLE_NAME);
+            while (rs.next()) {
+                lst.add(rs.getString(colName));
+            }
+            if (lst.size() > 0) {
+                names = (String[]) lst.toArray(new String[lst.size()]);
+            }
+            getAuthorizedRolesForResourceStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorReadingFromUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+        return names;
+
+    }
+
+    private Boolean getUserAuthorizationConsideringRoles(String userName,
+            String resourceId, String action) throws UserStoreException {
+        Boolean isAuthorized = getUserAuthorized(userName, resourceId, action);
+
+        boolean onceAllowed = false;
+        if (isAuthorized == null) {
+            String[] roles = data.getUserRoles(userName);
+
+            for (int i = 0; i < roles.length; i++) {
+                String roleName = roles[i];
+                Boolean roleAuth = getRoleAuthorized(roleName, resourceId,
+                        action);
+                if (roleAuth != null) {
+                    if (roleAuth.booleanValue() == false) {
+                        isAuthorized = roleAuth;
+                        break;
+                    } else {
+                        onceAllowed = true;
+                    }
+                }
+            }
+        }
+
+        if (isAuthorized == null && onceAllowed == true) {
+            isAuthorized = new Boolean(true);
+        }
+
+        return isAuthorized;
+    }
+
+    private Boolean getRoleAuthorized(String roleName, String resourceId,
+            String action) throws UserStoreException {
+        Boolean isAuthorized = null;
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement isRoleAuthorizedStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_ROLE_AUTHORIZED));
+            isRoleAuthorizedStmt.setString(1, resourceId);
+            isRoleAuthorizedStmt.setString(2, action);
+            isRoleAuthorizedStmt.setString(3, roleName);
+            ResultSet rs = isRoleAuthorizedStmt.executeQuery();
+            if (rs.next()) {
+                boolean isAuth = rs
+                        .getBoolean(data
+                                
.getColumnName(DefaultRealmConstants.COLUMN_ID_IS_ALLOWED));
+                isAuthorized = Boolean.valueOf(isAuth);
+            }
+            isRoleAuthorizedStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorReadingFromUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+        return isAuthorized;
+    }
+
+    private Boolean getUserAuthorized(String userName, String resourceId,
+            String action) throws UserStoreException {
+        Boolean result = null;
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement isUserAuthorizedStmt = dbConnection
+                    .prepareStatement(data
+                            
.getAuthorizerSQL(DefaultRealmConstants.GET_USER_AUTHORIZED));
+            isUserAuthorizedStmt.setString(1, resourceId);
+            isUserAuthorizedStmt.setString(2, action);
+            isUserAuthorizedStmt.setString(3, userName);
+            ResultSet rs = isUserAuthorizedStmt.executeQuery();
+            if (rs.next()) {
+                result = Boolean
+                        .valueOf(rs
+                                .getBoolean(data
+                                        
.getColumnName(DefaultRealmConstants.COLUMN_ID_IS_ALLOWED)));
+            }
+            isUserAuthorizedStmt.close();
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorReadingFromUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+        return result;
+    }
+
+}

Modified: 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASRegistryRealm.java
==============================================================================
--- 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASRegistryRealm.java
        (original)
+++ 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASRegistryRealm.java
        Thu Mar  6 07:49:57 2008
@@ -47,8 +47,8 @@
         dataSource = (DataSource) basicDataSource;
 
         authenticator = new WSASAuthenticator();
-        authorizer = new DefaultAuthorizer(dataSource,  
DefaultRealmConfig.PERMISSION_BLOCK_FIRST, (DefaultDataSupplier)new 
WSASStrategyImpl());
-        aclAdmin = new DefaultAccessControlAdmin(dataSource,
+        authorizer = new WSASAuthorizer(dataSource, 
DefaultRealmConfig.PERMISSION_BLOCK_FIRST, (DefaultDataSupplier)new 
WSASStrategyImpl());
+        aclAdmin = new WSASAccessControlAdmin(dataSource,
                 (DefaultDataSupplier)new WSASStrategyImpl());
         usAdmin = new WSASUserStoreAdmin(dataSource, new WSASStrategyImpl());
         usReader = new WSASUserStoreReader(dataSource, new WSASStrategyImpl());

Modified: 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASStrategyImpl.java
==============================================================================
--- 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASStrategyImpl.java
 (original)
+++ 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASStrategyImpl.java
 Thu Mar  6 07:49:57 2008
@@ -83,10 +83,38 @@
     " from um_user_attributes " +
     " where um_user_attributes.attr_value=?";
     
-    
-    
+    public static final String ADD_USER_ATTRIBUTE_SQL = "insert into 
um_user_attributes (attr_name, attr_value, user_id, id) values (?, ?, ?, ?)";
+    public static final String ADD_ROLE_ATTRIBUTE_SQL = "insert into 
um_role_attributes (attr_name, attr_value, role_id, id) values (?, ?, ?, ?)";
+    public static final String ADD_PERMISSION_SQL = "insert into 
um_permissions (resource_id, action, id) values (?, ?, ?)";
+    public static final String ADD_ROLE_PERMISSION_SQL = "insert into 
um_role_permissions (permission_id, is_allowed, role_id, id) values (?, ?, ?, 
?)";
+    public static final String ADD_USER_PERMISSION_SQL = "insert into 
um_user_permissions (permission_id, is_allowed, user_id, id) values (?, ?, ?, 
?)";
+      
     public String getAccessControlAdminSQL(int sqlID) {
-        return defaultStrategy.getAccessControlAdminSQL(sqlID);
+        String sqlString = null;
+        switch (sqlID) {
+        case DefaultRealmConstants.ADD_PERMISSION:
+            sqlString = ADD_PERMISSION_SQL;
+            break;
+        case DefaultRealmConstants.ADD_ROLE_PERMISSION:
+            sqlString = ADD_ROLE_PERMISSION_SQL;
+            break;
+        case DefaultRealmConstants.ADD_USER_PERMISSION:
+            sqlString = ADD_USER_PERMISSION_SQL;
+            break;
+        case DefaultRealmConstants.DELETE_PERMISSION_ON_RESOURCE:
+            sqlString = 
DefaultRealmConstants.DELETE_PERMISSION_ON_RESOURCE_SQL;
+            break;
+        case DefaultRealmConstants.DELETE_USER_PERMISSION:
+            sqlString = DefaultRealmConstants.DELETE_USER_PERMISSION_SQL;
+            break;
+        case DefaultRealmConstants.DELETE_ROLE_PERMISSION:
+            sqlString = DefaultRealmConstants.DELETE_ROLE_PERMISSION_SQL;
+            break;
+
+        default:
+            break;
+        }
+        return sqlString;
     }
 
     public String getAuthenticatorSQL(int sqlID) {
@@ -152,10 +180,10 @@
         String sqlString = null;
         switch (sqlID) {
         case DefaultRealmConstants.ADD_USER_ATTRIBUTE:
-            sqlString = DefaultRealmConstants.ADD_USER_ATTRIBUTE_SQL;
+            sqlString = ADD_USER_ATTRIBUTE_SQL;
             break;
         case DefaultRealmConstants.ADD_ROLE_ATTRIBUTE:
-            sqlString = DefaultRealmConstants.ADD_ROLE_ATTRIBUTE_SQL;
+            sqlString = ADD_ROLE_ATTRIBUTE_SQL;
             break;
         case DefaultRealmConstants.DELETE_ROLE_ATTRIBUTE:
             sqlString = DefaultRealmConstants.DELETE_ROLE_ATTRIBUTE_SQL;
@@ -197,14 +225,6 @@
         }
         return sqlString;
     }
-
-    public String getRoleId(String roleName) throws UserStoreException {
-       return roleName;
-    }
-
-    public String getUserId(String userName) throws UserStoreException {
-        return userName;
-    }
     
     public String getCommonSQL(int sqlID) {
         return null;

Modified: 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASUserStoreAdmin.java
==============================================================================
--- 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASUserStoreAdmin.java
       (original)
+++ 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASUserStoreAdmin.java
       Thu Mar  6 07:49:57 2008
@@ -4,15 +4,22 @@
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import javax.sql.DataSource;
 
 import org.apache.axis2.AxisFault;
+import org.apache.axiom.om.util.UUIDGenerator;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.wso2.mashup.MashupConstants;
 import org.wso2.registry.users.UserStoreAdmin;
 import org.wso2.registry.users.UserStoreException;
 import org.wso2.registry.users.def.DefaultDataSupplier;
+import org.wso2.registry.users.def.DefaultRealmConstants;
 import org.wso2.registry.users.def.DefaultUserStoreAdmin;
 
 import org.wso2.wsas.admin.service.UserAdmin;
@@ -20,11 +27,11 @@
 public class WSASUserStoreAdmin
         extends WSASUserStoreReader implements UserStoreAdmin {
 
-    private UserStoreAdmin defaultAdmin = null;
+    private static Log log = LogFactory.getLog(WSASUserStoreReader.class);
     
-    public WSASUserStoreAdmin(DataSource dSource, DefaultDataSupplier 
strategy) throws UserStoreException {
+    public WSASUserStoreAdmin(DataSource dSource, DefaultDataSupplier strategy)
+            throws UserStoreException {
         super(dSource, strategy);
-        defaultAdmin = new DefaultUserStoreAdmin(dSource, strategy);
     }
 
     public void addRole(String roleName) throws UserStoreException {
@@ -65,17 +72,7 @@
         try {
             UserAdmin admin = new UserAdmin();
             admin.deleteRoleCompletely(roleName);
-            defaultAdmin.setRoleProperties(roleName, new HashMap());
-
-            dbConnection = dataSource.getConnection();
-            PreparedStatement deleteUserStmt = dbConnection
-                    .prepareStatement(WSASStrategyImpl.DELETE_ROLE_PERMISSION);
-            deleteUserStmt.setString(1, roleName);
-            deleteUserStmt.executeUpdate();
-            dbConnection.commit();
-            deleteUserStmt.close();
-        } catch (SQLException e) {
-            throw new UserStoreException("errorModifyingUserStore", e);
+            this.setRoleProperties(roleName, new HashMap());
         } catch (AxisFault e) {
             throw new UserStoreException(e.getMessage());
         } finally {
@@ -95,16 +92,7 @@
         try {
             UserAdmin admin = new UserAdmin();
             admin.deleteUser(userName);
-            defaultAdmin.setUserProperties(userName, new HashMap());
-            dbConnection = dataSource.getConnection();
-            PreparedStatement deleteUserStmt = dbConnection
-                    .prepareStatement(WSASStrategyImpl.DELETE_USER_PERMISSION);
-            deleteUserStmt.setString(1, userName);
-            deleteUserStmt.executeUpdate();
-            dbConnection.commit();
-            deleteUserStmt.close();
-        } catch (SQLException e) {
-            throw new UserStoreException("errorModifyingUserStore", e);
+            this.setUserProperties(userName, new HashMap());
         } catch (AxisFault e) {
             throw new UserStoreException(e.getMessage());
         } finally {
@@ -118,36 +106,119 @@
         }
     }
 
-    public void removeUserFromRole(String userName, String roleName)
+    public void setRoleProperties(String roleName, Map properties)
             throws UserStoreException {
-
+        
+        Connection dbConnection = null;
         try {
-            UserAdmin admin = new UserAdmin();
-            admin.deleteRoleFromUser(userName, roleName);
-        } catch (Exception e) {
-            throw new UserStoreException(e.getMessage());
-        }
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement deleteRolePropsStmt = dbConnection
+                    .prepareStatement(strategy
+                            
.getUserStoreAdminSQL(DefaultRealmConstants.DELETE_ROLE_ATTRIBUTE));
+            deleteRolePropsStmt.setString(1, roleName);
+            deleteRolePropsStmt.executeUpdate();
+
+            PreparedStatement setRolePropertiesStmt = dbConnection
+                    .prepareStatement(strategy
+                            
.getUserStoreAdminSQL(DefaultRealmConstants.ADD_ROLE_ATTRIBUTE));
+
+            Iterator ite = properties.entrySet().iterator();
+            while (ite.hasNext()) {
+                Entry entry = (Entry) ite.next();
+                String key = (String) entry.getKey();
+                String value = (String) entry.getValue();
+                if (value != null) {
+                    String idRoleAttribute = UUIDGenerator.getUUID();
+                    setRolePropertiesStmt.setString(1, key);
+                    setRolePropertiesStmt.setString(2, value);
+                    setRolePropertiesStmt.setString(3, roleName);
+                    setRolePropertiesStmt.setString(4, idRoleAttribute);
+                    setRolePropertiesStmt.executeUpdate();
+                }
+            }
+            dbConnection.commit();
 
-    }
+            deleteRolePropsStmt.close();
+            setRolePropertiesStmt.close();
 
-    public void setRoleProperties(String roleName, Map properties)
-            throws UserStoreException {
-        UserAdmin admin = new UserAdmin();
-        defaultAdmin.setRoleProperties(roleName, properties);
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorModifyingUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
     }
-
+        
+    
     public void setUserProperties(String userName, Map properties)
             throws UserStoreException {
-        UserAdmin admin = new UserAdmin();
-        defaultAdmin.setUserProperties(userName, properties);
+       
+
+        Connection dbConnection = null;
+        try {
+            dbConnection = dataSource.getConnection();
+            if (dbConnection == null) {
+                throw new UserStoreException("null_connection");
+            }
+            dbConnection.setAutoCommit(false);
+            PreparedStatement deleteUserPropsStmt = dbConnection
+                    .prepareStatement(strategy
+                            
.getUserStoreAdminSQL(DefaultRealmConstants.DELETE_USER_ATTRIBUTE));
+            deleteUserPropsStmt.setString(1, userName);
+            deleteUserPropsStmt.executeUpdate();
+
+            PreparedStatement setUserPropertiesStmt = dbConnection
+                    .prepareStatement(strategy
+                            
.getUserStoreAdminSQL(DefaultRealmConstants.ADD_USER_ATTRIBUTE));
+
+            if (properties != null) {
+                Iterator ite = properties.entrySet().iterator();
+                while (ite.hasNext()) {
+                    Entry entry = (Entry) ite.next();
+                    String key = (String) entry.getKey();
+                    String value = (String) entry.getValue();
+                    if (value != null) {
+                        String idUserAttribute = UUIDGenerator.getUUID();
+                        setUserPropertiesStmt.setString(1, key);
+                        setUserPropertiesStmt.setString(2, value);
+                        setUserPropertiesStmt.setString(3, userName);
+                        setUserPropertiesStmt.setString(4, idUserAttribute);
+                        setUserPropertiesStmt.executeUpdate();
+                    }
+                }
+            }
+            dbConnection.commit();
+
+        } catch (SQLException e) {
+            log.debug(e);
+            throw new UserStoreException("errorModifyingUserStore", e);
+        } finally {
+            try {
+                if (dbConnection != null) {
+                    dbConnection.close();
+                }
+            } catch (SQLException e) {
+                throw new UserStoreException("errorClosingConnection", e);
+            }
+        }
+        
     }
 
-    public void updateUser(String userName, Object newCredential) 
+    public void updateUser(String userName, Object newCredential)
             throws UserStoreException {
         throw new UserStoreException("this method not supported");
     }
 
-    
     public void updateUser(String userName, Object newCredential,
             Object oldCredential) throws UserStoreException {
         try {
@@ -160,4 +231,15 @@
 
     }
 
- }
+    public void removeUserFromRole(String userName, String roleName)
+            throws UserStoreException {
+
+        try {
+            UserAdmin admin = new UserAdmin();
+            admin.deleteRoleFromUser(userName, roleName);
+        } catch (Exception e) {
+            throw new UserStoreException(e.getMessage());
+        }
+
+    }
+}

Modified: 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASUserStoreReader.java
==============================================================================
--- 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASUserStoreReader.java
      (original)
+++ 
trunk/mashup/java/modules/core/src/org/wso2/mashup/realm/wsas/WSASUserStoreReader.java
      Thu Mar  6 07:49:57 2008
@@ -12,6 +12,7 @@
 import org.wso2.registry.users.UserStoreReader;
 import org.wso2.registry.users.def.DefaultDataSupplier;
 import org.wso2.registry.users.def.DefaultUserStoreReader;
+
 import org.wso2.wsas.admin.service.UserAdmin;
 import org.wso2.wsas.admin.service.util.RoleData;
 import org.wso2.wsas.admin.service.util.UserData;

Modified: trunk/mashup/java/modules/www/stub_gen.jsp
==============================================================================
--- trunk/mashup/java/modules/www/stub_gen.jsp  (original)
+++ trunk/mashup/java/modules/www/stub_gen.jsp  Thu Mar  6 07:49:57 2008
@@ -40,9 +40,7 @@
 <%@ page import="org.wso2.registry.Tag" %>
 <%@ page import="org.wso2.registry.jdbc.JDBCRegistry" %>
 <%@ page import="org.wso2.registry.secure.SecureRegistry" %>
-<%@ page import="org.wso2.usermanager.Realm" %>
-<%@ page import="org.wso2.usermanager.UserManagerException" %>
-<%@ page import="org.wso2.usermanager.verification.email.EmailVerifier" %>
+<%@ page import="org.wso2.registry.users.verifier.EmailVerifier" %>
 <%@ page import="javax.servlet.ServletContext" %>
 <%@ page import="java.net.URL" %>
 <%@ page import="java.net.URLDecoder" %>

Modified: trunk/mashup/java/modules/www/tag_cloud.jsp
==============================================================================
--- trunk/mashup/java/modules/www/tag_cloud.jsp (original)
+++ trunk/mashup/java/modules/www/tag_cloud.jsp Thu Mar  6 07:49:57 2008
@@ -40,9 +40,7 @@
 <%@ page import="org.wso2.registry.Tag" %>
 <%@ page import="org.wso2.registry.jdbc.JDBCRegistry" %>
 <%@ page import="org.wso2.registry.secure.SecureRegistry" %>
-<%@ page import="org.wso2.usermanager.Realm" %>
-<%@ page import="org.wso2.usermanager.UserManagerException" %>
-<%@ page import="org.wso2.usermanager.verification.email.EmailVerifier" %>
+<%@ page import="org.wso2.registry.users.verifier.EmailVerifier" %>
 <%@ page import="javax.servlet.ServletContext" %>
 <%@ page import="java.net.URL" %>
 <%@ page import="java.net.URLDecoder" %>

_______________________________________________
Mashup-dev mailing list
[email protected]
http://www.wso2.org/cgi-bin/mailman/listinfo/mashup-dev

Reply via email to