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 <[email protected]> Authored: Wed Feb 8 17:54:26 2017 +0100 Committer: Antoine Duprat <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
