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 ad...@apache.org on 2017/02/14 12:05:46 UTC
[01/12] james-project git commit: JAMES-1930 Introduce
administratorId configuration option to UsersRepository
Repository: james-project
Updated Branches:
refs/heads/master 42b574dcb -> d54953523
JAMES-1930 Introduce administratorId configuration option to UsersRepository
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dfb28bd0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dfb28bd0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dfb28bd0
Branch: refs/heads/master
Commit: dfb28bd07b19951facc214bfcca210cdf1b081cc
Parents: 42b574d
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Feb 8 15:34:48 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 09:16:55 2017 +0100
----------------------------------------------------------------------
.../apache/james/user/api/UsersRepository.java | 5 ++++
.../user/ldap/ReadOnlyUsersLDAPRepository.java | 21 ++++++++++++++++
.../james/user/lib/AbstractUsersRepository.java | 17 +++++++++++++
.../user/lib/AbstractUsersRepositoryTest.java | 25 ++++++++++++++++++++
4 files changed, 68 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/dfb28bd0/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
index 666fdd7..ea02cc3 100644
--- a/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
+++ b/server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
@@ -136,5 +136,10 @@ public interface UsersRepository {
* @throws UsersRepositoryException
*/
String getUser(MailAddress mailAddress) throws UsersRepositoryException;
+
+ /**
+ * Return true if the user is an admin for this repository
+ */
+ boolean isAdministrator(String username) throws UsersRepositoryException;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/dfb28bd0/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
index 6e07236..cc9eeb2 100644
--- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
+++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
@@ -54,6 +54,8 @@ import org.apache.james.util.retry.naming.ldap.RetryingLdapContext;
import org.apache.mailet.MailAddress;
import org.slf4j.Logger;
+import com.google.common.base.Optional;
+
/**
* <p>
* This repository implementation serves as a bridge between Apache James and
@@ -91,6 +93,7 @@ import org.slf4j.Logger;
* retryStartInterval="0"
* retryMaxInterval="30"
* retryIntervalScale="1000"
+ * administratorId="ldapAdmin"
* </users-store>
* </pre>
*
@@ -213,6 +216,9 @@ import org.slf4j.Logger;
* <b>readTimeout:</b> (optional) Sets property
* <code>com.sun.jndi.ldap.read.timeout</code> to the specified integer value.
* Applicable to Java 6 and above.
+ * <li>
+ * <b>administratorId:</b> (optional) User identifier of the administrator user.
+ * The administrator user is allowed to authenticate as other users.
* </ul>
*
* @see ReadOnlyLDAPUser
@@ -295,6 +301,12 @@ public class ReadOnlyUsersLDAPRepository implements UsersRepository, Configurabl
*/
private LdapContext ldapContext;
private boolean supportsVirtualHosting;
+
+ /**
+ * UserId of the administrator
+ * The administrator is allowed to log in as other users
+ */
+ private Optional<String> administratorId;
// Use a connection pool. Default is true.
private boolean useConnectionPool = true;
@@ -366,6 +378,7 @@ public class ReadOnlyUsersLDAPRepository implements UsersRepository, Configurabl
//see if there is a filter argument
filter = configuration.getString("[@filter]");
+ administratorId = Optional.fromNullable(configuration.getString("[@administratorId]"));
}
/**
@@ -770,4 +783,12 @@ public class ReadOnlyUsersLDAPRepository implements UsersRepository, Configurabl
public String getUser(MailAddress mailAddress) throws UsersRepositoryException {
return mailAddress.getLocalPart();
}
+
+ @Override
+ public boolean isAdministrator(String username) throws UsersRepositoryException {
+ if (administratorId.isPresent()) {
+ return administratorId.get().equals(username);
+ }
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/dfb28bd0/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
index 287c482..f0651fe 100644
--- a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
+++ b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
@@ -33,11 +33,15 @@ import org.apache.james.user.api.UsersRepositoryException;
import org.apache.mailet.MailAddress;
import org.slf4j.Logger;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Optional;
+
public abstract class AbstractUsersRepository implements UsersRepository, LogEnabled, Configurable {
private DomainList domainList;
private boolean virtualHosting;
private Logger logger;
+ private Optional<String> administratorId;
protected Logger getLogger() {
return logger;
@@ -57,6 +61,7 @@ public abstract class AbstractUsersRepository implements UsersRepository, LogEna
public void configure(HierarchicalConfiguration configuration) throws ConfigurationException {
virtualHosting = configuration.getBoolean("enableVirtualHosting", getDefaultVirtualHostingValue());
+ administratorId = Optional.fromNullable(configuration.getString("administratorId"));
doConfigure(configuration);
}
@@ -142,4 +147,16 @@ public abstract class AbstractUsersRepository implements UsersRepository, LogEna
return mailAddress.getLocalPart();
}
}
+
+ @VisibleForTesting void setAdministratorId(Optional<String> username) {
+ this.administratorId = username;
+ }
+
+ @Override
+ public boolean isAdministrator(String username) throws UsersRepositoryException {
+ if (administratorId.isPresent()) {
+ return administratorId.get().equals(username);
+ }
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/dfb28bd0/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
index a4908a8..2007354 100644
--- a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
+++ b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
@@ -34,6 +34,8 @@ import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
+import com.google.common.base.Optional;
+
public abstract class AbstractUsersRepositoryTest {
@@ -52,6 +54,7 @@ public abstract class AbstractUsersRepositoryTest {
private String user1;
private String user2;
private String user3;
+ private String admin;
@Before
public void setUp() throws Exception {
@@ -62,6 +65,7 @@ public abstract class AbstractUsersRepositoryTest {
user1 = login("username");
user2 = login("username2");
user3 = login("username3");
+ admin = login("admin");
}
@After
@@ -324,4 +328,25 @@ public abstract class AbstractUsersRepositoryTest {
protected void disposeUsersRepository() throws UsersRepositoryException {
LifecycleUtil.dispose(this.usersRepository);
}
+
+ @Test
+ public void isAdministratorShouldReturnFalseWhenNotConfigured() throws Exception {
+ usersRepository.setAdministratorId(Optional.<String>absent());
+
+ assertThat(usersRepository.isAdministrator(admin)).isFalse();
+ }
+
+ @Test
+ public void isAdministratorShouldReturnTrueWhenConfiguredAndUserIsAdmin() throws Exception {
+ usersRepository.setAdministratorId(Optional.of(admin));
+
+ assertThat(usersRepository.isAdministrator(admin)).isTrue();
+ }
+
+ @Test
+ public void isAdministratorShouldReturnFalseWhenConfiguredAndUserIsNotAdmin() throws Exception {
+ usersRepository.setAdministratorId(Optional.of(admin));
+
+ assertThat(usersRepository.isAdministrator(user1)).isFalse();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[09/12] james-project git commit: JAMES-1930 Implement AUTH PLAIN
delegation as part of IMAP
Posted by ad...@apache.org.
JAMES-1930 Implement AUTH PLAIN delegation as part of IMAP
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/157be0db
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/157be0db
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/157be0db
Branch: refs/heads/master
Commit: 157be0db425f59e3751ea4ebdcefe3cf4daf7ec2
Parents: 0175e31
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Feb 10 11:51:24 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 11:29:30 2017 +0100
----------------------------------------------------------------------
.../imap/api/display/HumanReadableText.java | 4 +
.../imap/processor/AbstractAuthProcessor.java | 165 +++++++++++++++----
.../imap/processor/AuthenticateProcessor.java | 49 +-----
.../james/imap/processor/LoginProcessor.java | 5 +-
4 files changed, 143 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/157be0db/protocols/imap/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java b/protocols/imap/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
index 42dba98..57a98e0 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
@@ -113,6 +113,10 @@ public class HumanReadableText {
public static final HumanReadableText COMSUME_UID_FAILED = new HumanReadableText("org.apache.james.imap.COMSUME_UID_FAILED", "failed. Failed to acquire UID.");
+ public static final HumanReadableText USER_DOES_NOT_EXIST = new HumanReadableText("org.apache.james.imap.GENERIC_FAILURE_DURING_PROCESSING", "User does not exist");
+
+ public static final HumanReadableText NOT_AN_ADMIN = new HumanReadableText("org.apache.james.imap.GENERIC_FAILURE_DURING_PROCESSING", "Not an admin");
+
public static final HumanReadableText GENERIC_FAILURE_DURING_PROCESSING = new HumanReadableText("org.apache.james.imap.GENERIC_FAILURE_DURING_PROCESSING", "processing failed.");
public static final HumanReadableText FAILURE_MAILBOX_EXISTS = new HumanReadableText("org.apache.james.imap.FAILURE_NO_SUCH_MAILBOX", "failed. Mailbox already exists.");
http://git-wip-us.apache.org/repos/asf/james-project/blob/157be0db/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
index be5460a..5e10aa6 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
@@ -31,9 +31,14 @@ import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.exception.BadCredentialsException;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.exception.MailboxExistsException;
+import org.apache.james.mailbox.exception.NotAdminException;
+import org.apache.james.mailbox.exception.UserDoesNotExistException;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+
public abstract class AbstractAuthProcessor<M extends ImapRequest> extends AbstractMailboxProcessor<M>{
private static final String ATTRIBUTE_NUMBER_OF_FAILURES = "org.apache.james.imap.processor.imap4rev1.NUMBER_OF_FAILURES";
@@ -45,57 +50,73 @@ public abstract class AbstractAuthProcessor<M extends ImapRequest> extends Abstr
super(acceptableClass, next, mailboxManager, factory);
}
- protected void doAuth(String userid, String passwd, ImapSession session, String tag, ImapCommand command, Responder responder, HumanReadableText failed) {
+ protected void doAuth(AuthenticationAttempt authenticationAttempt, ImapSession session, String tag, ImapCommand command, Responder responder, HumanReadableText failed) {
+ Preconditions.checkArgument(!authenticationAttempt.isDelegation());
try {
boolean authFailure = false;
- if (userid == null) {
+ if (authenticationAttempt.getAuthenticationId() == null) {
authFailure = true;
}
- if (authFailure == false) {
+ if (!authFailure) {
final MailboxManager mailboxManager = getMailboxManager();
try {
- final MailboxSession mailboxSession = mailboxManager.login(userid, passwd, session.getLog());
+ final MailboxSession mailboxSession = mailboxManager.login(authenticationAttempt.getAuthenticationId(),
+ authenticationAttempt.getPassword(),
+ session.getLog());
session.authenticated();
session.setAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY, mailboxSession);
- final MailboxPath inboxPath = PathConverter.forSession(session).buildFullPath(MailboxConstants.INBOX);
- if (mailboxManager.mailboxExists(inboxPath, mailboxSession)) {
- if (session.getLog().isDebugEnabled()) {
- session.getLog().debug("INBOX exists. No need to create it.");
- }
- } else {
- try {
- session.getLog().debug("INBOX does not exist. Creating it.");
- mailboxManager.createMailbox(inboxPath, mailboxSession);
- } catch (MailboxExistsException e) {
- if (session.getLog().isDebugEnabled()) {
- session.getLog().debug("Mailbox created by concurrent call. Safe to ignore this exception.");
- }
- }
- }
+ provisionInbox(session, mailboxManager, mailboxSession);
okComplete(command, tag, responder);
} catch (BadCredentialsException e) {
authFailure = true;
}
}
if (authFailure) {
- final Integer currentNumberOfFailures = (Integer) session.getAttribute(ATTRIBUTE_NUMBER_OF_FAILURES);
- final int failures;
- if (currentNumberOfFailures == null) {
- failures = 1;
- } else {
- failures = currentNumberOfFailures.intValue() + 1;
- }
- if (failures < MAX_FAILURES) {
- session.setAttribute(ATTRIBUTE_NUMBER_OF_FAILURES, failures);
- no(command, tag, responder, failed);
- } else {
- if (session.getLog().isInfoEnabled()) {
- session.getLog().info("Too many authentication failures. Closing connection.");
- }
- bye(responder, HumanReadableText.TOO_MANY_FAILURES);
- session.logout();
+ manageFailureCount(session, tag, command, responder, failed);
+ }
+ } catch (MailboxException e) {
+ if (session.getLog().isInfoEnabled()) {
+ session.getLog().info("Login failed", e);
+ }
+ no(command, tag, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
+ }
+ }
+
+ protected void doAuthWithDelegation(AuthenticationAttempt authenticationAttempt, ImapSession session, String tag, ImapCommand command, Responder responder, HumanReadableText failed) {
+ Preconditions.checkArgument(authenticationAttempt.isDelegation());
+ try {
+ boolean authFailure = false;
+ if (authenticationAttempt.getAuthenticationId() == null) {
+ authFailure = true;
+ }
+ if (!authFailure) {
+ final MailboxManager mailboxManager = getMailboxManager();
+ try {
+ final MailboxSession mailboxSession = mailboxManager.loginAsOtherUser(authenticationAttempt.getAuthenticationId(),
+ authenticationAttempt.getPassword(),
+ authenticationAttempt.getDelegateUserName().get(),
+ session.getLog());
+ session.authenticated();
+ session.setAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY, mailboxSession);
+ provisionInbox(session, mailboxManager, mailboxSession);
+ okComplete(command, tag, responder);
+ } catch (BadCredentialsException e) {
+ authFailure = true;
}
}
+ if (authFailure) {
+ manageFailureCount(session, tag, command, responder, failed);
+ }
+ } catch (UserDoesNotExistException e) {
+ if (session.getLog().isInfoEnabled()) {
+ session.getLog().info("User " + authenticationAttempt.getAuthenticationId() + " does not exist", e);
+ }
+ no(command, tag, responder, HumanReadableText.USER_DOES_NOT_EXIST);
+ } catch (NotAdminException e) {
+ if (session.getLog().isInfoEnabled()) {
+ session.getLog().info("User " + authenticationAttempt.getDelegateUserName() + " is not an admin", e);
+ }
+ no(command, tag, responder, HumanReadableText.NOT_AN_ADMIN);
} catch (MailboxException e) {
if (session.getLog().isInfoEnabled()) {
session.getLog().info("Login failed", e);
@@ -103,4 +124,78 @@ public abstract class AbstractAuthProcessor<M extends ImapRequest> extends Abstr
no(command, tag, responder, HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
}
}
+
+ private void provisionInbox(ImapSession session, MailboxManager mailboxManager, MailboxSession mailboxSession) throws MailboxException {
+ final MailboxPath inboxPath = PathConverter.forSession(session).buildFullPath(MailboxConstants.INBOX);
+ if (mailboxManager.mailboxExists(inboxPath, mailboxSession)) {
+ if (session.getLog().isDebugEnabled()) {
+ session.getLog().debug("INBOX exists. No need to create it.");
+ }
+ } else {
+ try {
+ session.getLog().debug("INBOX does not exist. Creating it.");
+ mailboxManager.createMailbox(inboxPath, mailboxSession);
+ } catch (MailboxExistsException e) {
+ if (session.getLog().isDebugEnabled()) {
+ session.getLog().debug("Mailbox created by concurrent call. Safe to ignore this exception.");
+ }
+ }
+ }
+ }
+
+ protected void manageFailureCount(ImapSession session, String tag, ImapCommand command, Responder responder, HumanReadableText failed) {
+ final Integer currentNumberOfFailures = (Integer) session.getAttribute(ATTRIBUTE_NUMBER_OF_FAILURES);
+ final int failures;
+ if (currentNumberOfFailures == null) {
+ failures = 1;
+ } else {
+ failures = currentNumberOfFailures + 1;
+ }
+ if (failures < MAX_FAILURES) {
+ session.setAttribute(ATTRIBUTE_NUMBER_OF_FAILURES, failures);
+ no(command, tag, responder, failed);
+ } else {
+ if (session.getLog().isInfoEnabled()) {
+ session.getLog().info("Too many authentication failures. Closing connection.");
+ }
+ bye(responder, HumanReadableText.TOO_MANY_FAILURES);
+ session.logout();
+ }
+ }
+
+ protected static AuthenticationAttempt delegation(String authorizeId, String authenticationId, String password) {
+ return new AuthenticationAttempt(Optional.of(authorizeId), authenticationId, password);
+ }
+
+ protected static AuthenticationAttempt noDelegation(String authenticationId, String password) {
+ return new AuthenticationAttempt(Optional.<String>absent(), authenticationId, password);
+ }
+
+ protected static class AuthenticationAttempt {
+ private final Optional<String> delegateUserName;
+ private final String authenticationId;
+ private final String password;
+
+ public AuthenticationAttempt(Optional<String> delegateUserName, String authenticationId, String password) {
+ this.delegateUserName = delegateUserName;
+ this.authenticationId = authenticationId;
+ this.password = password;
+ }
+
+ public boolean isDelegation() {
+ return delegateUserName.isPresent();
+ }
+
+ public Optional<String> getDelegateUserName() {
+ return delegateUserName;
+ }
+
+ public String getAuthenticationId() {
+ return authenticationId;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/157be0db/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
index 1abc69d..ea8324a 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
@@ -37,8 +37,6 @@ import org.apache.james.imap.message.request.IRAuthenticateRequest;
import org.apache.james.imap.message.response.AuthenticateResponse;
import org.apache.james.mailbox.MailboxManager;
-import com.google.common.base.Optional;
-
/**
* Processor which handles the AUTHENTICATE command. Only authtype of PLAIN is supported ATM.
*
@@ -103,12 +101,15 @@ public class AuthenticateProcessor extends AbstractAuthProcessor<AuthenticateReq
* @param responder
*/
protected void doPlainAuth(String initialClientResponse, ImapSession session, String tag, ImapCommand command, Responder responder) {
- AuthPlainAttempt authPlainAttempt = parseDelegationAttempt(initialClientResponse);
- // Authenticate user
- doAuth(authPlainAttempt.getAuthenticationId(), authPlainAttempt.getPassword(), session, tag, command, responder, HumanReadableText.AUTHENTICATION_FAILED);
+ AuthenticationAttempt authenticationAttempt = parseDelegationAttempt(initialClientResponse);
+ if (authenticationAttempt.isDelegation()) {
+ doAuthWithDelegation(authenticationAttempt, session, tag, command, responder, HumanReadableText.AUTHENTICATION_FAILED);
+ } else {
+ doAuth(authenticationAttempt, session, tag, command, responder, HumanReadableText.AUTHENTICATION_FAILED);
+ }
}
- private AuthPlainAttempt parseDelegationAttempt(String initialClientResponse) {
+ private AuthenticationAttempt parseDelegationAttempt(String initialClientResponse) {
String token2;
try {
@@ -161,40 +162,4 @@ public class AuthenticateProcessor extends AbstractAuthProcessor<AuthenticateReq
return Collections.unmodifiableList(caps);
}
- private static AuthPlainAttempt delegation(String authorizeId, String authenticationId, String password) {
- return new AuthPlainAttempt(Optional.of(authorizeId), authenticationId, password);
- }
-
- private static AuthPlainAttempt noDelegation(String authenticationId, String password) {
- return new AuthPlainAttempt(Optional.<String>absent(), authenticationId, password);
- }
-
- private static class AuthPlainAttempt {
- private final Optional<String> authorizeId;
- private final String authenticationId;
- private final String password;
-
- private AuthPlainAttempt(Optional<String> authorizeId, String authenticationId, String password) {
- this.authorizeId = authorizeId;
- this.authenticationId = authenticationId;
- this.password = password;
- }
-
- public boolean isDelegation() {
- return authorizeId.isPresent();
- }
-
- public Optional<String> getAuthorizeId() {
- return authorizeId;
- }
-
- public String getAuthenticationId() {
- return authenticationId;
- }
-
- public String getPassword() {
- return password;
- }
- }
-
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/157be0db/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
index 3e824e1..4837446 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
@@ -48,13 +48,12 @@ public class LoginProcessor extends AbstractAuthProcessor<LoginRequest> implemen
* org.apache.james.imap.api.ImapCommand, org.apache.james.imap.api.process.ImapProcessor.Responder)
*/
protected void doProcess(LoginRequest request, ImapSession session, String tag, ImapCommand command, Responder responder) {
- final String userid = request.getUserid();
- final String passwd = request.getPassword();
// check if the login is allowed with LOGIN command. See IMAP-304
if (session.isPlainAuthDisallowed() && session.isTLSActive() == false) {
no(command, tag, responder, HumanReadableText.DISABLED_LOGIN);
} else {
- doAuth(userid, passwd, session, tag, command, responder, HumanReadableText.INVALID_LOGIN);
+ doAuth(noDelegation(request.getUserid(), request.getPassword()),
+ session, tag, command, responder, HumanReadableText.INVALID_LOGIN);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[03/12] james-project git commit: JAMES-1930 Introduce Authorizator
to check users authorizations about delegation
Posted by ad...@apache.org.
JAMES-1930 Introduce Authorizator to check users authorizations about delegation
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8b52a2b8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8b52a2b8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8b52a2b8
Branch: refs/heads/master
Commit: 8b52a2b80c3d5e325eead26c3ab7c3d9be233036
Parents: dfb28bd
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Feb 8 17:54:26 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 11:28:19 2017 +0100
----------------------------------------------------------------------
.../apache/james/mailbox/MailboxManager.java | 28 ++++++++-
.../cassandra/CassandraMailboxManager.java | 20 ++++--
.../cassandra/CassandraMailboxManagerTest.java | 6 +-
.../cassandra/CassandraTestSystemFixture.java | 3 +-
.../CassandraMailboxManagerAttachmentTest.java | 6 +-
.../ElasticSearchIntegrationTest.java | 2 +
.../mailbox/hbase/HBaseMailboxManager.java | 9 +--
.../resources/META-INF/spring/mailbox-hbase.xml | 7 ++-
.../mailbox/hbase/HBaseMailboxManagerTest.java | 7 ++-
.../james/mailbox/jcr/JCRMailboxManager.java | 9 +--
.../resources/META-INF/spring/mailbox-jcr.xml | 7 ++-
.../mailbox/jcr/JCRMailboxManagerTest.java | 6 +-
.../james/mailbox/jpa/JPAMailboxManager.java | 5 +-
.../jpa/openjpa/OpenJPAMailboxManager.java | 13 ++--
.../resources/META-INF/spring/mailbox-jpa.xml | 9 +--
.../mailbox/jpa/JPAMailboxManagerTest.java | 6 +-
.../search/LuceneMessageSearchIndexTest.java | 2 +
.../META-INF/spring/mailbox-maildir.xml | 15 ++---
.../maildir/MaildirMailboxManagerTests.java | 6 +-
.../inmemory/InMemoryMailboxManager.java | 15 ++---
.../META-INF/spring/mailbox-memory.xml | 15 ++---
.../inmemory/InMemoryMailboxManagerTest.java | 3 +-
.../MessageIdManagerTestSystemProvider.java | 4 +-
.../InMemoryMailboxManagerAttachmentTest.java | 6 +-
.../manager/InMemoryIntegrationResources.java | 8 ++-
.../search/SimpleMessageSearchIndexTest.java | 2 +
.../james/mailbox/spring/NoAuthorizator.java | 30 +++++++++
.../james/mailbox/spring/SpringMailbox.java | 2 +-
.../META-INF/spring/mailbox-no-authorizator.xml | 28 +++++++++
mailbox/src/site/xdoc/mailbox-store.xml | 2 +-
.../james/mailbox/store/Authorizator.java | 29 +++++++++
.../james/mailbox/store/FakeAuthorizator.java | 39 ++++++++++++
.../mailbox/store/StoreMailboxManager.java | 30 ++++++---
.../StoreMailboxManagerAnnotationTest.java | 3 +-
.../mailbox/store/StoreMailboxManagerTest.java | 49 +++++++++++++--
.../james/mailbox/copier/MailboxCopierTest.java | 7 +++
.../cassandra/host/CassandraHostSystem.java | 5 +-
.../host/ElasticSearchHostSystem.java | 3 +-
.../imapmailbox/hbase/host/HBaseHostSystem.java | 4 +-
.../InMemoryEventAsynchronousHostSystem.java | 3 +-
.../inmemory/host/InMemoryHostSystem.java | 3 +-
.../mpt/imapmailbox/jcr/host/JCRHostSystem.java | 3 +-
.../mpt/imapmailbox/jpa/host/JPAHostSystem.java | 3 +-
.../host/LuceneSearchHostSystem.java | 3 +-
.../maildir/host/MaildirHostSystem.java | 3 +-
.../base/MailboxEventAnalyserTest.java | 6 ++
.../modules/mailbox/CassandraMailboxModule.java | 4 ++
.../james/modules/mailbox/JPAMailboxModule.java | 4 ++
.../modules/mailbox/MemoryMailboxModule.java | 4 ++
server/container/mailbox-adapter/pom.xml | 21 ++++---
.../store/UserRepositoryAuthorizator.java | 58 +++++++++++++++++
.../adapter/mailbox/MailboxManagementTest.java | 2 +
.../store/UserRepositoryAuthorizatorTest.java | 65 ++++++++++++++++++++
.../james/spring-mailbox-authorizator.xml | 32 ++++++++++
.../org/apache/james/spring-mailbox-hbase.xml | 7 ++-
.../META-INF/org/apache/james/spring-server.xml | 8 +++
...ltMailboxesProvisioningFilterThreadTest.java | 5 ++
.../apache/james/pop3server/POP3ServerTest.java | 7 +++
.../routes/UserMailboxesRoutesTest.java | 1 +
59 files changed, 586 insertions(+), 106 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index d152466..0cf3e1a 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -273,7 +273,7 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport {
/**
* Autenticates the given user against the given password.<br>
- * When authentic and authorized, a session will be supplied
+ * When authenticated and authorized, a session will be supplied
*
* @param userid
* user name
@@ -281,16 +281,38 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport {
* password supplied
* @param log
* context sensitive log
- * @return a <code>MailboxSession</code> when the user is authentic and
+ * @return a <code>MailboxSession</code> when the user is authenticated and
* authorized to access
* @throws BadCredentialsException
- * when system access is denighed for the given user
+ * when system access is denied for the given user
* @throws MailboxException
* when the creation fails for other reasons
*/
MailboxSession login(String userid, String passwd, Logger log) throws BadCredentialsException, MailboxException;
/**
+ * Autenticates the given administrator against the given password,
+ * then switch to an other user<br>
+ * When authenticated and authorized, a session for the other user will be supplied
+ *
+ * @param adminUserId
+ * user name of the admin user, matching the credentials
+ * @param passwd
+ * password supplied for the admin user
+ * @param otherUserId
+ * user name of the real user
+ * @param log
+ * context sensitive log
+ * @return a <code>MailboxSession</code> for the real user
+ * when the admin is authenticated and authorized to access
+ * @throws BadCredentialsException
+ * when system access is denied for the given user
+ * @throws MailboxException
+ * when the creation fails for other reasons
+ */
+ MailboxSession loginAsOtherUser(String adminUserId, String passwd, String otherUserId, Logger log) throws BadCredentialsException, MailboxException;
+
+ /**
* <p>
* Logs the session out, freeing any resources. Clients who open session
* should make best efforts to call this when the session is closed.
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index 5175bff..c1cb183 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.SimpleMailboxACL;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
@@ -52,11 +53,12 @@ public class CassandraMailboxManager extends StoreMailboxManager {
private final MailboxPathLocker locker;
@Inject
- public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, Authenticator authenticator,
+ public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory,
MailboxEventDispatcher mailboxEventDispatcher, DelegatingMailboxListener delegatingMailboxListener) {
super(mapperFactory,
authenticator,
+ authorizator,
locker,
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
@@ -69,10 +71,11 @@ public class CassandraMailboxManager extends StoreMailboxManager {
this.locker = locker;
}
- public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, Authenticator authenticator,
+ public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory) {
super(mapperFactory,
authenticator,
+ authorizator,
locker,
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
@@ -81,9 +84,18 @@ public class CassandraMailboxManager extends StoreMailboxManager {
this.locker = locker;
}
- public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, MessageParser messageParser,
+ public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
+ MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, MessageParser messageParser,
MessageId.Factory messageIdFactory, int limitOfAnnotations, int limitAnnotationSize) {
- super(mapperFactory, authenticator, aclResolver, groupMembershipResolver, messageParser, messageIdFactory, limitOfAnnotations, limitAnnotationSize);
+ super(mapperFactory,
+ authenticator,
+ authorizator,
+ aclResolver,
+ groupMembershipResolver,
+ messageParser,
+ messageIdFactory,
+ limitOfAnnotations,
+ limitAnnotationSize);
this.locker = locker;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
index caadf4b..281dbf9 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
@@ -42,6 +42,8 @@ import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
import org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule;
import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.NoMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
import org.junit.runner.RunWith;
@@ -98,7 +100,9 @@ public class CassandraMailboxManagerTest {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- CassandraMailboxManager manager = new CassandraMailboxManager(mapperFactory, null, new NoMailboxPathLocker(), aclResolver, groupMembershipResolver,
+ Authenticator noAuthenticator = null;
+ Authorizator noAuthorizator = null;
+ CassandraMailboxManager manager = new CassandraMailboxManager(mapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(), aclResolver, groupMembershipResolver,
messageParser, messageIdFactory, LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
try {
manager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index 0999c8e..c466e93 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -41,6 +41,7 @@ import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
import org.apache.james.mailbox.quota.QuotaManager;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.NoMailboxPathLocker;
import org.apache.james.mailbox.store.StoreMessageIdManager;
import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
@@ -82,7 +83,7 @@ public class CassandraTestSystemFixture {
}
public static CassandraMailboxManager createMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory) throws Exception{
- CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, mock(Authenticator.class),
+ CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, mock(Authenticator.class), mock(Authorizator.class),
new NoMailboxPathLocker(), new MessageParser(), new CassandraMessageId.Factory());
cassandraMailboxManager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index 93228aa..6c717ac 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -38,6 +38,7 @@ import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
import org.apache.james.mailbox.store.AbstractMailboxManagerAttachmentTest;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.NoMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -70,12 +71,13 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
new CassandraMailboxCounterDAO(cassandra.getConf()),
new CassandraMailboxRecentsDAO(cassandra.getConf()));
Authenticator noAuthenticator = null;
- mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new NoMailboxPathLocker(), new MessageParser(), messageIdFactory);
+ Authorizator noAuthorizator = null;
+ mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(), new MessageParser(), messageIdFactory);
mailboxManager.init();
MessageParser failingMessageParser = mock(MessageParser.class);
when(failingMessageParser.retrieveAttachments(any()))
.thenThrow(new RuntimeException("Message parser set to fail"));
- parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new NoMailboxPathLocker(), failingMessageParser, messageIdFactory);
+ parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(), failingMessageParser, messageIdFactory);
parseFailingMailboxManager.init();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index 92b2331..e8e07d5 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
@@ -93,6 +94,7 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
storeMailboxManager = new InMemoryMailboxManager(
mapperFactory,
new FakeAuthenticator(),
+ new FakeAuthorizator(),
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
index baae851..76c83e5 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
@@ -30,6 +30,7 @@ import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreMessageManager;
@@ -43,16 +44,16 @@ import org.apache.james.mailbox.store.transaction.TransactionalMapper;
*/
public class HBaseMailboxManager extends StoreMailboxManager {
- public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory, Authenticator authenticator,
+ public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
MessageParser messageParser, MessageId.Factory messageIdFactory) {
- super(mapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ super(mapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
}
- public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory, Authenticator authenticator,
+ public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
MessageParser messageParser, MessageId.Factory messageIdFactory) {
- super(mapperFactory, authenticator, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ super(mapperFactory, authenticator, authorizator, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/hbase/src/main/resources/META-INF/spring/mailbox-hbase.xml
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/resources/META-INF/spring/mailbox-hbase.xml b/mailbox/hbase/src/main/resources/META-INF/spring/mailbox-hbase.xml
index 5fe31b8..315a1b5 100644
--- a/mailbox/hbase/src/main/resources/META-INF/spring/mailbox-hbase.xml
+++ b/mailbox/hbase/src/main/resources/META-INF/spring/mailbox-hbase.xml
@@ -40,9 +40,10 @@
<bean id="hbase-mailboxmanager" class="org.apache.james.mailbox.hbase.HBaseMailboxManager" init-method="init">
<constructor-arg index="0" ref="hbase-sessionMapperFactory"/>
<constructor-arg index="1" ref="authenticator"/>
- <constructor-arg index="2" ref="hbase-locker"/>
- <constructor-arg index="3" ref="aclResolver"/>
- <constructor-arg index="4" ref="groupMembershipResolver"/>
+ <constructor-arg index="2" ref="authorizator"/>
+ <constructor-arg index="3" ref="hbase-locker"/>
+ <constructor-arg index="4" ref="aclResolver"/>
+ <constructor-arg index="5" ref="groupMembershipResolver"/>
<property name="quotaManager" ref="quotaManager"/>
<property name="maxQuotaManager" ref="maxQuotaManager"/>
<property name="quotaRootResolver" ref="quotaRootResolver"/>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java
index 7cf8f74..f0d76ce 100644
--- a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java
+++ b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java
@@ -36,6 +36,8 @@ import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.hbase.mail.HBaseModSeqProvider;
import org.apache.james.mailbox.hbase.mail.HBaseUidProvider;
import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
import org.junit.runner.RunWith;
@@ -64,8 +66,11 @@ public class HBaseMailboxManagerTest {
HBaseMailboxSessionMapperFactory mapperFactory = new HBaseMailboxSessionMapperFactory(CLUSTER.getConf(),
uidProvider, modSeqProvider, messageIdFactory);
+ Authenticator noAuthenticator = null;
+ Authorizator noAuthorizator = null;
HBaseMailboxManager manager = new HBaseMailboxManager(mapperFactory,
- null,
+ noAuthenticator,
+ noAuthorizator,
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
new MessageParser(),
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
index 2e0c26d..9efe0ec 100644
--- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
+++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
@@ -29,6 +29,7 @@ import org.apache.james.mailbox.jcr.mail.model.JCRMailbox;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreMessageManager;
@@ -45,16 +46,16 @@ public class JCRMailboxManager extends StoreMailboxManager implements JCRImapCon
private final Logger logger = LoggerFactory.getLogger(JCRMailboxManager.class);
- public JCRMailboxManager(JCRMailboxSessionMapperFactory mapperFactory, Authenticator authenticator,
+ public JCRMailboxManager(JCRMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
MessageParser messageParser, MessageId.Factory messageIdFactory) {
- this(mapperFactory, authenticator, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ this(mapperFactory, authenticator, authorizator, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
}
- public JCRMailboxManager(JCRMailboxSessionMapperFactory mapperFactory, Authenticator authenticator,
+ public JCRMailboxManager(JCRMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
MessageParser messageParser, MessageId.Factory messageIdFactory) {
- super(mapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ super(mapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/jcr/src/main/resources/META-INF/spring/mailbox-jcr.xml
----------------------------------------------------------------------
diff --git a/mailbox/jcr/src/main/resources/META-INF/spring/mailbox-jcr.xml b/mailbox/jcr/src/main/resources/META-INF/spring/mailbox-jcr.xml
index 3f4ea84..ccc7451 100644
--- a/mailbox/jcr/src/main/resources/META-INF/spring/mailbox-jcr.xml
+++ b/mailbox/jcr/src/main/resources/META-INF/spring/mailbox-jcr.xml
@@ -30,9 +30,10 @@
<bean id="jcr-mailboxmanager" class="org.apache.james.mailbox.jcr.JCRMailboxManager" init-method="init">
<constructor-arg index="0" ref="jcr-sessionMapperFactory"/>
<constructor-arg index="1" ref="authenticator"/>
- <constructor-arg index="2" ref="jcr-locker"/>
- <constructor-arg index="3" ref="aclResolver"/>
- <constructor-arg index="4" ref="groupMembershipResolver"/>
+ <constructor-arg index="2" ref="authorizator"/>
+ <constructor-arg index="3" ref="jcr-locker"/>
+ <constructor-arg index="4" ref="aclResolver"/>
+ <constructor-arg index="5" ref="groupMembershipResolver"/>
<property name="quotaManager" ref="quotaManager"/>
<property name="quotaRootResolver" ref="quotaRootResolver"/>
<property name="quotaUpdater" ref="quotaUpdater"/>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java b/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
index ce48e91..7fda2a6 100644
--- a/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
+++ b/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
@@ -37,6 +37,8 @@ import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.jcr.mail.JCRModSeqProvider;
import org.apache.james.mailbox.jcr.mail.JCRUidProvider;
+import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -88,7 +90,9 @@ public class JCRMailboxManagerTest extends MailboxManagerTest<JCRMailboxManager>
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- JCRMailboxManager manager = new JCRMailboxManager(mf, null, locker, aclResolver, groupMembershipResolver,
+ Authenticator noAuthenticator = null;
+ Authorizator noAuthorizator = null;
+ JCRMailboxManager manager = new JCRMailboxManager(mf, noAuthenticator, noAuthorizator, locker, aclResolver, groupMembershipResolver,
messageParser, new DefaultMessageId.Factory());
try {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
index 11a4578..3754b78 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
@@ -30,6 +30,7 @@ import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -41,9 +42,9 @@ import org.apache.james.mailbox.store.transaction.TransactionalMapper;
public abstract class JPAMailboxManager extends StoreMailboxManager {
public JPAMailboxManager(JPAMailboxSessionMapperFactory mailboxSessionMapperFactory,
- final Authenticator authenticator, MailboxPathLocker locker, MailboxACLResolver aclResolver,
+ Authenticator authenticator, Authorizator authorizator, MailboxPathLocker locker, MailboxACLResolver aclResolver,
GroupMembershipResolver groupMembershipResolver, MessageParser messageParser, MessageId.Factory messageIdFactory) {
- super(mailboxSessionMapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ super(mailboxSessionMapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
index 514a606..f8a2dbb 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
@@ -33,6 +33,7 @@ import org.apache.james.mailbox.jpa.mail.model.openjpa.EncryptDecryptHelper;
import org.apache.james.mailbox.jpa.openjpa.OpenJPAMessageManager.AdvancedFeature;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -46,10 +47,10 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
private final AdvancedFeature feature;
- public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, Authenticator authenticator,
+ public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, boolean useStreaming, MailboxACLResolver aclResolver,
GroupMembershipResolver groupMembershipResolver, MessageParser messageParser, MessageId.Factory messageIdFactory) {
- super(mapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ super(mapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
if (useStreaming) {
feature = AdvancedFeature.Streaming;
} else {
@@ -57,10 +58,10 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
}
}
- public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, Authenticator authenticator,
+ public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, String encryptPass, MailboxACLResolver aclResolver,
GroupMembershipResolver groupMembershipResolver, MessageParser messageParser, MessageId.Factory messageIdFactory) {
- super(mapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ super(mapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
if (encryptPass != null) {
EncryptDecryptHelper.init(encryptPass);
feature = AdvancedFeature.Encryption;
@@ -70,10 +71,10 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
}
@Inject
- public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, Authenticator authenticator,
+ public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
MessageParser messageParser, MessageId.Factory messageIdFactory) {
- this(mapperFactory, authenticator, new JVMMailboxPathLocker(), false, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ this(mapperFactory, authenticator, authorizator, new JVMMailboxPathLocker(), false, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
index a4fa05d..6fc298d 100644
--- a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
+++ b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
@@ -34,10 +34,11 @@
<bean id="jpa-mailboxmanager" class="org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager" init-method="init">
<constructor-arg index="0" ref="jpa-sessionMapperFactory"/>
<constructor-arg index="1" ref="authenticator"/>
- <constructor-arg index="2" ref="aclResolver"/>
- <constructor-arg index="3" ref="groupMembershipResolver"/>
- <constructor-arg index="4" ref="messageParser"/>
- <constructor-arg index="5" ref="messageIdFactory"/>
+ <constructor-arg index="2" ref="authorizator"/>
+ <constructor-arg index="3" ref="aclResolver"/>
+ <constructor-arg index="4" ref="groupMembershipResolver"/>
+ <constructor-arg index="5" ref="messageParser"/>
+ <constructor-arg index="6" ref="messageIdFactory"/>
<property name="quotaManager" ref="quotaManager"/>
<property name="quotaRootResolver" ref="quotaRootResolver"/>
<property name="quotaUpdater" ref="quotaUpdater"/>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
index f9d19dc..64e7ecb 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
@@ -30,6 +30,8 @@ import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
+import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -67,7 +69,9 @@ public class JPAMailboxManagerTest {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- openJPAMailboxManager = new OpenJPAMailboxManager(mf, null, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
+ Authenticator noAuthenticator = null;
+ Authorizator noAuthorizator = null;
+ openJPAMailboxManager = new OpenJPAMailboxManager(mf, noAuthenticator, noAuthorizator, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
try {
openJPAMailboxManager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
index 62ce25f..210bd98 100644
--- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
+++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
@@ -27,6 +27,7 @@ import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
import org.apache.james.mailbox.model.TestMessageId;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -47,6 +48,7 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
storeMailboxManager = new InMemoryMailboxManager(
mapperFactory,
new FakeAuthenticator(),
+ new FakeAuthorizator(),
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml b/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
index 0c00e7f..66f65c8 100644
--- a/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
+++ b/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
@@ -36,13 +36,14 @@
<bean id="maildir-mailboxmanager" class="org.apache.james.mailbox.store.StoreMailboxManager" init-method="init">
<constructor-arg index="0" ref="maildir-sessionMapperFactory"/>
<constructor-arg index="1" ref="authenticator"/>
- <constructor-arg index="2" ref="maildir-locker"/>
- <constructor-arg index="3" ref="aclResolver"/>
- <constructor-arg index="4" ref="groupMembershipResolver"/>
- <constructor-arg index="5" ref="messageParser"/>
- <constructor-arg index="6" ref="messageIdFactory" />
- <constructor-arg index="7" ref="dispatcher" />
- <constructor-arg index="8" ref="delegating-listener" />
+ <constructor-arg index="2" ref="authorizator"/>
+ <constructor-arg index="3" ref="maildir-locker"/>
+ <constructor-arg index="4" ref="aclResolver"/>
+ <constructor-arg index="5" ref="groupMembershipResolver"/>
+ <constructor-arg index="6" ref="messageParser"/>
+ <constructor-arg index="7" ref="messageIdFactory" />
+ <constructor-arg index="8" ref="dispatcher" />
+ <constructor-arg index="9" ref="delegating-listener" />
<!-- <property name="messageSearchIndex" ref="lazyIndex"/> -->
<property name="quotaManager" ref="quotaManager"/>
<property name="quotaRootResolver" ref="quotaRootResolver"/>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java
index 2c3a13d..85875b0 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java
@@ -27,6 +27,8 @@ import org.apache.james.mailbox.acl.MailboxACLResolver;
import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
@@ -59,7 +61,9 @@ public class MaildirMailboxManagerTests {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- StoreMailboxManager manager = new StoreMailboxManager(mf, null, new JVMMailboxPathLocker(), aclResolver,
+ Authenticator noAuthenticator = null;
+ Authorizator noAuthorizator = null;
+ StoreMailboxManager manager = new StoreMailboxManager(mf, noAuthenticator, noAuthorizator, new JVMMailboxPathLocker(), aclResolver,
groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
manager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index 5793c1a..a37b43d 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -31,6 +31,7 @@ import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreMessageManager;
@@ -42,25 +43,25 @@ import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
public class InMemoryMailboxManager extends StoreMailboxManager {
@Inject
- public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator,
+ public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
MessageParser messageParser, MessageId.Factory messageIdFactory, MailboxEventDispatcher dispatcher,
DelegatingMailboxListener delegatingMailboxListener) {
- super(mailboxSessionMapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
+ super(mailboxSessionMapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE, dispatcher,
delegatingMailboxListener);
}
- public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator,
+ public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
MessageParser messageParser, MessageId.Factory messageIdFactory) {
- super(mailboxSessionMapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ super(mailboxSessionMapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
}
- public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, MailboxACLResolver aclResolver,
- GroupMembershipResolver groupMembershipResolver, MessageParser messageParser,
+ public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
+ MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, MessageParser messageParser,
MessageId.Factory messageIdFactory, int limitOfAnnotations, int limitAnnotationSize) {
- super(mailboxSessionMapperFactory, authenticator, aclResolver, groupMembershipResolver, messageParser, messageIdFactory, limitOfAnnotations, limitAnnotationSize);
+ super(mailboxSessionMapperFactory, authenticator, authorizator, aclResolver, groupMembershipResolver, messageParser, messageIdFactory, limitOfAnnotations, limitAnnotationSize);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml b/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
index 41205db..d75ced9 100644
--- a/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
+++ b/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
@@ -34,13 +34,14 @@
<bean id="memory-mailboxManager" class="org.apache.james.mailbox.store.StoreMailboxManager" init-method="init">
<constructor-arg index="0" ref="memory-sessionMapperFactory"/>
<constructor-arg index="1" ref="authenticator"/>
- <constructor-arg index="2" ref="memory-locker"/>
- <constructor-arg index="3" ref="aclResolver"/>
- <constructor-arg index="4" ref="groupMembershipResolver"/>
- <constructor-arg index="5" ref="messageParser"/>
- <constructor-arg index="6" ref="messageIdFactory" />
- <constructor-arg index="7" ref="dispatcher" />
- <constructor-arg index="8" ref="delegating-listener" />
+ <constructor-arg index="2" ref="authorizator"/>
+ <constructor-arg index="3" ref="memory-locker"/>
+ <constructor-arg index="4" ref="aclResolver"/>
+ <constructor-arg index="5" ref="groupMembershipResolver"/>
+ <constructor-arg index="6" ref="messageParser"/>
+ <constructor-arg index="7" ref="messageIdFactory" />
+ <constructor-arg index="8" ref="dispatcher" />
+ <constructor-arg index="9" ref="delegating-listener" />
<!-- <property name="messageSearchIndex" ref="lazyIndex"/> -->
<property name="quotaManager" ref="quotaManager"/>
<property name="quotaRootResolver" ref="quotaRootResolver"/>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
index fe0160c..f6bb97c 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
@@ -26,6 +26,7 @@ import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
import org.junit.runner.RunWith;
import org.xenei.junit.contract.Contract;
@@ -51,7 +52,7 @@ public class InMemoryMailboxManagerTest {
InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
- InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, new FakeAuthenticator(),
+ InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, new FakeAuthenticator(), new FakeAuthorizator(),
aclResolver, groupMembershipResolver, messageParser, messageIdFactory, LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
try {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
index 6edc24f..cd54d43 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
@@ -26,6 +26,7 @@ import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.manager.MailboxManagerFixture;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.CombinationManagerTestSystem;
import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -56,9 +57,10 @@ public class MessageIdManagerTestSystemProvider {
InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
FakeAuthenticator authenticator = new FakeAuthenticator();
+ FakeAuthorizator authorizator = new FakeAuthorizator();
authenticator.addUser(MailboxManagerFixture.USER, PASSWORD);
authenticator.addUser(MailboxManagerFixture.OTHER_USER, PASSWORD);
- InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, authenticator,
+ InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, authenticator, authorizator,
aclResolver, groupMembershipResolver, messageParser, messageIdFactory, LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
try {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
index 614c5cf..df422f0 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
@@ -33,6 +33,7 @@ import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.AbstractMailboxManagerAttachmentTest;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.NoMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -46,14 +47,15 @@ public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManager
public InMemoryMailboxManagerAttachmentTest() throws Exception {
mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
Authenticator noAuthenticator = null;
+ Authorizator noAuthorizator = null;
MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
- mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new NoMailboxPathLocker(),
+ mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(),
new UnionMailboxACLResolver(), null, new MessageParser(), messageIdFactory);
mailboxManager.init();
MessageParser failingMessageParser = mock(MessageParser.class);
when(failingMessageParser.retrieveAttachments(any(InputStream.class)))
.thenThrow(new RuntimeException("Message parser set to fail"));
- parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new NoMailboxPathLocker(),
+ parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(),
new UnionMailboxACLResolver(), null, failingMessageParser, messageIdFactory);
parseFailingMailboxManager.init();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index 835b6bc..cc7d22d 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -37,6 +37,7 @@ import org.apache.james.mailbox.quota.MaxQuotaManager;
import org.apache.james.mailbox.quota.QuotaManager;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.NoMailboxPathLocker;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -52,12 +53,13 @@ public class InMemoryIntegrationResources implements IntegrationResources {
@Override
public MailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver) throws MailboxException {
- FakeAuthenticator mockAuthenticator = new FakeAuthenticator();
- mockAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
+ FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
+ fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
final StoreMailboxManager manager = new InMemoryMailboxManager(
mailboxSessionMapperFactory,
- mockAuthenticator,
+ fakeAuthenticator,
+ new FakeAuthorizator(),
new NoMailboxPathLocker(),
new UnionMailboxACLResolver(),
groupMembershipResolver,
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
index c005b9c..694778b 100644
--- a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
+++ b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
@@ -26,6 +26,7 @@ import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -44,6 +45,7 @@ public class SimpleMessageSearchIndexTest extends AbstractMessageSearchIndexTest
storeMailboxManager = new InMemoryMailboxManager(
mapperFactory,
new FakeAuthenticator(),
+ new FakeAuthorizator(),
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java
new file mode 100644
index 0000000..88500c3
--- /dev/null
+++ b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java
@@ -0,0 +1,30 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.mailbox.spring;
+
+import org.apache.james.mailbox.store.Authorizator;
+
+public class NoAuthorizator implements Authorizator {
+
+ @Override
+ public boolean canLoginAsOtherUser(String userId, String otherUserId) {
+ return false;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
index 176d22d..db85ad8 100644
--- a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
+++ b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
@@ -27,7 +27,7 @@ public class SpringMailbox {
public SpringMailbox() {
applicationContext = new ClassPathXmlApplicationContext("META-INF/spring/spring-mailbox.xml",
- "META-INF/spring/mailbox-authenticator-anonymous.xml", "META-INF/spring/quota.xml",
+ "META-INF/spring/mailbox-authenticator-anonymous.xml", "META-INF/spring/mailbox-no-authorizator.xml", "META-INF/spring/quota.xml",
"META-INF/spring/quota-alias.xml", "META-INF/spring/event-system.xml", "META-INF/spring/event-alias.xml");
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/spring/src/main/resources/META-INF/spring/mailbox-no-authorizator.xml
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/resources/META-INF/spring/mailbox-no-authorizator.xml b/mailbox/spring/src/main/resources/META-INF/spring/mailbox-no-authorizator.xml
new file mode 100644
index 0000000..3373a7e
--- /dev/null
+++ b/mailbox/spring/src/main/resources/META-INF/spring/mailbox-no-authorizator.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean id="authorizator" class="org.apache.james.mailbox.spring.NoAuthorizator"/>
+
+</beans>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/src/site/xdoc/mailbox-store.xml
----------------------------------------------------------------------
diff --git a/mailbox/src/site/xdoc/mailbox-store.xml b/mailbox/src/site/xdoc/mailbox-store.xml
index c8d882f..64b0ad9 100644
--- a/mailbox/src/site/xdoc/mailbox-store.xml
+++ b/mailbox/src/site/xdoc/mailbox-store.xml
@@ -45,7 +45,7 @@ Image is no more in line with trunk
<subsection name="Store Mailbox Manager">
<p>All public and protected methods that can be used by a Mailbox Manager implementations.</p>
<p>You need to instantiate the StoreMailboxManager with a mailboxSessionMapperFactory,
- an authenticator, a uidProvider and a mailboxPathlocker.</p>
+ an authenticator, an authorizator, a uidProvider and a mailboxPathlocker.</p>
<!--
Image is no more in line with trunk
<p><img src="images/uml/org-apache-james-mailbox-store-mailboxmanager.png"/></p>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authorizator.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authorizator.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authorizator.java
new file mode 100644
index 0000000..4710e34
--- /dev/null
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authorizator.java
@@ -0,0 +1,29 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mailbox.store;
+
+/**
+ * Authenticates user credentials.
+ */
+public interface Authorizator {
+
+ boolean canLoginAsOtherUser(String userId, String otherUserId);
+}
+
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java
new file mode 100644
index 0000000..4e15ed7
--- /dev/null
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java
@@ -0,0 +1,39 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.mailbox.store;
+
+import java.util.List;
+
+import com.google.common.collect.ImmutableList;
+
+public class FakeAuthorizator implements Authorizator {
+
+ private List<String> adminIds;
+
+ public FakeAuthorizator(String... adminIds) {
+ this.adminIds = ImmutableList.copyOf(adminIds);
+
+ }
+
+ @Override
+ public boolean canLoginAsOtherUser(String userId, String otherUserId) {
+ return adminIds.contains(userId);
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 9d14622..705fd8d 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -104,6 +104,8 @@ public class StoreMailboxManager implements MailboxManager {
private final Authenticator authenticator;
+ private Authorizator authorizator;
+
private final MailboxACLResolver aclResolver;
private final GroupMembershipResolver groupMembershipResolver;
@@ -136,39 +138,40 @@ public class StoreMailboxManager implements MailboxManager {
private final int limitAnnotationSize;
@Inject
- public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator,
+ public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
MessageParser messageParser, MessageId.Factory messageIdFactory, MailboxEventDispatcher mailboxEventDispatcher,
DelegatingMailboxListener delegatingListener) {
- this(mailboxSessionMapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
+ this(mailboxSessionMapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE, mailboxEventDispatcher, delegatingListener);
}
- public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator,
+ public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver,
MessageParser messageParser, MessageId.Factory messageIdFactory) {
- this(mailboxSessionMapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
+ this(mailboxSessionMapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
}
- public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator,
+ public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, MessageParser messageParser,
MessageId.Factory messageIdFactory, int limitOfAnnotations, int limitAnnotationSize) {
- this(mailboxSessionMapperFactory, authenticator, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
+ this(mailboxSessionMapperFactory, authenticator, authorizator, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
limitOfAnnotations, limitAnnotationSize);
}
- public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator,
+ public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, MessageParser messageParser,
MessageId.Factory messageIdFactory, int limitOfAnnotations, int limitAnnotationSize) {
- this(mailboxSessionMapperFactory, authenticator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
+ this(mailboxSessionMapperFactory, authenticator, authorizator, locker, aclResolver, groupMembershipResolver, messageParser, messageIdFactory,
limitOfAnnotations, limitAnnotationSize, null, null);
}
- public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator,
+ public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
MailboxPathLocker locker, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, MessageParser messageParser,
MessageId.Factory messageIdFactory, int limitOfAnnotations, int limitAnnotationSize, MailboxEventDispatcher mailboxEventDispatcher, DelegatingMailboxListener delegatingListener) {
this.authenticator = authenticator;
+ this.authorizator = authorizator;
this.locker = locker;
this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
this.aclResolver = aclResolver;
@@ -417,6 +420,15 @@ public class StoreMailboxManager implements MailboxManager {
}
}
+ @Override
+ public MailboxSession loginAsOtherUser(String adminUserid, String passwd, String otherUserId, Logger log) throws BadCredentialsException, MailboxException {
+ if (login(adminUserid, passwd) && authorizator.canLoginAsOtherUser(adminUserid, otherUserId)) {
+ return createSystemSession(otherUserId, log);
+ } else {
+ throw new BadCredentialsException();
+ }
+ }
+
/**
* Close the {@link MailboxSession} if not null
*/
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
index 2dd1df7..08e5837 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
@@ -71,6 +71,7 @@ public class StoreMailboxManagerAnnotationTest {
@Mock private MailboxSessionMapperFactory mailboxSessionMapperFactory;
@Mock private Authenticator authenticator;
+ @Mock private Authorizator authorizator;
@Mock private MailboxACLResolver aclResolver;
@Mock private GroupMembershipResolver groupMembershipResolver;
@Mock private MailboxMapper mailboxMapper;
@@ -101,7 +102,7 @@ public class StoreMailboxManagerAnnotationTest {
}
});
- storeMailboxManager = spy(new StoreMailboxManager(mailboxSessionMapperFactory, authenticator, aclResolver, groupMembershipResolver,
+ storeMailboxManager = spy(new StoreMailboxManager(mailboxSessionMapperFactory, authenticator, authorizator, aclResolver, groupMembershipResolver,
messageParser, messageIdFactory, MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE));
storeMailboxManager.init();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index 901b9f9..fd4fae2 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -19,35 +19,41 @@
package org.apache.james.mailbox.store;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import static org.assertj.core.api.Assertions.assertThat;
-
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.exception.BadCredentialsException;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.exception.MailboxNotFoundException;
import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.model.MessageId.Factory;
+import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.store.mail.MailboxMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
import org.junit.Before;
import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class StoreMailboxManagerTest {
private static final String CURRENT_USER = "user";
+ private static final String CURRENT_USER_PASSWORD = "secret";
+ private static final String ADMIN = "admin";
+ private static final String ADMIN_PASSWORD = "adminsecret";
private static final MailboxId MAILBOX_ID = TestId.of(123);
- public static final int UID_VALIDITY = 42;
+ private static final Logger LOGGER = LoggerFactory.getLogger(StoreMailboxManagerTest.class);
+ private static final int UID_VALIDITY = 42;
private StoreMailboxManager storeMailboxManager;
private MailboxMapper mockedMailboxMapper;
private MailboxSession mockedMailboxSession;
@@ -60,9 +66,13 @@ public class StoreMailboxManagerTest {
when(mockedMapperFactory.getMailboxMapper(mockedMailboxSession))
.thenReturn(mockedMailboxMapper);
Factory messageIdFactory = mock(MessageId.Factory.class);
- storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, new FakeAuthenticator(),
+ FakeAuthenticator authenticator = new FakeAuthenticator();
+ authenticator.addUser(CURRENT_USER, CURRENT_USER_PASSWORD);
+ authenticator.addUser(ADMIN, ADMIN_PASSWORD);
+ storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, authenticator, new FakeAuthorizator(ADMIN),
new JVMMailboxPathLocker(), new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(),
new MessageParser(), messageIdFactory);
+ storeMailboxManager.init();
}
@Test
@@ -166,5 +176,34 @@ public class StoreMailboxManagerTest {
assertThat(expected.getId()).isEqualTo(MAILBOX_ID);
}
+
+ @Test
+ public void loginShouldCreateSessionWhenGoodPassword() throws Exception {
+ MailboxSession expected = storeMailboxManager.login(CURRENT_USER, CURRENT_USER_PASSWORD, LOGGER);
+
+ assertThat(expected.getUser().getUserName()).isEqualTo(CURRENT_USER);
+ }
+
+ @Test(expected = BadCredentialsException.class)
+ public void loginShouldThrowWhenBadPassword() throws Exception {
+ storeMailboxManager.login(CURRENT_USER, "badpassword", LOGGER);
+ }
+
+ @Test(expected = BadCredentialsException.class)
+ public void loginAsOtherUserShouldNotCreateUserSessionWhenAdminWithBadPassword() throws Exception {
+ storeMailboxManager.loginAsOtherUser(ADMIN, "badpassword", CURRENT_USER, LOGGER);
+ }
+
+ @Test(expected = BadCredentialsException.class)
+ public void loginAsOtherUserShouldNotCreateUserSessionWhenNotAdmin() throws Exception {
+ storeMailboxManager.loginAsOtherUser(CURRENT_USER, CURRENT_USER_PASSWORD, "otheruser", LOGGER);
+ }
+
+ @Test
+ public void loginAsOtherUserShouldCreateUserSessionWhenAdminWithGoodPassword() throws Exception {
+ MailboxSession expected = storeMailboxManager.loginAsOtherUser(ADMIN, ADMIN_PASSWORD, CURRENT_USER, LOGGER);
+
+ assertThat(expected.getUser().getUserName()).isEqualTo(CURRENT_USER);
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java b/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
index 02ae1e6..c0bdbc1 100644
--- a/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
+++ b/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
@@ -38,6 +38,7 @@ import org.apache.james.mailbox.mock.MockMailboxManager;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -166,6 +167,12 @@ public class MailboxCopierTest {
return true;
}
},
+ new Authorizator() {
+ @Override
+ public boolean canLoginAsOtherUser(String userId, String otherUserId) {
+ return false;
+ }
+ },
aclResolver,
groupMembershipResolver,
messageParser,
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[06/12] james-project git commit: JAMES-1930 Introduce MTP
AUTHENTICATE PLAIN tests
Posted by ad...@apache.org.
JAMES-1930 Introduce MTP AUTHENTICATE PLAIN 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/200460cf
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/200460cf
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/200460cf
Branch: refs/heads/master
Commit: 200460cf3cefb401991cc401b07793b8119e26b9
Parents: bdf8932
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Feb 9 17:46:48 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 11:29:30 2017 +0100
----------------------------------------------------------------------
.../cassandra/CassandraMailboxTest.java | 2 +
.../imapmailbox/suite/AuthenticatePlain.java | 54 +++++++++++++++++++
.../james/imap/scripts/AuthenticatePlain.test | 56 ++++++++++++++++++++
3 files changed, 112 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/200460cf/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMailboxTest.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMailboxTest.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMailboxTest.java
index 2c43665..cc4d60d 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMailboxTest.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMailboxTest.java
@@ -21,6 +21,7 @@ package org.apache.james.mpt.imapmailbox.cassandra;
import org.apache.james.mpt.imapmailbox.AbstractMailboxTest;
import org.apache.james.mpt.imapmailbox.suite.MailboxWithLongNameError;
+import org.apache.james.mpt.imapmailbox.suite.AuthenticatePlain;
import org.apache.james.mpt.imapmailbox.suite.AuthenticatedState;
import org.apache.james.mpt.imapmailbox.suite.ConcurrentSessions;
import org.apache.james.mpt.imapmailbox.suite.Events;
@@ -49,6 +50,7 @@ import org.junit.runners.Suite.SuiteClasses;
@GuiceModules({ CassandraMailboxTestModule.class })
@SuiteClasses({
AuthenticatedState.class,
+ AuthenticatePlain.class,
ConcurrentSessions.class,
Events.class,
Expunge.class,
http://git-wip-us.apache.org/repos/asf/james-project/blob/200460cf/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java
new file mode 100644
index 0000000..58a9892
--- /dev/null
+++ b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java
@@ -0,0 +1,54 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mpt.imapmailbox.suite;
+
+import java.util.Locale;
+
+import javax.inject.Inject;
+
+import org.apache.james.mpt.api.ImapHostSystem;
+import org.apache.james.mpt.imapmailbox.suite.base.BaseNonAuthenticatedState;
+import org.junit.Test;
+
+public class AuthenticatePlain extends BaseNonAuthenticatedState {
+
+ @Inject
+ private static ImapHostSystem system;
+
+
+ public AuthenticatePlain() throws Exception {
+ super(system);
+ }
+
+ @Test
+ public void testAuthenticatePlainUS() throws Exception {
+ scriptTest("AuthenticatePlain", Locale.US);
+ }
+
+ @Test
+ public void testAuthenticatePlainITALY() throws Exception {
+ scriptTest("AuthenticatePlain", Locale.ITALY);
+ }
+
+ @Test
+ public void testAuthenticatePlainKOREA() throws Exception {
+ scriptTest("AuthenticatePlain", Locale.KOREA);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/200460cf/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test
new file mode 100644
index 0000000..8408748
--- /dev/null
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test
@@ -0,0 +1,56 @@
+################################################################
+# Licensed to the Apache Software Foundation (ASF) under one #
+# or more contributor license agreements. See the NOTICE file #
+# distributed with this work for additional information #
+# regarding copyright ownership. The ASF licenses this file #
+# to you under the Apache License, Version 2.0 (the #
+# "License"); you may not use this file except in compliance #
+# with the License. You may obtain a copy of the License at #
+# #
+# http://www.apache.org/licenses/LICENSE-2.0 #
+# #
+# Unless required by applicable law or agreed to in writing, #
+# software distributed under the License is distributed on an #
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY #
+# KIND, either express or implied. See the License for the #
+# specific language governing permissions and limitations #
+# under the License. #
+################################################################
+
+# Correct user with correct password can authenticate with delegation part missing
+C: abcd AUTHENTICATE "PLAIN" {24+}
+# imapuser\0password
+C: aW1hcHVzZXIAcGFzc3dvcmQ=
+S: abcd OK AUTHENTICATE completed.
+
+REINIT
+
+# Correct user with correct password can authenticate with empty delegation part
+C: abcd AUTHENTICATE "PLAIN" {24+}
+# \0imapuser\0password
+C: AGltYXB1c2VyAHBhc3N3b3Jk
+S: abcd OK AUTHENTICATE completed.
+
+REINIT
+
+# Correct user with bad password cannot authenticate
+C: abcd AUTHENTICATE "PLAIN" {28+}
+# \0imapuser\0badpassword
+C: AGltYXB1c2VyAGJhZHBhc3N3b3Jk
+S: abcd NO AUTHENTICATE failed. Authentication failed.
+
+REINIT
+
+# Bad user cannot authenticate
+C: abcd AUTHENTICATE "PLAIN" {24+}
+# \0baduser\0password
+C: AGJhZHVzZXIAcGFzc3dvcmQ=
+S: abcd NO AUTHENTICATE failed. Authentication failed.
+
+REINIT
+
+# Correct user with correct password can authenticate with any delegation part
+C: abcd AUTHENTICATE "PLAIN" {36+}
+# delegate\0imapuser\0password
+C: ZGVsZWdhdGUAaW1hcHVzZXIAcGFzc3dvcmQ=
+S: abcd OK AUTHENTICATE completed.
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[11/12] james-project git commit: JAMES-1940 Fix Virtual hosting
support of LDAP users repository
Posted by ad...@apache.org.
JAMES-1940 Fix Virtual hosting support of LDAP users repository
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/df96d1af
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/df96d1af
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/df96d1af
Branch: refs/heads/master
Commit: df96d1afc87c6a325f4b0f2b2814d1d6a07b3a28
Parents: 42b574d
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Feb 14 11:18:00 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 13:04:54 2017 +0100
----------------------------------------------------------------------
.../ldap/ReadOnlyUsersLDAPRepositoryTest.java | 62 +++++++++++++++++++-
.../src/test/resources/ldif-files/populate.ldif | 1 +
.../user/ldap/ReadOnlyUsersLDAPRepository.java | 6 +-
3 files changed, 67 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/df96d1af/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java b/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
index c5e1bbe..17b7ad8 100644
--- a/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
+++ b/server/data/data-ldap-integration-testing/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.plist.PropertyListConfiguration;
+import org.apache.mailet.MailAddress;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -35,6 +36,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
private static final String DOMAIN = "james.org";
private static final String ADMIN_PASSWORD = "mysecretpassword";
private static final String JAMES_USER = "james-user";
+ private static final String JAMES_USER_MAIL = "james-user" + "@" + DOMAIN;
private static final String UNKNOWN = "unknown";
private static final String PASSWORD = "secret";
private static final String BAD_PASSWORD = "badpassword";
@@ -49,8 +51,11 @@ public class ReadOnlyUsersLDAPRepositoryTest {
.password(ADMIN_PASSWORD)
.build();
ldapContainer.start();
+ }
+
+ private void startUsersRepository(HierarchicalConfiguration ldapRepositoryConfiguration) throws ConfigurationException, Exception {
ldapRepository = new ReadOnlyUsersLDAPRepository();
- ldapRepository.configure(ldapRepositoryConfiguration());
+ ldapRepository.configure(ldapRepositoryConfiguration);
ldapRepository.setLog(LOGGER);
ldapRepository.init();
}
@@ -70,6 +75,22 @@ public class ReadOnlyUsersLDAPRepositoryTest {
return configuration;
}
+ private HierarchicalConfiguration ldapRepositoryConfigurationWithVirtualHosting() throws ConfigurationException {
+ PropertyListConfiguration configuration = new PropertyListConfiguration();
+ configuration.addProperty("[@ldapHost]", ldapContainer.getLdapHost());
+ configuration.addProperty("[@principal]", "cn=admin\\,dc=james\\,dc=org");
+ configuration.addProperty("[@credentials]", ADMIN_PASSWORD);
+ configuration.addProperty("[@userBase]", "ou=People\\,dc=james\\,dc=org");
+ configuration.addProperty("[@userIdAttribute]", "mail");
+ configuration.addProperty("[@userObjectClass]", "inetOrgPerson");
+ configuration.addProperty("[@maxRetries]", "4");
+ configuration.addProperty("[@retryStartInterval]", "0");
+ configuration.addProperty("[@retryMaxInterval]", "8");
+ configuration.addProperty("[@retryIntervalScale]", "1000");
+ configuration.addProperty("supportsVirtualHosting", true);
+ return configuration;
+ }
+
@After
public void tearDown() {
if (ldapContainer != null) {
@@ -79,21 +100,60 @@ public class ReadOnlyUsersLDAPRepositoryTest {
@Test
public void knownUserShouldBeAbleToLogInWhenPasswordIsCorrect() throws Exception {
+ startUsersRepository(ldapRepositoryConfiguration());
assertThat(ldapRepository.test(JAMES_USER, PASSWORD)).isTrue();
}
@Test
public void knownUserShouldNotBeAbleToLogInWhenPasswordIsNotCorrect() throws Exception {
+ startUsersRepository(ldapRepositoryConfiguration());
assertThat(ldapRepository.test(JAMES_USER, BAD_PASSWORD)).isFalse();
}
@Test
public void unknownUserShouldNotBeAbleToLogIn() throws Exception {
+ startUsersRepository(ldapRepositoryConfiguration());
assertThat(ldapRepository.test(UNKNOWN, BAD_PASSWORD)).isFalse();
}
@Test
public void unknownUserShouldNotBeAbleToLogInWhenPasswordIsCorrect() throws Exception {
+ startUsersRepository(ldapRepositoryConfiguration());
assertThat(ldapRepository.test(UNKNOWN, PASSWORD)).isFalse();
}
+ @Test
+ public void knownUserShouldBeAbleToLogInWhenPasswordIsCorrectWithVirtualHosting() throws Exception {
+ startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+ assertThat(ldapRepository.test(JAMES_USER_MAIL, PASSWORD)).isTrue();
+ }
+
+ @Test
+ public void knownUserShouldNotBeAbleToLogInWhenPasswordIsNotCorrectWithVirtualHosting() throws Exception {
+ startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+ assertThat(ldapRepository.test(JAMES_USER, BAD_PASSWORD)).isFalse();
+ }
+
+ @Test
+ public void unknownUserShouldNotBeAbleToLogInWithVirtualHosting() throws Exception {
+ startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+ assertThat(ldapRepository.test(UNKNOWN, BAD_PASSWORD)).isFalse();
+ }
+
+ @Test
+ public void unknownUserShouldNotBeAbleToLogInWhenPasswordIsCorrectWithVirtualHosting() throws Exception {
+ startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+ assertThat(ldapRepository.test(UNKNOWN, PASSWORD)).isFalse();
+ }
+
+ @Test
+ public void containsWithGetUserShouldBeTrue() throws Exception {
+ startUsersRepository(ldapRepositoryConfiguration());
+ assertThat(ldapRepository.contains(ldapRepository.getUser(new MailAddress(JAMES_USER_MAIL)))).isTrue();
+ }
+
+ @Test
+ public void containsWithGetUserShouldBeTrueWithVirtualHosting() throws Exception {
+ startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
+ assertThat(ldapRepository.contains(ldapRepository.getUser(new MailAddress(JAMES_USER_MAIL)))).isTrue();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/df96d1af/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif
----------------------------------------------------------------------
diff --git a/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif b/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif
index 9376a6c..95f3391 100644
--- a/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif
+++ b/server/data/data-ldap-integration-testing/src/test/resources/ldif-files/populate.ldif
@@ -7,5 +7,6 @@ objectClass: inetOrgPerson
uid: james-user
cn: james-user
sn: james-user
+mail: james-user@james.org
userPassword: secret
description: James user
http://git-wip-us.apache.org/repos/asf/james-project/blob/df96d1af/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
index 6e07236..4948a39 100644
--- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
+++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
@@ -768,6 +768,10 @@ public class ReadOnlyUsersLDAPRepository implements UsersRepository, Configurabl
@Override
public String getUser(MailAddress mailAddress) throws UsersRepositoryException {
- return mailAddress.getLocalPart();
+ if (supportVirtualHosting()) {
+ return mailAddress.asString();
+ } else {
+ return mailAddress.getLocalPart();
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[12/12] james-project git commit: Merge remote-tracking branch
'mine/JAMES-1940-2'
Posted by ad...@apache.org.
Merge remote-tracking branch 'mine/JAMES-1940-2'
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d5495352
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d5495352
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d5495352
Branch: refs/heads/master
Commit: d5495352318a74c3f375e85d6d96e9a5632a0d53
Parents: 3f26ba0 df96d1a
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Feb 14 13:05:16 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 13:05:16 2017 +0100
----------------------------------------------------------------------
.../ldap/ReadOnlyUsersLDAPRepositoryTest.java | 62 +++++++++++++++++++-
.../src/test/resources/ldif-files/populate.ldif | 1 +
.../user/ldap/ReadOnlyUsersLDAPRepository.java | 6 +-
3 files changed, 67 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/d5495352/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
----------------------------------------------------------------------
diff --cc server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
index cc9eeb2,4948a39..f828cb5
--- a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
+++ b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
@@@ -781,14 -768,10 +781,18 @@@ public class ReadOnlyUsersLDAPRepositor
@Override
public String getUser(MailAddress mailAddress) throws UsersRepositoryException {
- return mailAddress.getLocalPart();
+ if (supportVirtualHosting()) {
+ return mailAddress.asString();
+ } else {
+ return mailAddress.getLocalPart();
+ }
}
+
+ @Override
+ public boolean isAdministrator(String username) throws UsersRepositoryException {
+ if (administratorId.isPresent()) {
+ return administratorId.get().equals(username);
+ }
+ return false;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[02/12] james-project git commit: JAMES-1930 Introduce Authorizator
to check users authorizations about delegation
Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index 3b8b46c..8e76403 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -52,6 +52,7 @@ import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -73,6 +74,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
private final CassandraMailboxManager mailboxManager;
private final FakeAuthenticator userManager;
+ private final FakeAuthorizator authorizator;
private final CassandraCluster cassandraClusterSingleton;
public CassandraHostSystem() throws Exception {
@@ -90,6 +92,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
new CassandraAnnotationModule());
cassandraClusterSingleton = CassandraCluster.create(mailboxModule);
userManager = new FakeAuthenticator();
+ authorizator = new FakeAuthorizator();
com.datastax.driver.core.Session session = cassandraClusterSingleton.getConf();
CassandraModSeqProvider modSeqProvider = new CassandraModSeqProvider(session);
CassandraUidProvider uidProvider = new CassandraUidProvider(session);
@@ -104,7 +107,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
CassandraMailboxSessionMapperFactory mapperFactory = new CassandraMailboxSessionMapperFactory(uidProvider, modSeqProvider,
session, typesProvider, messageDAO, messageIdDAO, imapUidDAO, mailboxCounterDAO, mailboxRecentsDAO);
- mailboxManager = new CassandraMailboxManager(mapperFactory, userManager, new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory);
+ mailboxManager = new CassandraMailboxManager(mapperFactory, userManager, authorizator, new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory);
QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mapperFactory);
CassandraPerUserMaxQuotaManager perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(session);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 6cac0a3..6caa31c 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -54,6 +54,7 @@ import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
@@ -124,7 +125,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new StoreMailboxManager(factory, userManager, aclResolver, groupMembershipResolver, messageParser,
+ mailboxManager = new StoreMailboxManager(factory, userManager, new FakeAuthorizator(), aclResolver, groupMembershipResolver, messageParser,
messageIdFactory, MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
mailboxManager.setMessageSearchIndex(searchIndex);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
index 7cd3876..7ed820e 100644
--- a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
+++ b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
@@ -41,6 +41,7 @@ import org.apache.james.mailbox.hbase.mail.HBaseModSeqProvider;
import org.apache.james.mailbox.hbase.mail.HBaseUidProvider;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -91,6 +92,7 @@ public class HBaseHostSystem extends JamesImapHostSystem {
}
userManager = new FakeAuthenticator();
+ FakeAuthorizator authorizator = new FakeAuthorizator();
final HBaseModSeqProvider modSeqProvider = new HBaseModSeqProvider(conf);
final HBaseUidProvider uidProvider = new HBaseUidProvider(conf);
@@ -101,7 +103,7 @@ public class HBaseHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new HBaseMailboxManager(mapperFactory, userManager, aclResolver, groupMembershipResolver,
+ mailboxManager = new HBaseMailboxManager(mapperFactory, userManager, authorizator, aclResolver, groupMembershipResolver,
messageParser, messageIdFactory);
mailboxManager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
index d3bce01..0f24491 100644
--- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
+++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.event.AsynchronousEventDelivery;
@@ -82,7 +83,7 @@ public class InMemoryEventAsynchronousHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new StoreMailboxManager(factory, userManager, aclResolver, groupMembershipResolver, messageParser,
+ mailboxManager = new StoreMailboxManager(factory, userManager, new FakeAuthorizator(), aclResolver, groupMembershipResolver, messageParser,
new InMemoryMessageId.Factory(), MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(factory);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
index 766d8d8..5cb7729 100644
--- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
+++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.quota.QuotaRootResolver;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -84,7 +85,7 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
MessageParser messageParser = new MessageParser();
InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
- mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, userManager,
+ mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, userManager, new FakeAuthorizator(),
new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, new InMemoryMessageId.Factory());
QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mailboxManager.getMapperFactory());
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
index 5841715..edca72d 100644
--- a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
+++ b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
@@ -41,6 +41,7 @@ import org.apache.james.mailbox.jcr.mail.JCRModSeqProvider;
import org.apache.james.mailbox.jcr.mail.JCRUidProvider;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -94,7 +95,7 @@ public class JCRHostSystem extends JamesImapHostSystem{
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new JCRMailboxManager(mf, userManager, locker, aclResolver, groupMembershipResolver, messageParser,
+ mailboxManager = new JCRMailboxManager(mf, userManager, new FakeAuthorizator(), aclResolver, groupMembershipResolver, messageParser,
new DefaultMessageId.Factory());
mailboxManager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 42082f1..37165bc 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -43,6 +43,7 @@ import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -82,7 +83,7 @@ public class JPAHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new OpenJPAMailboxManager(mf, userManager, locker, false, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
+ mailboxManager = new OpenJPAMailboxManager(mf, userManager, new FakeAuthorizator(), locker, false, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
mailboxManager.init();
SubscriptionManager subscriptionManager = new JPASubscriptionManager(mf);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index 2361c08..10d8845 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -49,6 +49,7 @@ import org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -124,7 +125,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new OpenJPAMailboxManager(factory, userManager, locker, false, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ mailboxManager = new OpenJPAMailboxManager(factory, userManager, new FakeAuthorizator(), locker, false, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
LuceneMessageSearchIndex searchIndex = new LuceneMessageSearchIndex(factory, mailboxIdFactory, fsDirectory, messageIdFactory, mailboxManager);
searchIndex.setEnableSuffixMatch(true);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index c1db7f2..9a97fdd 100644
--- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.maildir.MaildirMailboxSessionMapperFactory;
import org.apache.james.mailbox.maildir.MaildirStore;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
@@ -71,7 +72,7 @@ public class MaildirHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, userManager, locker, aclResolver,
+ mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, userManager, new FakeAuthorizator(), locker, aclResolver,
groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
mailboxManager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
index b687c53..e6dbed2 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
@@ -47,6 +47,7 @@ import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.exception.BadCredentialsException;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.ComposedMessageId;
import org.apache.james.mailbox.model.Content;
@@ -410,6 +411,11 @@ public class MailboxEventAnalyserTest {
public boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
return false;
}
+
+ @Override
+ public MailboxSession loginAsOtherUser(String adminUserId, String passwd, String realUserId, Logger log) throws BadCredentialsException, MailboxException {
+ throw new UnsupportedOperationException("Not implemented");
+ }
};
private final class MyMailboxSession implements MailboxSession {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index df0693f..46cc66a 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -21,6 +21,7 @@ package org.apache.james.modules.mailbox;
import javax.inject.Singleton;
import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
+import org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator;
import org.apache.james.backends.cassandra.components.CassandraModule;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxPathLocker;
@@ -40,6 +41,7 @@ import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.NoMailboxPathLocker;
import org.apache.james.mailbox.store.StoreMessageIdManager;
@@ -72,6 +74,7 @@ public class CassandraMailboxModule extends AbstractModule {
bind(CassandraModSeqProvider.class).in(Scopes.SINGLETON);
bind(CassandraUidProvider.class).in(Scopes.SINGLETON);
bind(UserRepositoryAuthenticator.class).in(Scopes.SINGLETON);
+ bind(UserRepositoryAuthorizator.class).in(Scopes.SINGLETON);
bind(CassandraId.Factory.class).in(Scopes.SINGLETON);
bind(CassandraMessageId.Factory.class).in(Scopes.SINGLETON);
bind(CassandraMessageDAO.class).in(Scopes.SINGLETON);
@@ -90,6 +93,7 @@ public class CassandraMailboxModule extends AbstractModule {
bind(SubscriptionManager.class).to(CassandraSubscriptionManager.class);
bind(MailboxPathLocker.class).to(NoMailboxPathLocker.class);
bind(Authenticator.class).to(UserRepositoryAuthenticator.class);
+ bind(Authorizator.class).to(UserRepositoryAuthorizator.class);
bind(MailboxManager.class).to(CassandraMailboxManager.class);
bind(MailboxId.Factory.class).to(CassandraId.Factory.class);
bind(MessageId.Factory.class).to(CassandraMessageId.Factory.class);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
index c12cd00..4feba2f 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
@@ -29,6 +29,7 @@ import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.james.JPAConfiguration;
import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
+import org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxPathLocker;
import org.apache.james.mailbox.SubscriptionManager;
@@ -46,6 +47,7 @@ import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.mail.AttachmentMapperFactory;
@@ -76,6 +78,7 @@ public class JPAMailboxModule extends AbstractModule {
bind(JPAModSeqProvider.class).in(Scopes.SINGLETON);
bind(JPAUidProvider.class).in(Scopes.SINGLETON);
bind(UserRepositoryAuthenticator.class).in(Scopes.SINGLETON);
+ bind(UserRepositoryAuthorizator.class).in(Scopes.SINGLETON);
bind(JPAId.Factory.class).in(Scopes.SINGLETON);
bind(SimpleGroupMembershipResolver.class).in(Scopes.SINGLETON);
bind(UnionMailboxACLResolver.class).in(Scopes.SINGLETON);
@@ -93,6 +96,7 @@ public class JPAMailboxModule extends AbstractModule {
bind(MailboxPathLocker.class).to(JVMMailboxPathLocker.class);
bind(Authenticator.class).to(UserRepositoryAuthenticator.class);
bind(MailboxManager.class).to(OpenJPAMailboxManager.class);
+ bind(Authorizator.class).to(UserRepositoryAuthorizator.class);
bind(MailboxId.Factory.class).to(JPAId.Factory.class);
bind(GroupMembershipResolver.class).to(SimpleGroupMembershipResolver.class);
bind(MailboxACLResolver.class).to(UnionMailboxACLResolver.class);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
index b911b30..09fd4f0 100644
--- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
+++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
@@ -22,6 +22,7 @@ package org.apache.james.modules.mailbox;
import javax.inject.Singleton;
import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
+import org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxPathLocker;
import org.apache.james.mailbox.MessageIdManager;
@@ -43,6 +44,7 @@ import org.apache.james.mailbox.inmemory.mail.InMemoryUidProvider;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
@@ -82,6 +84,7 @@ public class MemoryMailboxModule extends AbstractModule {
bind(MailboxSessionMapperFactory.class).to(InMemoryMailboxSessionMapperFactory.class);
bind(MailboxPathLocker.class).to(JVMMailboxPathLocker.class);
bind(Authenticator.class).to(UserRepositoryAuthenticator.class);
+ bind(Authorizator.class).to(UserRepositoryAuthorizator.class);
bind(MailboxManager.class).to(InMemoryMailboxManager.class);
bind(MessageIdManager.class).to(InMemoryMessageIdManager.class);
bind(MailboxACLResolver.class).to(UnionMailboxACLResolver.class);
@@ -96,6 +99,7 @@ public class MemoryMailboxModule extends AbstractModule {
bind(StoreSubscriptionManager.class).in(Scopes.SINGLETON);
bind(JVMMailboxPathLocker.class).in(Scopes.SINGLETON);
bind(UserRepositoryAuthenticator.class).in(Scopes.SINGLETON);
+ bind(UserRepositoryAuthorizator.class).in(Scopes.SINGLETON);
bind(InMemoryMailboxManager.class).in(Scopes.SINGLETON);
bind(UnionMailboxACLResolver.class).in(Scopes.SINGLETON);
bind(SimpleGroupMembershipResolver.class).in(Scopes.SINGLETON);
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/mailbox-adapter/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/mailbox-adapter/pom.xml b/server/container/mailbox-adapter/pom.xml
index 2c92694..32951dd 100644
--- a/server/container/mailbox-adapter/pom.xml
+++ b/server/container/mailbox-adapter/pom.xml
@@ -51,10 +51,21 @@
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
+ <artifactId>apache-james-mailbox-memory</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
<artifactId>apache-james-mailbox-store</artifactId>
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
+ <artifactId>apache-james-mailbox-store</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
<artifactId>apache-james-mailbox-maildir</artifactId>
</dependency>
<dependency>
@@ -81,14 +92,8 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.james</groupId>
- <artifactId>apache-james-mailbox-memory</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.james</groupId>
- <artifactId>apache-james-mailbox-store</artifactId>
- <type>test-jar</type>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizator.java
----------------------------------------------------------------------
diff --git a/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizator.java b/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizator.java
new file mode 100644
index 0000000..494a499
--- /dev/null
+++ b/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizator.java
@@ -0,0 +1,58 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.adapter.mailbox.store;
+
+import javax.inject.Inject;
+
+import org.apache.james.lifecycle.api.LogEnabled;
+import org.apache.james.mailbox.store.Authorizator;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.api.UsersRepositoryException;
+import org.slf4j.Logger;
+
+/**
+ * Authorizator which use an UsersRepository to check if the delegation is allowed
+ */
+public class UserRepositoryAuthorizator implements Authorizator, LogEnabled {
+
+ private final UsersRepository repos;
+ private Logger log;
+
+ @Inject
+ public UserRepositoryAuthorizator(UsersRepository repos) {
+ this.repos = repos;
+ }
+
+ @Override
+ public boolean canLoginAsOtherUser(String userId, String otherUserId) {
+ try {
+ return repos.isAdministrator(userId) && repos.contains(otherUserId);
+ } catch (UsersRepositoryException e) {
+ log.warn("Unable to access UsersRepository", e);
+ }
+ return false;
+ }
+
+ @Override
+ public void setLog(Logger log) {
+ this.log = log;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
----------------------------------------------------------------------
diff --git a/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
index f4c7c5f..dbcd8ac 100644
--- a/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
+++ b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
@@ -29,6 +29,7 @@ import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -55,6 +56,7 @@ public class MailboxManagementTest {
StoreMailboxManager mailboxManager = new StoreMailboxManager(
inMemoryMapperFactory,
new FakeAuthenticator(),
+ new FakeAuthorizator(),
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizatorTest.java
----------------------------------------------------------------------
diff --git a/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizatorTest.java b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizatorTest.java
new file mode 100644
index 0000000..ea94ba4
--- /dev/null
+++ b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizatorTest.java
@@ -0,0 +1,65 @@
+package org.apache.james.adapter.mailbox.store;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.api.UsersRepositoryException;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class UserRepositoryAuthorizatorTest {
+ private static final String ADMIN = "admin";
+ private static final String USER = "user";
+ private static final Logger LOGGER = LoggerFactory.getLogger(UserRepositoryAuthorizatorTest.class);
+
+ private UsersRepository usersRepository;
+ private UserRepositoryAuthorizator testee;
+
+ @Before
+ public void setUp() throws Exception {
+ usersRepository = mock(UsersRepository.class);
+ testee = new UserRepositoryAuthorizator(usersRepository);
+ testee.setLog(LOGGER);
+ }
+
+ @Test
+ public void canLoginAsOtherUserShouldReturnFalseWhenIsAdministratorThrows() throws Exception {
+ when(usersRepository.isAdministrator(ADMIN))
+ .thenThrow(new UsersRepositoryException("expected error"));
+
+ assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isFalse();
+ }
+
+ @Test
+ public void canLoginAsOtherUserShouldReturnFalseWhenIsAdministratorReturnFalse() throws Exception {
+ when(usersRepository.isAdministrator(ADMIN))
+ .thenReturn(false);
+
+ assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isFalse();
+ }
+
+ @Test
+ public void canLoginAsOtherUserShouldReturnFalseWhenUserIsNotInRepository() throws Exception {
+ when(usersRepository.isAdministrator(ADMIN))
+ .thenReturn(true);
+ when(usersRepository.contains(USER))
+ .thenReturn(false);
+
+ assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isFalse();
+ }
+
+ @Test
+ public void canLoginAsOtherUserShouldReturnTrueWhenAdminAndUserIsInRepository() throws Exception {
+ when(usersRepository.isAdministrator(ADMIN))
+ .thenReturn(true);
+ when(usersRepository.contains(USER))
+ .thenReturn(true);
+
+ assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isTrue();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-authorizator.xml
----------------------------------------------------------------------
diff --git a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-authorizator.xml b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-authorizator.xml
new file mode 100644
index 0000000..0185042
--- /dev/null
+++ b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-authorizator.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd">
+
+ <!--
+ Mailbox Authorizator
+ -->
+
+ <bean id="authorizator" class="org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator"/>
+
+</beans>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-hbase.xml
----------------------------------------------------------------------
diff --git a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-hbase.xml b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-hbase.xml
index da13389..daf6820 100644
--- a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-hbase.xml
+++ b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-hbase.xml
@@ -38,9 +38,10 @@
<bean id="hbase-mailboxmanager" class="org.apache.james.mailbox.hbase.HBaseMailboxManager" init-method="init">
<constructor-arg index="0" ref="hbase-sessionMapperFactory"/>
<constructor-arg index="1" ref="authenticator"/>
- <constructor-arg index="2" ref="hbase-locker"/>
- <constructor-arg index="3" ref="aclResolver"/>
- <constructor-arg index="4" ref="groupMembershipResolver"/>
+ <constructor-arg index="2" ref="authorizator"/>
+ <constructor-arg index="3" ref="hbase-locker"/>
+ <constructor-arg index="4" ref="aclResolver"/>
+ <constructor-arg index="5" ref="groupMembershipResolver"/>
</bean>
<bean id="hbase-sessionMapperFactory" class="org.apache.james.mailbox.hbase.HBaseMailboxSessionMapperFactory">
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
----------------------------------------------------------------------
diff --git a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
index 39788f0..a08cedc 100644
--- a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
+++ b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
@@ -57,6 +57,14 @@
<!--
===========================================================================
+ Authorizator
+ ===========================================================================
+ -->
+
+ <import resource="classpath:META-INF/org/apache/james/spring-mailbox-authorizator.xml"/>
+
+ <!--
+ ===========================================================================
Queues
===========================================================================
-->
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
index ab0c546..abcd91c 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java
@@ -263,6 +263,11 @@ public class DefaultMailboxesProvisioningFilterThreadTest {
public boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
return false;
}
+
+ @Override
+ public MailboxSession loginAsOtherUser(String adminUserId, String passwd, String realUserId, Logger log) throws BadCredentialsException, MailboxException {
+ return null;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
index 233e652..1b6e453 100644
--- a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
+++ b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
@@ -51,6 +51,7 @@ import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -738,6 +739,12 @@ public class POP3ServerTest {
return false;
}
}
+ }, new Authorizator() {
+
+ @Override
+ public boolean canLoginAsOtherUser(String userId, String otherUserId) {
+ return false;
+ }
}, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory(), MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
mailboxManager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/8b52a2b8/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java b/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index f40315b..bd28679 100644
--- a/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ b/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -103,6 +103,7 @@ public class UserMailboxesRoutesTest {
MessageId.Factory messageIdFactory = new DefaultMessageId.Factory();
InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(new InMemoryMailboxSessionMapperFactory(),
(userid, passwd) -> true,
+ (adminUserid, userid) -> false,
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[10/12] james-project git commit: JAMES-1930 MPT test for delegation
Posted by ad...@apache.org.
JAMES-1930 MPT test for delegation
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3f26ba0c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3f26ba0c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3f26ba0c
Branch: refs/heads/master
Commit: 3f26ba0cdacef98e41c4ea96014f8eadfb0b4f97
Parents: 157be0d
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Feb 10 11:49:13 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 11:29:30 2017 +0100
----------------------------------------------------------------------
.../cassandra/host/CassandraHostSystem.java | 13 +----
mpt/impl/imap-mailbox/core/pom.xml | 8 +++
.../james/mpt/host/JamesImapHostSystem.java | 44 +++++++++++++--
.../imapmailbox/suite/AuthenticatePlain.java | 12 +++-
.../james/imap/scripts/AuthenticatePlain.test | 59 ++++++++++++++++----
.../host/ElasticSearchHostSystem.java | 10 +---
.../imapmailbox/hbase/host/HBaseHostSystem.java | 13 +----
.../inmemory/InMemoryMailboxTest.java | 2 +
.../InMemoryEventAsynchronousHostSystem.java | 11 +---
.../inmemory/host/InMemoryHostSystem.java | 11 +---
.../mpt/imapmailbox/jcr/host/JCRHostSystem.java | 16 +-----
.../mpt/imapmailbox/jpa/host/JPAHostSystem.java | 15 +----
.../host/LuceneSearchHostSystem.java | 14 +----
.../maildir/host/MaildirHostSystem.java | 17 ++----
mpt/pom.xml | 5 ++
.../user/memory/MemoryUsersRepository.java | 4 ++
16 files changed, 133 insertions(+), 121 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index e466f2d..3f9750b 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -51,8 +51,6 @@ import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager;
import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.quota.QuotaRootResolver;
-import org.apache.james.mailbox.store.FakeAuthenticator;
-import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -73,8 +71,6 @@ public class CassandraHostSystem extends JamesImapHostSystem {
Feature.ANNOTATION_SUPPORT);
private final CassandraMailboxManager mailboxManager;
- private final FakeAuthenticator userManager;
- private final FakeAuthorizator authorizator;
private final CassandraCluster cassandraClusterSingleton;
public CassandraHostSystem() throws Exception {
@@ -91,8 +87,6 @@ public class CassandraHostSystem extends JamesImapHostSystem {
new CassandraAttachmentModule(),
new CassandraAnnotationModule());
cassandraClusterSingleton = CassandraCluster.create(mailboxModule);
- userManager = new FakeAuthenticator();
- authorizator = FakeAuthorizator.defaultReject();
com.datastax.driver.core.Session session = cassandraClusterSingleton.getConf();
CassandraModSeqProvider modSeqProvider = new CassandraModSeqProvider(session);
CassandraUidProvider uidProvider = new CassandraUidProvider(session);
@@ -107,7 +101,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
CassandraMailboxSessionMapperFactory mapperFactory = new CassandraMailboxSessionMapperFactory(uidProvider, modSeqProvider,
session, typesProvider, messageDAO, messageIdDAO, imapUidDAO, mailboxCounterDAO, mailboxRecentsDAO);
- mailboxManager = new CassandraMailboxManager(mapperFactory, userManager, authorizator, new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory);
+ mailboxManager = new CassandraMailboxManager(mapperFactory, authenticator, authorizator, new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory);
QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mapperFactory);
CassandraPerUserMaxQuotaManager perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(session);
@@ -143,11 +137,6 @@ public class CassandraHostSystem extends JamesImapHostSystem {
cassandraClusterSingleton.clearAllTables();
}
- public boolean addUser(String user, String password) {
- userManager.addUser(user, password);
- return true;
- }
-
@Override
protected void finalize() throws Throwable {
super.finalize();
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/core/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/core/pom.xml b/mpt/impl/imap-mailbox/core/pom.xml
index a13926d..f2435b0 100644
--- a/mpt/impl/imap-mailbox/core/pom.xml
+++ b/mpt/impl/imap-mailbox/core/pom.xml
@@ -58,6 +58,14 @@
<artifactId>apache-james-mpt-onami-test</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-data-memory</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-mailbox-adapter</artifactId>
+ </dependency>
+ <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
index e2be945..149209a 100644
--- a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
+++ b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
@@ -19,35 +19,54 @@
package org.apache.james.mpt.host;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.configuration.plist.PropertyListConfiguration;
+import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
+import org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator;
import org.apache.james.imap.api.process.ImapProcessor;
import org.apache.james.imap.decode.ImapDecoder;
import org.apache.james.imap.decode.main.ImapRequestStreamHandler;
import org.apache.james.imap.encode.ImapEncoder;
import org.apache.james.mailbox.MailboxSession.User;
import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.mpt.api.Continuation;
import org.apache.james.mpt.api.ImapHostSystem;
import org.apache.james.mpt.helper.ByteBufferInputStream;
import org.apache.james.mpt.helper.ByteBufferOutputStream;
import org.apache.james.mpt.session.ImapSessionImpl;
+import org.apache.james.user.memory.MemoryUsersRepository;
import org.slf4j.LoggerFactory;
-import java.util.HashSet;
-import java.util.Set;
+import com.google.common.base.Throwables;
public abstract class JamesImapHostSystem implements ImapHostSystem {
- private ImapDecoder decoder;
+ private final MemoryUsersRepository memoryUsersRepository;
+ private final Set<User> users;
+ protected final Authorizator authorizator;
+ protected final Authenticator authenticator;
+ private ImapDecoder decoder;
private ImapEncoder encoder;
-
private ImapProcessor processor;
- private final Set<User> users;
-
public JamesImapHostSystem() {
super();
users = new HashSet<User>();
+ memoryUsersRepository = MemoryUsersRepository.withoutVirtualHosting();
+ try {
+ memoryUsersRepository.configure(userRepositoryConfiguration());
+ } catch (ConfigurationException e) {
+ throw Throwables.propagate(e);
+ }
+ authenticator = new UserRepositoryAuthenticator(memoryUsersRepository);
+ authorizator = new UserRepositoryAuthorizator(memoryUsersRepository);
}
public void configure(ImapDecoder decoder, ImapEncoder encoder,
@@ -57,6 +76,12 @@ public abstract class JamesImapHostSystem implements ImapHostSystem {
this.processor = processor;
}
+ @Override
+ public boolean addUser(String user, String password) throws Exception {
+ memoryUsersRepository.addUser(user, password);
+ return true;
+ }
+
public Session newSession(Continuation continuation)
throws Exception {
return new Session(continuation);
@@ -67,6 +92,7 @@ public abstract class JamesImapHostSystem implements ImapHostSystem {
public void afterTest() throws Exception {
users.clear();
+ memoryUsersRepository.clear();
resetData();
}
@@ -127,5 +153,11 @@ public abstract class JamesImapHostSystem implements ImapHostSystem {
public void beforeTests() throws Exception {
// default do nothing
}
+
+ private HierarchicalConfiguration userRepositoryConfiguration() {
+ PropertyListConfiguration configuration = new PropertyListConfiguration();
+ configuration.addProperty("administratorId", "imapuser");
+ return configuration;
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java
index 58a9892..6f241bb 100644
--- a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java
+++ b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java
@@ -23,6 +23,8 @@ import java.util.Locale;
import javax.inject.Inject;
+import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mpt.api.ImapHostSystem;
import org.apache.james.mpt.imapmailbox.suite.base.BaseNonAuthenticatedState;
import org.junit.Test;
@@ -32,23 +34,31 @@ public class AuthenticatePlain extends BaseNonAuthenticatedState {
@Inject
private static ImapHostSystem system;
-
public AuthenticatePlain() throws Exception {
super(system);
}
@Test
public void testAuthenticatePlainUS() throws Exception {
+ system.addUser("delegate", "123456");
+ system.createMailbox(new MailboxPath(MailboxConstants.USER_NAMESPACE, "delegate", "delegate"));
+ system.createMailbox(new MailboxPath(MailboxConstants.USER_NAMESPACE, "imapuser", "imapuser"));
scriptTest("AuthenticatePlain", Locale.US);
}
@Test
public void testAuthenticatePlainITALY() throws Exception {
+ system.addUser("delegate", "123456");
+ system.createMailbox(new MailboxPath(MailboxConstants.USER_NAMESPACE, "delegate", "delegate"));
+ system.createMailbox(new MailboxPath(MailboxConstants.USER_NAMESPACE, "imapuser", "imapuser"));
scriptTest("AuthenticatePlain", Locale.ITALY);
}
@Test
public void testAuthenticatePlainKOREA() throws Exception {
+ system.addUser("delegate", "123456");
+ system.createMailbox(new MailboxPath(MailboxConstants.USER_NAMESPACE, "delegate", "delegate"));
+ system.createMailbox(new MailboxPath(MailboxConstants.USER_NAMESPACE, "imapuser", "imapuser"));
scriptTest("AuthenticatePlain", Locale.KOREA);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test
index 8408748..50fa93d 100644
--- a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test
+++ b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test
@@ -18,39 +18,78 @@
################################################################
# Correct user with correct password can authenticate with delegation part missing
-C: abcd AUTHENTICATE "PLAIN" {24+}
+C: 0001 AUTHENTICATE "PLAIN" {24+}
# imapuser\0password
C: aW1hcHVzZXIAcGFzc3dvcmQ=
-S: abcd OK AUTHENTICATE completed.
+S: 0001 OK AUTHENTICATE completed.
+
+# Ensure we are imapuser
+C: 0002 SELECT imapuser
+SUB {
+S: \* FLAGS .*
+S: \* .* EXISTS
+S: \* .* RECENT
+S: \* OK \[UIDVALIDITY .*\] UIDs valid
+S: \* OK \[PERMANENTFLAGS .*\] Limited
+S: \* OK \[HIGHESTMODSEQ .*\] Highest
+S: \* OK \[UIDNEXT .*\] Predicted next UID
+}
+S: 0002 OK \[READ-WRITE\] SELECT completed\.
REINIT
# Correct user with correct password can authenticate with empty delegation part
-C: abcd AUTHENTICATE "PLAIN" {24+}
+C: 0003 AUTHENTICATE "PLAIN" {24+}
# \0imapuser\0password
C: AGltYXB1c2VyAHBhc3N3b3Jk
-S: abcd OK AUTHENTICATE completed.
+S: 0003 OK AUTHENTICATE completed.
+
+# Ensure we are imapuser
+C: 0004 SELECT imapuser
+SUB {
+S: \* FLAGS .*
+S: \* .* EXISTS
+S: \* .* RECENT
+S: \* OK \[UIDVALIDITY .*\] UIDs valid
+S: \* OK \[PERMANENTFLAGS .*\] Limited
+S: \* OK \[HIGHESTMODSEQ .*\] Highest
+S: \* OK \[UIDNEXT .*\] Predicted next UID
+}
+S: 0004 OK \[READ-WRITE\] SELECT completed\.
REINIT
# Correct user with bad password cannot authenticate
-C: abcd AUTHENTICATE "PLAIN" {28+}
+C: 0005 AUTHENTICATE "PLAIN" {28+}
# \0imapuser\0badpassword
C: AGltYXB1c2VyAGJhZHBhc3N3b3Jk
-S: abcd NO AUTHENTICATE failed. Authentication failed.
+S: 0005 NO AUTHENTICATE failed. Authentication failed.
REINIT
# Bad user cannot authenticate
-C: abcd AUTHENTICATE "PLAIN" {24+}
+C: 0006 AUTHENTICATE "PLAIN" {24+}
# \0baduser\0password
C: AGJhZHVzZXIAcGFzc3dvcmQ=
-S: abcd NO AUTHENTICATE failed. Authentication failed.
+S: 0006 NO AUTHENTICATE failed. Authentication failed.
REINIT
# Correct user with correct password can authenticate with any delegation part
-C: abcd AUTHENTICATE "PLAIN" {36+}
+C: 0007 AUTHENTICATE "PLAIN" {36+}
# delegate\0imapuser\0password
C: ZGVsZWdhdGUAaW1hcHVzZXIAcGFzc3dvcmQ=
-S: abcd OK AUTHENTICATE completed.
+S: 0007 OK AUTHENTICATE completed.
+
+# Ensure we are delegate
+C: 0008 SELECT delegate
+SUB {
+S: \* FLAGS .*
+S: \* .* EXISTS
+S: \* .* RECENT
+S: \* OK \[UIDVALIDITY .*\] UIDs valid
+S: \* OK \[PERMANENTFLAGS .*\] Limited
+S: \* OK \[HIGHESTMODSEQ .*\] Highest
+S: \* OK \[UIDNEXT .*\] Predicted next UID
+}
+S: 0008 OK \[READ-WRITE\] SELECT completed\.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 5989b02..a745032 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -53,8 +53,6 @@ import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.FakeAuthenticator;
-import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
@@ -77,12 +75,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
private EmbeddedElasticSearch embeddedElasticSearch;
private Path tempDirectory;
private StoreMailboxManager mailboxManager;
- private FakeAuthenticator userManager;
- public boolean addUser(String user, String password) throws Exception {
- userManager.addUser(user, password);
- return true;
- }
@Override
public void beforeTest() throws Exception {
@@ -111,7 +104,6 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
MailboxMappingFactory.getMappingContent()
);
- userManager = new FakeAuthenticator();
InMemoryMailboxSessionMapperFactory factory = new InMemoryMailboxSessionMapperFactory();
InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
@@ -125,7 +117,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new StoreMailboxManager(factory, userManager, FakeAuthorizator.defaultReject(), aclResolver, groupMembershipResolver, messageParser,
+ mailboxManager = new StoreMailboxManager(factory, authenticator, authorizator, aclResolver, groupMembershipResolver, messageParser,
messageIdFactory, MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
mailboxManager.setMessageSearchIndex(searchIndex);
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
index 4feb238..232d609 100644
--- a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
+++ b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
@@ -40,8 +40,6 @@ import org.apache.james.mailbox.hbase.HBaseMailboxSessionMapperFactory;
import org.apache.james.mailbox.hbase.mail.HBaseModSeqProvider;
import org.apache.james.mailbox.hbase.mail.HBaseUidProvider;
import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.FakeAuthenticator;
-import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -66,7 +64,6 @@ public class HBaseHostSystem extends JamesImapHostSystem {
public static Boolean useMiniCluster = true;
private final HBaseMailboxManager mailboxManager;
- private final FakeAuthenticator userManager;
private MiniHBaseCluster hbaseCluster;
private final Configuration conf;
@@ -91,9 +88,6 @@ public class HBaseHostSystem extends JamesImapHostSystem {
conf = HBaseConfiguration.create();
}
- userManager = new FakeAuthenticator();
- FakeAuthorizator authorizator = FakeAuthorizator.defaultReject();
-
final HBaseModSeqProvider modSeqProvider = new HBaseModSeqProvider(conf);
final HBaseUidProvider uidProvider = new HBaseUidProvider(conf);
DefaultMessageId.Factory messageIdFactory = new DefaultMessageId.Factory();
@@ -103,7 +97,7 @@ public class HBaseHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new HBaseMailboxManager(mapperFactory, userManager, authorizator, aclResolver, groupMembershipResolver,
+ mailboxManager = new HBaseMailboxManager(mapperFactory, authenticator, authorizator, aclResolver, groupMembershipResolver,
messageParser, messageIdFactory);
mailboxManager.init();
@@ -133,11 +127,6 @@ public class HBaseHostSystem extends JamesImapHostSystem {
mailboxManager.logout(session, false);
}
- public boolean addUser(String user, String password) {
- userManager.addUser(user, password);
- return true;
- }
-
public final void resetUserMetaData() throws Exception {
File dir = new File(META_DATA_DIRECTORY);
if (dir.exists()) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMailboxTest.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMailboxTest.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMailboxTest.java
index 8cb3eee..7c909d0 100644
--- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMailboxTest.java
+++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMailboxTest.java
@@ -19,6 +19,7 @@
package org.apache.james.mpt.imapmailbox.inmemory;
import org.apache.james.mpt.imapmailbox.AbstractMailboxTest;
+import org.apache.james.mpt.imapmailbox.suite.AuthenticatePlain;
import org.apache.james.mpt.imapmailbox.suite.AuthenticatedState;
import org.apache.james.mpt.imapmailbox.suite.ConcurrentSessions;
import org.apache.james.mpt.imapmailbox.suite.Events;
@@ -48,6 +49,7 @@ import org.junit.runners.Suite.SuiteClasses;
@GuiceModules({ InMemoryMailboxTestModule.class })
@SuiteClasses({
AuthenticatedState.class,
+ AuthenticatePlain.class,
ConcurrentSessions.class,
Events.class,
Expunge.class,
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
index a628031..466b368 100644
--- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
+++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
@@ -35,8 +35,6 @@ import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.quota.QuotaRootResolver;
-import org.apache.james.mailbox.store.FakeAuthenticator;
-import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.event.AsynchronousEventDelivery;
@@ -56,7 +54,6 @@ public class InMemoryEventAsynchronousHostSystem extends JamesImapHostSystem {
private static final ImapFeatures SUPPORTED_FEATURES = ImapFeatures.of(Feature.NAMESPACE_SUPPORT);
private StoreMailboxManager mailboxManager;
- private FakeAuthenticator userManager;
public static JamesImapHostSystem build() throws Exception {
return new InMemoryEventAsynchronousHostSystem();
@@ -65,11 +62,6 @@ public class InMemoryEventAsynchronousHostSystem extends JamesImapHostSystem {
private InMemoryEventAsynchronousHostSystem() throws MailboxException {
initFields();
}
-
- public boolean addUser(String user, String password) throws Exception {
- userManager.addUser(user, password);
- return true;
- }
@Override
protected void resetData() throws Exception {
@@ -77,13 +69,12 @@ public class InMemoryEventAsynchronousHostSystem extends JamesImapHostSystem {
}
private void initFields() throws MailboxException {
- userManager = new FakeAuthenticator();
InMemoryMailboxSessionMapperFactory factory = new InMemoryMailboxSessionMapperFactory();
MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new StoreMailboxManager(factory, userManager, FakeAuthorizator.defaultReject(), aclResolver, groupMembershipResolver, messageParser,
+ mailboxManager = new StoreMailboxManager(factory, authenticator, authorizator, aclResolver, groupMembershipResolver, messageParser,
new InMemoryMessageId.Factory(), MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(factory);
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
index de3a4f7..97b4e17 100644
--- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
+++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
@@ -35,8 +35,6 @@ import org.apache.james.mailbox.inmemory.quota.InMemoryCurrentQuotaManager;
import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.quota.QuotaRootResolver;
-import org.apache.james.mailbox.store.FakeAuthenticator;
-import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -58,7 +56,6 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
Feature.ANNOTATION_SUPPORT);
private InMemoryMailboxManager mailboxManager;
- private FakeAuthenticator userManager;
public static JamesImapHostSystem build() throws Exception {
return new InMemoryHostSystem();
@@ -67,11 +64,6 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
private InMemoryHostSystem() throws MailboxException {
initFields();
}
-
- public boolean addUser(String user, String password) throws Exception {
- userManager.addUser(user, password);
- return true;
- }
@Override
protected void resetData() throws Exception {
@@ -79,13 +71,12 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
}
private void initFields() throws MailboxException {
- userManager = new FakeAuthenticator();
MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
- mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, userManager, FakeAuthorizator.defaultReject(),
+ mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, authenticator, authorizator,
new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, new InMemoryMessageId.Factory());
QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mailboxManager.getMapperFactory());
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
index 51f5fe2..a52e696 100644
--- a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
+++ b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
@@ -40,8 +40,6 @@ import org.apache.james.mailbox.jcr.JCRUtils;
import org.apache.james.mailbox.jcr.mail.JCRModSeqProvider;
import org.apache.james.mailbox.jcr.mail.JCRUidProvider;
import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.FakeAuthenticator;
-import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -54,14 +52,13 @@ import org.apache.james.mpt.imapmailbox.MailboxCreationDelegate;
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
-public class JCRHostSystem extends JamesImapHostSystem{
+public class JCRHostSystem extends JamesImapHostSystem {
public static JamesImapHostSystem build() throws Exception {
return new JCRHostSystem();
}
private final JCRMailboxManager mailboxManager;
- private final FakeAuthenticator userManager;
private static final String JACKRABBIT_HOME = "target/jackrabbit";
public static final String META_DATA_DIRECTORY = "target/user-meta-data";
@@ -84,8 +81,7 @@ public class JCRHostSystem extends JamesImapHostSystem{
// Register imap cnd file
JCRUtils.registerCnd(repository, workspace, user, pass);
-
- userManager = new FakeAuthenticator();
+
JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
JCRUidProvider uidProvider = new JCRUidProvider(locker, sessionRepos);
JCRModSeqProvider modSeqProvider = new JCRModSeqProvider(locker, sessionRepos);
@@ -95,7 +91,7 @@ public class JCRHostSystem extends JamesImapHostSystem{
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new JCRMailboxManager(mf, userManager, FakeAuthorizator.defaultReject(), aclResolver, groupMembershipResolver, messageParser,
+ mailboxManager = new JCRMailboxManager(mf, authenticator, authorizator, aclResolver, groupMembershipResolver, messageParser,
new DefaultMessageId.Factory());
mailboxManager.init();
@@ -118,12 +114,6 @@ public class JCRHostSystem extends JamesImapHostSystem{
}
}
-
- public boolean addUser(String user, String password) {
- userManager.addUser(user, password);
- return true;
- }
-
public void resetData() throws Exception {
resetUserMetaData();
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 7c6f930..1fdc752 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -42,8 +42,6 @@ import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.FakeAuthenticator;
-import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -67,13 +65,9 @@ public class JPAHostSystem extends JamesImapHostSystem {
}
private final OpenJPAMailboxManager mailboxManager;
- private final FakeAuthenticator userManager;
- private final EntityManagerFactory entityManagerFactory;
public JPAHostSystem() throws Exception {
-
- userManager = new FakeAuthenticator();
- entityManagerFactory = JPA_TEST_CLUSTER.getEntityManagerFactory();
+ EntityManagerFactory entityManagerFactory = JPA_TEST_CLUSTER.getEntityManagerFactory();
JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
JPAUidProvider uidProvider = new JPAUidProvider(locker, entityManagerFactory);
JPAModSeqProvider modSeqProvider = new JPAModSeqProvider(locker, entityManagerFactory);
@@ -83,7 +77,7 @@ public class JPAHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new OpenJPAMailboxManager(mf, userManager, FakeAuthorizator.defaultReject(), locker, false, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
+ mailboxManager = new OpenJPAMailboxManager(mf, authenticator, authorizator, locker, false, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
mailboxManager.init();
SubscriptionManager subscriptionManager = new JPASubscriptionManager(mf);
@@ -103,11 +97,6 @@ public class JPAHostSystem extends JamesImapHostSystem {
}
- public boolean addUser(String user, String password) {
- userManager.addUser(user, password);
- return true;
- }
-
public void resetData() throws Exception {
resetUserMetaData();
MailboxSession session = mailboxManager.createSystemSession("test", LoggerFactory.getLogger("TestLog"));
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index caa3b08..c354e82 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -48,8 +48,6 @@ import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
import org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.FakeAuthenticator;
-import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -73,13 +71,6 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
private File tempFile;
private OpenJPAMailboxManager mailboxManager;
- private FakeAuthenticator userManager;
- private EntityManagerFactory entityManagerFactory;
-
- public boolean addUser(String user, String password) throws Exception {
- userManager.addUser(user, password);
- return true;
- }
@Override
public void beforeTest() throws Exception {
@@ -109,8 +100,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
}
private void initFields() {
- userManager = new FakeAuthenticator();
- entityManagerFactory = JPA_TEST_CLUSTER.getEntityManagerFactory();
+ EntityManagerFactory entityManagerFactory = JPA_TEST_CLUSTER.getEntityManagerFactory();
JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
JPAUidProvider uidProvider = new JPAUidProvider(locker, entityManagerFactory);
JPAModSeqProvider modSeqProvider = new JPAModSeqProvider(locker, entityManagerFactory);
@@ -125,7 +115,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new OpenJPAMailboxManager(factory, userManager, FakeAuthorizator.defaultReject(), locker, false, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ mailboxManager = new OpenJPAMailboxManager(factory, authenticator, authorizator, locker, false, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
LuceneMessageSearchIndex searchIndex = new LuceneMessageSearchIndex(factory, mailboxIdFactory, fsDirectory, messageIdFactory, mailboxManager);
searchIndex.setEnableSuffixMatch(true);
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index dcb73c4..4915fe4 100644
--- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -33,8 +33,6 @@ import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.maildir.MaildirMailboxSessionMapperFactory;
import org.apache.james.mailbox.maildir.MaildirStore;
import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.FakeAuthenticator;
-import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.StoreMailboxManager;
import org.apache.james.mailbox.store.StoreSubscriptionManager;
@@ -54,25 +52,22 @@ public class MaildirHostSystem extends JamesImapHostSystem {
private static final ImapFeatures SUPPORTED_FEATURES = ImapFeatures.of();
private final StoreMailboxManager mailboxManager;
- private final FakeAuthenticator userManager;
- private final MaildirMailboxSessionMapperFactory mailboxSessionMapperFactory;
-
+
public static JamesImapHostSystem build() throws Exception {
return new MaildirHostSystem();
}
public MaildirHostSystem() throws MailboxException {
- userManager = new FakeAuthenticator();
JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
MaildirStore store = new MaildirStore(MAILDIR_HOME + "/%user", locker);
- mailboxSessionMapperFactory = new MaildirMailboxSessionMapperFactory(store);
+ MaildirMailboxSessionMapperFactory mailboxSessionMapperFactory = new MaildirMailboxSessionMapperFactory(store);
StoreSubscriptionManager sm = new StoreSubscriptionManager(mailboxSessionMapperFactory);
MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, userManager, FakeAuthorizator.defaultReject(), locker, aclResolver,
+ mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, authenticator, authorizator, locker, aclResolver,
groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
mailboxManager.init();
@@ -87,11 +82,7 @@ public class MaildirHostSystem extends JamesImapHostSystem {
defaultImapProcessorFactory);
(new File(MAILDIR_HOME)).mkdirs();
}
-
- public boolean addUser(String user, String password) throws Exception {
- userManager.addUser(user, password);
- return true;
- }
+
@Override
public void resetData() throws Exception {
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/mpt/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/pom.xml b/mpt/pom.xml
index 4815d79..2fcd3a7 100644
--- a/mpt/pom.xml
+++ b/mpt/pom.xml
@@ -294,6 +294,11 @@
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
+ <artifactId>james-server-mailbox-adapter</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
<artifactId>james-server-data-memory</artifactId>
<version>${project.version}</version>
</dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/3f26ba0c/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java b/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java
index 02d48b8..003d669 100644
--- a/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java
+++ b/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java
@@ -52,6 +52,10 @@ public class MemoryUsersRepository extends AbstractUsersRepository {
this.supportVirtualHosting = supportVirtualHosting;
}
+ public void clear() {
+ userByName.clear();
+ }
+
@Override
public boolean supportVirtualHosting() {
return supportVirtualHosting;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[08/12] james-project git commit: JAMES-1930 Refactor Auth plain
parsing
Posted by ad...@apache.org.
JAMES-1930 Refactor Auth plain parsing
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0175e31a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0175e31a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0175e31a
Branch: refs/heads/master
Commit: 0175e31af0aae97f8ec56ddcf0c6eaeb010b302e
Parents: 200460c
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Feb 9 11:28:53 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 11:29:30 2017 +0100
----------------------------------------------------------------------
.../imap/processor/AuthenticateProcessor.java | 67 ++++++++++++++++----
1 file changed, 54 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/0175e31a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
index 12eeb98..1abc69d 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
@@ -37,6 +37,8 @@ import org.apache.james.imap.message.request.IRAuthenticateRequest;
import org.apache.james.imap.message.response.AuthenticateResponse;
import org.apache.james.mailbox.MailboxManager;
+import com.google.common.base.Optional;
+
/**
* Processor which handles the AUTHENTICATE command. Only authtype of PLAIN is supported ATM.
*
@@ -101,16 +103,21 @@ public class AuthenticateProcessor extends AbstractAuthProcessor<AuthenticateReq
* @param responder
*/
protected void doPlainAuth(String initialClientResponse, ImapSession session, String tag, ImapCommand command, Responder responder) {
- String pass = null;
- String user = null;
+ AuthPlainAttempt authPlainAttempt = parseDelegationAttempt(initialClientResponse);
+ // Authenticate user
+ doAuth(authPlainAttempt.getAuthenticationId(), authPlainAttempt.getPassword(), session, tag, command, responder, HumanReadableText.AUTHENTICATION_FAILED);
+ }
+
+ private AuthPlainAttempt parseDelegationAttempt(String initialClientResponse) {
+ String token2;
try {
String userpass = new String(Base64.decodeBase64(initialClientResponse));
StringTokenizer authTokenizer = new StringTokenizer(userpass, "\0");
- String authorize_id = authTokenizer.nextToken(); // Authorization Identity
- user = authTokenizer.nextToken(); // Authentication Identity
+ String token1 = authTokenizer.nextToken(); // Authorization Identity
+ token2 = authTokenizer.nextToken(); // Authentication Identity
try {
- pass = authTokenizer.nextToken(); // Password
+ return delegation(token1, token2, authTokenizer.nextToken());
} catch (java.util.NoSuchElementException _) {
// If we got here, this is what happened. RFC 2595
// says that "the client may leave the authorization
@@ -127,19 +134,17 @@ public class AuthenticateProcessor extends AbstractAuthProcessor<AuthenticateReq
// elements, leading to the exception we just
// caught. So we need to move the user to the
// password, and the authorize_id to the user.
- pass = user;
- user = authorize_id;
- }
-
- authTokenizer = null;
+ return noDelegation(token1, token2);
+ } finally {
+ authTokenizer = null;
+ }
} catch (Exception e) {
// Ignored - this exception in parsing will be dealt
// with in the if clause below
+ return noDelegation(null, null);
}
- // Authenticate user
- doAuth(user, pass, session, tag, command, responder, HumanReadableText.AUTHENTICATION_FAILED);
}
-
+
/**
* @see org.apache.james.imap.processor.CapabilityImplementingProcessor
* #getImplementedCapabilities(org.apache.james.imap.api.process.ImapSession)
@@ -156,4 +161,40 @@ public class AuthenticateProcessor extends AbstractAuthProcessor<AuthenticateReq
return Collections.unmodifiableList(caps);
}
+ private static AuthPlainAttempt delegation(String authorizeId, String authenticationId, String password) {
+ return new AuthPlainAttempt(Optional.of(authorizeId), authenticationId, password);
+ }
+
+ private static AuthPlainAttempt noDelegation(String authenticationId, String password) {
+ return new AuthPlainAttempt(Optional.<String>absent(), authenticationId, password);
+ }
+
+ private static class AuthPlainAttempt {
+ private final Optional<String> authorizeId;
+ private final String authenticationId;
+ private final String password;
+
+ private AuthPlainAttempt(Optional<String> authorizeId, String authenticationId, String password) {
+ this.authorizeId = authorizeId;
+ this.authenticationId = authenticationId;
+ this.password = password;
+ }
+
+ public boolean isDelegation() {
+ return authorizeId.isPresent();
+ }
+
+ public Optional<String> getAuthorizeId() {
+ return authorizeId;
+ }
+
+ public String getAuthenticationId() {
+ return authenticationId;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[04/12] james-project git commit: JAMES-1930 Authenticator should not
mimic backend failure into login failure
Posted by ad...@apache.org.
JAMES-1930 Authenticator should not mimic backend failure into login failure
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bf283582
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bf283582
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bf283582
Branch: refs/heads/master
Commit: bf28358271b21f742a5a8188f909d95332dd174c
Parents: 2bf11b0
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Feb 9 15:00:06 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 11:29:29 2017 +0100
----------------------------------------------------------------------
.../james/mailbox/store/Authenticator.java | 4 +-
.../mailbox/store/StoreMailboxManager.java | 2 +-
.../store/UserRepositoryAuthenticator.java | 24 ++----
.../store/UserRepositoryAuthenticatorTest.java | 82 ++++++++++++++++++++
4 files changed, 92 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/bf283582/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authenticator.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authenticator.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authenticator.java
index 71e6eb5..f0587b3 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authenticator.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authenticator.java
@@ -19,6 +19,8 @@
package org.apache.james.mailbox.store;
+import org.apache.james.mailbox.exception.MailboxException;
+
/**
* Authenticates user credentials.
*/
@@ -32,5 +34,5 @@ public interface Authenticator {
* @return true when the user is authentic,
* false otherwise
*/
- boolean isAuthentic(String userid, CharSequence passwd);
+ boolean isAuthentic(String userid, CharSequence passwd) throws MailboxException;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/bf283582/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 110e08d..0175215 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -409,7 +409,7 @@ public class StoreMailboxManager implements MailboxManager {
* @param passwd the password
* @return success true if login success false otherwise
*/
- private boolean login(String userid, String passwd) {
+ private boolean login(String userid, String passwd) throws MailboxException {
return authenticator.isAuthentic(userid, passwd);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/bf283582/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthenticator.java
----------------------------------------------------------------------
diff --git a/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthenticator.java b/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthenticator.java
index 6d6f4b3..31de75c 100644
--- a/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthenticator.java
+++ b/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthenticator.java
@@ -21,42 +21,30 @@ package org.apache.james.adapter.mailbox.store;
import javax.inject.Inject;
-import org.apache.james.lifecycle.api.LogEnabled;
+import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.store.Authenticator;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.api.UsersRepositoryException;
-import org.slf4j.Logger;
/**
* Authenticator which use an UsersRepository to check if the user and password
* match
*/
-public class UserRepositoryAuthenticator implements Authenticator, LogEnabled {
+public class UserRepositoryAuthenticator implements Authenticator {
- private UsersRepository repos;
- private Logger log;
+ private final UsersRepository repos;
@Inject
- public void setUsersRepository(UsersRepository repos) {
+ public UserRepositoryAuthenticator(UsersRepository repos) {
this.repos = repos;
}
- /**
- * @see
- * org.apache.james.mailbox.store.Authenticator#isAuthentic(java.lang.String
- * , java.lang.CharSequence)
- */
- public boolean isAuthentic(String userid, CharSequence passwd) {
+ public boolean isAuthentic(String userid, CharSequence passwd) throws MailboxException {
try {
return repos.test(userid, passwd.toString());
} catch (UsersRepositoryException e) {
- log.info("Unable to access UsersRepository", e);
+ throw new MailboxException("Unable to access UsersRepository", e);
}
- return false;
- }
-
- public void setLog(Logger log) {
- this.log = log;
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/bf283582/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthenticatorTest.java
----------------------------------------------------------------------
diff --git a/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthenticatorTest.java b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthenticatorTest.java
new file mode 100644
index 0000000..48c8333
--- /dev/null
+++ b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthenticatorTest.java
@@ -0,0 +1,82 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.adapter.mailbox.store;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.api.UsersRepositoryException;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class UserRepositoryAuthenticatorTest {
+
+ public static final String PASSWORD = "password";
+ public static final String USER = "user";
+ public static final String BAD_PASSWORD = "badPassword";
+ public static final String BAD_USER = "badUser";
+ private UsersRepository usersRepository;
+ private UserRepositoryAuthenticator testee;
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Before
+ public void setUp() throws Exception {
+ usersRepository = mock(UsersRepository.class);
+ testee = new UserRepositoryAuthenticator(usersRepository);
+ }
+
+ @Test
+ public void isAuthenticShouldReturnTrueWhenGoodLoginPassword() throws Exception {
+ when(usersRepository.test(USER, PASSWORD)).thenReturn(true);
+
+ assertThat(testee.isAuthentic(USER, PASSWORD)).isTrue();
+ }
+
+ @Test
+ public void isAuthenticShouldReturnFalseWhenWrongPassword() throws Exception {
+ when(usersRepository.test(USER, BAD_PASSWORD)).thenReturn(false);
+
+ assertThat(testee.isAuthentic(USER, BAD_PASSWORD)).isFalse();
+ }
+
+ @Test
+ public void isAuthenticShouldReturnFalseWhenBadUser() throws Exception {
+ when(usersRepository.test(USER, BAD_PASSWORD)).thenReturn(false);
+
+ assertThat(testee.isAuthentic(BAD_USER, BAD_PASSWORD)).isFalse();
+ }
+
+ @Test
+ public void isAuthenticShouldFailOnUserRepositoryFailure() throws Exception {
+ when(usersRepository.test(USER, PASSWORD)).thenThrow(new UsersRepositoryException(""));
+
+ expectedException.expect(MailboxException.class);
+
+ testee.isAuthentic(USER, PASSWORD);
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[05/12] james-project git commit: JAMES-1930 Improve Exception
handling for Authorizer
Posted by ad...@apache.org.
JAMES-1930 Improve Exception handling for Authorizer
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2bf11b03
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2bf11b03
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2bf11b03
Branch: refs/heads/master
Commit: 2bf11b032f678f46733c25b64e4eb3114688bb09
Parents: 8b52a2b
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Feb 9 10:46:23 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 11:29:29 2017 +0100
----------------------------------------------------------------------
.../mailbox/exception/NotAdminException.java | 23 ++++++++
.../exception/UserDoesNotExistException.java | 34 +++++++++++
.../ElasticSearchIntegrationTest.java | 2 +-
.../search/LuceneMessageSearchIndexTest.java | 2 +-
.../inmemory/InMemoryMailboxManagerTest.java | 2 +-
.../MessageIdManagerTestSystemProvider.java | 2 +-
.../manager/InMemoryIntegrationResources.java | 2 +-
.../search/SimpleMessageSearchIndexTest.java | 2 +-
.../james/mailbox/spring/NoAuthorizator.java | 4 +-
.../james/mailbox/store/Authorizator.java | 10 +++-
.../james/mailbox/store/FakeAuthorizator.java | 32 +++++++---
.../mailbox/store/StoreMailboxManager.java | 19 ++++--
.../mailbox/store/StoreMailboxManagerTest.java | 34 +++++++++--
.../james/mailbox/copier/MailboxCopierTest.java | 4 +-
.../cassandra/host/CassandraHostSystem.java | 2 +-
.../host/ElasticSearchHostSystem.java | 2 +-
.../imapmailbox/hbase/host/HBaseHostSystem.java | 2 +-
.../InMemoryEventAsynchronousHostSystem.java | 2 +-
.../inmemory/host/InMemoryHostSystem.java | 2 +-
.../mpt/imapmailbox/jcr/host/JCRHostSystem.java | 2 +-
.../mpt/imapmailbox/jpa/host/JPAHostSystem.java | 2 +-
.../host/LuceneSearchHostSystem.java | 2 +-
.../maildir/host/MaildirHostSystem.java | 2 +-
.../store/UserRepositoryAuthorizator.java | 24 ++++----
.../adapter/mailbox/MailboxManagementTest.java | 2 +-
.../store/UserRepositoryAuthorizatorTest.java | 62 ++++++++++++++++----
.../apache/james/pop3server/POP3ServerTest.java | 5 +-
.../routes/UserMailboxesRoutesTest.java | 3 +-
28 files changed, 218 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/api/src/main/java/org/apache/james/mailbox/exception/NotAdminException.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/exception/NotAdminException.java b/mailbox/api/src/main/java/org/apache/james/mailbox/exception/NotAdminException.java
new file mode 100644
index 0000000..a60f360
--- /dev/null
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/exception/NotAdminException.java
@@ -0,0 +1,23 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mailbox.exception;
+
+public class NotAdminException extends MailboxException {
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/api/src/main/java/org/apache/james/mailbox/exception/UserDoesNotExistException.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/exception/UserDoesNotExistException.java b/mailbox/api/src/main/java/org/apache/james/mailbox/exception/UserDoesNotExistException.java
new file mode 100644
index 0000000..0c5ddf2
--- /dev/null
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/exception/UserDoesNotExistException.java
@@ -0,0 +1,34 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mailbox.exception;
+
+public class UserDoesNotExistException extends MailboxException {
+
+ private final String name;
+
+ public UserDoesNotExistException(String name) {
+ super("User " + name + "does not exist");
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index e8e07d5..c406419 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -94,7 +94,7 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest
storeMailboxManager = new InMemoryMailboxManager(
mapperFactory,
new FakeAuthenticator(),
- new FakeAuthorizator(),
+ FakeAuthorizator.defaultReject(),
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
index 210bd98..d76ef4e 100644
--- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
+++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
@@ -48,7 +48,7 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest
storeMailboxManager = new InMemoryMailboxManager(
mapperFactory,
new FakeAuthenticator(),
- new FakeAuthorizator(),
+ FakeAuthorizator.defaultReject(),
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
index f6bb97c..885d4e1 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
@@ -52,7 +52,7 @@ public class InMemoryMailboxManagerTest {
InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
- InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, new FakeAuthenticator(), new FakeAuthorizator(),
+ InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, new FakeAuthenticator(), FakeAuthorizator.defaultReject(),
aclResolver, groupMembershipResolver, messageParser, messageIdFactory, LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
try {
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
index cd54d43..8b27c6a 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
@@ -57,7 +57,7 @@ public class MessageIdManagerTestSystemProvider {
InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
FakeAuthenticator authenticator = new FakeAuthenticator();
- FakeAuthorizator authorizator = new FakeAuthorizator();
+ FakeAuthorizator authorizator = FakeAuthorizator.defaultReject();
authenticator.addUser(MailboxManagerFixture.USER, PASSWORD);
authenticator.addUser(MailboxManagerFixture.OTHER_USER, PASSWORD);
InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, authenticator, authorizator,
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index cc7d22d..240b5a7 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -59,7 +59,7 @@ public class InMemoryIntegrationResources implements IntegrationResources {
final StoreMailboxManager manager = new InMemoryMailboxManager(
mailboxSessionMapperFactory,
fakeAuthenticator,
- new FakeAuthorizator(),
+ FakeAuthorizator.defaultReject(),
new NoMailboxPathLocker(),
new UnionMailboxACLResolver(),
groupMembershipResolver,
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
index 694778b..b23beb9 100644
--- a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
+++ b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
@@ -45,7 +45,7 @@ public class SimpleMessageSearchIndexTest extends AbstractMessageSearchIndexTest
storeMailboxManager = new InMemoryMailboxManager(
mapperFactory,
new FakeAuthenticator(),
- new FakeAuthorizator(),
+ FakeAuthorizator.defaultReject(),
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java
----------------------------------------------------------------------
diff --git a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java
index 88500c3..f98e331 100644
--- a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java
+++ b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java
@@ -23,8 +23,8 @@ import org.apache.james.mailbox.store.Authorizator;
public class NoAuthorizator implements Authorizator {
@Override
- public boolean canLoginAsOtherUser(String userId, String otherUserId) {
- return false;
+ public AuthorizationState canLoginAsOtherUser(String userId, String otherUserId) {
+ return AuthorizationState.NOT_ADMIN;
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authorizator.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authorizator.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authorizator.java
index 4710e34..2b01aa8 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authorizator.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/Authorizator.java
@@ -19,11 +19,19 @@
package org.apache.james.mailbox.store;
+import org.apache.james.mailbox.exception.MailboxException;
+
/**
* Authenticates user credentials.
*/
public interface Authorizator {
- boolean canLoginAsOtherUser(String userId, String otherUserId);
+ enum AuthorizationState {
+ ALLOWED,
+ NOT_ADMIN,
+ UNKNOWN_USER
+ }
+
+ AuthorizationState canLoginAsOtherUser(String userId, String otherUserId) throws MailboxException;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java
index 4e15ed7..948ed55 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java
@@ -18,22 +18,38 @@
****************************************************************/
package org.apache.james.mailbox.store;
-import java.util.List;
-
-import com.google.common.collect.ImmutableList;
+import com.google.common.base.Optional;
public class FakeAuthorizator implements Authorizator {
- private List<String> adminIds;
+ public static FakeAuthorizator defaultReject() {
+ return new FakeAuthorizator(Optional.<String>absent(), Optional.<String>absent());
+ }
+
+ public static FakeAuthorizator forUserAndAdmin(String admin, String user) {
+ return new FakeAuthorizator(Optional.of(admin), Optional.of(user));
+ }
- public FakeAuthorizator(String... adminIds) {
- this.adminIds = ImmutableList.copyOf(adminIds);
+ private final Optional<String> adminId;
+ private final Optional<String> delegatedUserId;
+ private FakeAuthorizator(Optional<String> adminId, Optional<String> userId) {
+ this.adminId = adminId;
+ this.delegatedUserId = userId;
}
@Override
- public boolean canLoginAsOtherUser(String userId, String otherUserId) {
- return adminIds.contains(userId);
+ public AuthorizationState canLoginAsOtherUser(String userId, String otherUserId) {
+ if (!adminId.isPresent() || !this.delegatedUserId.isPresent()) {
+ return AuthorizationState.NOT_ADMIN;
+ }
+ if (!adminId.get().equals(userId)) {
+ return AuthorizationState.NOT_ADMIN;
+ }
+ if (!otherUserId.equals(this.delegatedUserId.get())) {
+ return AuthorizationState.UNKNOWN_USER;
+ }
+ return AuthorizationState.ALLOWED;
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 705fd8d..110e08d 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -47,6 +47,8 @@ import org.apache.james.mailbox.exception.BadCredentialsException;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.exception.MailboxExistsException;
import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.exception.NotAdminException;
+import org.apache.james.mailbox.exception.UserDoesNotExistException;
import org.apache.james.mailbox.model.MailboxACL;
import org.apache.james.mailbox.model.MailboxAnnotation;
import org.apache.james.mailbox.model.MailboxAnnotationKey;
@@ -421,12 +423,21 @@ public class StoreMailboxManager implements MailboxManager {
}
@Override
- public MailboxSession loginAsOtherUser(String adminUserid, String passwd, String otherUserId, Logger log) throws BadCredentialsException, MailboxException {
- if (login(adminUserid, passwd) && authorizator.canLoginAsOtherUser(adminUserid, otherUserId)) {
- return createSystemSession(otherUserId, log);
- } else {
+ public MailboxSession loginAsOtherUser(String adminUserid, String passwd, String otherUserId, Logger log) throws MailboxException {
+ if (! login(adminUserid, passwd)) {
throw new BadCredentialsException();
}
+ Authorizator.AuthorizationState authorizationState = authorizator.canLoginAsOtherUser(adminUserid, otherUserId);
+ switch (authorizationState) {
+ case ALLOWED:
+ return createSystemSession(otherUserId, log);
+ case NOT_ADMIN:
+ throw new NotAdminException();
+ case UNKNOWN_USER:
+ throw new UserDoesNotExistException(otherUserId);
+ default:
+ throw new RuntimeException("Unknown AuthorizationState " + authorizationState);
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index fd4fae2..c55d7cc 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -30,6 +30,8 @@ import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
import org.apache.james.mailbox.exception.BadCredentialsException;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.exception.NotAdminException;
+import org.apache.james.mailbox.exception.UserDoesNotExistException;
import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
@@ -54,6 +56,8 @@ public class StoreMailboxManagerTest {
private static final MailboxId MAILBOX_ID = TestId.of(123);
private static final Logger LOGGER = LoggerFactory.getLogger(StoreMailboxManagerTest.class);
private static final int UID_VALIDITY = 42;
+ public static final String UNKNOWN_USER = "otheruser";
+ public static final String BAD_PASSWORD = "badpassword";
private StoreMailboxManager storeMailboxManager;
private MailboxMapper mockedMailboxMapper;
private MailboxSession mockedMailboxSession;
@@ -69,7 +73,7 @@ public class StoreMailboxManagerTest {
FakeAuthenticator authenticator = new FakeAuthenticator();
authenticator.addUser(CURRENT_USER, CURRENT_USER_PASSWORD);
authenticator.addUser(ADMIN, ADMIN_PASSWORD);
- storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, authenticator, new FakeAuthorizator(ADMIN),
+ storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, authenticator, FakeAuthorizator.forUserAndAdmin(ADMIN, CURRENT_USER),
new JVMMailboxPathLocker(), new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(),
new MessageParser(), messageIdFactory);
storeMailboxManager.init();
@@ -186,17 +190,37 @@ public class StoreMailboxManagerTest {
@Test(expected = BadCredentialsException.class)
public void loginShouldThrowWhenBadPassword() throws Exception {
- storeMailboxManager.login(CURRENT_USER, "badpassword", LOGGER);
+ storeMailboxManager.login(CURRENT_USER, BAD_PASSWORD, LOGGER);
}
@Test(expected = BadCredentialsException.class)
public void loginAsOtherUserShouldNotCreateUserSessionWhenAdminWithBadPassword() throws Exception {
- storeMailboxManager.loginAsOtherUser(ADMIN, "badpassword", CURRENT_USER, LOGGER);
+ storeMailboxManager.loginAsOtherUser(ADMIN, BAD_PASSWORD, CURRENT_USER, LOGGER);
}
- @Test(expected = BadCredentialsException.class)
+ @Test(expected = NotAdminException.class)
public void loginAsOtherUserShouldNotCreateUserSessionWhenNotAdmin() throws Exception {
- storeMailboxManager.loginAsOtherUser(CURRENT_USER, CURRENT_USER_PASSWORD, "otheruser", LOGGER);
+ storeMailboxManager.loginAsOtherUser(CURRENT_USER, CURRENT_USER_PASSWORD, UNKNOWN_USER, LOGGER);
+ }
+
+ @Test(expected = BadCredentialsException.class)
+ public void loginAsOtherUserShouldThrowBadCredentialWhenBadPasswordAndNotAdminUser() throws Exception {
+ storeMailboxManager.loginAsOtherUser(CURRENT_USER, BAD_PASSWORD, CURRENT_USER, LOGGER);
+ }
+
+ @Test(expected = BadCredentialsException.class)
+ public void loginAsOtherUserShouldThrowBadCredentialWhenBadPasswordNotAdminUserAndUnknownUser() throws Exception {
+ storeMailboxManager.loginAsOtherUser(CURRENT_USER, BAD_PASSWORD, UNKNOWN_USER, LOGGER);
+ }
+
+ @Test(expected = BadCredentialsException.class)
+ public void loginAsOtherUserShouldThrowBadCredentialsWhenBadPasswordAndUserDoesNotExists() throws Exception {
+ storeMailboxManager.loginAsOtherUser(ADMIN, BAD_PASSWORD, UNKNOWN_USER, LOGGER);
+ }
+
+ @Test(expected = UserDoesNotExistException.class)
+ public void loginAsOtherUserShouldNotCreateUserSessionWhenDelegatedUserDoesNotExist() throws Exception {
+ storeMailboxManager.loginAsOtherUser(ADMIN, ADMIN_PASSWORD, UNKNOWN_USER, LOGGER);
}
@Test
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
----------------------------------------------------------------------
diff --git a/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java b/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
index c0bdbc1..45db8bf 100644
--- a/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
+++ b/mailbox/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
@@ -169,8 +169,8 @@ public class MailboxCopierTest {
},
new Authorizator() {
@Override
- public boolean canLoginAsOtherUser(String userId, String otherUserId) {
- return false;
+ public AuthorizationState canLoginAsOtherUser(String userId, String otherUserId) {
+ return AuthorizationState.NOT_ADMIN;
}
},
aclResolver,
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index 8e76403..e466f2d 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -92,7 +92,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
new CassandraAnnotationModule());
cassandraClusterSingleton = CassandraCluster.create(mailboxModule);
userManager = new FakeAuthenticator();
- authorizator = new FakeAuthorizator();
+ authorizator = FakeAuthorizator.defaultReject();
com.datastax.driver.core.Session session = cassandraClusterSingleton.getConf();
CassandraModSeqProvider modSeqProvider = new CassandraModSeqProvider(session);
CassandraUidProvider uidProvider = new CassandraUidProvider(session);
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 6caa31c..5989b02 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -125,7 +125,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new StoreMailboxManager(factory, userManager, new FakeAuthorizator(), aclResolver, groupMembershipResolver, messageParser,
+ mailboxManager = new StoreMailboxManager(factory, userManager, FakeAuthorizator.defaultReject(), aclResolver, groupMembershipResolver, messageParser,
messageIdFactory, MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
mailboxManager.setMessageSearchIndex(searchIndex);
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
index 7ed820e..4feb238 100644
--- a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
+++ b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java
@@ -92,7 +92,7 @@ public class HBaseHostSystem extends JamesImapHostSystem {
}
userManager = new FakeAuthenticator();
- FakeAuthorizator authorizator = new FakeAuthorizator();
+ FakeAuthorizator authorizator = FakeAuthorizator.defaultReject();
final HBaseModSeqProvider modSeqProvider = new HBaseModSeqProvider(conf);
final HBaseUidProvider uidProvider = new HBaseUidProvider(conf);
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
index 0f24491..a628031 100644
--- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
+++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryEventAsynchronousHostSystem.java
@@ -83,7 +83,7 @@ public class InMemoryEventAsynchronousHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new StoreMailboxManager(factory, userManager, new FakeAuthorizator(), aclResolver, groupMembershipResolver, messageParser,
+ mailboxManager = new StoreMailboxManager(factory, userManager, FakeAuthorizator.defaultReject(), aclResolver, groupMembershipResolver, messageParser,
new InMemoryMessageId.Factory(), MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(factory);
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
index 5cb7729..de3a4f7 100644
--- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
+++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
@@ -85,7 +85,7 @@ public class InMemoryHostSystem extends JamesImapHostSystem {
MessageParser messageParser = new MessageParser();
InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
- mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, userManager, new FakeAuthorizator(),
+ mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, userManager, FakeAuthorizator.defaultReject(),
new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, new InMemoryMessageId.Factory());
QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mailboxManager.getMapperFactory());
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
index edca72d..51f5fe2 100644
--- a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
+++ b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java
@@ -95,7 +95,7 @@ public class JCRHostSystem extends JamesImapHostSystem{
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new JCRMailboxManager(mf, userManager, new FakeAuthorizator(), aclResolver, groupMembershipResolver, messageParser,
+ mailboxManager = new JCRMailboxManager(mf, userManager, FakeAuthorizator.defaultReject(), aclResolver, groupMembershipResolver, messageParser,
new DefaultMessageId.Factory());
mailboxManager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 37165bc..7c6f930 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -83,7 +83,7 @@ public class JPAHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new OpenJPAMailboxManager(mf, userManager, new FakeAuthorizator(), locker, false, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
+ mailboxManager = new OpenJPAMailboxManager(mf, userManager, FakeAuthorizator.defaultReject(), locker, false, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
mailboxManager.init();
SubscriptionManager subscriptionManager = new JPASubscriptionManager(mf);
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index 10d8845..caa3b08 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -125,7 +125,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new OpenJPAMailboxManager(factory, userManager, new FakeAuthorizator(), locker, false, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
+ mailboxManager = new OpenJPAMailboxManager(factory, userManager, FakeAuthorizator.defaultReject(), locker, false, aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
LuceneMessageSearchIndex searchIndex = new LuceneMessageSearchIndex(factory, mailboxIdFactory, fsDirectory, messageIdFactory, mailboxManager);
searchIndex.setEnableSuffixMatch(true);
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index 9a97fdd..dcb73c4 100644
--- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -72,7 +72,7 @@ public class MaildirHostSystem extends JamesImapHostSystem {
GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
MessageParser messageParser = new MessageParser();
- mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, userManager, new FakeAuthorizator(), locker, aclResolver,
+ mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, userManager, FakeAuthorizator.defaultReject(), locker, aclResolver,
groupMembershipResolver, messageParser, new DefaultMessageId.Factory());
mailboxManager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizator.java
----------------------------------------------------------------------
diff --git a/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizator.java b/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizator.java
index 494a499..cda4fa9 100644
--- a/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizator.java
+++ b/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizator.java
@@ -21,19 +21,17 @@ package org.apache.james.adapter.mailbox.store;
import javax.inject.Inject;
-import org.apache.james.lifecycle.api.LogEnabled;
+import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.api.UsersRepositoryException;
-import org.slf4j.Logger;
/**
* Authorizator which use an UsersRepository to check if the delegation is allowed
*/
-public class UserRepositoryAuthorizator implements Authorizator, LogEnabled {
+public class UserRepositoryAuthorizator implements Authorizator {
private final UsersRepository repos;
- private Logger log;
@Inject
public UserRepositoryAuthorizator(UsersRepository repos) {
@@ -41,18 +39,18 @@ public class UserRepositoryAuthorizator implements Authorizator, LogEnabled {
}
@Override
- public boolean canLoginAsOtherUser(String userId, String otherUserId) {
+ public AuthorizationState canLoginAsOtherUser(String userId, String otherUserId) throws MailboxException {
try {
- return repos.isAdministrator(userId) && repos.contains(otherUserId);
+ if (!repos.isAdministrator(userId)) {
+ return AuthorizationState.NOT_ADMIN;
+ }
+ if (!repos.contains(otherUserId)) {
+ return AuthorizationState.UNKNOWN_USER;
+ }
+ return AuthorizationState.ALLOWED;
} catch (UsersRepositoryException e) {
- log.warn("Unable to access UsersRepository", e);
+ throw new MailboxException("Unable to access usersRepository", e);
}
- return false;
- }
-
- @Override
- public void setLog(Logger log) {
- this.log = log;
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
----------------------------------------------------------------------
diff --git a/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
index dbcd8ac..4c4cc42 100644
--- a/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
+++ b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
@@ -56,7 +56,7 @@ public class MailboxManagementTest {
StoreMailboxManager mailboxManager = new StoreMailboxManager(
inMemoryMapperFactory,
new FakeAuthenticator(),
- new FakeAuthorizator(),
+ FakeAuthorizator.defaultReject(),
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizatorTest.java
----------------------------------------------------------------------
diff --git a/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizatorTest.java b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizatorTest.java
index ea94ba4..84e499e 100644
--- a/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizatorTest.java
+++ b/server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/store/UserRepositoryAuthorizatorTest.java
@@ -1,65 +1,101 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
package org.apache.james.adapter.mailbox.store;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.store.Authorizator;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.api.UsersRepositoryException;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.junit.rules.ExpectedException;
public class UserRepositoryAuthorizatorTest {
private static final String ADMIN = "admin";
private static final String USER = "user";
- private static final Logger LOGGER = LoggerFactory.getLogger(UserRepositoryAuthorizatorTest.class);
private UsersRepository usersRepository;
private UserRepositoryAuthorizator testee;
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
@Before
public void setUp() throws Exception {
usersRepository = mock(UsersRepository.class);
testee = new UserRepositoryAuthorizator(usersRepository);
- testee.setLog(LOGGER);
}
@Test
- public void canLoginAsOtherUserShouldReturnFalseWhenIsAdministratorThrows() throws Exception {
+ public void canLoginAsOtherUserShouldThrowMailboxExceptionWhenIsAdministratorThrows() throws Exception {
when(usersRepository.isAdministrator(ADMIN))
.thenThrow(new UsersRepositoryException("expected error"));
-
- assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isFalse();
+
+ expectedException.expect(MailboxException.class);
+
+ testee.canLoginAsOtherUser(ADMIN, USER);
}
@Test
- public void canLoginAsOtherUserShouldReturnFalseWhenIsAdministratorReturnFalse() throws Exception {
+ public void canLoginAsOtherUserShouldReturnNotAdminWhenNotAdminAndNoUser() throws Exception {
when(usersRepository.isAdministrator(ADMIN))
.thenReturn(false);
+ when(usersRepository.contains(USER))
+ .thenReturn(false);
- assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isFalse();
+ assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isEqualTo(Authorizator.AuthorizationState.NOT_ADMIN);
+ }
+
+ @Test
+ public void canLoginAsOtherUserShouldReturnNotAdminWhenNotAdminAndUser() throws Exception {
+ when(usersRepository.isAdministrator(ADMIN))
+ .thenReturn(false);
+ when(usersRepository.contains(USER))
+ .thenReturn(true);
+
+ assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isEqualTo(Authorizator.AuthorizationState.NOT_ADMIN);
}
@Test
- public void canLoginAsOtherUserShouldReturnFalseWhenUserIsNotInRepository() throws Exception {
+ public void canLoginAsOtherUserShouldReturnUnknownUserWhenUserIsNotInRepository() throws Exception {
when(usersRepository.isAdministrator(ADMIN))
.thenReturn(true);
when(usersRepository.contains(USER))
.thenReturn(false);
- assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isFalse();
+ assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isEqualTo(Authorizator.AuthorizationState.UNKNOWN_USER);
}
@Test
- public void canLoginAsOtherUserShouldReturnTrueWhenAdminAndUserIsInRepository() throws Exception {
+ public void canLoginAsOtherUserShouldReturnAllowedWhenAdminAndUserIsInRepository() throws Exception {
when(usersRepository.isAdministrator(ADMIN))
.thenReturn(true);
when(usersRepository.contains(USER))
.thenReturn(true);
- assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isTrue();
+ assertThat(testee.canLoginAsOtherUser(ADMIN, USER)).isEqualTo(Authorizator.AuthorizationState.ALLOWED);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
index 1b6e453..46501c9 100644
--- a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
+++ b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
@@ -740,10 +740,9 @@ public class POP3ServerTest {
}
}
}, new Authorizator() {
-
@Override
- public boolean canLoginAsOtherUser(String userId, String otherUserId) {
- return false;
+ public AuthorizationState canLoginAsOtherUser(String userId, String otherUserId) {
+ return AuthorizationState.NOT_ADMIN;
}
}, aclResolver, groupMembershipResolver, messageParser, new DefaultMessageId.Factory(), MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE);
mailboxManager.init();
http://git-wip-us.apache.org/repos/asf/james-project/blob/2bf11b03/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java b/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index bd28679..8c9c2db 100644
--- a/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ b/server/protocols/webadmin/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -45,6 +45,7 @@ import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MailboxQuery;
import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.store.FakeAuthorizator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.SimpleMailboxMetaData;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
@@ -103,7 +104,7 @@ public class UserMailboxesRoutesTest {
MessageId.Factory messageIdFactory = new DefaultMessageId.Factory();
InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(new InMemoryMailboxSessionMapperFactory(),
(userid, passwd) -> true,
- (adminUserid, userid) -> false,
+ FakeAuthorizator.defaultReject(),
new JVMMailboxPathLocker(),
new UnionMailboxACLResolver(),
new SimpleGroupMembershipResolver(),
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[07/12] james-project git commit: JAMES-1930 Introduce MPT REINIT
command
Posted by ad...@apache.org.
JAMES-1930 Introduce MPT REINIT command
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bdf89328
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bdf89328
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bdf89328
Branch: refs/heads/master
Commit: bdf89328fcfae95853a20c477422fca70cc3216d
Parents: bf28358
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Feb 9 17:43:55 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 11:29:30 2017 +0100
----------------------------------------------------------------------
.../java/org/apache/james/mpt/api/Session.java | 7 ++++++
.../protocol/FileProtocolSessionBuilder.java | 3 +++
.../james/mpt/protocol/ProtocolSession.java | 25 +++++++++++++++++++-
.../mpt/protocol/ProtocolSessionBuilder.java | 2 ++
.../james/mpt/session/ExternalSession.java | 5 ++++
.../james/mpt/host/JamesImapHostSystem.java | 4 ++++
.../james/mpt/host/ManageSieveSession.java | 4 ++++
7 files changed, 49 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java b/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
index 9dd9919..170b365 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
@@ -47,6 +47,13 @@ public interface Session {
void start() throws Exception;
/**
+ * Reopens the session to reinitialize the server state
+ *
+ * @throws Exception
+ */
+ void restart() throws Exception;
+
+ /**
* Closes the session.
*
* @throws Exception
http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java b/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
index 5dea7c8..3648a11 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
@@ -138,6 +138,9 @@ public class FileProtocolSessionBuilder extends ProtocolSessionBuilder {
throw new Exception("Unrecognized log level for " + next);
}
}
+ else if (next.startsWith(REINIT)) {
+ session.REINIT(sessionNumber);
+ }
else if (next.startsWith(OPEN_UNORDERED_BLOCK_TAG)) {
List<String> unorderedLines = new ArrayList<String>(5);
next = reader.readLine();
http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
index 1afd1f4..5045acb 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
@@ -202,6 +202,11 @@ public class ProtocolSession implements ProtocolInteractor {
testElements.add(new LogElement(level, message));
}
+ public void REINIT(int sessionNumber) {
+ this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);
+ testElements.add(new ReinitElement(sessionNumber));
+ }
+
/**
* A client request, which write the specified message to a Writer.
*/
@@ -467,7 +472,7 @@ public class ProtocolSession implements ProtocolInteractor {
private final int sessionNumber;
public ContinuationElement(int sessionNumber) throws Exception {
- this.sessionNumber = sessionNumber < 0 ? 0 : sessionNumber;
+ this.sessionNumber = Math.max(0, sessionNumber);
}
public void testProtocol(Session[] sessions, boolean continueAfterFailure) throws Exception {
@@ -497,6 +502,24 @@ public class ProtocolSession implements ProtocolInteractor {
}
}
+ private class ReinitElement implements ProtocolElement {
+
+ private final int sessionNumber;
+
+ public ReinitElement(int sessionNumber) {
+ this.sessionNumber = Math.max(0, sessionNumber);
+ }
+
+ public void testProtocol(Session[] sessions, boolean continueAfterFailure) throws Exception {
+ Session session = sessions[sessionNumber];
+ session.restart();
+ }
+
+ public boolean isClient() {
+ return false;
+ }
+ }
+
/**
* Allow you to wait a given time at a given point of the test script
*/
http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
index 2f4db62..657c64a 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
@@ -57,6 +57,8 @@ public class ProtocolSessionBuilder {
public static final String SESSION_TAG = "SESSION:";
+ public static final String REINIT = "REINIT";
+
private final Properties variables;
public ProtocolSessionBuilder() {
http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java b/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
index 5eb1b74..9c65851 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
@@ -26,6 +26,7 @@ import java.nio.charset.Charset;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
+import org.apache.commons.lang.NotImplementedException;
import org.apache.commons.lang.mutable.MutableInt;
import org.apache.james.mpt.api.Monitor;
import org.apache.james.mpt.api.Session;
@@ -151,6 +152,10 @@ public final class ExternalSession implements Session {
}
}
+ public void restart() throws Exception {
+ throw new NotImplementedException("Restart is not implemented for ExternalSession");
+ }
+
public void stop() throws Exception {
monitor.note("closing");
socket.close();
http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
index 1251cff..e2be945 100644
--- a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
+++ b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
@@ -105,6 +105,10 @@ public abstract class JamesImapHostSystem implements ImapHostSystem {
out.write("* OK IMAP4rev1 Server ready\r\n");
}
+ public void restart() throws Exception {
+ session = new ImapSessionImpl(LoggerFactory.getLogger("sessionLog"));
+ }
+
public void stop() throws Exception {
session.deselect();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
----------------------------------------------------------------------
diff --git a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
index 05eaa1a..7c1f913 100644
--- a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
+++ b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
@@ -81,6 +81,10 @@ public class ManageSieveSession implements Session {
}
@Override
+ public void restart() throws Exception {
+ }
+
+ @Override
public void writeLine(String line) throws Exception {
isReadLast = false;
in.nextLine(line);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org