[jira] [Resolved] (JAMES-2159) Collect recipients as contacts mailet
[ https://issues.apache.org/jira/browse/JAMES-2159?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Tellier Benoit resolved JAMES-2159. --- Resolution: Fixed > Collect recipients as contacts mailet > - > > Key: JAMES-2159 > URL: https://issues.apache.org/jira/browse/JAMES-2159 > Project: James Server > Issue Type: New Feature > Components: Matchers/Mailets (bundled) >Reporter: Antoine Duprat > > Introduce a mailet which stores the recipient and the sender in a message > attribute as a JSON. > Here is the expected format: > {code} > { > userEmail : sen...@james.org, > emails : [ t...@james.org, c...@james.org] > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[jira] [Closed] (JAMES-2159) Collect recipients as contacts mailet
[ https://issues.apache.org/jira/browse/JAMES-2159?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Tellier Benoit closed JAMES-2159. - > Collect recipients as contacts mailet > - > > Key: JAMES-2159 > URL: https://issues.apache.org/jira/browse/JAMES-2159 > Project: James Server > Issue Type: New Feature > Components: Matchers/Mailets (bundled) >Reporter: Antoine Duprat > > Introduce a mailet which stores the recipient and the sender in a message > attribute as a JSON. > Here is the expected format: > {code} > { > userEmail : sen...@james.org, > emails : [ t...@james.org, c...@james.org] > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[jira] [Commented] (JAMES-2159) Collect recipients as contacts mailet
[ https://issues.apache.org/jira/browse/JAMES-2159?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16193987#comment-16193987 ] Tellier Benoit commented on JAMES-2159: --- https://github.com/linagora/james-project/pull/1016 added some corrections > Collect recipients as contacts mailet > - > > Key: JAMES-2159 > URL: https://issues.apache.org/jira/browse/JAMES-2159 > Project: James Server > Issue Type: New Feature > Components: Matchers/Mailets (bundled) >Reporter: Antoine Duprat > > Introduce a mailet which stores the recipient and the sender in a message > attribute as a JSON. > Here is the expected format: > {code} > { > userEmail : sen...@james.org, > emails : [ t...@james.org, c...@james.org] > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[jira] [Commented] (JAMES-2169) Allow display of shared mailboxes via GetMailboxes
[ https://issues.apache.org/jira/browse/JAMES-2169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16193989#comment-16193989 ] Tellier Benoit commented on JAMES-2169: --- https://github.com/linagora/james-project/pull/1010 allow listing delegated mailboxes > Allow display of shared mailboxes via GetMailboxes > -- > > Key: JAMES-2169 > URL: https://issues.apache.org/jira/browse/JAMES-2169 > Project: James Server > Issue Type: Improvement > Components: JMAP >Reporter: Matthieu Baechler >Assignee: Antoine Duprat > > GetMailbox must be able to retrieve information about shared mailboxes. > To that purpose, we need to add a sharedWith field to Mailbox structure. > This field list people who get access to a given mailbox and list the rights > each user gets. > Only Owner and people with Admin rights on a mailbox has access to this field > content. > People having access to a mailbox has only its own right in this field. > Acceptance criteria: > ``` > Given user Bob with ["INBOX", "BobShared"] mailboxes > And user Alice with ["INBOX"] mailboxes > And user Bob share "BobShaBred" mailbox to Alice > When Alice queries Bob's "BobShared" mailbox details > Then she gets BobShared details > And BobShared contains sharedWith property with only Alice rights > ``` -- This message was sent by Atlassian JIRA (v6.4.14#64029) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[jira] [Resolved] (MAILBOX-310) MailboxManager should also search delegated mailboxes
[ https://issues.apache.org/jira/browse/MAILBOX-310?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Tellier Benoit resolved MAILBOX-310. Resolution: Fixed https://github.com/linagora/james-project/pull/1011 solved this, Including a MailboxQuery refactoring. > MailboxManager should also search delegated mailboxes > - > > Key: MAILBOX-310 > URL: https://issues.apache.org/jira/browse/MAILBOX-310 > Project: James Mailbox > Issue Type: New Feature > Components: api, cassandra, memory >Affects Versions: master >Reporter: Tellier Benoit > > The goal is to convert the ACL list into mailbox list. > We need to add a Mailbox feature ACLMailboxSearch. When the feature is > supported, MailboxManager::search will also return mailboxes I have the > delegated rights on. > Beware: the MailboxSearchQuery does not express this kind of search yet (A > mailbox path like"":"":"" seems to have the wanted behaviour) > We need to store "per user delegated mailboxes" and inject them as part of > the MailboxMapper::findMailboxWithPathLike seems the right place to handle > this. (We then need to handle special case empty namespace and empty username > as per today code organisation). -- This message was sent by Atlassian JIRA (v6.4.14#64029) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
james-project git commit: JAMES-2159 Add more tests for collected contacts
Repository: james-project Updated Branches: refs/heads/master f52eaa62a -> dc4e2016f JAMES-2159 Add more tests for collected contacts - Mailbox format, mismatches between envelope and mime message, scrambling... Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dc4e2016 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dc4e2016 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dc4e2016 Branch: refs/heads/master Commit: dc4e2016fe9d61dd2469e37083d6e6dea554174d Parents: f52eaa6 Author: benwaAuthored: Thu Oct 5 15:46:14 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:05:03 2017 +0200 -- .../transport/mailets/ContactExtractor.java | 20 ++-- .../transport/mailets/ContactExtractorTest.java | 96 2 files changed, 109 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/dc4e2016/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java -- diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java index 468d355..bf5665b 100644 --- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java +++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java @@ -18,6 +18,7 @@ / package org.apache.james.transport.mailets; +import java.io.IOException; import java.util.Arrays; import java.util.Optional; @@ -25,6 +26,8 @@ import javax.mail.Address; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; +import org.apache.james.core.MailAddress; +import org.apache.james.mime4j.util.MimeUtil; import org.apache.mailet.Mail; import org.apache.mailet.Mailet; import org.apache.mailet.MailetException; @@ -84,7 +87,7 @@ public class ContactExtractor extends GenericMailet implements Mailet { @Override public void service(Mail mail) throws MessagingException { try { -Optional payload = extractContacts(mail.getMessage()); +Optional payload = extractContacts(mail); LOGGER.debug("payload : {}", payload); payload.ifPresent(x -> mail.setAttribute(extractAttributeTo, x)); } catch (Exception e) { @@ -92,12 +95,14 @@ public class ContactExtractor extends GenericMailet implements Mailet { } } -private Optional extractContacts(MimeMessage mimeMessage) throws MessagingException { -return Optional.ofNullable(mimeMessage.getSender()) -.map(Address::toString) -.filter(Throwing.predicate(sender -> hasRecipients(mimeMessage))) -.map(Throwing.function(sender -> new ExtractedContacts(sender, recipients(mimeMessage -.map(Throwing.function(message -> objectMapper.writeValueAsString(message))); +private Optional extractContacts(Mail mail) throws MessagingException, IOException { +MimeMessage message = mail.getMessage(); + +return Optional.of(mail.getSender()) +.map(MailAddress::asString) +.filter(Throwing.predicate(sender -> hasRecipients(message))) +.map(Throwing.function(sender -> new ExtractedContacts(sender, recipients(message +.map(Throwing.function(extractedContacts -> objectMapper.writeValueAsString(extractedContacts))); } private boolean hasRecipients(MimeMessage mimeMessage) throws MessagingException { @@ -107,6 +112,7 @@ public class ContactExtractor extends GenericMailet implements Mailet { private ImmutableList recipients(MimeMessage mimeMessage) throws MessagingException { return Arrays.stream(mimeMessage.getAllRecipients()) .map(Address::toString) +.map(MimeUtil::unscrambleHeaderValue) .collect(Guavate.toImmutableList()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/dc4e2016/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java -- diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java index 9eda1f2..0ba88ba 100644 --- a/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java +++
[23/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Remove javadoc for toString
MAILBOX-310 Mailbox query refactoring: Remove javadoc for toString Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/cd37438d Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/cd37438d Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/cd37438d Branch: refs/heads/master Commit: cd37438d6d01b3eef65ee19e8a26cb88aa80bd5a Parents: c6aa6da Author: benwaAuthored: Wed Oct 4 10:30:42 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../main/java/org/apache/james/mailbox/model/MailboxQuery.java | 5 - 1 file changed, 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/cd37438d/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java index 09b12cf..2de99e2 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java @@ -281,11 +281,6 @@ public final class MailboxQuery { || expression.indexOf(getLocalWildcard()) >= 0); } -/** - * Renders a string suitable for logging. - * - * @return a String representation of this object. - */ public String toString() { return MoreObjects.toStringHelper(this) .add("expression", expression) - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[16/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: MailboxQuery should not rely anymore on MailboxPath for its internal representation
MAILBOX-310 Mailbox query refactoring: MailboxQuery should not rely anymore on MailboxPath for its internal representation Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1f37e3cf Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1f37e3cf Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1f37e3cf Branch: refs/heads/master Commit: 1f37e3cf60da280c7b94a6e9bf07d6ac8783804b Parents: 36333ba Author: benwaAuthored: Wed Oct 4 09:46:05 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../james/mailbox/model/MailboxQuery.java | 79 +--- .../james/mailbox/MailboxManagerTest.java | 4 +- .../james/mailbox/model/MailboxQueryTest.java | 34 + .../mailbox/store/StoreMailboxManager.java | 17 - .../mailbox/store/StoreMailboxManagerTest.java | 38 +- .../apache/james/modules/MailboxProbeImpl.java | 2 +- .../matchers/AbstractStorageQuota.java | 2 +- 7 files changed, 111 insertions(+), 65 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/1f37e3cf/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java index a812206..49db850 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java @@ -26,6 +26,7 @@ import java.util.regex.Pattern; import org.apache.james.mailbox.MailboxSession; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; @@ -33,8 +34,6 @@ import com.google.common.base.Preconditions; * Expresses select criteria for mailboxes. */ public final class MailboxQuery { -public static final char SQL_WILDCARD_CHAR = '%'; - /** * Use this wildcard to match every char including the hierarchy delimiter */ @@ -44,15 +43,15 @@ public final class MailboxQuery { * Use this wildcard to match every char except the hierarchy delimiter */ public final static char LOCALWILDCARD = '%'; + private static final String EMPTY_PATH_NAME = ""; -private final MailboxPath base; private final String expression; private final char pathDelimiter; private final Pattern pattern; private final Optional namespace; private final Optional user; -private final Optional name; +private final Optional baseName; public static Builder builder() { return new Builder(); @@ -128,15 +127,11 @@ public final class MailboxQuery { * @param pathDelimiter *path delimiter to use */ -@VisibleForTesting MailboxQuery(Optional namespace, Optional user, Optional name, +@VisibleForTesting MailboxQuery(Optional namespace, Optional user, Optional baseName, String expression, MailboxSession session) { this.namespace = namespace; this.user = user; -this.name = name; -this.base = new MailboxPath( -namespace.orElse(MailboxConstants.USER_NAMESPACE), -user.orElse(session.getUser().getUserName()), -name.orElse(EMPTY_PATH_NAME)); +this.baseName = baseName; if (expression == null) { this.expression = ""; } else { @@ -146,20 +141,24 @@ public final class MailboxQuery { pattern = constructEscapedRegex(); } +public Optional getNamespace() { +return namespace; +} + +public Optional getUser() { +return user; +} + +public Optional getBaseName() { +return baseName; +} + public boolean isPrivateMailboxes(MailboxSession session) { MailboxSession.User sessionUser = session.getUser(); return namespace.map(MailboxConstants.USER_NAMESPACE::equals).orElse(false) && user.map(sessionUser::isSameUser).orElse(false); } -public MailboxPath getPathLike() { -String combinedName = getCombinedName() -.replace(getFreeWildcard(), SQL_WILDCARD_CHAR) -.replace(getLocalWildcard(), SQL_WILDCARD_CHAR) -+ SQL_WILDCARD_CHAR; -return new MailboxPath(getBase(), combinedName); -} - public boolean belongsToRequestedNamespaceAndUser(MailboxPath mailboxPath) { boolean belongsToRequestedNamespace = namespace .map(value ->
[14/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Copy mailboxPath matching in external class hierarchy
MAILBOX-310 Mailbox query refactoring: Copy mailboxPath matching in external class hierarchy Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2c048997 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2c048997 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2c048997 Branch: refs/heads/master Commit: 2c048997b95815befe9ed8630e3bdd3ca9fefc44 Parents: cd37438 Author: benwaAuthored: Wed Oct 4 11:27:25 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../apache/james/mailbox/model/ExactName.java | 48 + .../mailbox/model/MailboxNameExpression.java| 38 + .../james/mailbox/model/PrefixedRegex.java | 112 ++ .../james/mailbox/model/PrefixedWildcard.java | 47 + .../apache/james/mailbox/model/Wildcard.java| 40 + .../james/mailbox/model/ExactNameTest.java | 67 + .../james/mailbox/model/MailboxQueryTest.java | 1615 -- .../james/mailbox/model/PrefixedRegexTest.java | 1058 .../mailbox/model/PrefixedWildcardTest.java | 71 + .../james/mailbox/model/WildcardTest.java | 59 + 10 files changed, 1540 insertions(+), 1615 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/2c048997/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java new file mode 100644 index 000..298819e --- /dev/null +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java @@ -0,0 +1,48 @@ +/ + * 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.model; + +import com.google.common.base.Preconditions; + +public class ExactName implements MailboxNameExpression { + +private final String name; + +public ExactName(String name) { +Preconditions.checkNotNull(name); +this.name = name; +} + +@Override +public boolean isExpressionMatch(String mailboxName) { +Preconditions.checkNotNull(mailboxName); +return name.equals(mailboxName); +} + +@Override +public String getCombinedName() { +return name; +} + +@Override +public boolean isWild() { +return false; +} +} http://git-wip-us.apache.org/repos/asf/james-project/blob/2c048997/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxNameExpression.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxNameExpression.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxNameExpression.java new file mode 100644 index 000..ec7d715 --- /dev/null +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxNameExpression.java @@ -0,0 +1,38 @@ +/ + * 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 * + *
[26/27] james-project git commit: JAMES-2169 User can retrieve shared mailbox from JMAP and its integration test
JAMES-2169 User can retrieve shared mailbox from JMAP and its integration test Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f52eaa62 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f52eaa62 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f52eaa62 Branch: refs/heads/master Commit: f52eaa62a793ecfe5d276531ebb3fc1351564bc6 Parents: 93aac90 Author: quynhnAuthored: Wed Oct 4 16:07:16 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:39 2017 +0200 -- .../integration/GetMailboxesMethodTest.java | 102 +++ .../james/jmap/methods/GetMailboxesMethod.java | 10 +- 2 files changed, 107 insertions(+), 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/f52eaa62/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java -- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java index 547c644..5e21f00 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java @@ -554,4 +554,106 @@ public abstract class GetMailboxesMethodTest { assertThat(sharedWith).containsOnlyKeys(alice, cedric); } + +@Test +public void getMailboxesShouldReturnAllAccessibleMailboxesWhenEmptyIds() throws Exception { +String sharedMailboxName = "BobShared"; +mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, DefaultMailboxes.INBOX); +mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, sharedMailboxName); + +mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, DefaultMailboxes.INBOX); +MailboxPath bobMailboxPath = MailboxPath.forUser(bob, sharedMailboxName); +aclProbe.replaceRights(bobMailboxPath, alice, new Rfc4314Rights(Right.Read)); + +List expectedMailboxes = ImmutableList. builder() +.addAll(DefaultMailboxes.DEFAULT_MAILBOXES) +.add(sharedMailboxName) +.build(); + +given() +.header("Authorization", accessToken.serialize()) +.body("[[\"getMailboxes\", {}, \"#0\"]]") +.when() +.post("/jmap") +.then() +.statusCode(200) +.body(NAME, equalTo("mailboxes")) +.body(ARGUMENTS + ".list", hasSize(6)) +.body(ARGUMENTS + ".list.name", hasItems(expectedMailboxes.toArray())); +} + +@Test +public void getMailboxesShouldFilterMailboxesWithReadRightWhenEmptyIds() throws Exception { +String sharedReadMailboxName = "BobShared"; +String sharedAdministerMailboxName = "BobShared1"; +mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, DefaultMailboxes.INBOX); +mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, sharedReadMailboxName); +mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bob, sharedAdministerMailboxName); + +mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, DefaultMailboxes.INBOX); +MailboxPath bobSharedReadMailboxPath = MailboxPath.forUser(bob, sharedReadMailboxName); +MailboxPath bobSharedAdministerMailboxPath = MailboxPath.forUser(bob, sharedAdministerMailboxName); + +aclProbe.replaceRights(bobSharedReadMailboxPath, alice, new Rfc4314Rights(Right.Read)); +aclProbe.replaceRights(bobSharedAdministerMailboxPath, alice, new Rfc4314Rights(Right.Administer)); + +List expectedMailboxes = ImmutableList. builder() +.addAll(DefaultMailboxes.DEFAULT_MAILBOXES) +.add(sharedReadMailboxName) +.build(); + +given() +.header("Authorization", accessToken.serialize()) +.body("[[\"getMailboxes\", {}, \"#0\"]]") +.when() +.post("/jmap") +.then() +.statusCode(200) +.body(NAME, equalTo("mailboxes")) +.body(ARGUMENTS + ".list", hasSize(6)) +.body(ARGUMENTS + ".list.name", hasItems(expectedMailboxes.toArray())); +} + +@Test +
[21/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Use matchesAll more
MAILBOX-310 Mailbox query refactoring: Use matchesAll more Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c6aa6da5 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c6aa6da5 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c6aa6da5 Branch: refs/heads/master Commit: c6aa6da58e43d0147e3623c7e0feefe46d3064d1 Parents: 6501eab Author: benwaAuthored: Wed Oct 4 10:13:16 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../org/apache/james/mailbox/model/MailboxQueryTest.java | 8 1 file changed, 4 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/c6aa6da5/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java index a266678..a3149f8 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java @@ -48,7 +48,7 @@ public class MailboxQueryTest { //Given MailboxQuery testee = MailboxQuery.builder() .base(mailboxPath) -.expression("*") +.matchesAll() .mailboxSession(mailboxSession) .build(); //When @@ -473,7 +473,7 @@ public class MailboxQueryTest { //Given MailboxQuery testee = MailboxQuery.builder() .base(mailboxPath) -.expression("*") +.matchesAll() .mailboxSession(mailboxSession) .build(); //When @@ -487,7 +487,7 @@ public class MailboxQueryTest { //Given MailboxQuery testee = MailboxQuery.builder() .base(mailboxPath) -.expression("*") +.matchesAll() .mailboxSession(mailboxSession) .build(); //When @@ -501,7 +501,7 @@ public class MailboxQueryTest { //Given MailboxQuery testee = MailboxQuery.builder() .base(mailboxPath) -.expression("*") +.matchesAll() .mailboxSession(mailboxSession) .build(); //When - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[11/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Create dedicated packages for Mailbox search related classes
http://git-wip-us.apache.org/repos/asf/james-project/blob/0cfb3951/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java deleted file mode 100644 index 69b4ec9..000 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java +++ /dev/null @@ -1,1058 +0,0 @@ -/ - * 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.model; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.Test; - -public class PrefixedRegexTest { -private static final char PATH_DELIMITER = '.'; -private static final String PREFIX = "name"; -private static final String EMPTY_PREFIX = ""; - -@Test -public void isWildShouldReturnTrueWhenOnlyFreeWildcard() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*", PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isTrue(); -} - -@Test -public void isWildShouldReturnTrueWhenOnlyLocalWildcard() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%", PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isTrue(); -} - -@Test -public void isWildShouldReturnTrueWhenFreeWildcardAtBeginning() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*One", PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isTrue(); -} - -@Test -public void isWildShouldReturnTrueWhenLocalWildcardAtBeginning() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%One", PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isTrue(); -} - -@Test -public void isWildShouldReturnTrueWhenFreeWildcardInMiddle() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A*A", PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isTrue(); -} - -@Test -public void isWildShouldReturnTrueWhenLocalWildcardInMiddle() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A%A", PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isTrue(); -} - -@Test -public void isWildShouldReturnTrueWhenFreeWildcardAtEnd() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One*", PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isTrue(); -} - -@Test -public void isWildShouldReturnTrueWhenLocalWildcardAtEnd() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One%", PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isTrue(); -} - -@Test -public void isWildShouldReturnFalseWhenEmptyExpression() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "", PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isFalse(); -} - -@Test -public void isWildShouldReturnFalseWhenNullExpression() throws Exception { -PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, null, PATH_DELIMITER); - -boolean actual = prefixedRegex.isWild(); - -assertThat(actual).isFalse(); -} - -@Test -public void
[09/27] james-project git commit: MAILBOX-310 Refactor mailbox search
MAILBOX-310 Refactor mailbox search - Allow missing namespace and username in mailboxQuery - Matching logic SHOULD be moved in MailboxQuery Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/26500281 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/26500281 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/26500281 Branch: refs/heads/master Commit: 26500281041cd9b8f153093ec004bdcbff5db653 Parents: 78f208c Author: benwaAuthored: Tue Oct 3 17:51:51 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:37 2017 +0200 -- .../james/mailbox/model/MailboxQuery.java | 111 ++- .../james/mailbox/MailboxManagerTest.java | 6 +- .../james/mailbox/model/MailboxQueryTest.java | 844 --- .../inmemory/InMemoryMessageIdManager.java | 1 + .../InMemoryMessageIdManagerTestSystem.java | 7 +- .../InMemoryMessageManagerTestSystem.java | 3 +- .../mailbox/store/StoreMailboxManager.java | 97 +-- .../store/AbstractCombinationManagerTest.java | 4 + .../mailbox/store/StoreMailboxManagerTest.java | 62 -- .../james/imap/processor/LSubProcessor.java | 2 +- .../james/imap/processor/ListProcessor.java | 2 +- .../james/imap/processor/LSubProcessorTest.java | 63 +- .../mailbox/MailboxManagerManagement.java | 2 +- .../james/jmap/methods/GetMailboxesMethod.java | 3 +- .../jmap/utils/SystemMailboxesProviderImpl.java | 4 +- .../webadmin/service/UserMailboxesService.java | 2 +- 16 files changed, 880 insertions(+), 333 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/26500281/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java index 88f923a..5153ffa 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java @@ -33,62 +33,65 @@ import com.google.common.base.Preconditions; * Expresses select criteria for mailboxes. */ public final class MailboxQuery { - -private final MailboxPath base; - -private final String expression; - -private final char pathDelimiter; - -private final Pattern pattern; +public static final char SQL_WILDCARD_CHAR = '%'; /** * Use this wildcard to match every char including the hierarchy delimiter */ public final static char FREEWILDCARD = '*'; - - + /** * Use this wildcard to match every char except the hierarchy delimiter */ public final static char LOCALWILDCARD = '%'; - +private static final String EMPTY_PATH_NAME = ""; + +private final MailboxPath base; +private final String expression; +private final char pathDelimiter; +private final Pattern pattern; +private final Optional namespace; +private final Optional user; +private final Optional name; + public static Builder builder() { return new Builder(); } -public static Builder builder(MailboxSession session) { -return builder().pathDelimiter(session.getPathDelimiter()).username(session.getUser().getUserName()); +public static Builder privateMailboxesBuilder(MailboxSession session) { +return builder() +.mailboxSession(session) +.username(session.getUser().getUserName()); } public static class Builder { -private static final String EMPTY_PATH_NAME = ""; -private MailboxPath base; private String expression; -@VisibleForTesting char pathDelimiter; -@VisibleForTesting String username; +@VisibleForTesting MailboxSession mailboxSession; +@VisibleForTesting Optional username; @VisibleForTesting Optional pathName; @VisibleForTesting Optional namespace; private Builder() { this.pathName = Optional.empty(); this.namespace = Optional.empty(); +this.username = Optional.empty(); } public Builder base(MailboxPath base) { -this.base = base; +this.namespace = Optional.ofNullable(base.getNamespace()); +this.username = Optional.ofNullable(base.getUser()); +this.pathName = Optional.ofNullable(base.getName()); return this; } public Builder username(String username) { -this.username = username; +this.username =
[04/27] james-project git commit: MAILBOX-310 CassandraUserMailboxRightsDAO should store user -> accessible (non personnal) mailboxes
MAILBOX-310 CassandraUserMailboxRightsDAO should store user -> accessible (non personnal) mailboxes Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e55b3716 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e55b3716 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e55b3716 Branch: refs/heads/master Commit: e55b3716bb37125512358b623a992ad5d1a3eb8a Parents: 3192535 Author: benwaAuthored: Wed Oct 4 15:43:35 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 09:48:53 2017 +0200 -- .../mail/CassandraUserMailboxRightsDAO.java | 147 +++ .../cassandra/modules/CassandraAclModule.java | 14 +- .../table/CassandraUserMailboxRightsTable.java | 28 .../mail/CassandraUserMailboxRightsDAOTest.java | 108 ++ 4 files changed, 296 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/e55b3716/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java -- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java new file mode 100644 index 000..336a0ef --- /dev/null +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java @@ -0,0 +1,147 @@ +/ + * 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.cassandra.mail; + +import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker; +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; +import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto; +import static com.datastax.driver.core.querybuilder.QueryBuilder.select; +import static org.apache.james.mailbox.cassandra.table.CassandraUserMailboxRightsTable.MAILBOX_ID; +import static org.apache.james.mailbox.cassandra.table.CassandraUserMailboxRightsTable.RIGHTS; +import static org.apache.james.mailbox.cassandra.table.CassandraUserMailboxRightsTable.TABLE_NAME; +import static org.apache.james.mailbox.cassandra.table.CassandraUserMailboxRightsTable.USER_NAME; + +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.inject.Inject; + +import org.apache.commons.lang3.tuple.Pair; +import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; +import org.apache.james.backends.cassandra.utils.CassandraUtils; +import org.apache.james.mailbox.acl.PositiveUserACLChanged; +import org.apache.james.mailbox.cassandra.ids.CassandraId; +import org.apache.james.mailbox.model.MailboxACL; +import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights; +import org.apache.james.util.FluentFutureStream; + +import com.datastax.driver.core.PreparedStatement; +import com.datastax.driver.core.Row; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.querybuilder.QueryBuilder; +import com.github.fge.lambdas.Throwing; + +public class CassandraUserMailboxRightsDAO { + +private final CassandraAsyncExecutor cassandraAsyncExecutor; +private final CassandraUtils cassandraUtils; +private final PreparedStatement delete; +private final PreparedStatement insert; +private final PreparedStatement select; +
[17/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Slightly improve isExpressionMatch
MAILBOX-310 Mailbox query refactoring: Slightly improve isExpressionMatch Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/07ee106c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/07ee106c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/07ee106c Branch: refs/heads/master Commit: 07ee106c5aa46136ddde9b6d2119eb6ee25c78a7 Parents: 6607c69 Author: benwaAuthored: Wed Oct 4 09:48:29 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../org/apache/james/mailbox/model/MailboxQuery.java | 11 +++ 1 file changed, 3 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/07ee106c/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java index 7332ec1..c6e2ebc 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java @@ -207,17 +207,12 @@ public final class MailboxQuery { * @return true if the given name matches this expression, false otherwise */ public boolean isExpressionMatch(String name) { -final boolean result; if (isWild()) { -if (name == null) { -result = false; -} else { -result = pattern.matcher(name).matches(); -} +return name != null +&& pattern.matcher(name).matches(); } else { -result = expression.equals(name); +return expression.equals(name); } -return result; } public boolean isPathMatch(MailboxPath mailboxPath) { - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[19/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: MailboxSession should not be compulsory to build MailboxQuery
MAILBOX-310 Mailbox query refactoring: MailboxSession should not be compulsory to build MailboxQuery Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8faf9a6f Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8faf9a6f Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8faf9a6f Branch: refs/heads/master Commit: 8faf9a6fd8ed08fab877cb25aebb0d1c5730e03c Parents: 07ee106 Author: benwaAuthored: Wed Oct 4 09:51:44 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../james/mailbox/model/MailboxQuery.java | 20 +--- .../james/mailbox/model/MailboxQueryTest.java | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/8faf9a6f/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java index c6e2ebc..6cbbff2 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java @@ -58,7 +58,7 @@ public final class MailboxQuery { public static class Builder { private String expression; -@VisibleForTesting MailboxSession mailboxSession; +@VisibleForTesting Optional pathDelimiter; @VisibleForTesting Optional username; @VisibleForTesting Optional pathName; @VisibleForTesting Optional namespace; @@ -67,6 +67,7 @@ public final class MailboxQuery { this.pathName = Optional.empty(); this.namespace = Optional.empty(); this.username = Optional.empty(); +this.pathDelimiter = Optional.empty(); } public Builder base(MailboxPath base) { @@ -98,15 +99,20 @@ public final class MailboxQuery { this.expression = String.valueOf(FREEWILDCARD); return this; } - + public Builder mailboxSession(MailboxSession session) { -this.mailboxSession = session; +this.pathDelimiter = Optional.of(session.getPathDelimiter()); +return this; +} + +public Builder pathDelimiter(char pathDelimiter) { +this.pathDelimiter = Optional.of(pathDelimiter); return this; } public MailboxQuery build() { -Preconditions.checkState(mailboxSession != null); -return new MailboxQuery(namespace, username, pathName, expression, mailboxSession); +Preconditions.checkState(pathDelimiter.isPresent()); +return new MailboxQuery(namespace, username, pathName, expression, pathDelimiter.get()); } } @@ -128,7 +134,7 @@ public final class MailboxQuery { *path delimiter to use */ @VisibleForTesting MailboxQuery(Optional namespace, Optional user, Optional baseName, -String expression, MailboxSession session) { +String expression, char pathDelimiter) { this.namespace = namespace; this.user = user; this.baseName = baseName; @@ -137,7 +143,7 @@ public final class MailboxQuery { } else { this.expression = expression; } -this.pathDelimiter = session.getPathDelimiter(); +this.pathDelimiter = pathDelimiter; pattern = constructEscapedRegex(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8faf9a6f/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java index 1c3f697..a266678 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxQueryTest.java @@ -1710,7 +1710,7 @@ public class MailboxQueryTest { // When Builder query = MailboxQuery.privateMailboxesBuilder(mailboxSession); //Then -assertThat(query.mailboxSession.getPathDelimiter()).isEqualTo('#'); +assertThat(query.pathDelimiter).contains('#'); assertThat(query.username).contains("little bobby table"); } - To unsubscribe,
[25/27] james-project git commit: MAILBOX-310 Correct WebAdmin mailbox handling
MAILBOX-310 Correct WebAdmin mailbox handling Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/636e5a40 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/636e5a40 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/636e5a40 Branch: refs/heads/master Commit: 636e5a40f9f4753a4d8358ed590f286c0501d223 Parents: b44b9bb Author: benwaAuthored: Thu Oct 5 09:13:29 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:39 2017 +0200 -- server/protocols/webadmin/webadmin-mailbox/pom.xml | 6 ++ .../james/webadmin/service/UserMailboxesService.java| 12 +--- .../james/webadmin/routes/UserMailboxesRoutesTest.java | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/636e5a40/server/protocols/webadmin/webadmin-mailbox/pom.xml -- diff --git a/server/protocols/webadmin/webadmin-mailbox/pom.xml b/server/protocols/webadmin/webadmin-mailbox/pom.xml index 471f8dd..96d5eee 100644 --- a/server/protocols/webadmin/webadmin-mailbox/pom.xml +++ b/server/protocols/webadmin/webadmin-mailbox/pom.xml @@ -39,6 +39,12 @@ ${project.groupId} +apache-james-mailbox-api +test +test-jar + + +${project.groupId} apache-james-mailbox-memory test http://git-wip-us.apache.org/repos/asf/james-project/blob/636e5a40/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java -- diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java index 225d0bf..af0b658 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java @@ -47,9 +47,7 @@ import com.google.common.base.Strings; public class UserMailboxesService { - private static final Logger LOGGER = LoggerFactory.getLogger(UserMailboxesService.class); -private static final String USER_NAME = "webAdmin"; private final MailboxManager mailboxManager; private final UsersRepository usersRepository; @@ -62,7 +60,7 @@ public class UserMailboxesService { public void createMailbox(String username, MailboxName mailboxName) throws MailboxException, UsersRepositoryException { usernamePreconditions(username); -MailboxSession mailboxSession = mailboxManager.createSystemSession(USER_NAME); +MailboxSession mailboxSession = mailboxManager.createSystemSession(username); try { mailboxManager.createMailbox( convertToMailboxPath(username, mailboxName.asString(), mailboxSession), @@ -74,7 +72,7 @@ public class UserMailboxesService { public void deleteMailboxes(String username) throws MailboxException, UsersRepositoryException { usernamePreconditions(username); -MailboxSession mailboxSession = mailboxManager.createSystemSession(USER_NAME); +MailboxSession mailboxSession = mailboxManager.createSystemSession(username); listUserMailboxes(mailboxSession) .map(MailboxMetaData::getPath) .forEach(Throwing.consumer(mailboxPath -> deleteMailbox(mailboxSession, mailboxPath))); @@ -82,7 +80,7 @@ public class UserMailboxesService { public List listMailboxes(String username) throws MailboxException, UsersRepositoryException { usernamePreconditions(username); -MailboxSession mailboxSession = mailboxManager.createSystemSession(USER_NAME); +MailboxSession mailboxSession = mailboxManager.createSystemSession(username); return listUserMailboxes(mailboxSession) .map(mailboxMetaData -> new MailboxResponse(mailboxMetaData.getPath().getName())) .collect(Guavate.toImmutableList()); @@ -90,7 +88,7 @@ public class UserMailboxesService { public boolean testMailboxExists(String username, MailboxName mailboxName) throws MailboxException, UsersRepositoryException { usernamePreconditions(username); -MailboxSession mailboxSession = mailboxManager.createSystemSession(USER_NAME); +MailboxSession mailboxSession = mailboxManager.createSystemSession(username); return
[12/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Create dedicated packages for Mailbox search related classes
MAILBOX-310 Mailbox query refactoring: Create dedicated packages for Mailbox search related classes Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0cfb3951 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0cfb3951 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0cfb3951 Branch: refs/heads/master Commit: 0cfb395142d1b0261041a7772e95ccc051085652 Parents: 2c04899 Author: benwaAuthored: Wed Oct 4 11:29:46 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../apache/james/mailbox/MailboxManager.java|2 +- .../apache/james/mailbox/model/ExactName.java | 48 - .../mailbox/model/MailboxNameExpression.java| 38 - .../james/mailbox/model/MailboxQuery.java | 316 -- .../james/mailbox/model/PrefixedRegex.java | 112 -- .../james/mailbox/model/PrefixedWildcard.java | 47 - .../apache/james/mailbox/model/Wildcard.java| 40 - .../james/mailbox/model/search/ExactName.java | 48 + .../model/search/MailboxNameExpression.java | 38 + .../mailbox/model/search/MailboxQuery.java | 318 ++ .../mailbox/model/search/PrefixedRegex.java | 112 ++ .../mailbox/model/search/PrefixedWildcard.java | 47 + .../james/mailbox/model/search/Wildcard.java| 40 + .../james/mailbox/MailboxManagerTest.java |2 +- .../james/mailbox/model/ExactNameTest.java | 67 -- .../james/mailbox/model/MailboxQueryTest.java | 266 - .../james/mailbox/model/PrefixedRegexTest.java | 1058 -- .../mailbox/model/PrefixedWildcardTest.java | 71 -- .../james/mailbox/model/WildcardTest.java | 59 - .../mailbox/model/search/ExactNameTest.java | 67 ++ .../mailbox/model/search/MailboxQueryTest.java | 267 + .../mailbox/model/search/PrefixedRegexTest.java | 1058 ++ .../model/search/PrefixedWildcardTest.java | 71 ++ .../mailbox/model/search/WildcardTest.java | 59 + .../inmemory/InMemoryMessageIdManager.java |2 +- .../InMemoryMessageIdManagerTestSystem.java |2 +- .../InMemoryMessageManagerTestSystem.java |2 +- .../mailbox/store/StoreMailboxManager.java |2 +- .../store/AbstractCombinationManagerTest.java |2 +- .../mailbox/store/StoreMailboxManagerTest.java |2 +- .../james/imap/processor/LSubProcessor.java |2 +- .../james/imap/processor/ListProcessor.java |2 +- .../base/MailboxEventAnalyserTest.java |2 +- .../apache/james/modules/MailboxProbeImpl.java |2 +- .../mailbox/MailboxManagerManagement.java |2 +- .../matchers/AbstractStorageQuota.java |2 +- .../james/jmap/methods/GetMailboxesMethod.java |2 +- .../jmap/utils/SystemMailboxesProviderImpl.java |2 +- ...ltMailboxesProvisioningFilterThreadTest.java |2 +- .../webadmin/service/UserMailboxesService.java |2 +- .../routes/UserMailboxesRoutesTest.java |2 +- 41 files changed, 2144 insertions(+), 2141 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/0cfb3951/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 38414cc..080169a 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 @@ -36,10 +36,10 @@ import org.apache.james.mailbox.model.MailboxAnnotationKey; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxMetaData; 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.model.MessageRange; import org.apache.james.mailbox.model.MultimailboxesSearchQuery; +import org.apache.james.mailbox.model.search.MailboxQuery; /** * http://git-wip-us.apache.org/repos/asf/james-project/blob/0cfb3951/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java deleted file mode 100644 index 298819e..000 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/ExactName.java +++ /dev/null @@ -1,48 +0,0 @@ -/ - *
[02/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Don't expose MailboxQuery constructor
MAILBOX-310 Mailbox query refactoring: Don't expose MailboxQuery constructor Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/434e040b Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/434e040b Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/434e040b Branch: refs/heads/master Commit: 434e040bdb4fcadbdb5bf9ab7ec961aec24cf59d Parents: 10da435 Author: Antoine DupratAuthored: Thu Sep 28 15:09:09 2017 +0200 Committer: benwa Committed: Wed Oct 4 16:29:09 2017 +0700 -- .../apache/james/mailbox/model/MailboxQuery.java| 2 +- .../apache/james/mailbox/MailboxManagerTest.java| 16 ++-- .../apache/james/imap/processor/LSubProcessor.java | 6 +- .../apache/james/imap/processor/ListProcessor.java | 8 +++- .../org/apache/james/modules/MailboxProbeImpl.java | 8 +--- .../adapter/mailbox/MailboxManagerManagement.java | 8 +--- .../transport/matchers/AbstractStorageQuota.java| 8 ++-- 7 files changed, 43 insertions(+), 13 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/434e040b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java index e32c9be..88f923a 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java @@ -136,7 +136,7 @@ public final class MailboxQuery { * @param pathDelimiter *path delimiter to use */ -public MailboxQuery(MailboxPath base, String expression, char pathDelimiter) { +@VisibleForTesting MailboxQuery(MailboxPath base, String expression, char pathDelimiter) { super(); this.base = base; if (base.getName() == null) http://git-wip-us.apache.org/repos/asf/james-project/blob/434e040b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java index 0b70549..bcc1e4e 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java @@ -241,7 +241,13 @@ public abstract class MailboxManagerTest { session = mailboxManager.createSystemSession(USER_1); mailboxManager.createMailbox(new MailboxPath("other_namespace", USER_1, "Other"), session); mailboxManager.createMailbox(MailboxPath.inbox(session), session); -List metaDatas = mailboxManager.search(new MailboxQuery(MailboxPath.forUser(USER_1, ""), "*", '.'), session); +List metaDatas = mailboxManager.search( +MailboxQuery.builder() +.base(MailboxPath.forUser(USER_1, "")) +.expression("*") +.pathDelimiter('.') +.build(), +session); assertThat(metaDatas).hasSize(1); assertThat(metaDatas.get(0).getPath()).isEqualTo(MailboxPath.inbox(session)); } @@ -251,7 +257,13 @@ public abstract class MailboxManagerTest { session = mailboxManager.createSystemSession(USER_1); mailboxManager.createMailbox(MailboxPath.forUser(USER_2, "Other"), session); mailboxManager.createMailbox(MailboxPath.inbox(session), session); -List metaDatas = mailboxManager.search(new MailboxQuery(MailboxPath.forUser(USER_1, ""), "*", '.'), session); +List metaDatas = mailboxManager.search( +MailboxQuery.builder() +.base(MailboxPath.forUser(USER_1, "")) +.expression("*") +.pathDelimiter('.') +.build(), +session); assertThat(metaDatas).hasSize(1); assertThat(metaDatas.get(0).getPath()).isEqualTo(MailboxPath.inbox(session)); } http://git-wip-us.apache.org/repos/asf/james-project/blob/434e040b/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java -- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java index a4bf955..a290ebd 100644 ---
[13/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Copy mailboxPath matching in external class hierarchy
http://git-wip-us.apache.org/repos/asf/james-project/blob/2c048997/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java new file mode 100644 index 000..69b4ec9 --- /dev/null +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/PrefixedRegexTest.java @@ -0,0 +1,1058 @@ +/ + * 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.model; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +public class PrefixedRegexTest { +private static final char PATH_DELIMITER = '.'; +private static final String PREFIX = "name"; +private static final String EMPTY_PREFIX = ""; + +@Test +public void isWildShouldReturnTrueWhenOnlyFreeWildcard() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenOnlyLocalWildcard() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenFreeWildcardAtBeginning() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*One", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenLocalWildcardAtBeginning() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%One", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenFreeWildcardInMiddle() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A*A", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenLocalWildcardInMiddle() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A%A", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenFreeWildcardAtEnd() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One*", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenLocalWildcardAtEnd() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One%", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnFalseWhenEmptyExpression() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isFalse(); +} + +@Test +public void isWildShouldReturnFalseWhenNullExpression() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, null, PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isFalse(); +} + +@Test +public void
[03/27] james-project git commit: MAILBOX-310 Mapper should store the ACL by user/mailbox
MAILBOX-310 Mapper should store the ACL by user/mailbox Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/78f208c4 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/78f208c4 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/78f208c4 Branch: refs/heads/master Commit: 78f208c4af9ba198e13eb8dd1f5a32772aa6c4ac Parents: e55b371 Author: benwaAuthored: Wed Oct 4 15:43:08 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 09:48:53 2017 +0200 -- .../mailbox/caching/CachingMailboxMapper.java | 6 + .../CassandraMailboxSessionMapperFactory.java | 6 +- .../cassandra/mail/CassandraACLMapper.java | 39 +++-- .../cassandra/mail/CassandraMailboxMapper.java | 24 ++- .../CassandraSubscriptionManagerTest.java | 3 + ...estCassandraMailboxSessionMapperFactory.java | 6 +- .../cassandra/mail/CassandraACLMapperTest.java | 7 +- .../CassandraMailboxMapperConcurrencyTest.java | 7 +- .../mail/CassandraMailboxMapperTest.java| 7 +- .../mail/CassandraModSeqProviderTest.java | 3 + .../mail/CassandraUidProviderTest.java | 3 + .../mailbox/hbase/mail/HBaseMailboxMapper.java | 8 + .../mailbox/jcr/mail/JCRMailboxMapper.java | 8 + .../mailbox/jpa/mail/JPAMailboxMapper.java | 7 + .../jpa/mail/TransactionalMailboxMapper.java| 6 + .../maildir/mail/MaildirMailboxMapper.java | 8 + .../inmemory/mail/InMemoryMailboxMapper.java| 20 +++ .../james/mailbox/store/mail/MailboxMapper.java | 10 ++ .../store/TestMailboxSessionMapperFactory.java | 6 + .../store/mail/model/MailboxMapperACLTest.java | 153 +++ .../modules/mailbox/CassandraMailboxModule.java | 2 + 21 files changed, 319 insertions(+), 20 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/78f208c4/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java -- diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java index 8a6179a..fe67704 100644 --- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java +++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.MailboxACL; +import org.apache.james.mailbox.model.MailboxACL.Right; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.store.mail.MailboxMapper; @@ -120,4 +121,9 @@ public class CachingMailboxMapper implements MailboxMapper { cache.invalidate(mailbox); } +@Override +public List findMailboxes(String userName, Right right) throws MailboxException { +return underlying.findMailboxes(userName, right); +} + } http://git-wip-us.apache.org/repos/asf/james-project/blob/78f208c4/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java -- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java index d23d46c..78e2daf 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java @@ -48,6 +48,7 @@ import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO; import org.apache.james.mailbox.cassandra.mail.CassandraMessageMapper; import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider; import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider; +import org.apache.james.mailbox.cassandra.mail.CassandraUserMailboxRightsDAO; import org.apache.james.mailbox.cassandra.user.CassandraSubscriptionMapper; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; @@ -88,6 +89,7 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa private final CassandraAttachmentMessageIdDAO attachmentMessageIdDAO; private final
[06/27] james-project git commit: MAILBOX-310 Introduce ACL capability
MAILBOX-310 Introduce ACL capability Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5de2d001 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5de2d001 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5de2d001 Branch: refs/heads/master Commit: 5de2d001fe3bd630a388359801a513b2debd8ecb Parents: d26baea Author: Antoine DupratAuthored: Mon Oct 2 15:09:01 2017 +0200 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:37 2017 +0200 -- .../org/apache/james/mailbox/MailboxManager.java | 3 ++- .../apache/james/mailbox/MailboxManagerTest.java | 2 +- .../mailbox/cassandra/CassandraMailboxManager.java | 2 +- .../mailbox/inmemory/InMemoryMailboxManager.java | 6 +- .../apache/james/JamesCapabilitiesServerTest.java | 17 + .../java/org/apache/james/jmap/JMAPModule.java | 2 ++ 6 files changed, 28 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/5de2d001/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 093219a..38414cc 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 @@ -80,7 +80,8 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport { Annotation, Move, Namespace, -UserFlag +UserFlag, +ACL } EnumSet getSupportedMailboxCapabilities(); http://git-wip-us.apache.org/repos/asf/james-project/blob/5de2d001/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java index 66ff86c..f33ffcf 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java @@ -441,7 +441,7 @@ public abstract class MailboxManagerTest { @Test public void searchShouldIncludeDelegatedMailboxes() throws MailboxException { - Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.RightSearch)); + Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL)); MailboxSession session1 = mailboxManager.createSystemSession(USER_1); MailboxSession session2 = mailboxManager.createSystemSession(USER_2); MailboxPath inbox1 = MailboxPath.inbox(session1); http://git-wip-us.apache.org/repos/asf/james-project/blob/5de2d001/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 b17deb1..57cfc9c 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 @@ -111,7 +111,7 @@ public class CassandraMailboxManager extends StoreMailboxManager { @Override public EnumSet getSupportedMailboxCapabilities() { -return EnumSet.of(MailboxCapabilities.Move, MailboxCapabilities.UserFlag, MailboxCapabilities.Namespace, MailboxCapabilities.Annotation); +return EnumSet.of(MailboxCapabilities.Move, MailboxCapabilities.UserFlag, MailboxCapabilities.Namespace, MailboxCapabilities.Annotation, MailboxCapabilities.ACL); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/5de2d001/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 adf3044..9aca010 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 @@ -73,7 +73,11 @@ public class
[08/27] james-project git commit: MAILBOX-310 Refactor mailbox search
http://git-wip-us.apache.org/repos/asf/james-project/blob/26500281/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 b96ba8c..b7e8a8d 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 @@ -20,9 +20,9 @@ package org.apache.james.mailbox.store; import java.util.ArrayList; -import java.util.Collections; import java.util.EnumSet; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.Random; import java.util.Set; @@ -48,7 +48,6 @@ 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.UnsupportedRightException; import org.apache.james.mailbox.exception.UserDoesNotExistException; import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxACL.Right; @@ -86,6 +85,7 @@ import org.apache.james.mailbox.store.transaction.Mapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.github.fge.lambdas.Throwing; import com.github.steveash.guavate.Guavate; import com.google.common.collect.Iterables; @@ -100,7 +100,6 @@ import com.google.common.collect.Iterables; public class StoreMailboxManager implements MailboxManager { private static final Logger LOGGER = LoggerFactory.getLogger(StoreMailboxManager.class); -public static final char SQL_WILDCARD_CHAR = '%'; private MailboxEventDispatcher dispatcher; private DelegatingMailboxListener delegatingListener; @@ -673,47 +672,50 @@ public class StoreMailboxManager implements MailboxManager { } @Override -public List search(MailboxQuery mailboxExpression, MailboxSession session) -throws MailboxException { -final char localWildcard = mailboxExpression.getLocalWildcard(); -final char freeWildcard = mailboxExpression.getFreeWildcard(); -final String baseName = mailboxExpression.getBase().getName(); -final int baseLength; -if (baseName == null) { -baseLength = 0; +public List search(MailboxQuery mailboxExpression, MailboxSession session) throws MailboxException { +MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(session); +List mailboxes = mailboxMapper +.findMailboxWithPathLike(mailboxExpression.getPathLike()) +.stream() +.filter(Throwing.predicate(mailbox -> isReadable(session, mailbox))) +.collect(Guavate.toImmutableList()); + +return mailboxes +.stream() +.filter(mailbox -> mailboxExpression.isPathMatch(mailbox.generateAssociatedPath())) +.map(mailbox -> toMailboxMetadata(session, mailboxes, mailbox)) +.sorted(new StandardMailboxMetaDataComparator()) +.collect(Guavate.toImmutableList()); +} + +private boolean isReadable(MailboxSession session, Mailbox mailbox) throws MailboxException { +return (isSameUser(session, mailbox) && isUserNamespace(mailbox)) +|| hasRight(mailbox, Right.Read, session); +} + +private boolean isSameUser(MailboxSession session, Mailbox mailbox) { +return Objects.equals(mailbox.getUser(), session.getUser().getUserName()); +} + +private boolean isUserNamespace(Mailbox mailbox) { +return Objects.equals(mailbox.getNamespace(), MailboxConstants.USER_NAMESPACE); +} + +private SimpleMailboxMetaData toMailboxMetadata(MailboxSession session, List mailboxes, Mailbox mailbox) { +return new SimpleMailboxMetaData( +mailbox.generateAssociatedPath(), +mailbox.getMailboxId(), +getDelimiter(), +computeChildren(session, mailboxes, mailbox), +Selectability.NONE); +} + +private MailboxMetaData.Children computeChildren(MailboxSession session, List potentialChildren, Mailbox mailbox) { +if (hasChildIn(mailbox, potentialChildren, session)) { +return MailboxMetaData.Children.HAS_CHILDREN; } else { -baseLength = baseName.length(); +return MailboxMetaData.Children.HAS_NO_CHILDREN; } -String combinedName = mailboxExpression.getCombinedName() -.replace(freeWildcard, SQL_WILDCARD_CHAR) -.replace(localWildcard, SQL_WILDCARD_CHAR) -+ SQL_WILDCARD_CHAR; -MailboxPath
[22/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Mailbox query should rely on MailboxNameExpression
MAILBOX-310 Mailbox query refactoring: Mailbox query should rely on MailboxNameExpression Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d1030584 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d1030584 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d1030584 Branch: refs/heads/master Commit: d10305840f8f20b2e974bde0e66f796b0ff13110 Parents: 0cfb395 Author: benwaAuthored: Wed Oct 4 13:06:31 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../model/search/MailboxNameExpression.java | 42 +++- .../mailbox/model/search/MailboxQuery.java | 230 --- .../james/mailbox/model/search/Wildcard.java| 18 ++ .../james/mailbox/MailboxManagerTest.java | 25 +- .../mailbox/model/search/MailboxQueryTest.java | 115 +++--- .../mailbox/model/search/WildcardTest.java | 10 +- .../inmemory/InMemoryMessageIdManager.java | 14 +- .../InMemoryMessageIdManagerTestSystem.java | 4 +- .../InMemoryMessageManagerTestSystem.java | 5 +- .../mailbox/store/StoreMailboxManager.java | 10 +- .../store/AbstractCombinationManagerTest.java | 12 +- .../mailbox/store/StoreMailboxManagerTest.java | 11 +- .../james/imap/processor/LSubProcessor.java | 11 +- .../james/imap/processor/ListProcessor.java | 9 +- .../apache/james/modules/MailboxProbeImpl.java | 11 +- .../mailbox/MailboxManagerManagement.java | 12 +- .../matchers/AbstractStorageQuota.java | 7 +- .../james/jmap/methods/GetMailboxesMethod.java | 4 +- .../jmap/utils/SystemMailboxesProviderImpl.java | 4 +- .../webadmin/service/UserMailboxesService.java | 16 +- 20 files changed, 221 insertions(+), 349 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/d1030584/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java index 04a26bc..2b9d4c8 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java @@ -19,7 +19,7 @@ package org.apache.james.mailbox.model.search; -interface MailboxNameExpression { +public interface MailboxNameExpression { /** * Use this wildcard to match every char including the hierarchy delimiter */ @@ -30,9 +30,49 @@ interface MailboxNameExpression { */ char LOCALWILDCARD = '%'; +/** + * Is the given name a match for this expression? + * + * @param name + *name to be matched + * @return true if the given name matches this expression, false otherwise + */ boolean isExpressionMatch(String name); +/** + * Get combined name formed by adding the expression to the base using the + * given hierarchy delimiter. Note that the wildcards are retained in the + * combined name. + * + * @return {@link #getBase()} combined with {@link #getExpression()}, + * notnull + */ String getCombinedName(); +/** + * Is this expression wild? + * + * @return true if wildcard contained, false otherwise + */ boolean isWild(); + +/** + * Gets wildcard character that matches any series of characters. + * + * @return the freeWildcard + */ +default char getFreeWildcard() { +return FREEWILDCARD; +} + +/** + * Gets wildcard character that matches any series of characters excluding + * hierarchy delimiters. Effectively, this means that it matches any + * sequence within a name part. + * + * @return the localWildcard + */ +default char getLocalWildcard() { +return LOCALWILDCARD; +} } http://git-wip-us.apache.org/repos/asf/james-project/blob/d1030584/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java index 9d51b78..2afec92 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java @@ -20,8 +20,6 @@ package org.apache.james.mailbox.model.search;
[10/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Create dedicated packages for Mailbox search related classes
http://git-wip-us.apache.org/repos/asf/james-project/blob/0cfb3951/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java new file mode 100644 index 000..03a8351 --- /dev/null +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java @@ -0,0 +1,1058 @@ +/ + * 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.model.search; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +public class PrefixedRegexTest { +private static final char PATH_DELIMITER = '.'; +private static final String PREFIX = "name"; +private static final String EMPTY_PREFIX = ""; + +@Test +public void isWildShouldReturnTrueWhenOnlyFreeWildcard() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenOnlyLocalWildcard() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenFreeWildcardAtBeginning() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "*One", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenLocalWildcardAtBeginning() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "%One", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenFreeWildcardInMiddle() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A*A", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenLocalWildcardInMiddle() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "A%A", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenFreeWildcardAtEnd() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One*", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnTrueWhenLocalWildcardAtEnd() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "One%", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isTrue(); +} + +@Test +public void isWildShouldReturnFalseWhenEmptyExpression() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, "", PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isFalse(); +} + +@Test +public void isWildShouldReturnFalseWhenNullExpression() throws Exception { +PrefixedRegex prefixedRegex = new PrefixedRegex(PREFIX, null, PATH_DELIMITER); + +boolean actual = prefixedRegex.isWild(); + +assertThat(actual).isFalse(); +} + +@Test
[01/27] james-project git commit: MAILBOX-310 MailboxACL should present only users ACL
Repository: james-project Updated Branches: refs/heads/master 10da4351c -> f52eaa62a MAILBOX-310 MailboxACL should present only users ACL Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/929f31dc Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/929f31dc Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/929f31dc Branch: refs/heads/master Commit: 929f31dcb9f24e132c0eba6ec6358e4a3a8ab8ab Parents: 434e040 Author: Antoine DupratAuthored: Fri Sep 29 15:26:38 2017 +0200 Committer: benwa Committed: Wed Oct 4 16:29:09 2017 +0700 -- .../apache/james/mailbox/model/MailboxACL.java | 6 +++ .../james/mailbox/model/MailboxACLTest.java | 41 2 files changed, 47 insertions(+) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/929f31dc/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java index e414ebc..a38e601 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java @@ -878,4 +878,10 @@ public class MailboxACL { return union(new MailboxACL(new Entry(key, mailboxACLRights))); } +public Map ofPositiveNameType(NameType nameType) { +return this.entries.entrySet().stream() +.filter(entry -> !entry.getKey().isNegative()) +.filter(entry -> entry.getKey().getNameType().equals(nameType)) +.collect(Guavate.entriesToMap()); +} } http://git-wip-us.apache.org/repos/asf/james-project/blob/929f31dc/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java index 7bbb4eb..fccabd0 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java @@ -30,10 +30,14 @@ import java.util.Properties; import org.apache.james.mailbox.exception.UnsupportedRightException; import org.apache.james.mailbox.model.MailboxACL.Entry; import org.apache.james.mailbox.model.MailboxACL.EntryKey; +import org.apache.james.mailbox.model.MailboxACL.NameType; import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights; +import org.assertj.core.data.MapEntry; import org.junit.Before; import org.junit.Test; +import com.google.common.collect.ImmutableMap; + /** * @author Peter Palaga */ @@ -41,6 +45,7 @@ public class MailboxACLTest { private static final String USER_1 = "user1"; private static final String USER_2 = "user2"; +private static final boolean NEGATIVE = true; private static final String ae = "ae"; private static final String ik = "ik"; @@ -224,4 +229,40 @@ public class MailboxACLTest { .isEqualTo(MailboxACL.EMPTY); } +@Test +public void usersACLShouldReturnEmptyMapWhenEmpty() { +assertThat(MailboxACL.EMPTY.ofPositiveNameType(NameType.user)) +.isEmpty(); +} + +@Test +public void usersACLShouldReturnEmptyMapWhenNoUserEntry() { +MailboxACL mailboxACL = new MailboxACL( +ImmutableMap.of(EntryKey.createGroupEntryKey("group"), MailboxACL.FULL_RIGHTS, +EntryKey.createGroupEntryKey("group2"), MailboxACL.NO_RIGHTS)); +assertThat(mailboxACL.ofPositiveNameType(NameType.user)) +.isEmpty(); +} + +@Test +public void usersACLShouldReturnOnlyUsersMapWhenSomeUserEntries() throws Exception { +MailboxACL.Rfc4314Rights rights = MailboxACL.Rfc4314Rights.fromSerializedRfc4314Rights("aei"); +MailboxACL mailboxACL = new MailboxACL( +ImmutableMap.of(EntryKey.createUserEntryKey("user1"), MailboxACL.FULL_RIGHTS, +EntryKey.createGroupEntryKey("group"), MailboxACL.FULL_RIGHTS, +EntryKey.createUserEntryKey("user2"), rights, +EntryKey.createGroupEntryKey("group2"), MailboxACL.NO_RIGHTS)); +assertThat(mailboxACL.ofPositiveNameType(NameType.user)) +.containsOnly( +MapEntry.entry(EntryKey.createUserEntryKey("user1"), MailboxACL.FULL_RIGHTS), +MapEntry.entry(EntryKey.createUserEntryKey("user2"), rights)); +} + +@Test +
[15/27] james-project git commit: MAILBOX-310 Cassandra modseq and uid test don't need mailbox mapper
MAILBOX-310 Cassandra modseq and uid test don't need mailbox mapper Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/36333bad Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/36333bad Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/36333bad Branch: refs/heads/master Commit: 36333bad8c1bbfa4694fc8eec2548f339aadf400 Parents: 5de2d00 Author: benwaAuthored: Tue Oct 3 14:24:08 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../mail/CassandraModSeqProviderTest.java | 29 +--- .../mail/CassandraUidProviderTest.java | 27 +++--- 2 files changed, 11 insertions(+), 45 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/36333bad/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java -- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java index f3d6ed2..c2c0c76 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java @@ -25,11 +25,7 @@ import java.util.stream.LongStream; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; -import org.apache.james.backends.cassandra.init.CassandraConfiguration; -import org.apache.james.backends.cassandra.init.CassandraModuleComposite; -import org.apache.james.backends.cassandra.utils.CassandraUtils; -import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; -import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule; +import org.apache.james.mailbox.cassandra.ids.CassandraId; import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox; @@ -41,36 +37,25 @@ import org.junit.Test; import com.github.fge.lambdas.Throwing; public class CassandraModSeqProviderTest { +private static final CassandraId CASSANDRA_ID = new CassandraId.Factory().fromString("e22b3ac0-a80b-11e7-bb00-777268d65503"); @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule(); private CassandraCluster cassandra; private CassandraModSeqProvider modSeqProvider; -private CassandraMailboxMapper mapper; private SimpleMailbox mailbox; @Before public void setUp() throws Exception { -CassandraModuleComposite modules = -new CassandraModuleComposite( -new CassandraAclModule(), -new CassandraMailboxModule(), -new CassandraModSeqModule()); -cassandra = CassandraCluster.create(modules, cassandraServer.getIp(), cassandraServer.getBindingPort()); +cassandra = CassandraCluster.create( +new CassandraModSeqModule(), +cassandraServer.getIp(), +cassandraServer.getBindingPort()); modSeqProvider = new CassandraModSeqProvider(cassandra.getConf()); -CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider()); -CassandraMailboxPathDAO mailboxPathDAO = new CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider()); -CassandraUserMailboxRightsDAO userMailboxRightsDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); -mapper = new CassandraMailboxMapper( -mailboxDAO, -mailboxPathDAO, -userMailboxRightsDAO, -new CassandraACLMapper(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION), -CassandraConfiguration.DEFAULT_CONFIGURATION); MailboxPath path = new MailboxPath("gsoc", "ieugen", "Trash"); mailbox = new SimpleMailbox(path, 1234); -mapper.save(mailbox); +mailbox.setMailboxId(CASSANDRA_ID); } @After http://git-wip-us.apache.org/repos/asf/james-project/blob/36333bad/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java -- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java
[20/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Reindent isWild
MAILBOX-310 Mailbox query refactoring: Reindent isWild Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6501eab1 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6501eab1 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6501eab1 Branch: refs/heads/master Commit: 6501eab1045d2f56c7796095f744528b25dc2ec4 Parents: 8faf9a6 Author: benwaAuthored: Wed Oct 4 10:00:48 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../main/java/org/apache/james/mailbox/model/MailboxQuery.java | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/6501eab1/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java index 6cbbff2..09b12cf 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java @@ -275,7 +275,10 @@ public final class MailboxQuery { * @return true if wildcard contained, false otherwise */ public boolean isWild() { -return expression != null && (expression.indexOf(getFreeWildcard()) >= 0 || expression.indexOf(getLocalWildcard()) >= 0); +return expression != null +&& ( +expression.indexOf(getFreeWildcard()) >= 0 +|| expression.indexOf(getLocalWildcard()) >= 0); } /** - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[05/27] james-project git commit: MAILBOX-310 ACLChanged should represent the diff between two ACLs
MAILBOX-310 ACLChanged should represent the diff between two ACLs Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/31925357 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/31925357 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/31925357 Branch: refs/heads/master Commit: 31925357c88f1dbaa51970ddbb93d2906f3804c3 Parents: 929f31d Author: benwaAuthored: Wed Oct 4 15:12:36 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 09:48:53 2017 +0200 -- .../mailbox/acl/PositiveUserACLChanged.java | 90 + .../mailbox/acl/PositiveUserACLChangedTest.java | 199 +++ 2 files changed, 289 insertions(+) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/31925357/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java new file mode 100644 index 000..50948a4 --- /dev/null +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java @@ -0,0 +1,90 @@ +/ + * 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.acl; + +import java.util.Map; +import java.util.Objects; +import java.util.stream.Stream; + +import org.apache.james.mailbox.model.MailboxACL; + +public class PositiveUserACLChanged { +private final MailboxACL oldACL; +private final MailboxACL newACL; + +public PositiveUserACLChanged(MailboxACL oldACL, MailboxACL newACL) { +this.oldACL = oldACL; +this.newACL = newACL; +} + +public MailboxACL getOldACL() { +return oldACL; +} + +public MailboxACL getNewACL() { +return newACL; +} + +public Stream addedEntries() { +Map oldEntries = oldACL.ofPositiveNameType(MailboxACL.NameType.user); + +return newACL.ofPositiveNameType(MailboxACL.NameType.user) +.entrySet() +.stream() +.filter(entry -> !oldEntries.containsKey(entry.getKey())) +.map(entry -> new MailboxACL.Entry(entry.getKey(), entry.getValue())); +} + +public Stream removedEntries() { +Map newEntries = newACL.ofPositiveNameType(MailboxACL.NameType.user); + +return oldACL.ofPositiveNameType(MailboxACL.NameType.user) +.entrySet() +.stream() +.filter(entry -> !newEntries.containsKey(entry.getKey())) +.map(entry -> new MailboxACL.Entry(entry.getKey(), entry.getValue())); +} + +public Stream changedEntries() { +Map oldEntries = oldACL.ofPositiveNameType(MailboxACL.NameType.user); + +return newACL.ofPositiveNameType(MailboxACL.NameType.user) +.entrySet() +.stream() +.filter(entry -> oldEntries.containsKey(entry.getKey())) +.map(entry -> new MailboxACL.Entry(entry.getKey(), entry.getValue())); +} + +@Override +public final boolean equals(Object o) { +if (o instanceof PositiveUserACLChanged) { +PositiveUserACLChanged positiveUserAclChanged = (PositiveUserACLChanged) o; + +return Objects.equals(this.oldACL, positiveUserAclChanged.oldACL) +&& Objects.equals(this.newACL,
[24/27] james-project git commit: MAILBOX-310 Propose a more explicit wording for MailboxMapper::findMailboxes
MAILBOX-310 Propose a more explicit wording for MailboxMapper::findMailboxes Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b44b9bbe Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b44b9bbe Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b44b9bbe Branch: refs/heads/master Commit: b44b9bbee11ba75de24eafddba92a872278bc1e0 Parents: d103058 Author: benwaAuthored: Wed Oct 4 16:03:29 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:39 2017 +0200 -- .../mailbox/caching/CachingMailboxMapper.java | 4 ++-- .../cassandra/mail/CassandraMailboxMapper.java | 2 +- .../mailbox/hbase/mail/HBaseMailboxMapper.java | 2 +- .../mailbox/jcr/mail/JCRMailboxMapper.java | 2 +- .../mailbox/jpa/mail/JPAMailboxMapper.java | 2 +- .../jpa/mail/TransactionalMailboxMapper.java| 4 ++-- .../maildir/mail/MaildirMailboxMapper.java | 2 +- .../inmemory/mail/InMemoryMailboxMapper.java| 2 +- .../mailbox/store/StoreMailboxManager.java | 2 +- .../james/mailbox/store/mail/MailboxMapper.java | 2 +- .../store/TestMailboxSessionMapperFactory.java | 2 +- .../store/mail/model/MailboxMapperACLTest.java | 22 ++-- 12 files changed, 24 insertions(+), 24 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/b44b9bbe/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java -- diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java index fe67704..c368a75 100644 --- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java +++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java @@ -122,8 +122,8 @@ public class CachingMailboxMapper implements MailboxMapper { } @Override -public List findMailboxes(String userName, Right right) throws MailboxException { -return underlying.findMailboxes(userName, right); +public List findNonPersonalMailboxes(String userName, Right right) throws MailboxException { +return underlying.findNonPersonalMailboxes(userName, right); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/b44b9bbe/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java -- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java index 498524b..e8c66fa 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java @@ -263,7 +263,7 @@ public class CassandraMailboxMapper implements MailboxMapper { } @Override -public List findMailboxes(String userName, Right right) throws MailboxException { +public List findNonPersonalMailboxes(String userName, Right right) throws MailboxException { return FluentFutureStream.of(userMailboxRightsDAO.listRightsForUser(userName) .thenApply(map -> toAuthorizedMailboxIds(map, right))) .thenFlatComposeOnOptional(this::retrieveMailbox) http://git-wip-us.apache.org/repos/asf/james-project/blob/b44b9bbe/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java -- diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java index bbf46b8..ec2e0bc 100644 --- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java +++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java @@ -427,7 +427,7 @@ public class HBaseMailboxMapper extends HBaseNonTransactionalMapper implements M } @Override -public List findMailboxes(String userName, Right right) throws MailboxException { +public List findNonPersonalMailboxes(String userName, Right right) throws MailboxException { return ImmutableList.of(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/b44b9bbe/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
[18/27] james-project git commit: MAILBOX-310 Mailbox query refactoring: Reorder fields. Fields should come after static definitions
MAILBOX-310 Mailbox query refactoring: Reorder fields. Fields should come after static definitions Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6607c699 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6607c699 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6607c699 Branch: refs/heads/master Commit: 6607c6992a7341976cf7f586f572476c52c07c2e Parents: 1f37e3c Author: benwaAuthored: Wed Oct 4 09:47:12 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:38 2017 +0200 -- .../org/apache/james/mailbox/model/MailboxQuery.java | 14 +++--- 1 file changed, 7 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/6607c699/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java index 49db850..7332ec1 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java @@ -46,13 +46,6 @@ public final class MailboxQuery { private static final String EMPTY_PATH_NAME = ""; -private final String expression; -private final char pathDelimiter; -private final Pattern pattern; -private final Optional namespace; -private final Optional user; -private final Optional baseName; - public static Builder builder() { return new Builder(); } @@ -117,6 +110,13 @@ public final class MailboxQuery { } } +private final String expression; +private final char pathDelimiter; +private final Pattern pattern; +private final Optional namespace; +private final Optional user; +private final Optional baseName; + /** * Constructs an expression determining a set of mailbox names. * - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org
[07/27] james-project git commit: MAILBOX-310 MailboxManager::search should allow retrieving delegated mailboxes
MAILBOX-310 MailboxManager::search should allow retrieving delegated mailboxes Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d26baea3 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d26baea3 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d26baea3 Branch: refs/heads/master Commit: d26baea3b715ff028c2c8d9bf17fcf840037c4a7 Parents: 2650028 Author: benwaAuthored: Tue Oct 3 18:26:47 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:37 2017 +0200 -- .../james/mailbox/model/MailboxQuery.java | 6 ++ .../james/mailbox/MailboxManagerTest.java | 82 +++- .../mailbox/store/StoreMailboxManager.java | 15 +++- 3 files changed, 100 insertions(+), 3 deletions(-) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/d26baea3/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java -- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java index 5153ffa..a812206 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxQuery.java @@ -146,6 +146,12 @@ public final class MailboxQuery { pattern = constructEscapedRegex(); } +public boolean isPrivateMailboxes(MailboxSession session) { +MailboxSession.User sessionUser = session.getUser(); +return namespace.map(MailboxConstants.USER_NAMESPACE::equals).orElse(false) +&& user.map(sessionUser::isSameUser).orElse(false); +} + public MailboxPath getPathLike() { String combinedName = getCombinedName() .replace(getFreeWildcard(), SQL_WILDCARD_CHAR) http://git-wip-us.apache.org/repos/asf/james-project/blob/d26baea3/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java index 93282df..66ff86c 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java @@ -33,6 +33,7 @@ import org.apache.james.mailbox.exception.AnnotationException; import org.apache.james.mailbox.exception.BadCredentialsException; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.mock.MockMailboxManager; +import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxAnnotation; import org.apache.james.mailbox.model.MailboxAnnotationKey; import org.apache.james.mailbox.model.MailboxId; @@ -436,4 +437,83 @@ public abstract class MailboxManagerTest { builder.add(MailboxAnnotation.newInstance(new MailboxAnnotationKey("/private/comment4"), "AnyValue")); mailboxManager.updateAnnotations(inbox, session, builder.build()); -}} +} + +@Test +public void searchShouldIncludeDelegatedMailboxes() throws MailboxException { + Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.RightSearch)); +MailboxSession session1 = mailboxManager.createSystemSession(USER_1); +MailboxSession session2 = mailboxManager.createSystemSession(USER_2); +MailboxPath inbox1 = MailboxPath.inbox(session1); +mailboxManager.createMailbox(inbox1, session1); +mailboxManager.setRights(inbox1, +MailboxACL.EMPTY.apply(MailboxACL.command() +.forUser(USER_2) +.rights(MailboxACL.Right.Read) +.asAddition()), +session1); + +MailboxQuery mailboxQuery = MailboxQuery.builder() +.mailboxSession(session2) +.matchesAll() +.build(); + +assertThat(mailboxManager.search(mailboxQuery, session2)) +.extracting(MailboxMetaData::getPath) +.containsOnly(inbox1); +} + +@Test +public void searchShouldCombinePrivateAndDelegatedMailboxes() throws MailboxException { + Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL)); +MailboxSession session1 = mailboxManager.createSystemSession(USER_1); +MailboxSession session2 = mailboxManager.createSystemSession(USER_2); +MailboxPath inbox1 = MailboxPath.inbox(session1); +MailboxPath inbox2 = MailboxPath.inbox(session2); +mailboxManager.createMailbox(inbox1,
[27/27] james-project git commit: MAILBOX-310 Adding additional tests demonstrating per username/namespace search filtering on the manager layer
MAILBOX-310 Adding additional tests demonstrating per username/namespace search filtering on the manager layer Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/93aac90e Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/93aac90e Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/93aac90e Branch: refs/heads/master Commit: 93aac90e3173bbc08f7e84106a1450838368b81b Parents: 636e5a4 Author: benwaAuthored: Thu Oct 5 09:54:26 2017 +0700 Committer: Matthieu Baechler Committed: Thu Oct 5 20:00:39 2017 +0200 -- .../james/mailbox/MailboxManagerTest.java | 59 1 file changed, 59 insertions(+) -- http://git-wip-us.apache.org/repos/asf/james-project/blob/93aac90e/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java -- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java index f04cfa5..7568ea7 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java @@ -484,6 +484,65 @@ public abstract class MailboxManagerTest { } @Test +public void searchShouldAllowUserFiltering() throws MailboxException { + Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL)); +MailboxSession session1 = mailboxManager.createSystemSession(USER_1); +MailboxSession session2 = mailboxManager.createSystemSession(USER_2); +MailboxPath inbox1 = MailboxPath.inbox(session1); +MailboxPath inbox2 = MailboxPath.inbox(session2); +mailboxManager.createMailbox(inbox1, session1); +mailboxManager.createMailbox(inbox2, session2); +mailboxManager.setRights(inbox1, +MailboxACL.EMPTY.apply(MailboxACL.command() +.forUser(USER_2) +.rights(MailboxACL.Right.Read) +.asAddition()), +session1); + +MailboxQuery mailboxQuery = MailboxQuery.builder() +.username(USER_1) +.matchesAllMailboxNames() +.build(); + +assertThat(mailboxManager.search(mailboxQuery, session2)) +.extracting(MailboxMetaData::getPath) +.containsOnly(inbox1); +} + +@Test +public void searchShouldAllowNamespaceFiltering() throws MailboxException { + Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL)); +MailboxSession session1 = mailboxManager.createSystemSession(USER_1); +MailboxSession session2 = mailboxManager.createSystemSession(USER_2); +MailboxPath inbox1 = MailboxPath.inbox(session1); +String specificNamespace = "specificNamespace"; +MailboxPath mailboxPath1 = new MailboxPath(specificNamespace, USER_1, "mailbox"); +mailboxManager.createMailbox(inbox1, session1); +mailboxManager.createMailbox(mailboxPath1, session1); +mailboxManager.setRights(inbox1, +MailboxACL.EMPTY.apply(MailboxACL.command() +.forUser(USER_2) +.rights(MailboxACL.Right.Read) +.asAddition()), +session1); +mailboxManager.setRights(mailboxPath1, +MailboxACL.EMPTY.apply(MailboxACL.command() +.forUser(USER_2) +.rights(MailboxACL.Right.Read) +.asAddition()), +session1); + +MailboxQuery mailboxQuery = MailboxQuery.builder() +.namespace(specificNamespace) +.matchesAllMailboxNames() +.build(); + +assertThat(mailboxManager.search(mailboxQuery, session2)) +.extracting(MailboxMetaData::getPath) +.containsOnly(mailboxPath1); +} + +@Test public void searchShouldNotReturnNoMoreDelegatedMailboxes() throws MailboxException { Assume.assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.ACL)); MailboxSession session1 = mailboxManager.createSystemSession(USER_1); - To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org