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 bt...@apache.org on 2019/01/11 03:01:16 UTC

[06/10] james-project git commit: JAMES-2636 add and remove alias mapping for RecipientRewriteTable and cucumber tests

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 <rc...@linagora.com>
Authored: Mon Jan 7 17:05:36 2019 +0700
Committer: Benoit Tellier <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org