Restructure security
authorMathieu Baudier <mbaudier@argeo.org>
Sat, 19 Sep 2009 08:21:35 +0000 (08:21 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sat, 19 Sep 2009 08:21:35 +0000 (08:21 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@2975 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

32 files changed:
security/demo/.project
security/demo/init.ldif
security/demo/org.argeo.security.demo.log4j/log4j.properties
security/modules/org.argeo.security.manager.ldap/META-INF/MANIFEST.MF
security/modules/org.argeo.security.manager.ldap/META-INF/spring/dao.xml
security/modules/org.argeo.security.manager.ldap/META-INF/spring/ldap.xml
security/modules/org.argeo.security.manager.ldap/META-INF/spring/osgi.xml
security/modules/org.argeo.security.webapp/META-INF/MANIFEST.MF
security/modules/org.argeo.security.webapp/WEB-INF/osgi.xml
security/modules/org.argeo.security.webapp/WEB-INF/security-servlet.xml
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurity.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityDao.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityService.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultArgeoSecurity.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/dao/RoleDao.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/dao/UserDao.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/ArgeoUserDetailsContextMapper.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/CoworkerUserNatureMapper.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/RoleDaoLdap.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/SecurityDaoLdap.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/SimpleUserNatureMapper.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/UserDaoLdap.java [deleted file]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/CoworkerUserNatureMapper.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java [new file with mode: 0644]
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/CoworkerNature.java
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/nature/SimpleUserNature.java
security/runtime/org.argeo.security.core/src/main/resources/META-INF/spring/osgi.xml
security/runtime/org.argeo.security.core/src/main/resources/META-INF/spring/services.xml [new file with mode: 0644]
security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/UsersRolesController.java
server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/GenericJsonDeserializer.java
server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonObjectFactoryImpl.java

index 170a2368871560ebc6f94fe2dceeeee0b18ea453..7acd402df4997e2d18694164fb96c8c1b638b056 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-       <name>org.argeo.commons.security.demo</name>
+       <name>org.argeo.security.demo</name>
        <comment></comment>
        <projects>
        </projects>
index 2a566f3d9afa9ea3d01ce47ae732bdb5f8f99d6f..bc1512b34384e8cf150cf374cff7cc9e1016d8c3 100644 (file)
@@ -58,12 +58,3 @@ objectClass: groupOfUniqueNames
 objectClass: top
 cn: admin
 uniquemember: uid=gandalf,ou=users,dc=demo,dc=argeo,dc=org
-
-dn: cn=user,ou=groups,dc=demo,dc=argeo,dc=org
-objectClass: groupOfUniqueNames
-objectClass: top
-cn: user
-uniquemember: uid=gandalf,ou=users,dc=demo,dc=argeo,dc=org
-uniquemember: uid=demo,ou=users,dc=demo,dc=argeo,dc=org
-uniquemember: uid=frodo,ou=users,dc=demo,dc=argeo,dc=org
-
index f54a84e41dea899f17356516b0ec5389d159d0f0..274c8060826a74cf07513faa6189adb5a15c1f58 100644 (file)
@@ -10,11 +10,12 @@ log4j.logger.org.springframework=WARN
 #log4j.logger.org.springframework.jms=WARN
 log4j.logger.org.springframework.security=WARN
 
-log4j.org.apache.directory=ERROR
+log4j.logger.org.apache.directory.server=INFO
+log4j.logger.org.apache.directory.server.core.partition=ERROR
+log4j.logger.org.apache.directory.server.core.schema.bootstrap.BootstrapAttributeTypeRegistry=ERROR
 
-log4j.logger.org.apache.catalina=INFO
+log4j.logger.org.apache.catalina.core.ContainerBase=INFO
 log4j.logger.org.apache.coyote=INFO
-log4j.logger.org.apache.tomcat=INFO
 
 ## Appenders
 # console is set to be a ConsoleAppender.
index 34ad7d391a7ec0834dcd68e75192bb03b48d0605..e95bbc2e51d10251e688ea803ae0cda6ec063f91 100644 (file)
@@ -1,6 +1,6 @@
 Bundle-SymbolicName: org.argeo.security.manager.ldap
 Bundle-Version: 0.1.1.SNAPSHOT
-Import-Package: org.argeo.security.dao,
+Import-Package: org.argeo.security,
  org.argeo.security.ldap,
  org.springframework.ldap.core.support,
  org.springframework.security,
index 6d50a5537317dcd3dcf62ec8c5707bbc581fdf21..1d540a398ddefa69fa17b258a4a8cf785b1f173b 100644 (file)
@@ -5,14 +5,9 @@
               http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
 
 
-       <bean id="userDao" class="org.argeo.security.ldap.UserDaoLdap">
+       <bean id="securityDao" class="org.argeo.security.ldap.SecurityDaoLdap">
                <constructor-arg ref="contextSource" />
                <property name="userDetailsManager" ref="userDetailsManager" />
-       </bean>
-
-       <bean id="roleDao" class="org.argeo.security.ldap.RoleDaoLdap">
-               <constructor-arg ref="contextSource" />
                <property name="authoritiesPopulator" ref="authoritiesPopulator" />
        </bean>
-
 </beans>
index 2867ad2c23ea08a1f240d3886b0e92d7f98e1be8..ddfa022f7cbc2d35aa8bf1cdd1029eccecc2cb5b 100644 (file)
                </property>
        </bean>
 
-       <!--
-               <security:ldap-server
-               url="ldap://localhost:10389/dc=demo,dc=argeo,dc=org"
-               manager-dn="uid=admin,ou=system" manager-password="secret" />
-
-               <security:ldap-authentication-provider
-               user-details-class="inetOrgPerson" user-dn-pattern="uid={0},ou=users"
-               group-search-base="ou=groups"> <security:password-compare hash="{sha}"
-               /> </security:ldap-authentication-provider>
-       -->
-
        <bean id="contextSource"
                class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
                <constructor-arg value="ldap://localhost:10389/dc=demo,dc=argeo,dc=org" />
@@ -55,7 +44,7 @@
        <bean id="authoritiesPopulator" class="org.argeo.security.ldap.ArgeoLdapAuthoritiesPopulator">
                <constructor-arg ref="contextSource" />
                <constructor-arg value="ou=groups" />
-               <!-- <property name="defaultRole" value="ROLE_USER" /> -->
+               <property name="defaultRole" value="ROLE_USER" />
                <property name="groupSearchFilter" value="uniqueMember={0}" />
        </bean>
 
        </bean>
 
        <bean id="userDetailsMapper" class="org.argeo.security.ldap.ArgeoUserDetailsContextMapper">
-               <property name="userNatureMappers">
-                       <list>
-                               <bean class="org.argeo.security.ldap.SimpleUserNatureMapper" />
-                               <bean class="org.argeo.security.ldap.CoworkerUserNatureMapper" />
-                       </list>
-               </property>
+               <property name="userNatureMappers" ref="userNatureMappers" />
        </bean>
 </beans>
index 76d63766c4a69b65fd54235b6373bcd55cb57c94..6a5f57b86fe081ced66fada7a20e5f14e5847172 100644 (file)
@@ -9,6 +9,8 @@
        <service ref="_authenticationManager"\r
                interface="org.springframework.security.AuthenticationManager" />\r
 \r
-       <service ref="userDao" interface="org.argeo.security.dao.UserDao" />\r
-       <service ref="roleDao" interface="org.argeo.security.dao.RoleDao" />\r
+       <service ref="securityDao" interface="org.argeo.security.ArgeoSecurityDao" />\r
+\r
+       <list id="userNatureMappers" interface="org.argeo.security.ldap.UserNatureMapper"\r
+               cardinality="0..N" />\r
 </beans:beans>
\ No newline at end of file
index 74c67491f46744a902172d166b88b84a8c92d45d..805536e81bc5fc52840f0f894c8395638d94f390 100644 (file)
@@ -4,7 +4,6 @@ Import-Package: javax.servlet,
  javax.servlet.http,
  javax.servlet.resources,
  org.argeo.security,
- org.argeo.security.dao,
  org.argeo.security.mvc,
  org.argeo.server.json,
  org.argeo.server.mvc,
index aa2f7164a22d25c8828b0cf124c46867beb30d5a..6b73babc5afacbbb856ca82936e7c3674004f77e 100644 (file)
@@ -9,8 +9,7 @@
        <reference id="_authenticationManager"\r
                interface="org.springframework.security.AuthenticationManager" />\r
 \r
-       <reference id="userDao" interface="org.argeo.security.dao.UserDao" />\r
-       <reference id="roleDao" interface="org.argeo.security.dao.RoleDao" />\r
+       <reference id="securityService" interface="org.argeo.security.ArgeoSecurityService" />\r
 \r
        <list id="objectFactories" interface="org.argeo.server.json.JsonObjectFactory"\r
                cardinality="0..N" />\r
index 97d3b121ae9402083bb8a63001a5769fe9ed5067..3201f73e6622b343df582847f49c595da2aa2aca 100644 (file)
        <context:component-scan base-package="org.argeo.security.mvc" />
 
        <bean id="controller" class="org.argeo.security.mvc.UsersRolesController">
-               <property name="userDao" ref="userDao" />
-               <property name="roleDao" ref="roleDao" />
-               <property name="userDeserializer">
-                       <bean class="org.argeo.server.json.JsonServerMapper">
-                               <property name="targetClass" value="org.argeo.security.BasicArgeoUser" />
-                               <property name="deserializers">
-                                       <map>
-                                               <entry key="org.argeo.security.UserNature">
-                                                       <bean class="org.argeo.server.json.GenericJsonDeserializer">
-                                                               <property name="objectFactories" ref="objectFactories" />
-                                                       </bean>
-                                               </entry>
-                                       </map>
-                               </property>
-                       </bean>
+               <property name="securityService" ref="securityService" />
+               <property name="userDeserializer" ref="userDeserializer">
                </property>
        </bean>
 
+       <bean id="userDeserializer" class="org.argeo.server.json.JsonServerMapper">
+               <property name="targetClass" value="org.argeo.security.BasicArgeoUser" />
+               <property name="deserializers">
+                       <map>
+                               <entry key="org.argeo.security.UserNature">
+                                       <bean class="org.argeo.server.json.GenericJsonDeserializer">
+                                               <property name="objectFactories" ref="objectFactories" />
+                                       </bean>
+                               </entry>
+                       </map>
+               </property>
+       </bean>
+
+
        <bean id="viewResolver" class="org.argeo.server.mvc.SerializingViewResolver">
                <property name="serializer" ref="serverMapper" />
        </bean>
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurity.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurity.java
new file mode 100644 (file)
index 0000000..815372b
--- /dev/null
@@ -0,0 +1,12 @@
+package org.argeo.security;
+
+/** Callback related to the lifecycle of a user. */
+public interface ArgeoSecurity {
+       /**
+        * Called before a user is actually created. Default user natures and roles
+        * should be added there.
+        */
+       public void beforeCreate(ArgeoUser user);
+
+       public String getSuperUsername();
+}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityDao.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityDao.java
new file mode 100644 (file)
index 0000000..039e549
--- /dev/null
@@ -0,0 +1,23 @@
+package org.argeo.security;
+
+import java.util.List;
+
+public interface ArgeoSecurityDao {
+       public List<ArgeoUser> listUsers();
+
+       public List<String> listEditableRoles();
+
+       public void create(ArgeoUser user);
+
+       public void update(ArgeoUser user);
+
+       public void delete(String username);
+
+       public void deleteRole(String role);
+
+       public void updatePassword(String oldPassword, String newPassword);
+
+       public Boolean userExists(String username);
+
+       public ArgeoUser getUser(String username);
+}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityService.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ArgeoSecurityService.java
new file mode 100644 (file)
index 0000000..7eecfb5
--- /dev/null
@@ -0,0 +1,8 @@
+package org.argeo.security;
+
+
+public interface ArgeoSecurityService {
+       public void newUser(ArgeoUser argeoUser);
+       public void newRole(String role);
+       public ArgeoSecurityDao getSecurityDao();
+}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultArgeoSecurity.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultArgeoSecurity.java
new file mode 100644 (file)
index 0000000..c3b5932
--- /dev/null
@@ -0,0 +1,24 @@
+package org.argeo.security.core;
+
+import org.argeo.security.ArgeoUser;
+import org.argeo.security.ArgeoSecurity;
+import org.argeo.security.nature.SimpleUserNature;
+
+public class DefaultArgeoSecurity implements ArgeoSecurity {
+       private String superUsername = "root";
+
+       public void beforeCreate(ArgeoUser user) {
+               SimpleUserNature simpleUserNature = new SimpleUserNature();
+               simpleUserNature.setLastName("");// to prevent issue with sn in LDAP
+               user.getUserNatures().add(simpleUserNature);
+       }
+
+       public String getSuperUsername() {
+               return superUsername;
+       }
+
+       public void setSuperUsername(String superUsername) {
+               this.superUsername = superUsername;
+       }
+
+}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/DefaultSecurityService.java
new file mode 100644 (file)
index 0000000..6be4325
--- /dev/null
@@ -0,0 +1,35 @@
+package org.argeo.security.core;
+
+import org.argeo.security.ArgeoSecurity;
+import org.argeo.security.ArgeoSecurityDao;
+import org.argeo.security.ArgeoSecurityService;
+import org.argeo.security.ArgeoUser;
+
+public class DefaultSecurityService implements ArgeoSecurityService {
+       private ArgeoSecurity argeoSecurity = new DefaultArgeoSecurity();
+       private ArgeoSecurityDao securityDao;
+
+       public ArgeoSecurityDao getSecurityDao() {
+               return securityDao;
+       }
+
+       public void newRole(String role) {
+               ArgeoUser superUser = securityDao.getUser(argeoSecurity.getSuperUsername());
+               superUser.getRoles().add(role);
+               securityDao.update(superUser);
+       }
+
+       public void newUser(ArgeoUser user) {
+               argeoSecurity.beforeCreate(user);
+               securityDao.create(user);
+       }
+
+       public void setArgeoSecurity(ArgeoSecurity argeoSecurity) {
+               this.argeoSecurity = argeoSecurity;
+       }
+
+       public void setSecurityDao(ArgeoSecurityDao dao) {
+               this.securityDao = dao;
+       }
+
+}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/dao/RoleDao.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/dao/RoleDao.java
deleted file mode 100644 (file)
index dc6f3a6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.argeo.security.dao;
-
-import java.util.List;
-
-public interface RoleDao {
-       public List<String> listEditableRoles();
-
-       public void create(String role);
-
-       public void delete(String role);
-
-
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/dao/UserDao.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/dao/UserDao.java
deleted file mode 100644 (file)
index 859da1b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.argeo.security.dao;
-
-import java.util.List;
-
-import org.argeo.security.ArgeoUser;
-
-public interface UserDao {
-       public List<ArgeoUser> listUsers();
-
-       public void create(ArgeoUser user);
-
-       public void update(ArgeoUser user);
-
-       public void delete(String username);
-
-       public void updatePassword(String oldPassword, String newPassword);
-
-       public Boolean userExists(String username);
-
-       public ArgeoUser getUser(String username);
-
-       public void addRoles(String username, List<String> roles);
-
-       public void removeRoles(String username, List<String> roles);
-
-}
index d9b76a6c60c6234878d3c062f3c5b6e1d9e6ec9c..3bb8fb7e43410089a139a8f56821574b8d8cd1a5 100644 (file)
@@ -30,7 +30,7 @@ public class ArgeoUserDetailsContextMapper implements UserDetailsContextMapper {
                List<UserNature> userInfos = new ArrayList<UserNature>();
                for (UserNatureMapper userInfoMapper : userNatureMappers) {
                        UserNature userNature = userInfoMapper.mapUserInfoFromContext(ctx);
-                       if (log.isDebugEnabled())
+                       if (log.isTraceEnabled())
                                log.debug("Add user nature " + userNature);
                        userInfos.add(userNature);
                }
@@ -49,7 +49,7 @@ public class ArgeoUserDetailsContextMapper implements UserDetailsContextMapper {
                                for (UserNatureMapper userInfoMapper : userNatureMappers) {
                                        if (userInfoMapper.supports(userInfo)) {
                                                userInfoMapper.mapUserInfoToContext(userInfo, ctx);
-                                               break;// use the first mapper found an no others
+                                               break;// use the first mapper found and no others
                                        }
                                }
                        }
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/CoworkerUserNatureMapper.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/CoworkerUserNatureMapper.java
deleted file mode 100644 (file)
index 47e80dc..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.argeo.security.ldap;
-
-import org.argeo.security.UserNature;
-import org.argeo.security.nature.CoworkerNature;
-import org.springframework.ldap.core.DirContextAdapter;
-import org.springframework.ldap.core.DirContextOperations;
-
-public class CoworkerUserNatureMapper implements UserNatureMapper {
-
-       public UserNature mapUserInfoFromContext(DirContextOperations ctx) {
-               CoworkerNature basicUserInfo = new CoworkerNature();
-               basicUserInfo.setDescription(ctx.getStringAttribute("description"));
-               basicUserInfo.setMobile(ctx.getStringAttribute("mobile"));
-               basicUserInfo.setTelephoneNumber(ctx
-                               .getStringAttribute("telephoneNumber"));
-               basicUserInfo.setUuid(ctx.getStringAttribute("employeeNumber"));
-               return basicUserInfo;
-       }
-
-       public void mapUserInfoToContext(UserNature userInfoArg,
-                       DirContextAdapter ctx) {
-               CoworkerNature userInfo = (CoworkerNature) userInfoArg;
-               ctx.setAttributeValue("employeeNumber", userInfo.getUuid());
-               if (userInfo.getDescription() != null) {
-                       ctx.setAttributeValue("description", userInfo.getDescription());
-               }
-               if (userInfo.getMobile() == null || !userInfo.getMobile().equals("")) {
-                       ctx.setAttributeValue("mobile", userInfo.getMobile());
-               }
-               if (userInfo.getTelephoneNumber() == null
-                               || !userInfo.getTelephoneNumber().equals("")) {
-                       ctx.setAttributeValue("telephoneNumber", userInfo
-                                       .getTelephoneNumber());
-               }
-       }
-
-       public Boolean supports(UserNature userInfo) {
-               return userInfo instanceof CoworkerNature;
-       }
-
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/RoleDaoLdap.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/RoleDaoLdap.java
deleted file mode 100644 (file)
index 7a40a3f..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.argeo.security.ldap;
-
-import java.util.List;
-
-import javax.naming.Name;
-
-import org.argeo.security.dao.RoleDao;
-import org.springframework.ldap.core.ContextMapper;
-import org.springframework.ldap.core.ContextSource;
-import org.springframework.ldap.core.DirContextAdapter;
-import org.springframework.ldap.core.DistinguishedName;
-import org.springframework.ldap.core.LdapTemplate;
-
-public class RoleDaoLdap implements RoleDao {
-
-       private ArgeoLdapAuthoritiesPopulator authoritiesPopulator;
-       private final LdapTemplate ldapTemplate;
-
-       public RoleDaoLdap(ContextSource contextSource) {
-               ldapTemplate = new LdapTemplate(contextSource);
-       }
-
-       public void create(String role) {
-               Name dn = buildDn(role);
-               DirContextAdapter context = new DirContextAdapter();
-               context.setAttributeValues("objectClass", new String[] { "top",
-                               "groupOfUniqueNames" });
-               context.setAttributeValue("cn", role);
-               ldapTemplate.bind(dn, context, null);
-       }
-
-       @SuppressWarnings("unchecked")
-       public List<String> listEditableRoles() {
-               return (List<String>) ldapTemplate.listBindings(authoritiesPopulator
-                               .getGroupSearchBase(), new ContextMapper() {
-                       public Object mapFromContext(Object ctxArg) {
-                               String groupName = ((DirContextAdapter) ctxArg)
-                                               .getStringAttribute(authoritiesPopulator
-                                                               .getGroupRoleAttribute());
-                               String roleName = authoritiesPopulator
-                                               .convertGroupToRole(groupName);
-                               return roleName;
-                       }
-               });
-       }
-
-       public void delete(String role) {
-               // TODO Auto-generated method stub
-
-       }
-
-       public void setAuthoritiesPopulator(
-                       ArgeoLdapAuthoritiesPopulator ldapAuthoritiesPopulator) {
-               this.authoritiesPopulator = ldapAuthoritiesPopulator;
-       }
-
-       protected Name buildDn(String name) {
-               return new DistinguishedName("cn=" + name + ","
-                               + authoritiesPopulator.getGroupSearchBase());
-       }
-
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/SecurityDaoLdap.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/SecurityDaoLdap.java
new file mode 100644 (file)
index 0000000..27ee444
--- /dev/null
@@ -0,0 +1,125 @@
+package org.argeo.security.ldap;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.naming.Name;
+
+import org.argeo.security.ArgeoSecurityDao;
+import org.argeo.security.ArgeoUser;
+import org.argeo.security.core.ArgeoUserDetails;
+import org.springframework.ldap.core.ContextMapper;
+import org.springframework.ldap.core.ContextSource;
+import org.springframework.ldap.core.DirContextAdapter;
+import org.springframework.ldap.core.DistinguishedName;
+import org.springframework.ldap.core.LdapTemplate;
+import org.springframework.security.userdetails.UserDetails;
+import org.springframework.security.userdetails.UserDetailsManager;
+
+public class SecurityDaoLdap implements ArgeoSecurityDao {
+       // private final static Log log = LogFactory.getLog(UserDaoLdap.class);
+
+       private UserDetailsManager userDetailsManager;
+       private ArgeoLdapAuthoritiesPopulator authoritiesPopulator;
+       private String userBase = "ou=users";
+       private String usernameAttribute = "uid";
+
+       private final LdapTemplate ldapTemplate;
+
+       public SecurityDaoLdap(ContextSource contextSource) {
+               ldapTemplate = new LdapTemplate(contextSource);
+       }
+
+       public void create(ArgeoUser user) {
+               userDetailsManager.createUser(new ArgeoUserDetails(user));
+       }
+
+       public ArgeoUser getUser(String uname) {
+               return (ArgeoUser) userDetailsManager.loadUserByUsername(uname);
+       }
+
+       @SuppressWarnings("unchecked")
+       public List<ArgeoUser> listUsers() {
+               List<String> usernames = (List<String>) ldapTemplate.listBindings(
+                               new DistinguishedName(userBase), new ContextMapper() {
+                                       public Object mapFromContext(Object ctxArg) {
+                                               DirContextAdapter ctx = (DirContextAdapter) ctxArg;
+                                               return ctx.getStringAttribute(usernameAttribute);
+                                       }
+                               });
+
+               List<ArgeoUser> lst = new ArrayList<ArgeoUser>();
+               for (String username : usernames) {
+                       UserDetails userDetails = userDetailsManager
+                                       .loadUserByUsername(username);
+                       lst.add((ArgeoUser) userDetails);
+               }
+               return lst;
+       }
+
+       @SuppressWarnings("unchecked")
+       public List<String> listEditableRoles() {
+               return (List<String>) ldapTemplate.listBindings(authoritiesPopulator
+                               .getGroupSearchBase(), new ContextMapper() {
+                       public Object mapFromContext(Object ctxArg) {
+                               String groupName = ((DirContextAdapter) ctxArg)
+                                               .getStringAttribute(authoritiesPopulator
+                                                               .getGroupRoleAttribute());
+                               String roleName = authoritiesPopulator
+                                               .convertGroupToRole(groupName);
+                               return roleName;
+                       }
+               });
+       }
+
+       public void update(ArgeoUser user) {
+               userDetailsManager.updateUser(new ArgeoUserDetails(user));
+       }
+
+       public void delete(String username) {
+               userDetailsManager.deleteUser(username);
+       }
+
+       public void updatePassword(String oldPassword, String newPassword) {
+               userDetailsManager.changePassword(oldPassword, newPassword);
+       }
+
+       public Boolean userExists(String username) {
+               return userDetailsManager.userExists(username);
+       }
+
+       public void deleteRole(String role) {
+               if(true)
+                       throw new UnsupportedOperationException();
+               
+               Name dn = buildRoleDn(role);
+               DirContextAdapter context = new DirContextAdapter();
+               context.setAttributeValues("objectClass", new String[] { "top",
+                               "groupOfUniqueNames" });
+               context.setAttributeValue("cn", role);
+               ldapTemplate.bind(dn, context, null);
+       }
+       
+       protected Name buildRoleDn(String name) {
+               return new DistinguishedName("cn=" + name + ","
+                               + authoritiesPopulator.getGroupSearchBase());
+       }
+
+
+       public void setUserDetailsManager(UserDetailsManager userDetailsManager) {
+               this.userDetailsManager = userDetailsManager;
+       }
+
+       public void setUserBase(String userBase) {
+               this.userBase = userBase;
+       }
+
+       public void setUsernameAttribute(String usernameAttribute) {
+               this.usernameAttribute = usernameAttribute;
+       }
+
+       public void setAuthoritiesPopulator(
+                       ArgeoLdapAuthoritiesPopulator authoritiesPopulator) {
+               this.authoritiesPopulator = authoritiesPopulator;
+       }
+}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/SimpleUserNatureMapper.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/SimpleUserNatureMapper.java
deleted file mode 100644 (file)
index 2a21091..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.argeo.security.ldap;
-
-import org.argeo.security.UserNature;
-import org.argeo.security.nature.SimpleUserNature;
-import org.springframework.ldap.core.DirContextAdapter;
-import org.springframework.ldap.core.DirContextOperations;
-
-public class SimpleUserNatureMapper implements UserNatureMapper {
-
-       public UserNature mapUserInfoFromContext(DirContextOperations ctx) {
-               SimpleUserNature basicUserInfo = new SimpleUserNature();
-               basicUserInfo.setLastName(ctx.getStringAttribute("sn"));
-               basicUserInfo.setFirstName(ctx.getStringAttribute("givenName"));
-               basicUserInfo.setEmail(ctx.getStringAttribute("mail"));
-               basicUserInfo.setUuid(ctx.getStringAttribute("seeAlso"));
-               return basicUserInfo;
-       }
-
-       public void mapUserInfoToContext(UserNature userInfoArg,
-                       DirContextAdapter ctx) {
-               SimpleUserNature userInfo = (SimpleUserNature) userInfoArg;
-               ctx.setAttributeValue("cn", userInfo.getFirstName() + " "
-                               + userInfo.getLastName());
-               ctx.setAttributeValue("sn", userInfo.getLastName());
-               ctx.setAttributeValue("givenName", userInfo.getFirstName());
-               ctx.setAttributeValue("mail", userInfo.getEmail());
-               // TODO: find a cleaner way?
-               ctx.setAttributeValue("seeAlso", userInfo.getUuid());
-       }
-
-       public Boolean supports(UserNature userInfo) {
-               return userInfo instanceof SimpleUserNature;
-       }
-
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/UserDaoLdap.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/UserDaoLdap.java
deleted file mode 100644 (file)
index 110d1e6..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.argeo.security.ldap;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.argeo.security.ArgeoUser;
-import org.argeo.security.core.ArgeoUserDetails;
-import org.argeo.security.dao.UserDao;
-import org.springframework.ldap.core.ContextMapper;
-import org.springframework.ldap.core.ContextSource;
-import org.springframework.ldap.core.DirContextAdapter;
-import org.springframework.ldap.core.DistinguishedName;
-import org.springframework.ldap.core.LdapTemplate;
-import org.springframework.security.GrantedAuthority;
-import org.springframework.security.GrantedAuthorityImpl;
-import org.springframework.security.userdetails.UserDetails;
-import org.springframework.security.userdetails.UserDetailsManager;
-
-public class UserDaoLdap implements UserDao {
-       // private final static Log log = LogFactory.getLog(UserDaoLdap.class);
-
-       private UserDetailsManager userDetailsManager;
-       private String userBase = "ou=users";
-       private String usernameAttribute = "uid";
-
-       private final LdapTemplate ldapTemplate;
-
-       public UserDaoLdap(ContextSource contextSource) {
-               ldapTemplate = new LdapTemplate(contextSource);
-       }
-
-       public void create(ArgeoUser user) {
-               userDetailsManager.createUser(new ArgeoUserDetails(user));
-       }
-
-       public ArgeoUser getUser(String uname) {
-               return (ArgeoUser) userDetailsManager.loadUserByUsername(uname);
-       }
-
-       @SuppressWarnings("unchecked")
-       public List<ArgeoUser> listUsers() {
-               List<String> usernames = (List<String>) ldapTemplate.listBindings(
-                               new DistinguishedName(userBase), new ContextMapper() {
-                                       public Object mapFromContext(Object ctxArg) {
-                                               DirContextAdapter ctx = (DirContextAdapter) ctxArg;
-                                               return ctx.getStringAttribute(usernameAttribute);
-                                       }
-                               });
-
-               List<ArgeoUser> lst = new ArrayList<ArgeoUser>();
-               for (String username : usernames) {
-                       UserDetails userDetails = userDetailsManager
-                                       .loadUserByUsername(username);
-                       lst.add((ArgeoUser) userDetails);
-               }
-               return lst;
-       }
-
-       public void update(ArgeoUser user) {
-               userDetailsManager.updateUser(new ArgeoUserDetails(user));
-       }
-
-       public void delete(String username) {
-               userDetailsManager.deleteUser(username);
-       }
-
-       public void updatePassword(String oldPassword, String newPassword) {
-               userDetailsManager.changePassword(oldPassword, newPassword);
-       }
-
-       public Boolean userExists(String username) {
-               return userDetailsManager.userExists(username);
-       }
-
-       public void addRoles(String username, List<String> roles) {
-               GrantedAuthority[] auths = new GrantedAuthority[roles.size()];
-               for (int i = 0; i < roles.size(); i++)
-                       auths[i] = new GrantedAuthorityImpl(roles.get(i));
-               ArgeoUserDetails user = (ArgeoUserDetails) userDetailsManager
-                               .loadUserByUsername(username);
-               throw new UnsupportedOperationException();
-               //userDetailsManager.
-       }
-
-       public void removeRoles(String username, List<String> roles) {
-               throw new UnsupportedOperationException();
-       }
-
-       public void setUserDetailsManager(UserDetailsManager userDetailsManager) {
-               this.userDetailsManager = userDetailsManager;
-       }
-
-       public void setUserBase(String userBase) {
-               this.userBase = userBase;
-       }
-
-       public void setUsernameAttribute(String usernameAttribute) {
-               this.usernameAttribute = usernameAttribute;
-       }
-}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/CoworkerUserNatureMapper.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/CoworkerUserNatureMapper.java
new file mode 100644 (file)
index 0000000..2ed0725
--- /dev/null
@@ -0,0 +1,42 @@
+package org.argeo.security.ldap.nature;
+
+import org.argeo.security.UserNature;
+import org.argeo.security.ldap.UserNatureMapper;
+import org.argeo.security.nature.CoworkerNature;
+import org.springframework.ldap.core.DirContextAdapter;
+import org.springframework.ldap.core.DirContextOperations;
+
+public class CoworkerUserNatureMapper implements UserNatureMapper {
+
+       public UserNature mapUserInfoFromContext(DirContextOperations ctx) {
+               CoworkerNature basicUserInfo = new CoworkerNature();
+               basicUserInfo.setDescription(ctx.getStringAttribute("description"));
+               basicUserInfo.setMobile(ctx.getStringAttribute("mobile"));
+               basicUserInfo.setTelephoneNumber(ctx
+                               .getStringAttribute("telephoneNumber"));
+               basicUserInfo.setUuid(ctx.getStringAttribute("employeeNumber"));
+               return basicUserInfo;
+       }
+
+       public void mapUserInfoToContext(UserNature userInfoArg,
+                       DirContextAdapter ctx) {
+               CoworkerNature userInfo = (CoworkerNature) userInfoArg;
+               ctx.setAttributeValue("employeeNumber", userInfo.getUuid());
+               if (userInfo.getDescription() != null) {
+                       ctx.setAttributeValue("description", userInfo.getDescription());
+               }
+               if (userInfo.getMobile() == null || !userInfo.getMobile().equals("")) {
+                       ctx.setAttributeValue("mobile", userInfo.getMobile());
+               }
+               if (userInfo.getTelephoneNumber() == null
+                               || !userInfo.getTelephoneNumber().equals("")) {
+                       ctx.setAttributeValue("telephoneNumber", userInfo
+                                       .getTelephoneNumber());
+               }
+       }
+
+       public Boolean supports(UserNature userInfo) {
+               return userInfo instanceof CoworkerNature;
+       }
+
+}
diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/nature/SimpleUserNatureMapper.java
new file mode 100644 (file)
index 0000000..3bc4b51
--- /dev/null
@@ -0,0 +1,36 @@
+package org.argeo.security.ldap.nature;
+
+import org.argeo.security.UserNature;
+import org.argeo.security.ldap.UserNatureMapper;
+import org.argeo.security.nature.SimpleUserNature;
+import org.springframework.ldap.core.DirContextAdapter;
+import org.springframework.ldap.core.DirContextOperations;
+
+public class SimpleUserNatureMapper implements UserNatureMapper {
+
+       public UserNature mapUserInfoFromContext(DirContextOperations ctx) {
+               SimpleUserNature basicUserInfo = new SimpleUserNature();
+               basicUserInfo.setLastName(ctx.getStringAttribute("sn"));
+               basicUserInfo.setFirstName(ctx.getStringAttribute("givenName"));
+               basicUserInfo.setEmail(ctx.getStringAttribute("mail"));
+               basicUserInfo.setUuid(ctx.getStringAttribute("seeAlso"));
+               return basicUserInfo;
+       }
+
+       public void mapUserInfoToContext(UserNature userInfoArg,
+                       DirContextAdapter ctx) {
+               SimpleUserNature userInfo = (SimpleUserNature) userInfoArg;
+               ctx.setAttributeValue("cn", userInfo.getFirstName() + " "
+                               + userInfo.getLastName());
+               ctx.setAttributeValue("sn", userInfo.getLastName());
+               ctx.setAttributeValue("givenName", userInfo.getFirstName());
+               ctx.setAttributeValue("mail", userInfo.getEmail());
+               // TODO: find a cleaner way?
+               ctx.setAttributeValue("seeAlso", userInfo.getUuid());
+       }
+
+       public Boolean supports(UserNature userInfo) {
+               return userInfo instanceof SimpleUserNature;
+       }
+
+}
index 24f1c9b1660e3ced18ad4776520479531b66206d..f7cb425d087012b1ac0519106de7275ea07b3776 100644 (file)
@@ -3,6 +3,7 @@ package org.argeo.security.nature;
 import org.argeo.security.UserNature;
 
 public class CoworkerNature extends UserNature {
+       private static final long serialVersionUID = 1L;
        private String description;
        private String mobile;
        private String telephoneNumber;
index da31bbae77b7eabf40b91f113158590e4eee1c75..ce986d51c24cdaaa28c2febacde00e8abad23799 100644 (file)
@@ -3,6 +3,7 @@ package org.argeo.security.nature;
 import org.argeo.security.UserNature;
 
 public class SimpleUserNature extends UserNature {
+       private static final long serialVersionUID = 1L;
        private String email;
        private String firstName;
        private String lastName;
index 649157f68081083f1bae8266ef13b1c2967361a6..204ae5ce4a9df620da7be4e30d15920da0d7a465 100644 (file)
@@ -7,5 +7,16 @@
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">\r
 \r
        <service ref="jsonObjectFactory" interface="org.argeo.server.json.JsonObjectFactory" />\r
+       <service ref="securityService" interface="org.argeo.security.ArgeoSecurityService" />\r
+\r
+       <reference id="securityDao" interface="org.argeo.security.ArgeoSecurityDao" />\r
+\r
+       <service interface="org.argeo.security.ldap.UserNatureMapper">\r
+               <beans:bean class="org.argeo.security.ldap.nature.SimpleUserNatureMapper" />\r
+       </service>\r
+\r
+       <service interface="org.argeo.security.ldap.UserNatureMapper">\r
+               <beans:bean class="org.argeo.security.ldap.nature.CoworkerUserNatureMapper" />\r
+       </service>\r
 \r
 </beans:beans>
\ No newline at end of file
diff --git a/security/runtime/org.argeo.security.core/src/main/resources/META-INF/spring/services.xml b/security/runtime/org.argeo.security.core/src/main/resources/META-INF/spring/services.xml
new file mode 100644 (file)
index 0000000..dbf6489
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+
+       <bean id="securityService" class="org.argeo.security.core.DefaultSecurityService">
+               <property name="securityDao" ref="securityDao" />
+       </bean>
+</beans>
\ No newline at end of file
index ce6054645a084af0d875335c075972532230132a..8b09b94a5d273571184cdf6fae90c88029a19a58 100644 (file)
@@ -7,11 +7,10 @@ import java.util.List;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.argeo.security.ArgeoSecurityService;
 import org.argeo.security.ArgeoUser;
 import org.argeo.security.BasicArgeoUser;
 import org.argeo.security.core.ArgeoUserDetails;
-import org.argeo.security.dao.RoleDao;
-import org.argeo.security.dao.UserDao;
 import org.argeo.server.BooleanAnswer;
 import org.argeo.server.DeserializingEditor;
 import org.argeo.server.ServerAnswer;
@@ -31,8 +30,7 @@ public class UsersRolesController implements MvcConstants {
        private final static Log log = LogFactory
                        .getLog(UsersRolesController.class);
 
-       private UserDao userDao;
-       private RoleDao roleDao;
+       private ArgeoSecurityService securityService;
 
        private ServerDeserializer userDeserializer = null;
 
@@ -55,29 +53,31 @@ public class UsersRolesController implements MvcConstants {
        @RequestMapping("/getUsersList.security")
        @ModelAttribute(ANSWER_MODEL_KEY)
        public List<ArgeoUser> getUsersList() {
-               return userDao.listUsers();
+               return securityService.getSecurityDao().listUsers();
        }
 
        @RequestMapping("/userExists.security")
        @ModelAttribute(ANSWER_MODEL_KEY)
        public BooleanAnswer userExists(@RequestParam("username") String username) {
-               return new BooleanAnswer(userDao.userExists(username));
+               return new BooleanAnswer(securityService.getSecurityDao().userExists(
+                               username));
        }
 
        @RequestMapping("/createUser.security")
        @ModelAttribute(ANSWER_MODEL_KEY)
        public ArgeoUser createUser(Reader reader) {
                ArgeoUser user = (ArgeoUser) userDeserializer.deserialize(reader);
-               userDao.create(user);
-               return userDao.getUser(user.getUsername());
+               cleanUserBeforeCreate(user);
+               securityService.newUser(user);
+               return securityService.getSecurityDao().getUser(user.getUsername());
        }
 
        @RequestMapping("/updateUser.security")
        @ModelAttribute(ANSWER_MODEL_KEY)
        public ArgeoUser updateUser(Reader reader) {
                ArgeoUser user = (ArgeoUser) userDeserializer.deserialize(reader);
-               userDao.update(user);
-               return userDao.getUser(user.getUsername());
+               securityService.getSecurityDao().update(user);
+               return securityService.getSecurityDao().getUser(user.getUsername());
        }
 
        @RequestMapping("/createUser2.security")
@@ -92,54 +92,56 @@ public class UsersRolesController implements MvcConstants {
                } finally {
                        IOUtils.closeQuietly(reader);
                }
-               userDao.create(user);
-               return userDao.getUser(user.getUsername());
+               cleanUserBeforeCreate(user);
+               securityService.newUser(user);
+               return securityService.getSecurityDao().getUser(user.getUsername());
        }
 
        @RequestMapping("/deleteUser.security")
        @ModelAttribute(ANSWER_MODEL_KEY)
        public ServerAnswer deleteUser(@RequestParam("username") String username) {
-               userDao.delete(username);
+               securityService.getSecurityDao().delete(username);
                return ServerAnswer.ok("User " + username + " deleted");
        }
 
        @RequestMapping("/getUserDetails.security")
        @ModelAttribute(ANSWER_MODEL_KEY)
        public ArgeoUser getUserDetails(@RequestParam("username") String username) {
-               return userDao.getUser(username);
+               return securityService.getSecurityDao().getUser(username);
        }
 
        /* ROLE */
        @RequestMapping("/getRolesList.security")
        @ModelAttribute(ANSWER_MODEL_KEY)
        public List<String> getEditableRolesList() {
-               return roleDao.listEditableRoles();
+               return securityService.getSecurityDao().listEditableRoles();
        }
 
        @RequestMapping("/createRole.security")
        @ModelAttribute(ANSWER_MODEL_KEY)
        public ServerAnswer createRole(@RequestParam("role") String role) {
-               roleDao.create(role);
+               securityService.newRole(role);
                return ServerAnswer.ok("Role " + role + " created");
        }
 
        @RequestMapping("/deleteRole.security")
        @ModelAttribute(ANSWER_MODEL_KEY)
        public ServerAnswer deleteRole(@RequestParam("role") String role) {
-               roleDao.delete(role);
+               securityService.getSecurityDao().deleteRole(role);
                return ServerAnswer.ok("Role " + role + " created");
        }
 
-       public void setUserDao(UserDao userDao) {
-               this.userDao = userDao;
-       }
-
-       public void setRoleDao(RoleDao roleDao) {
-               this.roleDao = roleDao;
+       protected void cleanUserBeforeCreate(ArgeoUser user) {
+               user.getUserNatures().clear();
+               user.getRoles().clear();
        }
 
        public void setUserDeserializer(ServerDeserializer userDeserializer) {
                this.userDeserializer = userDeserializer;
        }
 
+       public void setSecurityService(ArgeoSecurityService securityService) {
+               this.securityService = securityService;
+       }
+
 }
index 38a1541b20e4021cefb595d0e4216288493cc11a..6bfe9b698431a58694880bd627ee886896dd8cab 100644 (file)
@@ -29,6 +29,7 @@ public class GenericJsonDeserializer<T> extends JsonDeserializer<T> {
 
        private List<JsonObjectFactory> objectFactories = new ArrayList<JsonObjectFactory>();
 
+       @SuppressWarnings("unchecked")
        @Override
        public T deserialize(JsonParser parser, DeserializationContext ctxt)
                        throws IOException, JsonProcessingException {
@@ -44,7 +45,7 @@ public class GenericJsonDeserializer<T> extends JsonDeserializer<T> {
                generator.writeTree(root);
                String str = writer.toString();
 
-               if (log.isDebugEnabled())
+               if (log.isTraceEnabled())
                        log.debug("Deserialize object of type=" + type + ", str=" + str);
 
                JsonObjectFactory objectFactory = null;
@@ -59,7 +60,7 @@ public class GenericJsonDeserializer<T> extends JsonDeserializer<T> {
                        throw new ArgeoServerException(
                                        "Cannot find JSON object factory for type " + type);
 
-               return (T) objectFactory.readValue(type, str);
+               return (T)objectFactory.readValue(type, str);
        }
 
        public void setTypeField(String typeField) {
index a38e45ddd486da063efea624a97b19c972705377..0f1e91e498040e273f32af07240ec9daf1de9fa3 100644 (file)
@@ -21,37 +21,24 @@ public class JsonObjectFactoryImpl implements JsonObjectFactory,
        private ClassLoader classLoader = getClass().getClassLoader();
 
        private ObjectMapper objectMapper = new ObjectMapper();
-       private Map<String, Class> supportedTypes = new HashMap<String, Class>();
+       private Map<String, Class<?>> supportedTypes = new HashMap<String,  Class<?>>();
 
        public Boolean supports(String type) {
                if (supportedTypes.containsKey(type))
                        return true;
 
                return loadClass(type) != null ? true : false;
-               // try {
-               // // Class.forName(type);
-               // Thread.currentThread().getContextClassLoader().loadClass(type);
-               // return true;
-               // } catch (ClassNotFoundException e) {
-               // return false;
-               // }
        }
 
+       @SuppressWarnings("unchecked")
        public <T> T readValue(String type, String str) {
-               final Class clss;
+               final  Class<?> clss;
                if (supportedTypes.containsKey(type))
                        clss = supportedTypes.get(type);
                else {
                        clss = loadClass(type);
                        if (clss == null)
                                throw new ArgeoServerException("Cannot find type " + type);
-                       // try {
-                       // // clss = Class.forName(type);
-                       // clss = Thread.currentThread().getContextClassLoader()
-                       // .loadClass(type);
-                       // } catch (ClassNotFoundException e) {
-                       // throw new ArgeoServerException("Cannot find type " + type, e);
-                       // }
                }
 
                try {
@@ -62,12 +49,11 @@ public class JsonObjectFactoryImpl implements JsonObjectFactory,
                }
        }
 
-       public void setSupportedTypes(Map<String, Class> supportedTypes) {
+       public void setSupportedTypes(Map<String,  Class<?>> supportedTypes) {
                this.supportedTypes = supportedTypes;
        }
 
-       protected Class loadClass(String type) {
-               Class clss;
+       protected  Class<?> loadClass(String type) {
 //             try {
 //                     return Class.forName(type);
 //             } catch (ClassNotFoundException e) {