You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2006/10/18 13:59:57 UTC
svn commit: r465225 - in /james/server/trunk/src:
java/org/apache/james/userrepository/ test/org/apache/james/userrepository/
Author: norman
Date: Wed Oct 18 04:59:54 2006
New Revision: 465225
URL: http://svn.apache.org/viewvc?view=rev&rev=465225
Log:
Implement VirtualUserTable in UserRepositories.
Add tests
Modified:
james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java
james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java
james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java
james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java
Modified: james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java?view=diff&rev=465225&r1=465224&r2=465225
==============================================================================
--- james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java (original)
+++ james/server/trunk/src/java/org/apache/james/userrepository/JamesUsersJdbcRepository.java Wed Oct 18 04:59:54 2006
@@ -21,19 +21,24 @@
package org.apache.james.userrepository;
+import org.apache.james.services.JamesUser;
import org.apache.james.services.User;
+import org.apache.james.services.VirtualUserTable;
+import org.apache.james.vut.ErrorMappingException;
import org.apache.mailet.MailAddress;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
/**
* A Jdbc-backed UserRepository which handles User instances
* of the <CODE>DefaultJamesUser</CODE> class, or any superclass.
*
*/
-public class JamesUsersJdbcRepository extends AbstractJdbcUsersRepository
+public class JamesUsersJdbcRepository extends AbstractJdbcUsersRepository implements VirtualUserTable
{
/**
* @see org.apache.james.userrepository.AbstractJdbcUsersRepository#readUserFromResultSet(java.sql.ResultSet)
@@ -157,5 +162,41 @@
newbie.setPassword(password);
return addUser(newbie);
}
-
+
+ /**
+ * @see org.apache.james.services.VirtualUserTable#getMappings(java.lang.String, java.lang.String)
+ */
+ public Collection getMappings(String username, String domain) throws ErrorMappingException {
+ Collection mappings = new ArrayList();
+ User user = getUserByName(username);
+
+ if (user instanceof JamesUser) {
+ JamesUser jUser = (JamesUser) user;
+
+ if (jUser.getAliasing()) {
+ String alias = jUser.getAlias();
+ if (alias != null) {
+ mappings.add(alias+ "@" + domain);
+ }
+ }
+
+ if (jUser.getForwarding()) {
+ String forward = null;
+ if (jUser.getForwardingDestination() != null && ((forward = jUser.getForwardingDestination().toString()) != null)) {
+ mappings.add(forward);
+ } else {
+ StringBuffer errorBuffer = new StringBuffer(128)
+ .append("Forwarding was enabled for ")
+ .append(username)
+ .append(" but no forwarding address was set for this account.");
+ getLogger().error(errorBuffer.toString());
+ }
+ }
+ }
+ if (mappings.size() == 0) {
+ return null;
+ } else {
+ return mappings;
+ }
+ }
}
Modified: james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java?view=diff&rev=465225&r1=465224&r2=465225
==============================================================================
--- james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java (original)
+++ james/server/trunk/src/java/org/apache/james/userrepository/UsersFileRepository.java Wed Oct 18 04:59:54 2006
@@ -32,9 +32,14 @@
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
+import org.apache.james.services.JamesUser;
import org.apache.james.services.User;
import org.apache.james.services.UsersRepository;
+import org.apache.james.services.VirtualUserTable;
+import org.apache.james.vut.ErrorMappingException;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
/**
@@ -52,7 +57,7 @@
*/
public class UsersFileRepository
extends AbstractLogEnabled
- implements UsersRepository, Configurable, Serviceable, Initializable {
+ implements UsersRepository, Configurable, Serviceable, Initializable, VirtualUserTable {
/**
* Whether 'deep debugging' is turned on.
@@ -295,6 +300,43 @@
count++;
}
return count;
+ }
+
+ /**
+ * @see org.apache.james.services.VirtualUserTable#getMappings(java.lang.String, java.lang.String)
+ */
+ public Collection getMappings(String username, String domain) throws ErrorMappingException {
+ Collection mappings = new ArrayList();
+ User user = getUserByName(username);
+
+ if (user instanceof JamesUser) {
+ JamesUser jUser = (JamesUser) user;
+
+ if (jUser.getAliasing()) {
+ String alias = jUser.getAlias();
+ if (alias != null) {
+ mappings.add(alias+ "@" + domain);
+ }
+ }
+
+ if (jUser.getForwarding()) {
+ String forward = null;
+ if (jUser.getForwardingDestination() != null && ((forward = jUser.getForwardingDestination().toString()) != null)) {
+ mappings.add(forward);
+ } else {
+ StringBuffer errorBuffer = new StringBuffer(128)
+ .append("Forwarding was enabled for ")
+ .append(username)
+ .append(" but no forwarding address was set for this account.");
+ getLogger().error(errorBuffer.toString());
+ }
+ }
+ }
+ if (mappings.size() == 0) {
+ return null;
+ } else {
+ return mappings;
+ }
}
}
Modified: james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java?view=diff&rev=465225&r1=465224&r2=465225
==============================================================================
--- james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/userrepository/JamesUsersJdbcRepositoryTest.java Wed Oct 18 04:59:54 2006
@@ -23,11 +23,16 @@
import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.james.services.JamesUser;
+import org.apache.james.services.User;
import org.apache.james.services.UsersRepository;
+import org.apache.james.services.VirtualUserTable;
import org.apache.james.test.mock.james.MockFileSystem;
import org.apache.james.test.mock.util.AttrValConfiguration;
import org.apache.james.test.util.Util;
+import org.apache.mailet.MailAddress;
+import java.util.Collection;
import java.util.Iterator;
/**
@@ -85,5 +90,47 @@
}
ContainerUtil.dispose(this.usersRepository);
}
+
+
+ public void testVirtualUserTableImpl() throws Exception {
+ String username = "test";
+ String password = "pass";
+ String alias = "alias";
+ String domain = "localhost";
+ String forward = "forward@somewhere";
+
+ JamesUsersJdbcRepository repos = (JamesUsersJdbcRepository) getUsersRepository();
+ repos.addUser(username,password);
+
+ JamesUser user = (JamesUser)repos.getUserByName(username);
+ user.setAlias(alias);
+ repos.updateUser(user);
+
+ Collection map = ((VirtualUserTable) repos).getMappings(username, domain);
+ assertNull("No mapping", map);
+
+ user.setAliasing(true);
+ repos.updateUser(user);
+ map = ((VirtualUserTable) repos).getMappings(username, domain);
+ assertNotNull("One mapping", map.size() == 1);
+ assertEquals("Alias found", map.iterator().next().toString(), alias + "@" + domain);
+
+
+ user.setForwardingDestination(new MailAddress(forward));
+ repos.updateUser(user);
+ map = ((VirtualUserTable) repos).getMappings(username, domain);
+ assertTrue("One mapping", map.size() == 1);
+ assertEquals("Alias found", map.iterator().next().toString(), alias + "@" + domain);
+
+
+ user.setForwarding(true);
+ repos.updateUser(user);
+ map = ((VirtualUserTable) repos).getMappings(username, domain);
+ Iterator mappings = map.iterator();
+ assertTrue("Two mapping",map.size() == 2);
+ assertEquals("Alias found", mappings.next().toString(), alias + "@" + domain);
+ assertEquals("Forward found", mappings.next().toString(), forward);
+ }
+
}
Modified: james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java?view=diff&rev=465225&r1=465224&r2=465225
==============================================================================
--- james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/userrepository/UsersFileRepositoryTest.java Wed Oct 18 04:59:54 2006
@@ -25,12 +25,16 @@
import org.apache.avalon.framework.service.DefaultServiceManager;
import org.apache.james.mailrepository.filepair.File_Persistent_Object_Repository;
import org.apache.james.services.FileSystem;
+import org.apache.james.services.JamesUser;
import org.apache.james.services.UsersRepository;
+import org.apache.james.services.VirtualUserTable;
import org.apache.james.test.mock.avalon.MockLogger;
import org.apache.james.test.mock.avalon.MockStore;
+import org.apache.mailet.MailAddress;
import java.io.File;
import java.io.FileNotFoundException;
+import java.util.Collection;
import java.util.Iterator;
/**
@@ -85,5 +89,46 @@
}
ContainerUtil.dispose(this.usersRepository);
}
+
+ public void testVirtualUserTableImpl() throws Exception {
+ String username = "test";
+ String password = "pass";
+ String alias = "alias";
+ String domain = "localhost";
+ String forward = "forward@somewhere";
+
+ UsersFileRepository repos = (UsersFileRepository) getUsersRepository();
+ repos.addUser(username,password);
+
+ JamesUser user = (JamesUser)repos.getUserByName(username);
+ user.setAlias(alias);
+ repos.updateUser(user);
+
+ Collection map = ((VirtualUserTable) repos).getMappings(username, domain);
+ assertNull("No mapping", map);
+
+ user.setAliasing(true);
+ repos.updateUser(user);
+ map = ((VirtualUserTable) repos).getMappings(username, domain);
+ assertNotNull("One mapping", map.size() == 1);
+ assertEquals("Alias found", map.iterator().next().toString(), alias + "@" + domain);
+
+
+ user.setForwardingDestination(new MailAddress(forward));
+ repos.updateUser(user);
+ map = ((VirtualUserTable) repos).getMappings(username, domain);
+ assertTrue("One mapping", map.size() == 1);
+ assertEquals("Alias found", map.iterator().next().toString(), alias + "@" + domain);
+
+
+ user.setForwarding(true);
+ repos.updateUser(user);
+ map = ((VirtualUserTable) repos).getMappings(username, domain);
+ Iterator mappings = map.iterator();
+ assertTrue("Two mapping",map.size() == 2);
+ assertEquals("Alias found", mappings.next().toString(), alias + "@" + domain);
+ assertEquals("Forward found", mappings.next().toString(), forward);
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org