r166 - in trunk/simexplorer-is-security: . src src/java src/java/META-INF src/java/fr src/java/fr/cemagref src/java/fr/cemagref/simexplorer src/java/fr/cemagref/simexplorer/is src/java/fr/cemagref/simexplorer/is/security src/java/fr/cemagref/simexplorer/is/security/credentials src/java/fr/cemagref/simexplorer/is/security/dao src/java/fr/cemagref/simexplorer/is/security/entities src/java/fr/cemagref/simexplorer/is/security/service src/test src/test/fr src/test/fr/cemagref src/test/fr
Author: glandais Date: 2008-01-16 16:54:21 +0000 (Wed, 16 Jan 2008) New Revision: 166 Added: trunk/simexplorer-is-security/pom.xml trunk/simexplorer-is-security/profiles.xml trunk/simexplorer-is-security/src/ trunk/simexplorer-is-security/src/java/ trunk/simexplorer-is-security/src/java/META-INF/ trunk/simexplorer-is-security/src/java/META-INF/orm.xml trunk/simexplorer-is-security/src/java/META-INF/persistence.xml trunk/simexplorer-is-security/src/java/fr/ trunk/simexplorer-is-security/src/java/fr/cemagref/ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManager.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManagerImpl.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurity.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Group.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/LoginAction.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/User.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationService.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationServiceImpl.java trunk/simexplorer-is-security/src/java/h2-ds.xml trunk/simexplorer-is-security/src/site/ trunk/simexplorer-is-security/src/test/ trunk/simexplorer-is-security/src/test/fr/ trunk/simexplorer-is-security/src/test/fr/cemagref/ trunk/simexplorer-is-security/src/test/fr/cemagref/simexplorer/ trunk/simexplorer-is-security/src/test/fr/cemagref/simexplorer/is/ trunk/simexplorer-is-security/src/test/fr/cemagref/simexplorer/is/security/ trunk/simexplorer-is-security/src/test/fr/cemagref/simexplorer/is/security/test/ trunk/simexplorer-is-security/src/test/fr/cemagref/simexplorer/is/security/test/SecurityTestCase.java Modified: trunk/simexplorer-is-security/ Log: Initial import. Property changes on: trunk/simexplorer-is-security ___________________________________________________________________ Name: svn:ignore + target .* Added: trunk/simexplorer-is-security/pom.xml =================================================================== --- trunk/simexplorer-is-security/pom.xml (rev 0) +++ trunk/simexplorer-is-security/pom.xml 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <groupId>simexplorer-is</groupId> + <artifactId>simexplorer-is-security</artifactId> + <name>Security</name> + + <version>0.0.1-SNAPSHOT</version> + <description></description> + <packaging>ejb</packaging> + + <parent> + <groupId>simexplorer-is</groupId> + <artifactId>simexplorer-is</artifactId> + <version>0.0.1-SNAPSHOT</version> + </parent> + + <dependencies> + <dependency> + <groupId>javax.persistence</groupId> + <artifactId>persistence-api</artifactId> + <version>1.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>jboss</groupId> + <artifactId>jboss-ejb3x</artifactId> + <version>4.2.2.GA</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>jboss</groupId> + <artifactId>jboss-annotations-ejb3</artifactId> + <version>4.2.2.GA</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <version>1.0.64</version> + </dependency> + <dependency> + <groupId>jboss</groupId> + <artifactId>jbossall-client</artifactId> + <version>4.2.2.GA</version> + <scope>test</scope> + </dependency> + </dependencies> +</project> Added: trunk/simexplorer-is-security/profiles.xml =================================================================== --- trunk/simexplorer-is-security/profiles.xml (rev 0) +++ trunk/simexplorer-is-security/profiles.xml 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<settings> + <profiles> + <profile> + <id>project</id> + <activation> + <activeByDefault>true</activeByDefault> + </activation> + <properties> + <!-- id du projet du labs (buix) --> + <labs.id>130</labs.id> + <!--Source base dir--> + <maven.src.dir>${basedir}/src</maven.src.dir> + <!--Test--> + <maven.test.skip>true</maven.test.skip> + <!--Compile with ?--> + <maven.compile.source>1.5</maven.compile.source> + <maven.compile.target>1.5</maven.compile.target> + <!--Main class in JAR + <maven.jar.main.class> + jaxx.compiler.JAXXCompiler + </maven.jar.main.class> + --> + </properties> + </profile> + </profiles> +</settings> \ No newline at end of file Added: trunk/simexplorer-is-security/src/java/META-INF/orm.xml =================================================================== --- trunk/simexplorer-is-security/src/java/META-INF/orm.xml (rev 0) +++ trunk/simexplorer-is-security/src/java/META-INF/orm.xml 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" + version="1.0"> + + <persistence-unit-metadata> + <xml-mapping-metadata-complete /> + </persistence-unit-metadata> + + <package>fr.cemagref.simexplorer.is.security.entities</package> + + <mapped-superclass class="Actor"> + <attributes> + <id name="id"> + <generated-value strategy="SEQUENCE" /> + </id> + <many-to-many name="groups" target-entity="Group"> + <cascade> + <cascade-all /> + </cascade> + </many-to-many> + </attributes> + </mapped-superclass> + + <entity class="Group"> + <table name="GROUPS" /> + <attributes> + <basic name="name"></basic> + <one-to-one name="owner" fetch="EAGER" /> + </attributes> + </entity> + + <entity class="User"> + <table name="USERS" /> + <attributes> + <basic name="login"></basic> + <basic name="mail"></basic> + <basic name="passwordHash"></basic> + <basic name="admin"></basic> + <basic name="superAdmin"></basic> + </attributes> + </entity> + + <entity class="LoginAction"> + <table name="LOGINS" /> + <attributes> + <id name="id"> + <generated-value strategy="SEQUENCE" /> + </id> + <basic name="token" /> + <basic name="time"> + <temporal>TIME</temporal> + </basic> + <one-to-one name="loggedUser" fetch="EAGER" /> + </attributes> + </entity> + +</entity-mappings> Added: trunk/simexplorer-is-security/src/java/META-INF/persistence.xml =================================================================== --- trunk/simexplorer-is-security/src/java/META-INF/persistence.xml (rev 0) +++ trunk/simexplorer-is-security/src/java/META-INF/persistence.xml 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,30 @@ +<persistence xmlns="http://java.sun.com/xml/ns/persistence" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" + version="1.0"> + <persistence-unit name="simexploreris-security"> + + <!-- le fournisseur JPA est Hibernate --> + <provider>org.hibernate.ejb.HibernatePersistence</provider> + + <!-- la DataSource JTA gérée par l'environnement Java EE5 --> + <jta-data-source>java:/h2datasource</jta-data-source> + + <mapping-file>META-INF/orm.xml</mapping-file> + + <properties> + <!-- logs SQL Hibernate --> + <property name="hibernate.show_sql" value="true"/> + <property name="hibernate.format_sql" value="true"/> + <property name="use_sql_comments" value="true"/> + <!-- --> + + <!-- le type de SGBD géré --> + <property name="hibernate.dialect" + value="org.hibernate.dialect.H2Dialect" /> + + <!-- recréation de toutes les tables (drop+create) au déploiement de l'unité de persistence --> + <property name="hibernate.hbm2ddl.auto" value="create" /> + </properties> + </persistence-unit> +</persistence> Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManager.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManager.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManager.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,8 @@ +package fr.cemagref.simexplorer.is.security.credentials; + +import javax.ejb.Local; + + at Local +public interface CredentialManager { + +} Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManagerImpl.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManagerImpl.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManagerImpl.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,10 @@ +package fr.cemagref.simexplorer.is.security.credentials; + +import javax.ejb.Local; +import javax.ejb.Stateless; + + at Stateless(name = "CredentialManager") + at Local(CredentialManager.class) +public class CredentialManagerImpl implements CredentialManager { + +} Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurity.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurity.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurity.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,43 @@ +package fr.cemagref.simexplorer.is.security.dao; + +import java.util.List; + +import fr.cemagref.simexplorer.is.security.entities.Group; +import fr.cemagref.simexplorer.is.security.entities.LoginAction; +import fr.cemagref.simexplorer.is.security.entities.User; + +public interface DaoSecurity { + + public void saveUser(User user); + + public User getUser(Integer id); + + public User getUser(String login); + + public User updateUser(User user); + + public void deleteUser(Integer id); + + public void saveGroup(Group group); + + public Group getGroup(Integer id); + + public Group updateGroup(Group group); + + public void deleteGroup(Integer id); + + public User getLoggedUser(String token); + + public User loginUser(String login, String passwordHash); + + public void saveToken(LoginAction loginAction); + + public List<Group> getGroups(); + + public List<Group> getGroupsOwnedBy(User user); + + public List<User> getUsers(); + + public List<User> getUsersOfGroup(Group group); + +} Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,108 @@ +package fr.cemagref.simexplorer.is.security.dao; + +import java.util.List; + +import javax.ejb.Stateless; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import fr.cemagref.simexplorer.is.security.entities.Group; +import fr.cemagref.simexplorer.is.security.entities.LoginAction; +import fr.cemagref.simexplorer.is.security.entities.User; + + at Stateless(name = "DaoSecurity") +public class DaoSecurityImpl implements DaoSecurity { + + @PersistenceContext(unitName = "simexploreris-security") + private EntityManager em; + + public void deleteGroup(Integer id) { + Group g = getGroup(id); + if (g != null) { + em.remove(g); + } + } + + public void deleteUser(Integer id) { + User u = getUser(id); + if (u != null) { + em.remove(u); + } + } + + public Group getGroup(Integer id) { + return em.find(Group.class, id); + } + + public User getUser(Integer id) { + return em.find(User.class, id); + } + + public void saveGroup(Group group) { + em.persist(group); + } + + public void saveUser(User user) { + em.persist(user); + } + + public Group updateGroup(Group group) { + return em.merge(group); + } + + public User updateUser(User user) { + return em.merge(user); + } + + public User getLoggedUser(String token) { + User loggedUser = null; + LoginAction loginAction = (LoginAction) em.createQuery( + "select la from LoginAction la where la.token=:token") + .setParameter("token", token).getSingleResult(); + if (loginAction != null) { + loggedUser = loginAction.getLoggedUser(); + } + return loggedUser; + } + + public User loginUser(String login, String passwordHash) { + User user = (User) em + .createQuery( + "select u from User u where u.login=:login and u.passwordHash=:passwordHash") + .setParameter("login", login).setParameter("passwordHash", + passwordHash).getSingleResult(); + return user; + } + + public void saveToken(LoginAction loginAction) { + em.persist(loginAction); + } + + public User getUser(String login) { + User user = (User) em.createQuery( + "select u from User u where u.login=:login").setParameter( + "login", login).getSingleResult(); + return user; + } + + public List<Group> getGroups() { + return em.createQuery("select g from Group g").getResultList(); + } + + public List<Group> getGroupsOwnedBy(User user) { + return em.createQuery("select g from Group g where g.owner=:owner") + .setParameter("owner", user).getResultList(); + } + + public List<User> getUsers() { + return em.createQuery("select u from User u").getResultList(); + } + + public List<User> getUsersOfGroup(Group group) { + return em + .createQuery( + "select distinct u from User u where :group member of u.groups") + .setParameter("group", group).getResultList(); + } + +} Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,34 @@ +package fr.cemagref.simexplorer.is.security.entities; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +public class Actor implements Serializable { + + private static final long serialVersionUID = 813823268950750281L; + + private Integer id; + + private List<Group> groups; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public List<Group> getGroups() { + if (groups == null) { + groups = new ArrayList<Group>(); + } + return groups; + } + + public void setGroups(List<Group> groups) { + this.groups = groups; + } + +} Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Group.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Group.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Group.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,25 @@ +package fr.cemagref.simexplorer.is.security.entities; + +public class Group extends Actor { + + private static final long serialVersionUID = 7378041114780247677L; + private String name; + private User owner; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public User getOwner() { + return owner; + } + + public void setOwner(User owner) { + this.owner = owner; + } + +} Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/LoginAction.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/LoginAction.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/LoginAction.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,44 @@ +package fr.cemagref.simexplorer.is.security.entities; + +import java.util.Date; + +public class LoginAction { + + private Integer id; + private Date time; + private User loggedUser; + private String token; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getTime() { + return time; + } + + public void setTime(Date time) { + this.time = time; + } + + public User getLoggedUser() { + return loggedUser; + } + + public void setLoggedUser(User loggedUser) { + this.loggedUser = loggedUser; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + +} Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/User.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/User.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/User.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,52 @@ +package fr.cemagref.simexplorer.is.security.entities; + +public class User extends Actor { + + private static final long serialVersionUID = -3031385996413945685L; + private String login; + private String mail; + private String passwordHash; + private boolean admin; + private boolean superAdmin; + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getMail() { + return mail; + } + + public void setMail(String mail) { + this.mail = mail; + } + + public String getPasswordHash() { + return passwordHash; + } + + public void setPasswordHash(String passwordHash) { + this.passwordHash = passwordHash; + } + + public boolean isAdmin() { + return admin; + } + + public void setAdmin(boolean admin) { + this.admin = admin; + } + + public boolean isSuperAdmin() { + return superAdmin; + } + + public void setSuperAdmin(boolean superAdmin) { + this.superAdmin = superAdmin; + } + +} Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationService.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationService.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationService.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,49 @@ +package fr.cemagref.simexplorer.is.security.service; + +import javax.ejb.Remote; + +import fr.cemagref.simexplorer.is.security.entities.Group; +import fr.cemagref.simexplorer.is.security.entities.User; + + at Remote +public interface AuthenticationService { + + public User requestAccount(String login, String mail); + + public User saveUser(String login, String mail); + + public void resetPassword(String login); + + public void changePassword(String login, String password); + + public User getUser(Integer id); + + public User getUser(String login); + + public User updateUser(User user); + + public void deleteUser(Integer id); + + public User[] getUsers(); + + public User[] getUsersOfGroup(Group group); + + public void setUsersOfGroup(Group group, Integer[] usersInGroup); + + public Group saveGroup(String name, User owner); + + public Group getGroup(Integer id); + + public Group updateGroup(Group group); + + public void deleteGroup(Integer id); + + public Group[] getGroups(); + + public Group[] getGroupsOwnedBy(User user); + + public String loginUser(String login, String password); + + public User getLoggedUser(String token); + +} Added: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationServiceImpl.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationServiceImpl.java (rev 0) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationServiceImpl.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,234 @@ +package fr.cemagref.simexplorer.is.security.service; + +import java.security.MessageDigest; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +import javax.ejb.EJB; +import javax.ejb.Remote; +import javax.ejb.Stateless; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; + +import org.jboss.annotation.ejb.RemoteBinding; + +import fr.cemagref.simexplorer.is.security.dao.DaoSecurity; +import fr.cemagref.simexplorer.is.security.entities.Group; +import fr.cemagref.simexplorer.is.security.entities.LoginAction; +import fr.cemagref.simexplorer.is.security.entities.User; + + at Stateless(name = "AuthenticationService") + at Remote(AuthenticationService.class) + at RemoteBinding(jndiBinding = "AuthenticationService") + at TransactionAttribute(TransactionAttributeType.REQUIRED) +public class AuthenticationServiceImpl implements AuthenticationService { + + @EJB + private DaoSecurity dao; + + private void sendMail(String login, String mail, String password) { + /* + javax.mail.Session mailSession = (javax.mail.Session) new InitialContext().lookup("java:/Mail"); + javax.mail.Message msg = new MimeMessage(mailSession); + msg.setRecipients(javax.mail.Message.RecipientType.TO, InternetAddress.parse("AQui at aQui.be,siplusieuradresse at hotmail.com", false)); + msg.setSubject("This is a test"); + msg.setContent("<html><body><h2>Helle le monde mondial des terriens " + + " Petit test de jboss Mail-Service" + + " Ne m'en voulez pas si vous recevez ce mail alors que vous nedevrez pas " + + " Braim " + + "</h2></body></html>", "text/html"); + msg.setHeader("X-Mailer", "JavaMailer"); + msg.setSentDate(new java.util.Date()); + Transport.send(msg); + */ + } + + private String computeHash(String clearString) { + MessageDigest messageDigest = null; + try { + messageDigest = MessageDigest.getInstance("SHA-1"); + } catch (Exception e) { + // TODO: handle exception + } + messageDigest.reset(); + messageDigest.update(clearString.getBytes()); + String hashedPassword = new String(messageDigest.digest()); + return hashedPassword; + } + + private String generatePassword() { + // FIXME + return "password"; + } + + private void removeUserFromGroup(User user, Group group) { + List<Group> toRemove = new ArrayList<Group>(); + for (Group testGroup : user.getGroups()) { + if (testGroup.getId() == group.getId()) { + toRemove.add(testGroup); + } + } + for (Group groupToRemove : toRemove) { + user.getGroups().remove(groupToRemove); + } + } + + public void deleteGroup(Integer id) { + dao.deleteGroup(id); + } + + public void deleteUser(Integer id) { + dao.deleteUser(id); + } + + public Group getGroup(Integer id) { + return dao.getGroup(id); + } + + public User getUser(Integer id) { + return dao.getUser(id); + } + + public User getUser(String login) { + return dao.getUser(login); + } + + public Group saveGroup(String name, User owner) { + Group group = new Group(); + group.setName(name); + group.setOwner(owner); + dao.saveGroup(group); + group = getGroup(group.getId()); + return group; + } + + public User saveUser(String login, String mail) { + User user = new User(); + user.setLogin(login); + user.setMail(mail); + String password = generatePassword(); + sendMail(login, mail, password); + String passwordHash = computeHash(password); + user.setPasswordHash(passwordHash); + user.setAdmin(false); + dao.saveUser(user); + user = getUser(user.getId()); + return user; + } + + public Group updateGroup(Group group) { + return dao.updateGroup(group); + } + + public User updateUser(User user) { + return dao.updateUser(user); + } + + public User getLoggedUser(String token) { + User loggedUser = dao.getLoggedUser(token); + return loggedUser; + } + + public String loginUser(String login, String password) { + String token = null; + User loggedUser = dao.loginUser(login, computeHash(password)); + if (loggedUser != null) { + LoginAction loginAction = new LoginAction(); + loginAction.setLoggedUser(loggedUser); + loginAction.setTime(new Date()); + loginAction.setToken(UUID.randomUUID().toString()); + dao.saveToken(loginAction); + token = loginAction.getToken(); + } + return token; + } + + public User requestAccount(String login, String mail) { + User user = new User(); + user.setLogin(login); + user.setMail(mail); + String password = generatePassword(); + sendMail(login, mail, password); + String passwordHash = computeHash(password); + user.setPasswordHash(passwordHash); + dao.saveUser(user); + return user; + } + + public void changePassword(String login, String password) { + User user = getUser(login); + String passwordHash = computeHash(password); + user.setPasswordHash(passwordHash); + dao.saveUser(user); + } + + public void resetPassword(String login) { + User user = getUser(login); + String password = generatePassword(); + sendMail(login, user.getMail(), password); + String passwordHash = computeHash(password); + user.setPasswordHash(passwordHash); + dao.saveUser(user); + } + + public Group[] getGroups() { + List<Group> groups = dao.getGroups(); + Group[] result = groups.toArray(new Group[0]); + return result; + } + + public Group[] getGroupsOwnedBy(User user) { + return dao.getGroupsOwnedBy(user).toArray(new Group[0]); + } + + public User[] getUsers() { + return dao.getUsers().toArray(new User[0]); + } + + public User[] getUsersOfGroup(Group group) { + return dao.getUsersOfGroup(group).toArray(new User[0]); + } + + public void setUsersOfGroup(Group group, Integer[] usersInGroup) { + List<Integer> newUsers = new ArrayList<Integer>(); + for (int i = 0; i < usersInGroup.length; i++) { + newUsers.add(usersInGroup[i]); + } + + List<Integer> usersToAdd = new ArrayList<Integer>(); + List<Integer> usersToRemove = new ArrayList<Integer>(); + + List<User> users = dao.getUsersOfGroup(group); + + List<Integer> currentUsers = new ArrayList<Integer>(); + for (User user : users) { + currentUsers.add(user.getId()); + } + + for (Integer user : currentUsers) { + if (!newUsers.contains(user)) { + usersToRemove.add(user); + } + } + for (Integer user : newUsers) { + if (!currentUsers.contains(user)) { + usersToAdd.add(user); + } + } + + for (Integer idUser : usersToAdd) { + User user = dao.getUser(idUser); + user.getGroups().add(group); + dao.saveUser(user); + } + for (Integer idUser : usersToRemove) { + User user = dao.getUser(idUser); + removeUserFromGroup(user, group); + dao.saveUser(user); + } + } + +} Added: trunk/simexplorer-is-security/src/java/h2-ds.xml =================================================================== --- trunk/simexplorer-is-security/src/java/h2-ds.xml (rev 0) +++ trunk/simexplorer-is-security/src/java/h2-ds.xml 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- ===================================================================== --> +<!-- --> +<!-- JBoss Server Configuration --> +<!-- --> +<!-- ===================================================================== --> + +<!-- $Id: postgres-ds.xml 63175 2007-05-21 16:26:06Z rrajesh $ --> +<!-- ==================================================================== --> +<!-- Datasource config for Postgres --> +<!-- ==================================================================== --> + + +<datasources> + <local-tx-datasource> + <jndi-name>h2datasource</jndi-name> + <connection-url> + jdbc:h2:/var/local/simexplorer/security/database + </connection-url> + <driver-class>org.h2.Driver</driver-class> + <user-name></user-name> + <password></password> + </local-tx-datasource> + +</datasources> Added: trunk/simexplorer-is-security/src/test/fr/cemagref/simexplorer/is/security/test/SecurityTestCase.java =================================================================== --- trunk/simexplorer-is-security/src/test/fr/cemagref/simexplorer/is/security/test/SecurityTestCase.java (rev 0) +++ trunk/simexplorer-is-security/src/test/fr/cemagref/simexplorer/is/security/test/SecurityTestCase.java 2008-01-16 16:54:21 UTC (rev 166) @@ -0,0 +1,89 @@ +package fr.cemagref.simexplorer.is.security.test; + +import java.util.Properties; + +import javax.naming.Context; +import javax.naming.InitialContext; + +import junit.framework.TestCase; +import fr.cemagref.simexplorer.is.security.entities.Group; +import fr.cemagref.simexplorer.is.security.entities.User; +import fr.cemagref.simexplorer.is.security.service.AuthenticationService; + +public class SecurityTestCase extends TestCase { + + AuthenticationService authenticationService = null; + + protected void setUp() throws Exception { + super.setUp(); + Properties properties = (Properties) System.getProperties().clone(); + properties.put("java.naming.provider.url", "jnp://localhost:1099"); + properties.put("java.naming.factory.initial", + "org.jnp.interfaces.NamingContextFactory"); + properties.put("java.naming.factory.url.pkgs", "org.jnp.interfaces"); + + Context context = new InitialContext(properties); + authenticationService = (AuthenticationService) context + .lookup("AuthenticationService"); + + } + + public void testSecurityEntities() { + User[] simpleUsers = new User[20]; + for (int i = 0; i < 20; i++) { + simpleUsers[i] = authenticationService.saveUser("user" + i, + "landais+simtest at codelutin.com"); + simpleUsers[i].setAdmin(false); + simpleUsers[i].setSuperAdmin(false); + authenticationService.updateUser(simpleUsers[i]); + } + + User[] adminUsers = new User[4]; + Group[] groups = new Group[4]; + for (int i = 0; i < 4; i++) { + adminUsers[i] = authenticationService.saveUser("admin" + i, + "landais+simtest at codelutin.com"); + adminUsers[i].setAdmin(true); + adminUsers[i].setSuperAdmin(false); + authenticationService.updateUser(adminUsers[i]); + + groups[i] = authenticationService.saveGroup("group" + i, + adminUsers[i]); + for (int j = i * 4; j < (i * 4 + 5); j++) { + simpleUsers[j].getGroups().add(groups[i]); + authenticationService.updateUser(simpleUsers[j]); + } + } + + User superAdminUser = authenticationService.saveUser("superadmin", + "landais+simtest at codelutin.com"); + superAdminUser.setAdmin(true); + superAdminUser.setSuperAdmin(true); + authenticationService.updateUser(superAdminUser); + + /* + User[] users = new User[10]; + Group[] groups = new Group[10]; + for (int i = 0; i < 10; i++) { + users[i] = authenticationService.saveUser("user" + i, + "user1 at abc.fr"); + users[i].setAdmin(true); + users[i].setSuperAdmin(true); + authenticationService.updateUser(users[i]); + groups[i] = authenticationService.saveGroup("group" + i, users[i]); + } + + for (int i = 0; i < 10; i++) { + System.out.println(users[i].getId()); + System.out.println(groups[i].getId()); + } + + String token = authenticationService.loginUser(users[4].getLogin(), + "hierugheriugh"); + User userLogged = authenticationService.getLoggedUser(token); + + assertEquals(userLogged.getLogin(), users[4].getLogin()); + */ + } + +}
participants (1)
-
glandais@users.labs.libre-entreprise.org