JAMES-2636 add and remove alias mapping for RecipientRewriteTable and cucumber tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ca7818e7 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ca7818e7 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ca7818e7 Branch: refs/heads/master Commit: ca7818e77d12c5e1f924f4fca3f60d115ece458b Parents: 516787f Author: Rene Cordier <rcord...@linagora.com> Authored: Mon Jan 7 17:05:36 2019 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Fri Jan 11 09:48:33 2019 +0700 ---------------------------------------------------------------------- .../james/rrt/api/RecipientRewriteTable.java | 4 ++ .../rrt/lib/AbstractRecipientRewriteTable.java | 39 +++++++++++++++----- .../user/lib/AbstractJamesUsersRepository.java | 10 +++++ .../james/rrt/lib/RewriteTablesStepdefs.java | 12 ++++++ .../resources/cucumber/rewrite_tables.feature | 22 +++++++++++ 5 files changed, 78 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/ca7818e7/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java ---------------------------------------------------------------------- diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java index 96f62d3..4970f1b 100644 --- a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java +++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java @@ -80,6 +80,10 @@ public interface RecipientRewriteTable { void removeGroupMapping(MappingSource source, String address) throws RecipientRewriteTableException; + void addAliasMapping(MappingSource source, String address) throws RecipientRewriteTableException; + + void removeAliasMapping(MappingSource source, String address) throws RecipientRewriteTableException; + /** * Return the Mappings for the given source. Return empty object if no * matched mapping was found http://git-wip-us.apache.org/repos/asf/james-project/blob/ca7818e7/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java ---------------------------------------------------------------------- diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java index d6acf8f..88e76ea 100644 --- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java +++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java @@ -133,7 +133,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT } private Stream<Mapping> convertAndRecurseMapping(Mapping mapping, User originalUser, User rewrittenUser, int remainingLoops) throws ErrorMappingException, RecipientRewriteTableException { - LOGGER.debug("Valid virtual user mapping {} to {}", originalUser, rewrittenUser); + LOGGER.debug("Valid virtual user mapping {} to {}", originalUser.asString(), rewrittenUser.asString()); Stream<Mapping> nonRecursiveResult = Stream.of(toMapping(rewrittenUser, mapping.getType())); if (!recursive) { @@ -201,7 +201,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT checkHasValidAddress(mapping); checkDuplicateMapping(source, mapping); - LOGGER.info("Add address mapping => {} for source: {}", mapping, source.asString()); + LOGGER.info("Add address mapping => {} for source: {}", mapping.toString(), source.asString()); addMapping(source, mapping); } @@ -215,7 +215,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT private void checkHasValidAddress(Mapping mapping) throws RecipientRewriteTableException { if (!mapping.asMailAddress().isPresent()) { - throw new RecipientRewriteTableException("Invalid emailAddress: " + mapping); + throw new RecipientRewriteTableException("Invalid emailAddress: " + mapping.toString()); } } @@ -224,7 +224,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT Mapping mapping = Mapping.address(address) .appendDomainFromThrowingSupplierIfNone(this::defaultDomain); - LOGGER.info("Remove address mapping => {} for source: {}", mapping, source.asString()); + LOGGER.info("Remove address mapping => {} for source: {}", mapping.toString(), source.asString()); removeMapping(source, mapping); } @@ -264,7 +264,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT checkHasValidAddress(mapping); checkDuplicateMapping(source, mapping); - LOGGER.info("Add forward mapping => {} for source: {}", mapping, source.asString()); + LOGGER.info("Add forward mapping => {} for source: {}", mapping.toString(), source.asString()); addMapping(source, mapping); } @@ -273,7 +273,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT Mapping mapping = Mapping.forward(address) .appendDomainFromThrowingSupplierIfNone(this::defaultDomain); - LOGGER.info("Remove forward mapping => {} for source: {}", mapping, source.asString()); + LOGGER.info("Remove forward mapping => {} for source: {}", mapping.toString(), source.asString()); removeMapping(source, mapping); } @@ -285,7 +285,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT checkHasValidAddress(mapping); checkDuplicateMapping(source, mapping); - LOGGER.info("Add group mapping => {} for source: {}", mapping, source.asString()); + LOGGER.info("Add group mapping => {} for source: {}", mapping.toString(), source.asString()); addMapping(source, mapping); } @@ -294,7 +294,28 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT Mapping mapping = Mapping.group(address) .appendDomainFromThrowingSupplierIfNone(this::defaultDomain); - LOGGER.info("Remove group mapping => {} for source: {}", mapping, source.asString()); + LOGGER.info("Remove group mapping => {} for source: {}", mapping.toString(), source.asString()); + removeMapping(source, mapping); + } + + @Override + public void addAliasMapping(MappingSource source, String address) throws RecipientRewriteTableException { + Mapping mapping = Mapping.alias(address) + .appendDomainFromThrowingSupplierIfNone(this::defaultDomain); + + checkHasValidAddress(mapping); + checkDuplicateMapping(source, mapping); + + LOGGER.info("Add alias mapping => {} for source: {}", mapping.toString(), source.asString()); + addMapping(source, mapping); + } + + @Override + public void removeAliasMapping(MappingSource source, String address) throws RecipientRewriteTableException { + Mapping mapping = Mapping.alias(address) + .appendDomainFromThrowingSupplierIfNone(this::defaultDomain); + + LOGGER.info("Remove alias mapping => {} for source: {}", mapping.toString(), source.asString()); removeMapping(source, mapping); } @@ -315,7 +336,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT private void checkDuplicateMapping(MappingSource source, Mapping mapping) throws RecipientRewriteTableException { Mappings mappings = getStoredMappings(source); if (mappings.contains(mapping)) { - throw new MappingAlreadyExistsException("Mapping " + mapping + " for " + source.asString() + " already exist!"); + throw new MappingAlreadyExistsException("Mapping " + mapping.toString() + " for " + source.asString() + " already exist!"); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/ca7818e7/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractJamesUsersRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractJamesUsersRepository.java b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractJamesUsersRepository.java index 44f731a..daf8ec0 100644 --- a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractJamesUsersRepository.java +++ b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractJamesUsersRepository.java @@ -288,4 +288,14 @@ public abstract class AbstractJamesUsersRepository extends AbstractUsersReposito public void removeGroupMapping(MappingSource source, String address) throws RecipientRewriteTableException { throw new RecipientRewriteTableException("Read-Only RecipientRewriteTable"); } + + @Override + public void addAliasMapping(MappingSource source, String address) throws RecipientRewriteTableException { + throw new RecipientRewriteTableException("Read-Only RecipientRewriteTable"); + } + + @Override + public void removeAliasMapping(MappingSource source, String address) throws RecipientRewriteTableException { + throw new RecipientRewriteTableException("Read-Only RecipientRewriteTable"); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/ca7818e7/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java ---------------------------------------------------------------------- diff --git a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java index 17320a3..5cca0f7 100644 --- a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java +++ b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java @@ -84,6 +84,12 @@ public class RewriteTablesStepdefs { rewriteTable.addForwardMapping(source, address); } + @Given("store \"([^\"]*)\" alias mapping for user \"([^\"]*)\" at domain \"([^\"]*)\"") + public void storeAliasMappingForUserAtDomain(String address, String user, String domain) throws Throwable { + MappingSource source = MappingSource.fromUser(user, domain); + rewriteTable.addAliasMapping(source, address); + } + @Given("store \"([^\"]*)\" group mapping for user \"([^\"]*)\" at domain \"([^\"]*)\"") public void storeGroupMappingForUserAtDomain(String address, String user, String domain) throws Throwable { MappingSource source = MappingSource.fromUser(user, domain); @@ -128,6 +134,12 @@ public class RewriteTablesStepdefs { rewriteTable.removeForwardMapping(source, address); } + @When("user \"([^\"]*)\" at domain \"([^\"]*)\" removes an alias mapping \"([^\"]*)\"") + public void userAtDomainRemovesAliasMapping(String user, String domain, String address) throws Throwable { + MappingSource source = MappingSource.fromUser(user, domain); + rewriteTable.removeAliasMapping(source, address); + } + @When("user \"([^\"]*)\" at domain \"([^\"]*)\" removes a group mapping \"([^\"]*)\"") public void userAtDomainRemovesGroupMapping(String user, String domain, String address) throws Throwable { MappingSource source = MappingSource.fromUser(user, domain); http://git-wip-us.apache.org/repos/asf/james-project/blob/ca7818e7/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature ---------------------------------------------------------------------- diff --git a/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature b/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature index 16be5f1..9fea1b6 100644 --- a/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature +++ b/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature @@ -242,6 +242,28 @@ Feature: Rewrite Tables tests When user "test" at domain "localhost" removes a forward mapping "test@james" Then mappings for user "test" at domain "localhost" should contain only "forward:test@localhost2" +# Alias mapping + + Scenario: stored alias mapping should be retrieved when one mapping is matching + Given store "test@localhost2" alias mapping for user "test" at domain "localhost" + Then mappings for user "test" at domain "localhost" should contain only "alias:test@localhost2" + + Scenario: stored alias mapping should be retrieved when two mappings are matching + Given store "test@localhost2" alias mapping for user "test" at domain "localhost" + And store "test@james" alias mapping for user "test" at domain "localhost" + Then mappings for user "test" at domain "localhost" should contain only "alias:test@localhost2, alias:test@james" + + Scenario: stored alias mapping should not be retrieved by another user + Given store "test@localhost2" alias mapping for user "test" at domain "localhost" + And store "test@james" alias mapping for user "test" at domain "localhost" + Then mappings for user "test2" at domain "localhost" should be empty + + Scenario: removing a stored alias mapping should work + Given store "test@localhost2" alias mapping for user "test" at domain "localhost" + And store "test@james" alias mapping for user "test" at domain "localhost" + When user "test" at domain "localhost" removes an alias mapping "test@james" + Then mappings for user "test" at domain "localhost" should contain only "alias:test@localhost2" + # Group mapping Scenario: stored group mapping should be retrieved when one mapping is matching --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org