Repository: james-project Updated Branches: refs/heads/master 81c11f96e -> 3c2e5eddb
JAMES-1942 UserProvisioningFilter should work without virtual hosting Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d5b7d84b Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d5b7d84b Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d5b7d84b Branch: refs/heads/master Commit: d5b7d84bf45d9ecc9576266eb80d2e93dccffdd6 Parents: d549535 Author: Raphael Ouazana <[email protected]> Authored: Tue Feb 14 14:56:54 2017 +0100 Committer: Raphael Ouazana <[email protected]> Committed: Tue Feb 14 14:56:54 2017 +0100 ---------------------------------------------------------------------- .../james/jmap/UserProvisioningFilter.java | 14 +++++- .../james/jmap/UserProvisioningFilterTest.java | 45 +++++++++++++++++--- 2 files changed, 52 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/d5b7d84b/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java index 726d37f..3b666a7 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java @@ -23,6 +23,7 @@ import java.util.Optional; import java.util.UUID; import javax.inject.Inject; +import javax.mail.internet.AddressException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -37,6 +38,7 @@ import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.user.api.AlreadyExistInUsersRepositoryException; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; +import org.apache.mailet.MailAddress; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Throwables; @@ -76,7 +78,15 @@ public class UserProvisioningFilter implements Filter { } private boolean needsAccountCreation(User user) throws UsersRepositoryException { - return !usersRepository.contains(user.getUserName()); + return !usersRepository.contains(getUsername(user)); + } + + private String getUsername(User user) throws UsersRepositoryException { + try { + return usersRepository.getUser(new MailAddress(user.getUserName())); + } catch (AddressException e) { + return user.getUserName(); + } } private void createAccount(User user) throws UsersRepositoryException, BadCredentialsException, MailboxException { @@ -84,7 +94,7 @@ public class UserProvisioningFilter implements Filter { } private void createUser(User user) throws UsersRepositoryException { - usersRepository.addUser(user.getUserName(), generatePassword()); + usersRepository.addUser(getUsername(user), generatePassword()); } private String generatePassword() { http://git-wip-us.apache.org/repos/asf/james-project/blob/d5b7d84b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java index b5f6964..f527385 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java @@ -21,6 +21,7 @@ package org.apache.james.jmap; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import java.io.IOException; @@ -29,29 +30,63 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.mock.MockMailboxSession; import org.apache.james.user.api.UsersRepositoryException; import org.apache.james.user.lib.mock.InMemoryUsersRepository; import org.junit.Before; import org.junit.Test; public class UserProvisioningFilterTest { + private static final String USERNAME = "username"; + private static final String MAIL = USERNAME + "@james.org"; private UserProvisioningFilter sut; private InMemoryUsersRepository usersRepository; + private HttpServletRequest request; + private HttpServletResponse response; + private FilterChain chain; @Before - public void setup() { + public void setup() throws Exception { usersRepository = new InMemoryUsersRepository(); sut = new UserProvisioningFilter(usersRepository); + request = mock(HttpServletRequest.class); + response = mock(HttpServletResponse.class); + chain = mock(FilterChain.class); } - + @Test public void filterShouldDoNothingOnNullSession() throws IOException, ServletException, UsersRepositoryException { - HttpServletRequest request = mock(HttpServletRequest.class); - HttpServletResponse response = mock(HttpServletResponse.class); - FilterChain chain = mock(FilterChain.class); sut.doFilter(request, response, chain); + verify(chain).doFilter(request, response); assertThat(usersRepository.list()).isEmpty(); } + + @Test + public void filterShouldAddUsernameWhenNoVirtualHostingAndMailboxSessionContainsUsername() throws Exception { + usersRepository.setEnableVirtualHosting(false); + MailboxSession mailboxSession = new MockMailboxSession(USERNAME); + when(request.getAttribute(AuthenticationFilter.MAILBOX_SESSION)) + .thenReturn(mailboxSession); + + sut.doFilter(request, response, chain); + + verify(chain).doFilter(request, response); + assertThat(usersRepository.list()).contains(USERNAME); + } + + @Test + public void filterShouldAddUsernameWhenNoVirtualHostingAndMailboxSessionContainsMail() throws Exception { + usersRepository.setEnableVirtualHosting(false); + MailboxSession mailboxSession = new MockMailboxSession(MAIL); + when(request.getAttribute(AuthenticationFilter.MAILBOX_SESSION)) + .thenReturn(mailboxSession); + + sut.doFilter(request, response, chain); + + verify(chain).doFilter(request, response); + assertThat(usersRepository.list()).contains(USERNAME); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
