@Override public void applyRightsCommand(MailboxPath mailboxPath, MailboxACL.ACLCommand mailboxACLCommand, MailboxSession session) throws MailboxException { storeRightManager.applyRightsCommand(mailboxPath, mailboxACLCommand, session); }
@Override public void setRights(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException { storeRightManager.setRights(mailboxId, mailboxACL, session); }
@VisibleForTesting void assertSharesBelongsToUserDomain(String user, Map<EntryKey, Rfc4314Rights> entries) throws DifferentDomainException { if (entries.keySet().stream() .filter(entry -> !entry.getNameType().equals(NameType.special)) .map(EntryKey::getName) .anyMatch(name -> areDomainsDifferent(name, user))) { throw new DifferentDomainException(); } }
public boolean isReadWrite(MailboxSession session, Mailbox mailbox, Flags sharedPermanentFlags) throws UnsupportedRightException { Rfc4314Rights rights = myRights(mailbox, session); /* * then go through shared flags. RFC 4314 section 4: * Changing flags: STORE * - the server MUST check if the user has "t" (expunge) right * - when the user modifies \Deleted flag "s" (seen) right * - when the user modifies \Seen flag "w" (write) - for all other message flags. */ return rights.contains(Right.Insert) || rights.contains(Right.PerformExpunge) || checkDeleteFlag(rights, sharedPermanentFlags) || checkSeenFlag(rights, sharedPermanentFlags) || checkWriteFlag(rights, sharedPermanentFlags); }
@Override public void setRights(MailboxPath mailboxPath, MailboxACL mailboxACL, MailboxSession session) throws MailboxException { assertSharesBelongsToUserDomain(mailboxPath.getUser(), mailboxACL.getEntries()); MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); setRights(mailboxACL, mapper, mailbox, session); }
public static CassandraMailboxManager createMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory) throws Exception { DefaultDelegatingMailboxListener delegatingMailboxListener = new DefaultDelegatingMailboxListener(); MailboxEventDispatcher mailboxEventDispatcher = new MailboxEventDispatcher(delegatingMailboxListener); StoreRightManager storeRightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), mailboxEventDispatcher); StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mapperFactory, storeRightManager); CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, mock(Authenticator.class), mock(Authorizator.class), new NoMailboxPathLocker(), new MessageParser(), new CassandraMessageId.Factory(), mailboxEventDispatcher, delegatingMailboxListener, annotationManager, storeRightManager); cassandraMailboxManager.init(); return cassandraMailboxManager; }
private void assertSharesBelongsToUserDomain(String user, ACLCommand mailboxACLCommand) throws DifferentDomainException { assertSharesBelongsToUserDomain(user, ImmutableMap.of(mailboxACLCommand.getEntryKey(), mailboxACLCommand.getRights())); }
@Override @Before public void setUp() throws Exception { mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory(); Authenticator noAuthenticator = null; Authorizator noAuthorizator = null; DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener(); MailboxEventDispatcher mailboxEventDispatcher = new MailboxEventDispatcher(delegatingListener); MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory(); GroupMembershipResolver groupMembershipResolver = null; UnionMailboxACLResolver aclResolver = new UnionMailboxACLResolver(); StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, mailboxEventDispatcher); StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager); mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(), new MessageParser(), messageIdFactory, mailboxEventDispatcher, delegatingListener, annotationManager, storeRightManager); mailboxManager.init(); MessageParser failingMessageParser = mock(MessageParser.class); when(failingMessageParser.retrieveAttachments(any(InputStream.class))) .thenThrow(new RuntimeException("Message parser set to fail")); parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(), failingMessageParser, messageIdFactory, mailboxEventDispatcher, delegatingListener, annotationManager, storeRightManager); parseFailingMailboxManager.init(); super.setUp(); }
@Override public void applyRightsCommand(MailboxPath mailboxPath, ACLCommand mailboxACLCommand, MailboxSession session) throws MailboxException { assertSharesBelongsToUserDomain(mailboxPath.getUser(), mailboxACLCommand); MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); ACLDiff aclDiff = mapper.updateACL(mailbox, mailboxACLCommand); dispatcher.aclUpdated(session, mailboxPath, aclDiff); }
private void initSystemUnderTest() throws Exception { CassandraMessageId.Factory messageIdFactory = new CassandraMessageId.Factory(); mailboxSessionMapperFactory = TestCassandraMailboxSessionMapperFactory.forTests( cassandra.getConf(), cassandra.getTypesProvider(), messageIdFactory); Authenticator noAuthenticator = null; Authorizator noAuthorizator = null; DefaultDelegatingMailboxListener delegatingMailboxListener = new DefaultDelegatingMailboxListener(); MailboxEventDispatcher mailboxEventDispatcher = new MailboxEventDispatcher(delegatingMailboxListener); StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), mailboxEventDispatcher); StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager); mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(), new MessageParser(), messageIdFactory, mailboxEventDispatcher, delegatingMailboxListener, annotationManager, storeRightManager); mailboxManager.init(); MessageParser failingMessageParser = mock(MessageParser.class); when(failingMessageParser.retrieveAttachments(any())) .thenThrow(new RuntimeException("Message parser set to fail")); parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, noAuthorizator, new NoMailboxPathLocker(), failingMessageParser, messageIdFactory, mailboxEventDispatcher, delegatingMailboxListener, annotationManager, storeRightManager); parseFailingMailboxManager.init(); }
@Test public void eventShouldDoNothingWhenMailboxACLUpdatedButNoLookupRight() throws Exception { storeRightManager.applyRightsCommand( GRAND_CHILD_MAILBOX, MailboxACL.command() .key(SHARED_USER_KEY) .rights(Right.Administer) .asReplacement(), mailboxSession); MailboxACL actualACL = storeMailboxManager.getMailbox(parentMailboxId, mailboxSession) .getMetaData(RESET_RECENT, mailboxSession, MessageManager.MetaData.FetchGroup.NO_COUNT) .getACL(); assertThat(actualACL.getEntries()) .doesNotContainKeys(SHARED_USER_KEY); }
@Override public void setRights(MailboxPath mailboxPath, MailboxACL mailboxACL, MailboxSession session) throws MailboxException { storeRightManager.setRights(mailboxPath, mailboxACL, session); }
public static StoreMailboxManager createMailboxManager(String configuration, TemporaryFolder temporaryFolder) throws MailboxException, IOException { MaildirStore store = new MaildirStore(temporaryFolder.newFolder().getPath() + configuration, new JVMMailboxPathLocker()); MaildirMailboxSessionMapperFactory mf = new MaildirMailboxSessionMapperFactory(store); MailboxACLResolver aclResolver = new UnionMailboxACLResolver(); GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver(); MessageParser messageParser = new MessageParser(); DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener(); MailboxEventDispatcher mailboxEventDispatcher = new MailboxEventDispatcher(delegatingListener); StoreRightManager storeRightManager = new StoreRightManager(mf, aclResolver, groupMembershipResolver, mailboxEventDispatcher); Authenticator noAuthenticator = null; Authorizator noAuthorizator = null; StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mf, storeRightManager); StoreMailboxManager manager = new StoreMailboxManager(mf, noAuthenticator, noAuthorizator, new JVMMailboxPathLocker(), messageParser, new DefaultMessageId.Factory(), annotationManager, mailboxEventDispatcher, delegatingListener, storeRightManager); manager.init(); return manager; } }
@Test public void eventShouldDoNothingWhenEmptyNewRights() throws Exception { storeRightManager.applyRightsCommand( GRAND_CHILD_MAILBOX, MailboxACL.command() .key(SHARED_USER_KEY) .rights() .asAddition(), mailboxSession); MailboxACL actualACL = storeMailboxManager.getMailbox(parentMailboxId, mailboxSession) .getMetaData(RESET_RECENT, mailboxSession, MessageManager.MetaData.FetchGroup.NO_COUNT) .getACL(); assertThat(actualACL.getEntries()) .doesNotContainKeys(SHARED_USER_KEY); }
@Override public void setRights(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); Mailbox mailbox = mapper.findMailboxById(mailboxId); setRights(mailbox.generateAssociatedPath(), mailboxACL, session); }
public static JCRMailboxManager provideMailboxManager(String user, String pass, String workspace, RepositoryImpl repository) { JCRUtils.registerCnd(repository, workspace, user, pass); MailboxSessionJCRRepository sessionRepos = new GlobalMailboxSessionJCRRepository(repository, workspace, user, pass); JVMMailboxPathLocker locker = new JVMMailboxPathLocker(); JCRUidProvider uidProvider = new JCRUidProvider(locker, sessionRepos); JCRModSeqProvider modSeqProvider = new JCRModSeqProvider(locker, sessionRepos); JCRMailboxSessionMapperFactory mf = new JCRMailboxSessionMapperFactory(sessionRepos, uidProvider, modSeqProvider); MailboxACLResolver aclResolver = new UnionMailboxACLResolver(); GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver(); MessageParser messageParser = new MessageParser(); Authenticator noAuthenticator = null; Authorizator noAuthorizator = null; DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener(); MailboxEventDispatcher mailboxEventDispatcher = new MailboxEventDispatcher(delegatingListener); StoreRightManager storeRightManager = new StoreRightManager(mf, aclResolver, groupMembershipResolver, mailboxEventDispatcher); StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mf, storeRightManager); JCRMailboxManager manager = new JCRMailboxManager(mf, noAuthenticator, noAuthorizator, locker, messageParser, new DefaultMessageId.Factory(), mailboxEventDispatcher, delegatingListener, annotationManager, storeRightManager); try { manager.init(); } catch (MailboxException e) { throw new RuntimeException(e); } return manager; }
@Test public void eventShouldDoNothingWhenMailboxACLButNoLookupRight() throws Exception { storeRightManager.applyRightsCommand( GRAND_CHILD_MAILBOX, MailboxACL.command() .key(SHARED_USER_KEY) .rights(Right.Administer) .asAddition(), mailboxSession); MailboxACL actualACL = storeMailboxManager.getMailbox(parentMailboxId, mailboxSession) .getMetaData(RESET_RECENT, mailboxSession, MessageManager.MetaData.FetchGroup.NO_COUNT) .getACL(); assertThat(actualACL.getEntries()) .doesNotContainKeys(SHARED_USER_KEY); }
@Test public void eventShouldUpdateAllParentWhenMailboxACLUpdateLookupRight() throws Exception { Mailbox grandChildMailbox = mailboxMapper.getMailboxMapper(mailboxSession).findMailboxById(grandChildMailboxId); mailboxMapper.getMailboxMapper(mailboxSession).setACL(grandChildMailbox, new MailboxACL( new Entry(SHARED_USER_KEY, new Rfc4314Rights(Right.Write)))); storeRightManager.setRights( GRAND_CHILD_MAILBOX, new MailboxACL( new Entry(SHARED_USER_KEY, new Rfc4314Rights(Right.Lookup))), mailboxSession); MailboxACL actualParentACL = storeMailboxManager.getMailbox(parentMailboxId, mailboxSession) .getMetaData(RESET_RECENT, mailboxSession, MessageManager.MetaData.FetchGroup.NO_COUNT) .getACL(); MailboxACL actualChildACL = storeMailboxManager.getMailbox(parentMailboxId, mailboxSession) .getMetaData(RESET_RECENT, mailboxSession, MessageManager.MetaData.FetchGroup.NO_COUNT) .getACL(); assertThat(actualParentACL.getEntries()) .contains(lookupEntry); assertThat(actualChildACL.getEntries()) .contains(lookupEntry); }
public static OpenJPAMailboxManager provideMailboxManager(JpaTestCluster jpaTestCluster) { EntityManagerFactory entityManagerFactory = jpaTestCluster.getEntityManagerFactory(); JVMMailboxPathLocker locker = new JVMMailboxPathLocker(); JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory, new JPAUidProvider(locker, entityManagerFactory), new JPAModSeqProvider(locker, entityManagerFactory)); MailboxACLResolver aclResolver = new UnionMailboxACLResolver(); GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver(); MessageParser messageParser = new MessageParser(); Authenticator noAuthenticator = null; Authorizator noAuthorizator = null; DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener(); MailboxEventDispatcher mailboxEventDispatcher = new MailboxEventDispatcher(delegatingListener); StoreRightManager storeRightManager = new StoreRightManager(mf, aclResolver, groupMembershipResolver, mailboxEventDispatcher); StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mf, storeRightManager, LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE); OpenJPAMailboxManager openJPAMailboxManager = new OpenJPAMailboxManager(mf, noAuthenticator, noAuthorizator, messageParser, new DefaultMessageId.Factory(), delegatingListener, mailboxEventDispatcher, annotationManager, storeRightManager); try { openJPAMailboxManager.init(); } catch (MailboxException e) { throw new RuntimeException(e); } return openJPAMailboxManager; } }
@Test public void eventShouldUpdateParentWhenMailboxACLAddLookupRight() throws Exception { storeRightManager.applyRightsCommand( GRAND_CHILD_MAILBOX, MailboxACL.command() .key(SHARED_USER_KEY) .rights(Right.Lookup) .asAddition(), mailboxSession); MailboxACL actualACL = storeMailboxManager.getMailbox(parentMailboxId, mailboxSession) .getMetaData(RESET_RECENT, mailboxSession, MessageManager.MetaData.FetchGroup.NO_COUNT) .getACL(); assertThat(actualACL.getEntries()) .hasSize(2) .contains(lookupEntry); }