This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit bab4cf5744cc74af78fe416a89159d45ff9a91e3
Author: Gautier DI FOLCO <[email protected]>
AuthorDate: Mon Feb 17 09:57:59 2020 +0100

    JAMES-3066 Strong type CanSendFromImpl.allValidFromAddressesForUser
---
 .../main/java/org/apache/james/core/Username.java  |  4 +++
 .../org/apache/james/rrt/lib/MappingSource.java    |  4 +++
 .../org/apache/james/rrt/lib/CanSendFromImpl.java  | 31 +++++++++++++---------
 3 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/core/src/main/java/org/apache/james/core/Username.java 
b/core/src/main/java/org/apache/james/core/Username.java
index 63cd8a7..c27d980 100644
--- a/core/src/main/java/org/apache/james/core/Username.java
+++ b/core/src/main/java/org/apache/james/core/Username.java
@@ -97,6 +97,10 @@ public class Username {
         return domainPart;
     }
 
+    public Username withOtherDomain(Optional<Domain> domain) {
+        return new Username(localPart, domain);
+    }
+
     public boolean hasDomainPart() {
         return domainPart.isPresent();
     }
diff --git 
a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
 
b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
index 178823b..8bf6cd4 100644
--- 
a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
+++ 
b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
@@ -94,6 +94,10 @@ public class MappingSource implements Serializable {
         this.wildcard = wildcard;
     }
 
+    public Optional<Username> asUsername() {
+        return user;
+    }
+
     public Optional<Domain> asDomain() {
         return domain;
     }
diff --git 
a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java
 
b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java
index 97130c6..930cc58 100644
--- 
a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java
+++ 
b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java
@@ -23,6 +23,7 @@ import static org.apache.james.rrt.lib.Mapping.Type.Domain;
 
 import java.util.EnumSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Stream;
 
 import javax.inject.Inject;
@@ -59,12 +60,13 @@ public class CanSendFromImpl implements CanSendFrom {
 
     @Override
     public Stream<MailAddress> allValidFromAddressesForUser(Username user) 
throws RecipientRewriteTable.ErrorMappingException, 
RecipientRewriteTableException {
-        List<String> domains = 
relatedDomains(user).collect(Guavate.toImmutableList());
+        List<Domain> domains = 
relatedDomains(user).collect(Guavate.toImmutableList());
 
         return relatedAliases(user)
-            .flatMap(userPart -> domains.stream()
-                .map(domainPart -> userPart + "@" + domainPart)
-            .map(Throwing.<String, 
MailAddress>function(MailAddress::new).sneakyThrow()));
+            .flatMap(allowedUser -> domains.stream()
+                .map(Optional::of)
+                .map(allowedUser::withOtherDomain)
+                
.map(Throwing.function(Username::asMailAddress).sneakyThrow()));
     }
 
     private boolean emailIsAnAliasOfTheConnectedUser(Username connectedUser, 
Username fromUser) throws RecipientRewriteTable.ErrorMappingException, 
RecipientRewriteTableException {
@@ -77,24 +79,29 @@ public class CanSendFromImpl implements CanSendFrom {
             .anyMatch(alias -> alias.equals(connectedUser));
     }
 
-    private Stream<String> relatedAliases(Username user) throws 
RecipientRewriteTableException {
+    private Stream<Username> relatedAliases(Username user) throws 
RecipientRewriteTableException {
         return Stream.concat(
-            Stream.of(user.getLocalPart()),
-            recipientRewriteTable.listSources(Mapping.alias(user.asString()))
-                .map(MappingSource::getFixedUser)
+            Stream.of(user),
+            recipientRewriteTable
+                .listSources(Mapping.alias(user.asString()))
+                .map(MappingSource::asUsername)
+                .flatMap(OptionalUtils::toStream)
         );
     }
 
-    private Stream<String> relatedDomains(Username user) {
+    private Stream<Domain> relatedDomains(Username user) {
         return user.getDomainPart()
             .map(Throwing.function(this::fetchDomains).sneakyThrow())
             .orElseGet(Stream::empty);
     }
 
-    private Stream<String> fetchDomains(Domain domain) throws 
RecipientRewriteTableException {
+    private Stream<Domain> fetchDomains(Domain domain) throws 
RecipientRewriteTableException {
         return Stream.concat(
-            Stream.of(domain.asString()),
-            
recipientRewriteTable.listSources(Mapping.domain(domain)).map(MappingSource::getFixedDomain)
+          Stream.of(domain),
+          recipientRewriteTable
+              .listSources(Mapping.domain(domain))
+              .map(MappingSource::asDomain)
+              .flatMap(OptionalUtils::toStream)
         );
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to