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]
