You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by dj...@apache.org on 2007/01/01 07:32:45 UTC
svn commit: r491541 - in
/directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc:
./ data/
Author: djencks
Date: Sun Dec 31 22:32:44 2006
New Revision: 491541
URL: http://svn.apache.org/viewvc?view=rev&rev=491541
Log:
untested jacc implementation of installing jee role>>permission mapping into triplesec
Added:
directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/DataPolicyConfiguration.java (with props)
directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/
directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Context.java (with props)
directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Permission.java (with props)
directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/PermissionClass.java (with props)
directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Role.java (with props)
Modified:
directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfiguration.java
directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfigurationFactory.java
Added: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/DataPolicyConfiguration.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/DataPolicyConfiguration.java?view=auto&rev=491541
==============================================================================
--- directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/DataPolicyConfiguration.java (added)
+++ directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/DataPolicyConfiguration.java Sun Dec 31 22:32:44 2006
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.directory.triplesec.jacc;
+
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.util.Enumeration;
+
+import javax.security.jacc.PolicyConfiguration;
+import javax.security.jacc.PolicyContextException;
+
+import org.apache.directory.triplesec.jacc.data.Context;
+import org.apache.directory.triplesec.jacc.data.PermissionClass;
+import org.apache.directory.triplesec.jacc.data.Role;
+import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.dao.DaoFactory;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class DataPolicyConfiguration implements PolicyConfiguration {
+
+ public static final String UNCHECKED_ROLE_NAME = "org.apache.directory.triplesec.jacc.unchecked";
+ public static final String EXCLUDED_ROLE_NAME = "org.apache.directory.triplesec.jacc.excluded";
+
+ private final Context context;
+ private final TripleSecPolicyConfigurationFactory policyConfigurationFactory;
+
+ public DataPolicyConfiguration(String contextID, TripleSecPolicyConfigurationFactory policyConfigurationFactory) {
+ context = new Context(contextID);
+ this.policyConfigurationFactory = policyConfigurationFactory;
+ context.addRole(new Role(UNCHECKED_ROLE_NAME));
+ context.addRole(new Role(EXCLUDED_ROLE_NAME));
+ }
+
+ public String getContextID() throws PolicyContextException {
+ return context.getContextID();
+ }
+
+ public void addToRole(String roleName, PermissionCollection permissionCollection) throws PolicyContextException {
+ Role role = context.getRole(roleName);
+ for (Enumeration<Permission> permissions = permissionCollection.elements(); permissions.hasMoreElements();) {
+ Permission permission = permissions.nextElement();
+ addToGrants(permission, role);
+ }
+ }
+
+ public void addToRole(String roleName, Permission permission) throws PolicyContextException {
+ Role role = context.getRole(roleName);
+ addToGrants(permission, role);
+ }
+
+ public void addToUncheckedPolicy(PermissionCollection permissionCollection) throws PolicyContextException {
+ addToRole(UNCHECKED_ROLE_NAME, permissionCollection);
+ }
+
+ public void addToUncheckedPolicy(Permission permission) throws PolicyContextException {
+ addToRole(UNCHECKED_ROLE_NAME, permission);
+ }
+
+ private void addToGrants(Permission permission, Role role) {
+ String permissionClassName = permission.getClass().getName();
+ String permissionName = permission.getName();
+ String permissionActions = permission.getActions();
+ PermissionClass permissionClass = role.getPermissionClass(permissionClassName);
+ permissionClass.addGrant(permissionName, permissionActions);
+ }
+
+ public void addToExcludedPolicy(PermissionCollection permissionCollection) throws PolicyContextException {
+ Role role = context.getRole(EXCLUDED_ROLE_NAME);
+ for (Enumeration<Permission> permissions = permissionCollection.elements(); permissions.hasMoreElements();) {
+ Permission permission = permissions.nextElement();
+ addToDenials(permission, role);
+ }
+ }
+
+ public void addToExcludedPolicy(Permission permission) throws PolicyContextException {
+ Role role = context.getRole(EXCLUDED_ROLE_NAME);
+ addToDenials(permission, role);
+ }
+
+ private void addToDenials(Permission permission, Role role) {
+ String permissionClassName = permission.getClass().getName();
+ String permissionName = permission.getName();
+ String permissionActions = permission.getActions();
+ PermissionClass permissionClass = role.getPermissionClass(permissionClassName);
+ permissionClass.addDenial(permissionName, permissionActions);
+ }
+
+ public void removeRole(String roleName) throws PolicyContextException {
+ context.getRoleMap().remove(roleName);
+ }
+
+ public void removeUncheckedPolicy() throws PolicyContextException {
+ context.getRole(UNCHECKED_ROLE_NAME).getPermissionClassMap().clear();
+ }
+
+ public void removeExcludedPolicy() throws PolicyContextException {
+ context.getRole(EXCLUDED_ROLE_NAME).getPermissionClassMap().clear();
+ }
+
+ public void linkConfiguration(PolicyConfiguration policyConfiguration) throws PolicyContextException {
+ }
+
+ public void delete() throws PolicyContextException {
+ //TODO read spec on what to do. Most likely we want to remove all permissions from all roles.
+ }
+
+ public void commit() throws PolicyContextException {
+ DaoFactory daoFactory = policyConfigurationFactory.getDaoFactory();
+ try {
+ context.commit(daoFactory);
+ } catch (DataAccessException e) {
+ throw new PolicyContextException("Failed to store data in ldap", e);
+ }
+ }
+
+ public boolean inService() throws PolicyContextException {
+ return false;
+ }
+
+}
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/DataPolicyConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/DataPolicyConfiguration.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/DataPolicyConfiguration.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfiguration.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfiguration.java?view=diff&rev=491541&r1=491540&r2=491541
==============================================================================
--- directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfiguration.java (original)
+++ directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfiguration.java Sun Dec 31 22:32:44 2006
@@ -21,14 +21,10 @@
import java.security.PermissionCollection;
import java.security.Principal;
import java.security.ProtectionDomain;
-import java.util.Enumeration;
import javax.security.jacc.PolicyConfiguration;
import javax.security.jacc.PolicyContextException;
-import org.safehaus.triplesec.admin.DataAccessException;
-import org.safehaus.triplesec.admin.dao.DaoFactory;
-import org.safehaus.triplesec.admin.dao.RoleDao;
import org.safehaus.triplesec.guardian.Profile;
import org.safehaus.triplesec.jaas.SafehausPrincipal;
@@ -42,18 +38,14 @@
final static int DELETED = 3;
private final String contextID;
- private RoleDao roleDao;
+ private final TripleSecPolicyConfigurationFactory factory;
+ private DataPolicyConfiguration dataPolicyConfiguration;
private int state;
-
- TripleSecPolicyConfiguration(String contextID, DaoFactory daoFactory) throws PolicyContextException {
+ TripleSecPolicyConfiguration(String contextID, TripleSecPolicyConfigurationFactory factory) throws PolicyContextException {
this.contextID = contextID;
this.state = OPEN;
- try {
- roleDao = daoFactory.getRoleDao();
- } catch (DataAccessException e) {
- throw new PolicyContextException("Could not access RoleDao", e);
- }
+ this.factory = factory;
}
public String getContextID() throws PolicyContextException {
@@ -78,80 +70,52 @@
}
public void addToRole(String roleName, PermissionCollection permissions) throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- Enumeration e = permissions.elements();
- while (e.hasMoreElements()) {
- addToRole(roleName, (Permission) e.nextElement());
- }
+ getDataPolicyConfiguration().addToRole(roleName, permissions);
}
public void addToRole(String roleName, Permission permission) throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- //TODO Install contextId/rolename to permission association in TripleSec LDAP
+ getDataPolicyConfiguration().addToRole(roleName, permission);
}
public void addToUncheckedPolicy(PermissionCollection permissions) throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- Enumeration e = permissions.elements();
- while (e.hasMoreElements()) {
- addToUncheckedPolicy((Permission) e.nextElement());
- }
+ getDataPolicyConfiguration().addToUncheckedPolicy(permissions);
}
public void addToUncheckedPolicy(Permission permission) throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- //TODO Install permission association in TripleSec LDAP unchecked role
+ getDataPolicyConfiguration().addToUncheckedPolicy(permission);
}
public void addToExcludedPolicy(PermissionCollection permissions) throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- Enumeration e = permissions.elements();
- while (e.hasMoreElements()) {
- addToExcludedPolicy((Permission) e.nextElement());
- }
+ getDataPolicyConfiguration().addToExcludedPolicy(permissions);
}
public void addToExcludedPolicy(Permission permission) throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- //TODO Install permission association in TripleSec LDAP excluded (denied) role
+ getDataPolicyConfiguration().addToExcludedPolicy(permission);
}
public void removeRole(String roleName) throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- //TODO remove contextId/role (?? maybe role in all contextIds?) from TripleSec LDAP
+ getDataPolicyConfiguration().removeRole(roleName);
}
public void removeUncheckedPolicy() throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- //TODO remove contextId/unchecked (?? maybe unchecked in all contextIds?) from TripleSec LDAP
+ getDataPolicyConfiguration().removeUncheckedPolicy();
}
public void removeExcludedPolicy() throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- //TODO remove contextId/excluded (?? maybe excluded in all contextIds?) from TripleSec LDAP
+ getDataPolicyConfiguration().removeExcludedPolicy();
}
public void linkConfiguration(javax.security.jacc.PolicyConfiguration link) throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
+ getDataPolicyConfiguration().linkConfiguration(link);
}
public void delete() throws PolicyContextException {
state = DELETED;
+ getDataPolicyConfiguration().delete();
}
public void commit() throws PolicyContextException {
- if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
-
- state = IN_SERVICE;
+ getDataPolicyConfiguration().commit();
}
public boolean inService() throws PolicyContextException {
@@ -173,4 +137,13 @@
int getState() {
return state;
}
+
+ private synchronized PolicyConfiguration getDataPolicyConfiguration() {
+ if (state != OPEN) throw new UnsupportedOperationException("Not in an open state");
+ if (dataPolicyConfiguration == null) {
+ dataPolicyConfiguration = new DataPolicyConfiguration(contextID, factory);
+ }
+ return dataPolicyConfiguration;
+ }
+
}
Modified: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfigurationFactory.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfigurationFactory.java?view=diff&rev=491541&r1=491540&r2=491541
==============================================================================
--- directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfigurationFactory.java (original)
+++ directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/TripleSecPolicyConfigurationFactory.java Sun Dec 31 22:32:44 2006
@@ -17,6 +17,11 @@
package org.apache.directory.triplesec.jacc;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -27,8 +32,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.safehaus.triplesec.admin.dao.DaoFactory;
import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.dao.DaoFactory;
/**
* @version $Rev$ $Date$
@@ -38,8 +43,12 @@
private final Log log = LogFactory.getLog(TripleSecPolicyConfigurationFactory.class);
private static TripleSecPolicyConfigurationFactory singleton;
- private final DaoFactory daoFactory;
+ private Properties ldapProperties;
+ private DaoFactory daoFactory;
+
private Map<String, TripleSecPolicyConfiguration> configurations = new HashMap<String, TripleSecPolicyConfiguration>();
+ private static final String LDAP_PROPERTIES_LOCATON_KEY = "org.apache.directory.triplesec.jacc.ldap.properties";
+ private static final String LDAP_PROPERTIES_LOCATION_DEFAULT = "triplesec_jacc_ldap.properties";
public TripleSecPolicyConfigurationFactory() {
synchronized (TripleSecPolicyConfigurationFactory.class) {
@@ -47,13 +56,6 @@
log.error("Singleton already assigned. There may be more than one TripleSecPolicyConfigurationFactory being used.");
throw new IllegalStateException("Singleton already assigned");
}
- Properties props = new Properties();
- //TODO fill in the properties
- try {
- daoFactory = DaoFactory.createInstance(props);
- } catch (DataAccessException e) {
- throw new RuntimeException("Could not create DaoFactory", e);
- }
singleton = this;
}
}
@@ -62,7 +64,7 @@
TripleSecPolicyConfiguration configuration = configurations.get(contextID);
if (configuration == null) {
- configuration = new TripleSecPolicyConfiguration(contextID, daoFactory);
+ configuration = new TripleSecPolicyConfiguration(contextID, this);
configurations.put(contextID, configuration);
} else {
configuration.open(remove);
@@ -85,5 +87,49 @@
public TripleSecPolicyConfiguration getTripleSecPolicyConfiguration(String contextID) {
return configurations.get(contextID);
+ }
+
+ public synchronized void setLdapProperties(Properties ldapProperties) {
+ this.ldapProperties = ldapProperties;
+ }
+
+ public synchronized DaoFactory getDaoFactory() throws PolicyContextException {
+ if (daoFactory == null) {
+ if (ldapProperties == null) {
+ InputStream in = null;
+ String fileLocation = System.getProperty(LDAP_PROPERTIES_LOCATON_KEY, LDAP_PROPERTIES_LOCATION_DEFAULT);
+ File propertiesFile = new File(fileLocation);
+ if (propertiesFile.exists()) {
+ try {
+ in = new FileInputStream(propertiesFile);
+ } catch (FileNotFoundException e) {
+ //should not happen.... we just checked
+ }
+ }
+ if (in == null) {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (cl == null) {
+ cl = this.getClass().getClassLoader();
+ }
+ in = cl.getResourceAsStream(fileLocation);
+ }
+ if (in == null) {
+ throw new PolicyContextException("Could not find properties to initialize ldap");
+ }
+ ldapProperties = new Properties();
+ try {
+ ldapProperties.load(in);
+ } catch (IOException e) {
+ throw new PolicyContextException("Could not load ldap properties from " + fileLocation, e);
+ }
+ }
+ try {
+ daoFactory = DaoFactory.createInstance(ldapProperties);
+ } catch (DataAccessException e) {
+ throw new PolicyContextException("Could not construct dir context", e);
+ }
+ }
+
+ return daoFactory;
}
}
Added: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Context.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Context.java?view=auto&rev=491541
==============================================================================
--- directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Context.java (added)
+++ directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Context.java Sun Dec 31 22:32:44 2006
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.directory.triplesec.jacc.data;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.dao.ApplicationDao;
+import org.safehaus.triplesec.admin.dao.DaoFactory;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class Context {
+
+ private final String contextID;
+ private final Map<String, Role> roles = new HashMap<String, Role>();
+
+ public Context(String contextID) {
+ this.contextID = contextID;
+ }
+
+ public String getContextID() {
+ return contextID;
+ }
+
+ public Map<String, Role> getRoleMap() {
+ return roles;
+ }
+
+ public Collection<Role> getRoles() {
+ return roles.values();
+ }
+
+ public void addRole(Role role) {
+ roles.put(role.getRoleName(), role);
+ }
+
+ public Role getRole(String roleName) {
+ Role role = getRoleMap().get(roleName);
+ if (role == null) {
+ role = new Role(roleName);
+ addRole(role);
+ }
+ return role;
+ }
+
+ public void commit(DaoFactory daoFactory) throws DataAccessException {
+ ApplicationDao applicationDao = daoFactory.getApplicationDao();
+ try {
+ applicationDao.load(contextID);
+ } catch (DataAccessException e) {
+ //presume not there, create it
+ applicationDao.add(contextID, null, null);
+ }
+ for (Role role: getRoles()) {
+ role.commit(contextID, daoFactory);
+ }
+ }
+}
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Context.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Context.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Context.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Permission.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Permission.java?view=auto&rev=491541
==============================================================================
--- directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Permission.java (added)
+++ directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Permission.java Sun Dec 31 22:32:44 2006
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.directory.triplesec.jacc.data;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.dao.DaoFactory;
+import org.safehaus.triplesec.admin.dao.PermissionActionsDao;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class Permission {
+
+ private final String name;
+ private final Set<String> actionsSet = new HashSet<String>();
+
+ public Permission(String name, String action) {
+ this.name = name;
+ this.actionsSet.add(action);
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Set<String> getActionsSet() {
+ return actionsSet;
+ }
+
+ public void addActions(String actions) {
+ actionsSet.add(actions);
+ }
+
+ public void commit(String contextDn, boolean isGrant, DaoFactory daoFactory) throws DataAccessException {
+ PermissionActionsDao permissionActionsDao = daoFactory.getPermissionActionsDao();
+ try {
+ permissionActionsDao.load(contextDn, isGrant, name);
+ permissionActionsDao.modify(null, null, contextDn, isGrant, name, actionsSet, null);
+ } catch (DataAccessException e) {
+ permissionActionsDao.add(contextDn, isGrant, name, actionsSet);
+ }
+ }
+}
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Permission.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Permission.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Permission.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/PermissionClass.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/PermissionClass.java?view=auto&rev=491541
==============================================================================
--- directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/PermissionClass.java (added)
+++ directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/PermissionClass.java Sun Dec 31 22:32:44 2006
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.directory.triplesec.jacc.data;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collection;
+
+import org.safehaus.triplesec.admin.dao.DaoFactory;
+import org.safehaus.triplesec.admin.dao.PermissionClassDao;
+import org.safehaus.triplesec.admin.DataAccessException;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class PermissionClass {
+
+ private final String permissionClassName;
+ private final Map<String, Permission> grants = new HashMap<String, Permission>();
+ private final Map<String, Permission> denials = new HashMap<String, Permission>();
+
+ public PermissionClass(String permissionClass) {
+ this.permissionClassName = permissionClass;
+ }
+
+ public String getPermissionClassName() {
+ return permissionClassName;
+ }
+
+ public Collection<Permission> getGrants() {
+ return grants.values();
+ }
+
+ public void addGrant(String permissionName, String actions) {
+ addPermission(permissionName, actions, grants);
+ }
+
+ public Collection<Permission> getDenials() {
+ return denials.values();
+ }
+
+ public void addDenial(String permissionName, String actions) {
+ addPermission(permissionName, actions, denials);
+ }
+
+ public void commit(String contextDn, DaoFactory daoFactory) throws DataAccessException {
+ PermissionClassDao permissionClassDao = daoFactory.getPermissionClassDao();
+ try {
+ permissionClassDao.load(contextDn, permissionClassName );
+ } catch (DataAccessException e) {
+ permissionClassDao.add(contextDn, permissionClassName, null, null);
+ }
+ String pcContextDn = getRelativeDn(contextDn, permissionClassName);
+ for (Permission grant: grants.values()) {
+ grant.commit(pcContextDn, true, daoFactory);
+ }
+ for (Permission denial : denials.values()) {
+ denial.commit(pcContextDn, false, daoFactory);
+ }
+
+ }
+
+ private String getRelativeDn( String contextDn, String permName )
+ {
+ StringBuffer buf = new StringBuffer();
+ buf.append( "permClassName=" ).append( permName );
+ buf.append(",").append( contextDn );
+ buf.append(",");
+ return buf.toString();
+ }
+
+ private void addPermission(String permissionName, String actions, Map<String, Permission> permissionMap) {
+ Permission permission = permissionMap.get(permissionName);
+ if (permission == null) {
+ permission = new Permission(permissionName, actions);
+ permissionMap.put(permissionName, permission);
+ } else {
+ permission.addActions(actions);
+ }
+ }
+
+}
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/PermissionClass.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/PermissionClass.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/PermissionClass.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Role.java
URL: http://svn.apache.org/viewvc/directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Role.java?view=auto&rev=491541
==============================================================================
--- directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Role.java (added)
+++ directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Role.java Sun Dec 31 22:32:44 2006
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+package org.apache.directory.triplesec.jacc.data;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Collection;
+
+import org.safehaus.triplesec.admin.DataAccessException;
+import org.safehaus.triplesec.admin.dao.DaoFactory;
+import org.safehaus.triplesec.admin.dao.RoleDao;
+
+/**
+ * @version $Rev:$ $Date:$
+ */
+public class Role {
+
+ private final String roleName;
+ private final Map<String, PermissionClass> permissionClasses = new HashMap<String, PermissionClass>();
+
+ public Role(String roleName) {
+ this.roleName = roleName;
+ }
+
+ public String getRoleName() {
+ return roleName;
+ }
+
+ public Map<String, PermissionClass> getPermissionClassMap() {
+ return permissionClasses;
+ }
+
+ public Collection<PermissionClass> getPermissionClasses() {
+ return permissionClasses.values();
+ }
+
+ public void addPermissionClass(PermissionClass permissionClass) {
+ permissionClasses.put(permissionClass.getPermissionClassName(), permissionClass);
+ }
+
+ public PermissionClass getPermissionClass(String permissionClassName) {
+ PermissionClass permissionClass = permissionClasses.get(permissionClassName);
+ if (permissionClass == null) {
+ permissionClass = new PermissionClass(permissionClassName);
+ }
+ return permissionClass;
+ }
+
+ public void commit(String contextID, DaoFactory daoFactory) throws DataAccessException {
+ RoleDao roleDao = daoFactory.getRoleDao();
+ try {
+ roleDao.load(contextID, roleName);
+ } catch (DataAccessException e) {
+ roleDao.add(contextID, roleName, null, null);
+ }
+ String contextDn = getRelativeDn(contextID, roleName);
+ for (PermissionClass permissionClass : getPermissionClasses()) {
+ permissionClass.commit(contextDn, daoFactory);
+ }
+ }
+ private String getRelativeDn( String appName, String roleName )
+ {
+ StringBuffer buf = new StringBuffer();
+ buf.append( "roleName=" ).append( roleName );
+ buf.append( ",ou=Roles,appName=" ).append( appName );
+ buf.append( ",ou=Applications," );
+ return buf.toString();
+ }
+
+}
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Role.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Role.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: directory/sandbox/triplesec-jacc/jacc/src/main/java/org/apache/directory/triplesec/jacc/data/Role.java
------------------------------------------------------------------------------
svn:mime-type = text/plain