This commit is contained in:
eitch 2010-05-30 19:28:39 +00:00
parent 00ed10014d
commit 89e4f30bcf
6 changed files with 131 additions and 8 deletions

View File

@ -3,7 +3,8 @@
<SessionHandler class="ch.eitchnet.privilege.handler.DefaultSessionHandler">
<Parameters>
<Parameter name="userXmlFile" value="PrivilegeUsers.xml" />
<Parameter name="usersXmlFile" value="PrivilegeUsers.xml" />
<Parameter name="rolesXmlFile" value="PrivilegeRoles.xml" />
</Parameters>
</SessionHandler>
<EncryptionHandler class="ch.eitchnet.privilege.handler.DefaultEncryptionHandler">
@ -13,7 +14,7 @@
</EncryptionHandler>
<PolicyHandler class="ch.eitchnet.privilege.handler.DefaultPolicyHandler">
<Parameters>
<Parameter name="policyXmlFile" value="RestrictionPolicy.xml" />
<Parameter name="policyXmlFile" value="RestrictionPolicies.xml" />
</Parameters>
</PolicyHandler>

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<PrivilegeRoles>
<Role name="">
<Privilege name="">
<allAllowed></allAllowed>
<Role name="admin">
<Privilege name="Service" policy="default">
<allAllowed>true</allAllowed>
<deny></deny>
<allow></allow>
</Privilege>

View File

@ -1,9 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<PrivilegesUsers>
<User username="" firstname="" surname="" state="">
<User username="eitch" password="adc83b19e793491b1c6ea0fd8b46cd9f32e592fc">
<firstname>Robert</firstname>
<surname>von Burg</surname>
<state>NEW</state>
<locale>en_GB</locale>
<Roles>
<Role></Role>
<role>admin</role>
</Roles>
</User>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<RestrictionPolicies>
<Policy name="" class="" />
<Policy name="default" class="ch.eitchnet.privilege.policy.DefaultRestriction" />
</RestrictionPolicies>

View File

@ -19,12 +19,28 @@ public class XmlConstants {
public static final String XML_HANDLER_SESSION = "SessionHandler";
public static final String XML_HANDLER_POLICY = "PolicyHandler";
public static final String XML_ROLES = "Roles";
public static final String XML_ROLE = "role";
public static final String XML_USER = "User";
public static final String XML_PRIVILEGE = "Privilege";
public static final String XML_POLICY = "Policy";
public static final String XML_PARAMETERS = "Parameters";
public static final String XML_ALL_ALLOWED = "allAllowed";
public static final String XML_DENY = "deny";
public static final String XML_ALLOW = "allow";
public static final String XML_FIRSTNAME = "firstname";
public static final String XML_SURNAME = "surname";
public static final String XML_STATE = "state";
public static final String XML_LOCALE = "locale";
public static final String XML_ATTR_CLASS = "class";
public static final String XML_ATTR_NAME = "name";
public static final String XML_ATTR_POLICY = "policy";
public static final String XML_ATTR_USERNAME = "username";
public static final String XML_ATTR_PASSWORD = "password";
public static final String XML_PARAM_HASH_ALGORITHM = "hashAlgorithm";
public static final String XML_PARAM_POLICY_FILE = "policyXmlFile";
public static final String XML_PARAM_ROLES_FILE = "rolesXmlFile";
public static final String XML_PARAM_USERS_FILE = "usersXmlFile";
}

View File

@ -10,12 +10,19 @@
package ch.eitchnet.privilege.handler;
import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.log4j.Logger;
import org.dom4j.Element;
import ch.eitchnet.privilege.base.PrivilegeContainer;
import ch.eitchnet.privilege.base.XmlConstants;
import ch.eitchnet.privilege.helper.ConfigurationHelper;
import ch.eitchnet.privilege.helper.XmlHelper;
import ch.eitchnet.privilege.i18n.AccessDeniedException;
import ch.eitchnet.privilege.i18n.PrivilegeException;
import ch.eitchnet.privilege.model.Certificate;
@ -173,9 +180,104 @@ public class DefaultSessionHandler implements SessionHandler {
* @see ch.eitchnet.privilege.base.PrivilegeContainerObject#initialize(org.dom4j.Element)
*/
public void initialize(Element element) {
// get parameters
Element parameterElement = element.element(XmlConstants.XML_PARAMETERS);
Map<String, String> parameterMap = ConfigurationHelper.convertToParameterMap(parameterElement);
// get roles file name
String rolesFileName = parameterMap.get(XmlConstants.XML_PARAM_ROLES_FILE);
if (rolesFileName == null || rolesFileName.isEmpty()) {
throw new PrivilegeException("[" + SessionHandler.class.getName() + "] Defined parameter "
+ XmlConstants.XML_PARAM_ROLES_FILE + " is invalid");
}
// get roles file
File rolesFile = new File(PrivilegeContainer.getInstance().getBasePath() + "/" + rolesFileName);
if (!rolesFile.exists()) {
throw new PrivilegeException("[" + SessionHandler.class.getName() + "] Defined parameter "
+ XmlConstants.XML_PARAM_ROLES_FILE + " is invalid as roles file does not exist at path "
+ rolesFile.getAbsolutePath());
}
// parse roles xml file to XML document
Element rolesRootElement = XmlHelper.parseDocument(rolesFile).getRootElement();
readRoles(rolesRootElement);
// TODO read roles
// get users file name
String usersFileName = parameterMap.get(XmlConstants.XML_PARAM_USERS_FILE);
if (usersFileName == null || usersFileName.isEmpty()) {
throw new PrivilegeException("[" + SessionHandler.class.getName() + "] Defined parameter "
+ XmlConstants.XML_PARAM_USERS_FILE + " is invalid");
}
// get users file
File usersFile = new File(PrivilegeContainer.getInstance().getBasePath() + "/" + usersFileName);
if (!usersFile.exists()) {
throw new PrivilegeException("[" + SessionHandler.class.getName() + "] Defined parameter "
+ XmlConstants.XML_PARAM_USERS_FILE + " is invalid as users file does not exist at path "
+ usersFile.getAbsolutePath());
}
// parse users xml file to XML document
Element usersRootElement = XmlHelper.parseDocument(usersFile).getRootElement();
readUsers(usersRootElement);
// TODO read users
// TODO implement
}
/**
* @param usersRootElement
*/
private void readUsers(Element usersRootElement) {
List<Element> userElements = usersRootElement.elements(XmlConstants.XML_USER);
for (Element userElement : userElements) {
String username = userElement.attributeValue(XmlConstants.XML_ATTR_USERNAME);
String password = userElement.attributeValue(XmlConstants.XML_ATTR_PASSWORD);
String firstname = userElement.element(XmlConstants.XML_FIRSTNAME).getTextTrim();
String surname = userElement.element(XmlConstants.XML_SURNAME).getTextTrim();
UserState userState = UserState.valueOf(userElement.element(XmlConstants.XML_STATE).getTextTrim());
// TODO better handling needed
String localeName = userElement.element(XmlConstants.XML_LOCALE).getTextTrim();
Locale locale = new Locale(localeName);
Element rolesElement = userElement.element(XmlConstants.XML_ROLES);
List<Element> rolesElementList = rolesElement.elements(XmlConstants.XML_ROLE);
List<String> roleList = new LinkedList<String>();
for (Element roleElement : rolesElementList) {
String roleName = roleElement.getTextTrim();
if (roleList.isEmpty()) {
logger.warn("User " + username + " has an role defined with empty name, Skipped.");
} else {
roleList.add(roleName);
}
}
// create user
User user = User.buildUser(username, password, firstname, surname, userState, roleList, locale);
// put user in map
userMap.put(username, user);
}
}
/**
* @param rolesRootElement
*/
private void readRoles(Element rolesRootElement) {
// TODO Auto-generated method stub
}
private class CertificateSessionPair {
private Session session;
private Certificate certificate;