You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2023/02/22 02:47:54 UTC
[james-project] branch master updated (54151b5321 -> 5df66714a8)
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
from 54151b5321 JAMES-3440 Clarify EmailQueryView APIs naming
new 548011f49e JAMES-3885 Username change should adapt delegation
new 99cdc911fd JAMES-3885 Delegation should be supported when using LDAP
new 5df66714a8 JAMES-3885 Document DelegationUsernameChangeTaskStep
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../james/examples/CustomJamesServerMain.java | 2 +
.../org/apache/james/CassandraJamesServerMain.java | 2 +
.../docs/modules/ROOT/pages/operate/webadmin.adoc | 1 +
.../james/CassandraRabbitMQJamesServerMain.java | 2 +
.../james/DistributedPOP3JamesServerMain.java | 2 +
.../java/org/apache/james/JPAJamesServerMain.java | 1 +
.../java/org/apache/james/JPAJamesServerMain.java | 1 +
.../org/apache/james/MemoryJamesServerMain.java | 2 +
.../src/main/java/org/apache/james/Main.java | 2 +
...Module.java => NaiveDelegationStoreModule.java} | 11 ++-
...le.java => CassandraDelegationStoreModule.java} | 31 +++------
.../data/CassandraUsersRepositoryModule.java | 19 -----
.../james/data/LdapUsersRepositoryModule.java | 3 -
.../modules/data/JPAUsersRepositoryModule.java | 3 -
.../modules/data/MemoryDelegationStoreModule.java} | 22 +++---
.../modules/data/MemoryUsersRepositoryModule.java | 5 --
.../james/rrt/ForwardUsernameChangeTaskStep.java | 2 +-
.../user/api/DelegationUsernameChangeTaskStep.java | 66 ++++++++++++++++++
.../DelegationUsernameChangeTaskStepTest.java | 81 ++++++++++++++++++++++
.../MemoryUsernameChangeIntegrationTest.java | 21 ++++++
src/site/markdown/server/manage-webadmin.md | 1 +
21 files changed, 209 insertions(+), 71 deletions(-)
copy server/container/guice/common/src/main/java/org/apache/james/{modules/MimeMessageModule.java => NaiveDelegationStoreModule.java} (82%)
copy server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/{CassandraUsersRepositoryModule.java => CassandraDelegationStoreModule.java} (67%)
copy server/container/guice/{cassandra/src/main/java/org/apache/james/modules/webadmin/TasksCleanupRoutesModule.java => memory/src/main/java/org/apache/james/modules/data/MemoryDelegationStoreModule.java} (67%)
create mode 100644 server/data/data-api/src/main/java/org/apache/james/user/api/DelegationUsernameChangeTaskStep.java
create mode 100644 server/data/data-memory/src/test/java/org/apache/james/user/memory/DelegationUsernameChangeTaskStepTest.java
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org
[james-project] 01/03: JAMES-3885 Username change should adapt delegation
Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 548011f49ec81a7df4590729bdae0646d1d27698
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Feb 20 15:57:42 2023 +0700
JAMES-3885 Username change should adapt delegation
---
.../data/CassandraUsersRepositoryModule.java | 5 ++
.../modules/data/MemoryUsersRepositoryModule.java | 7 ++
.../james/rrt/ForwardUsernameChangeTaskStep.java | 2 +-
.../user/api/DelegationUsernameChangeTaskStep.java | 66 ++++++++++++++++++
.../DelegationUsernameChangeTaskStepTest.java | 81 ++++++++++++++++++++++
.../MemoryUsernameChangeIntegrationTest.java | 21 ++++++
6 files changed, 181 insertions(+), 1 deletion(-)
diff --git a/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java b/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
index 0f4b3f0906..5f4424f652 100644
--- a/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
+++ b/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
@@ -25,6 +25,8 @@ import org.apache.james.backends.cassandra.components.CassandraModule;
import org.apache.james.mailbox.Authorizator;
import org.apache.james.server.core.configuration.ConfigurationProvider;
import org.apache.james.user.api.DelegationStore;
+import org.apache.james.user.api.DelegationUsernameChangeTaskStep;
+import org.apache.james.user.api.UsernameChangeTaskStep;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.cassandra.CassandraDelegationStore;
import org.apache.james.user.cassandra.CassandraRepositoryConfiguration;
@@ -53,6 +55,9 @@ public class CassandraUsersRepositoryModule extends AbstractModule {
cassandraDataDefinitions.addBinding().toInstance(org.apache.james.user.cassandra.CassandraUsersRepositoryModule.MODULE);
bind(DelegationStore.class).to(CassandraDelegationStore.class);
bind(Authorizator.class).to(DelegationStoreAuthorizator.class);
+
+ Multibinder.newSetBinder(binder(), UsernameChangeTaskStep.class)
+ .addBinding().to(DelegationUsernameChangeTaskStep.class);
}
@Provides
diff --git a/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java b/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
index d80f1a30ff..9bf747823d 100644
--- a/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
+++ b/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
@@ -23,6 +23,8 @@ import org.apache.james.UserEntityValidator;
import org.apache.james.domainlist.api.DomainList;
import org.apache.james.server.core.configuration.ConfigurationProvider;
import org.apache.james.user.api.DelegationStore;
+import org.apache.james.user.api.DelegationUsernameChangeTaskStep;
+import org.apache.james.user.api.UsernameChangeTaskStep;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.memory.MemoryDelegationStore;
import org.apache.james.user.memory.MemoryUsersRepository;
@@ -33,6 +35,7 @@ import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.Singleton;
+import com.google.inject.multibindings.Multibinder;
import com.google.inject.multibindings.ProvidesIntoSet;
public class MemoryUsersRepositoryModule extends AbstractModule {
@@ -41,6 +44,10 @@ public class MemoryUsersRepositoryModule extends AbstractModule {
bind(MemoryDelegationStore.class).in(Scopes.SINGLETON);
bind(UsersRepository.class).to(MemoryUsersRepository.class);
bind(DelegationStore.class).to(MemoryDelegationStore.class);
+
+
+ Multibinder.newSetBinder(binder(), UsernameChangeTaskStep.class)
+ .addBinding().to(DelegationUsernameChangeTaskStep.class);
}
@Provides
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/ForwardUsernameChangeTaskStep.java b/server/data/data-api/src/main/java/org/apache/james/rrt/ForwardUsernameChangeTaskStep.java
index 2319f24d09..86bc80c83b 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/ForwardUsernameChangeTaskStep.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/ForwardUsernameChangeTaskStep.java
@@ -81,6 +81,6 @@ public class ForwardUsernameChangeTaskStep implements UsernameChangeTaskStep {
@Override
public int priority() {
- return 10;
+ return 0;
}
}
diff --git a/server/data/data-api/src/main/java/org/apache/james/user/api/DelegationUsernameChangeTaskStep.java b/server/data/data-api/src/main/java/org/apache/james/user/api/DelegationUsernameChangeTaskStep.java
new file mode 100644
index 0000000000..5b2e32438a
--- /dev/null
+++ b/server/data/data-api/src/main/java/org/apache/james/user/api/DelegationUsernameChangeTaskStep.java
@@ -0,0 +1,66 @@
+/****************************************************************
+ * 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.user.api;
+
+import javax.inject.Inject;
+
+import org.apache.james.core.Username;
+import org.reactivestreams.Publisher;
+
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+public class DelegationUsernameChangeTaskStep implements UsernameChangeTaskStep {
+ private final DelegationStore delegationStore;
+
+ @Inject
+ public DelegationUsernameChangeTaskStep(DelegationStore delegationStore) {
+ this.delegationStore = delegationStore;
+ }
+
+ @Override
+ public StepName name() {
+ return new StepName("DelegationUsernameChangeTaskStep");
+ }
+
+ @Override
+ public int priority() {
+ return 1;
+ }
+
+ @Override
+ public Publisher<Void> changeUsername(Username oldUsername, Username newUsername) {
+ return migrateDelegatees(oldUsername, newUsername)
+ .then(migrateDelegators(oldUsername, newUsername));
+ }
+
+ private Mono<Void> migrateDelegators(Username oldUsername, Username newUsername) {
+ return Flux.from(delegationStore.delegatedUsers(oldUsername))
+ .concatMap(delegator -> Mono.from(delegationStore.addAuthorizedUser(delegator, newUsername))
+ .then(Mono.from(delegationStore.removeAuthorizedUser(delegator, oldUsername))))
+ .then();
+ }
+
+ private Flux<Void> migrateDelegatees(Username oldUsername, Username newUsername) {
+ return Flux.from(delegationStore.authorizedUsers(oldUsername))
+ .concatMap(delegatee -> Mono.from(delegationStore.addAuthorizedUser(newUsername, delegatee))
+ .then(Mono.from(delegationStore.removeAuthorizedUser(oldUsername, delegatee))));
+ }
+}
diff --git a/server/data/data-memory/src/test/java/org/apache/james/user/memory/DelegationUsernameChangeTaskStepTest.java b/server/data/data-memory/src/test/java/org/apache/james/user/memory/DelegationUsernameChangeTaskStepTest.java
new file mode 100644
index 0000000000..1ba073e6d2
--- /dev/null
+++ b/server/data/data-memory/src/test/java/org/apache/james/user/memory/DelegationUsernameChangeTaskStepTest.java
@@ -0,0 +1,81 @@
+/****************************************************************
+ * 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.user.memory;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.james.core.Username;
+import org.apache.james.user.api.DelegationUsernameChangeTaskStep;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+class DelegationUsernameChangeTaskStepTest {
+ private static final Username ALICE_OLD = Username.of("alice-old@domain.tld");
+ private static final Username ALICE_NEW = Username.of("alice-new@domain.tld");
+ private static final Username BOB = Username.of("bob@domain.tld");
+
+ private MemoryDelegationStore delegationStore;
+ private DelegationUsernameChangeTaskStep testee;
+
+ @BeforeEach
+ void setUp() {
+ delegationStore = new MemoryDelegationStore();
+ testee = new DelegationUsernameChangeTaskStep(delegationStore);
+ }
+
+ @Test
+ void shouldMigrateDelegationToNewUser() {
+ Mono.from(delegationStore.addAuthorizedUser(BOB)
+ .forUser(ALICE_OLD))
+ .block();
+
+ Mono.from(testee.changeUsername(ALICE_OLD, ALICE_NEW)).block();
+
+ assertThat(Flux.from(delegationStore.authorizedUsers(ALICE_NEW)).collectList().block())
+ .containsOnly(BOB);
+ }
+
+ @Test
+ void shouldRemoveDelegationForOldUser() {
+ Mono.from(delegationStore.addAuthorizedUser(BOB)
+ .forUser(ALICE_OLD))
+ .block();
+
+ Mono.from(testee.changeUsername(ALICE_OLD, ALICE_NEW)).block();
+
+ assertThat(Flux.from(delegationStore.authorizedUsers(ALICE_OLD)).collectList().block())
+ .isEmpty();
+ }
+
+ @Test
+ void shouldMigrateChangesForDelegators() {
+ Mono.from(delegationStore.addAuthorizedUser(ALICE_OLD)
+ .forUser(BOB))
+ .block();
+
+ Mono.from(testee.changeUsername(ALICE_OLD, ALICE_NEW)).block();
+
+ assertThat(Flux.from(delegationStore.authorizedUsers(BOB)).collectList().block())
+ .containsOnly(ALICE_NEW);
+ }
+}
diff --git a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUsernameChangeIntegrationTest.java b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUsernameChangeIntegrationTest.java
index f4c8a91aef..a16b75b904 100644
--- a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUsernameChangeIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUsernameChangeIntegrationTest.java
@@ -105,4 +105,25 @@ class MemoryUsernameChangeIntegrationTest {
.body(".", hasSize(1))
.body("[0].mailAddress", is(BOB.asString()));
}
+
+ @Test
+ void shouldAdaptDelegation() {
+ webAdminApi.put("/users/" + ALICE.asString() + "/authorizedUsers/" + CEDRIC.asString());
+
+ String taskId = webAdminApi
+ .queryParam("action", "rename")
+ .post("/users/" + ALICE.asString() + "/rename/" + BOB.asString())
+ .jsonPath()
+ .get("taskId");
+
+ webAdminApi.get("/tasks/" + taskId + "/await");
+
+ webAdminApi.get("/users/" + ALICE.asString() + "/authorizedUsers")
+ .then()
+ .body(".", hasSize(0));
+ webAdminApi.get("/users/" + BOB.asString() + "/authorizedUsers")
+ .then()
+ .body(".", hasSize(1))
+ .body("[0]", is(CEDRIC.asString()));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org
[james-project] 02/03: JAMES-3885 Delegation should be supported when using LDAP
Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 99cdc911fde7587b603bfb561c25bc72bcc2f8bc
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Feb 20 16:37:01 2023 +0700
JAMES-3885 Delegation should be supported when using LDAP
---
.../james/examples/CustomJamesServerMain.java | 2 ++
.../org/apache/james/CassandraJamesServerMain.java | 2 ++
.../james/CassandraRabbitMQJamesServerMain.java | 2 ++
.../james/DistributedPOP3JamesServerMain.java | 2 ++
.../java/org/apache/james/JPAJamesServerMain.java | 1 +
.../java/org/apache/james/JPAJamesServerMain.java | 1 +
.../org/apache/james/MemoryJamesServerMain.java | 2 ++
.../src/main/java/org/apache/james/Main.java | 2 ++
.../apache/james/NaiveDelegationStoreModule.java} | 23 +++--------------
...le.java => CassandraDelegationStoreModule.java} | 26 +++----------------
.../data/CassandraUsersRepositoryModule.java | 24 ------------------
.../james/data/LdapUsersRepositoryModule.java | 3 ---
.../modules/data/JPAUsersRepositoryModule.java | 3 ---
...odule.java => MemoryDelegationStoreModule.java} | 29 +---------------------
.../modules/data/MemoryUsersRepositoryModule.java | 12 ---------
15 files changed, 22 insertions(+), 112 deletions(-)
diff --git a/examples/custom-james-assembly/src/main/java/org/apache/james/examples/CustomJamesServerMain.java b/examples/custom-james-assembly/src/main/java/org/apache/james/examples/CustomJamesServerMain.java
index 7d875539e8..6716884cfe 100644
--- a/examples/custom-james-assembly/src/main/java/org/apache/james/examples/CustomJamesServerMain.java
+++ b/examples/custom-james-assembly/src/main/java/org/apache/james/examples/CustomJamesServerMain.java
@@ -27,6 +27,7 @@ import org.apache.james.data.UsersRepositoryModuleChooser;
import org.apache.james.modules.MailboxModule;
import org.apache.james.modules.MailetProcessingModule;
import org.apache.james.modules.data.MemoryDataModule;
+import org.apache.james.modules.data.MemoryDelegationStoreModule;
import org.apache.james.modules.data.MemoryUsersRepositoryModule;
import org.apache.james.modules.eventstore.MemoryEventStoreModule;
import org.apache.james.modules.mailbox.MemoryMailboxModule;
@@ -51,6 +52,7 @@ public class CustomJamesServerMain implements JamesServerMain {
public static final Module CUSTOM_SERVER_MODULE = Modules.combine(
new MailetProcessingModule(),
+ new MemoryDelegationStoreModule(),
new MailboxModule(),
new MemoryDataModule(),
new MemoryEventStoreModule(),
diff --git a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
index ff4f5f90e7..acadc0b14d 100644
--- a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -29,6 +29,7 @@ import org.apache.james.modules.CassandraConsistencyTaskSerializationModule;
import org.apache.james.modules.MailboxModule;
import org.apache.james.modules.MailetProcessingModule;
import org.apache.james.modules.data.CassandraDLPConfigurationStoreModule;
+import org.apache.james.modules.data.CassandraDelegationStoreModule;
import org.apache.james.modules.data.CassandraDomainListModule;
import org.apache.james.modules.data.CassandraJmapModule;
import org.apache.james.modules.data.CassandraRecipientRewriteTableModule;
@@ -135,6 +136,7 @@ public class CassandraJamesServerMain implements JamesServerMain {
public static final Module CASSANDRA_SERVER_CORE_MODULE = Modules.combine(
new ActiveMQQueueModule(),
+ new CassandraDelegationStoreModule(),
new CassandraBlobStoreDependenciesModule(),
new CassandraDomainListModule(),
new CassandraDLPConfigurationStoreModule(),
diff --git a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
index a52f821d83..9d28b1f27a 100644
--- a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
+++ b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
@@ -36,6 +36,7 @@ import org.apache.james.modules.blobstore.BlobStoreCacheModulesChooser;
import org.apache.james.modules.blobstore.BlobStoreConfiguration;
import org.apache.james.modules.blobstore.BlobStoreModulesChooser;
import org.apache.james.modules.data.CassandraDLPConfigurationStoreModule;
+import org.apache.james.modules.data.CassandraDelegationStoreModule;
import org.apache.james.modules.data.CassandraDomainListModule;
import org.apache.james.modules.data.CassandraJmapModule;
import org.apache.james.modules.data.CassandraRecipientRewriteTableModule;
@@ -135,6 +136,7 @@ public class CassandraRabbitMQJamesServerMain implements JamesServerMain {
.toInstance(ImmutableSet.of());
public static final Module CASSANDRA_SERVER_CORE_MODULE = Modules.combine(
+ new CassandraDelegationStoreModule(),
new CassandraDomainListModule(),
new CassandraDLPConfigurationStoreModule(),
new CassandraEventStoreModule(),
diff --git a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
index ae0dc04798..a3e389ed35 100644
--- a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
+++ b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
@@ -45,6 +45,7 @@ import org.apache.james.modules.TasksCleanupTaskSerializationModule;
import org.apache.james.modules.blobstore.BlobStoreCacheModulesChooser;
import org.apache.james.modules.blobstore.BlobStoreConfiguration;
import org.apache.james.modules.blobstore.BlobStoreModulesChooser;
+import org.apache.james.modules.data.CassandraDelegationStoreModule;
import org.apache.james.modules.data.CassandraDomainListModule;
import org.apache.james.modules.data.CassandraJmapModule;
import org.apache.james.modules.data.CassandraRecipientRewriteTableModule;
@@ -133,6 +134,7 @@ public class DistributedPOP3JamesServerMain implements JamesServerMain {
public static final Module CASSANDRA_SERVER_CORE_MODULE = Modules.combine(
new CassandraBlobStoreDependenciesModule(),
+ new CassandraDelegationStoreModule(),
new CassandraDomainListModule(),
new CassandraEventStoreModule(),
new CassandraJmapModule(),
diff --git a/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java
index aa62cbe259..1420cce5a2 100644
--- a/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java
+++ b/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java
@@ -78,6 +78,7 @@ public class JPAJamesServerMain implements JamesServerMain {
private static final Module JPA_SERVER_MODULE = Modules.combine(
new ActiveMQQueueModule(),
+ new NaiveDelegationStoreModule(),
new DefaultProcessorsConfigurationProviderModule(),
new JPADataModule(),
new JPAMailboxModule(),
diff --git a/server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java
index be0b84bfb7..7dac746dc1 100644
--- a/server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java
+++ b/server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java
@@ -55,6 +55,7 @@ public class JPAJamesServerMain implements JamesServerMain {
new TaskManagerModule());
private static final Module JPA_SERVER_MODULE = Modules.combine(
+ new NaiveDelegationStoreModule(),
new MailetProcessingModule(),
new JPAEntityManagerModule(),
new JPADataModule(),
diff --git a/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java b/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java
index b9de867c7c..124b9f03a7 100644
--- a/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java
+++ b/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java
@@ -29,6 +29,7 @@ import org.apache.james.modules.MailboxModule;
import org.apache.james.modules.MailetProcessingModule;
import org.apache.james.modules.data.MemoryDataJmapModule;
import org.apache.james.modules.data.MemoryDataModule;
+import org.apache.james.modules.data.MemoryDelegationStoreModule;
import org.apache.james.modules.data.MemoryUsersRepositoryModule;
import org.apache.james.modules.eventstore.MemoryEventStoreModule;
import org.apache.james.modules.mailbox.MemoryMailboxModule;
@@ -107,6 +108,7 @@ public class MemoryJamesServerMain implements JamesServerMain {
public static final Module IN_MEMORY_SERVER_MODULE = Modules.combine(
new MailetProcessingModule(),
+ new MemoryDelegationStoreModule(),
new BlobMemoryModule(),
new DeletedMessageVaultModule(),
new BlobExportMechanismModule(),
diff --git a/server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java b/server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java
index 7df9838d75..a1c827ca36 100644
--- a/server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java
+++ b/server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java
@@ -28,6 +28,7 @@ import org.apache.james.blob.cassandra.CassandraBlobStoreDAO;
import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlModule;
import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlStore;
+import org.apache.james.modules.data.CassandraDelegationStoreModule;
import org.apache.james.modules.data.CassandraDomainListModule;
import org.apache.james.modules.data.CassandraRecipientRewriteTableModule;
import org.apache.james.modules.data.CassandraUsersRepositoryModule;
@@ -105,6 +106,7 @@ public class Main implements JamesServerMain {
},
new CassandraDomainListModule(),
new CassandraRecipientRewriteTableModule(),
+ new CassandraDelegationStoreModule(),
new CassandraUsersRepositoryModule(),
new CassandraMetricsModule(),
new TaskManagerModule()
diff --git a/server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java b/server/container/guice/common/src/main/java/org/apache/james/NaiveDelegationStoreModule.java
similarity index 58%
copy from server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
copy to server/container/guice/common/src/main/java/org/apache/james/NaiveDelegationStoreModule.java
index 930aef3e5b..4b5561e677 100644
--- a/server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
+++ b/server/container/guice/common/src/main/java/org/apache/james/NaiveDelegationStoreModule.java
@@ -16,32 +16,17 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.modules.data;
-import org.apache.james.server.core.configuration.ConfigurationProvider;
+package org.apache.james;
+
import org.apache.james.user.api.DelegationStore;
-import org.apache.james.user.api.UsersRepository;
-import org.apache.james.user.jpa.JPAUsersRepository;
import org.apache.james.user.memory.NaiveDelegationStore;
-import org.apache.james.utils.InitializationOperation;
-import org.apache.james.utils.InitilizationOperationBuilder;
import com.google.inject.AbstractModule;
-import com.google.inject.Scopes;
-import com.google.inject.multibindings.ProvidesIntoSet;
-public class JPAUsersRepositoryModule extends AbstractModule {
+public class NaiveDelegationStoreModule extends AbstractModule {
@Override
- public void configure() {
- bind(JPAUsersRepository.class).in(Scopes.SINGLETON);
- bind(UsersRepository.class).to(JPAUsersRepository.class);
+ protected void configure() {
bind(DelegationStore.class).to(NaiveDelegationStore.class);
}
-
- @ProvidesIntoSet
- InitializationOperation configureJpaUsers(ConfigurationProvider configurationProvider, JPAUsersRepository usersRepository) {
- return InitilizationOperationBuilder
- .forClass(JPAUsersRepository.class)
- .init(() -> usersRepository.configure(configurationProvider.getConfiguration("usersrepository")));
- }
}
diff --git a/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java b/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraDelegationStoreModule.java
similarity index 69%
copy from server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
copy to server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraDelegationStoreModule.java
index 5f4424f652..ebb811c0cf 100644
--- a/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
+++ b/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraDelegationStoreModule.java
@@ -20,44 +20,31 @@
package org.apache.james.modules.data;
import org.apache.commons.configuration2.ex.ConfigurationException;
-import org.apache.james.adapter.mailbox.DelegationStoreAuthorizator;
import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.mailbox.Authorizator;
import org.apache.james.server.core.configuration.ConfigurationProvider;
import org.apache.james.user.api.DelegationStore;
import org.apache.james.user.api.DelegationUsernameChangeTaskStep;
import org.apache.james.user.api.UsernameChangeTaskStep;
-import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.cassandra.CassandraDelegationStore;
import org.apache.james.user.cassandra.CassandraRepositoryConfiguration;
import org.apache.james.user.cassandra.CassandraUsersDAO;
-import org.apache.james.user.lib.UsersDAO;
-import org.apache.james.user.lib.UsersRepositoryImpl;
-import org.apache.james.utils.InitializationOperation;
-import org.apache.james.utils.InitilizationOperationBuilder;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.Singleton;
-import com.google.inject.TypeLiteral;
import com.google.inject.multibindings.Multibinder;
-import com.google.inject.multibindings.ProvidesIntoSet;
-public class CassandraUsersRepositoryModule extends AbstractModule {
+public class CassandraDelegationStoreModule extends AbstractModule {
@Override
public void configure() {
- bind(CassandraUsersDAO.class).in(Scopes.SINGLETON);
- bind(UsersDAO.class).to(CassandraUsersDAO.class);
- bind(new TypeLiteral<UsersRepositoryImpl<CassandraUsersDAO>>() {}).in(Scopes.SINGLETON);
- bind(UsersRepository.class).to(new TypeLiteral<UsersRepositoryImpl<CassandraUsersDAO>>() {});
+ bind(DelegationStore.class).to(CassandraDelegationStore.class);
Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class);
cassandraDataDefinitions.addBinding().toInstance(org.apache.james.user.cassandra.CassandraUsersRepositoryModule.MODULE);
- bind(DelegationStore.class).to(CassandraDelegationStore.class);
- bind(Authorizator.class).to(DelegationStoreAuthorizator.class);
Multibinder.newSetBinder(binder(), UsernameChangeTaskStep.class)
.addBinding().to(DelegationUsernameChangeTaskStep.class);
+ bind(CassandraUsersDAO.class).in(Scopes.SINGLETON);
}
@Provides
@@ -66,11 +53,4 @@ public class CassandraUsersRepositoryModule extends AbstractModule {
return CassandraRepositoryConfiguration.from(
configurationProvider.getConfiguration("usersrepository"));
}
-
- @ProvidesIntoSet
- InitializationOperation configureUsersRepository(ConfigurationProvider configurationProvider, UsersRepositoryImpl<CassandraUsersDAO> usersRepository) {
- return InitilizationOperationBuilder
- .forClass(UsersRepositoryImpl.class)
- .init(() -> usersRepository.configure(configurationProvider.getConfiguration("usersrepository")));
- }
}
diff --git a/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java b/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
index 5f4424f652..009d6c6aa6 100644
--- a/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
+++ b/server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
@@ -19,17 +19,10 @@
package org.apache.james.modules.data;
-import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.james.adapter.mailbox.DelegationStoreAuthorizator;
-import org.apache.james.backends.cassandra.components.CassandraModule;
import org.apache.james.mailbox.Authorizator;
import org.apache.james.server.core.configuration.ConfigurationProvider;
-import org.apache.james.user.api.DelegationStore;
-import org.apache.james.user.api.DelegationUsernameChangeTaskStep;
-import org.apache.james.user.api.UsernameChangeTaskStep;
import org.apache.james.user.api.UsersRepository;
-import org.apache.james.user.cassandra.CassandraDelegationStore;
-import org.apache.james.user.cassandra.CassandraRepositoryConfiguration;
import org.apache.james.user.cassandra.CassandraUsersDAO;
import org.apache.james.user.lib.UsersDAO;
import org.apache.james.user.lib.UsersRepositoryImpl;
@@ -37,34 +30,17 @@ import org.apache.james.utils.InitializationOperation;
import org.apache.james.utils.InitilizationOperationBuilder;
import com.google.inject.AbstractModule;
-import com.google.inject.Provides;
import com.google.inject.Scopes;
-import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
-import com.google.inject.multibindings.Multibinder;
import com.google.inject.multibindings.ProvidesIntoSet;
public class CassandraUsersRepositoryModule extends AbstractModule {
@Override
public void configure() {
- bind(CassandraUsersDAO.class).in(Scopes.SINGLETON);
bind(UsersDAO.class).to(CassandraUsersDAO.class);
bind(new TypeLiteral<UsersRepositoryImpl<CassandraUsersDAO>>() {}).in(Scopes.SINGLETON);
bind(UsersRepository.class).to(new TypeLiteral<UsersRepositoryImpl<CassandraUsersDAO>>() {});
- Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class);
- cassandraDataDefinitions.addBinding().toInstance(org.apache.james.user.cassandra.CassandraUsersRepositoryModule.MODULE);
- bind(DelegationStore.class).to(CassandraDelegationStore.class);
bind(Authorizator.class).to(DelegationStoreAuthorizator.class);
-
- Multibinder.newSetBinder(binder(), UsernameChangeTaskStep.class)
- .addBinding().to(DelegationUsernameChangeTaskStep.class);
- }
-
- @Provides
- @Singleton
- public CassandraRepositoryConfiguration provideConfiguration(ConfigurationProvider configurationProvider) throws ConfigurationException {
- return CassandraRepositoryConfiguration.from(
- configurationProvider.getConfiguration("usersrepository"));
}
@ProvidesIntoSet
diff --git a/server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java b/server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
index 76937d0f14..c7e35b74f3 100644
--- a/server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
+++ b/server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
@@ -22,11 +22,9 @@ import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.james.adapter.mailbox.UserRepositoryAuthorizator;
import org.apache.james.mailbox.Authorizator;
import org.apache.james.server.core.configuration.ConfigurationProvider;
-import org.apache.james.user.api.DelegationStore;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.ldap.LdapRepositoryConfiguration;
import org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository;
-import org.apache.james.user.memory.NaiveDelegationStore;
import org.apache.james.utils.InitializationOperation;
import org.apache.james.utils.InitilizationOperationBuilder;
@@ -41,7 +39,6 @@ public class LdapUsersRepositoryModule extends AbstractModule {
public void configure() {
bind(ReadOnlyUsersLDAPRepository.class).in(Scopes.SINGLETON);
bind(UsersRepository.class).to(ReadOnlyUsersLDAPRepository.class);
- bind(DelegationStore.class).to(NaiveDelegationStore.class);
bind(Authorizator.class).to(UserRepositoryAuthorizator.class);
}
diff --git a/server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java b/server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
index 930aef3e5b..5a719244a4 100644
--- a/server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
+++ b/server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
@@ -19,10 +19,8 @@
package org.apache.james.modules.data;
import org.apache.james.server.core.configuration.ConfigurationProvider;
-import org.apache.james.user.api.DelegationStore;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.jpa.JPAUsersRepository;
-import org.apache.james.user.memory.NaiveDelegationStore;
import org.apache.james.utils.InitializationOperation;
import org.apache.james.utils.InitilizationOperationBuilder;
@@ -35,7 +33,6 @@ public class JPAUsersRepositoryModule extends AbstractModule {
public void configure() {
bind(JPAUsersRepository.class).in(Scopes.SINGLETON);
bind(UsersRepository.class).to(JPAUsersRepository.class);
- bind(DelegationStore.class).to(NaiveDelegationStore.class);
}
@ProvidesIntoSet
diff --git a/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java b/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDelegationStoreModule.java
similarity index 58%
copy from server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
copy to server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDelegationStoreModule.java
index 9bf747823d..ec272b6675 100644
--- a/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
+++ b/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDelegationStoreModule.java
@@ -19,49 +19,22 @@
package org.apache.james.modules.data;
-import org.apache.james.UserEntityValidator;
-import org.apache.james.domainlist.api.DomainList;
-import org.apache.james.server.core.configuration.ConfigurationProvider;
import org.apache.james.user.api.DelegationStore;
import org.apache.james.user.api.DelegationUsernameChangeTaskStep;
import org.apache.james.user.api.UsernameChangeTaskStep;
-import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.memory.MemoryDelegationStore;
-import org.apache.james.user.memory.MemoryUsersRepository;
-import org.apache.james.utils.InitializationOperation;
-import org.apache.james.utils.InitilizationOperationBuilder;
import com.google.inject.AbstractModule;
-import com.google.inject.Provides;
import com.google.inject.Scopes;
-import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
-import com.google.inject.multibindings.ProvidesIntoSet;
-public class MemoryUsersRepositoryModule extends AbstractModule {
+public class MemoryDelegationStoreModule extends AbstractModule {
@Override
public void configure() {
bind(MemoryDelegationStore.class).in(Scopes.SINGLETON);
- bind(UsersRepository.class).to(MemoryUsersRepository.class);
bind(DelegationStore.class).to(MemoryDelegationStore.class);
-
Multibinder.newSetBinder(binder(), UsernameChangeTaskStep.class)
.addBinding().to(DelegationUsernameChangeTaskStep.class);
}
-
- @Provides
- @Singleton
- public MemoryUsersRepository providesUsersRepository(DomainList domainList, UserEntityValidator validator) {
- MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
- usersRepository.setValidator(validator);
- return usersRepository;
- }
-
- @ProvidesIntoSet
- InitializationOperation configureUsersRepository(ConfigurationProvider configurationProvider, MemoryUsersRepository usersRepository) {
- return InitilizationOperationBuilder
- .forClass(MemoryUsersRepository.class)
- .init(() -> usersRepository.configure(configurationProvider.getConfiguration("usersrepository")));
- }
}
diff --git a/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java b/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
index 9bf747823d..0138a78e5f 100644
--- a/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
+++ b/server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
@@ -22,32 +22,20 @@ package org.apache.james.modules.data;
import org.apache.james.UserEntityValidator;
import org.apache.james.domainlist.api.DomainList;
import org.apache.james.server.core.configuration.ConfigurationProvider;
-import org.apache.james.user.api.DelegationStore;
-import org.apache.james.user.api.DelegationUsernameChangeTaskStep;
-import org.apache.james.user.api.UsernameChangeTaskStep;
import org.apache.james.user.api.UsersRepository;
-import org.apache.james.user.memory.MemoryDelegationStore;
import org.apache.james.user.memory.MemoryUsersRepository;
import org.apache.james.utils.InitializationOperation;
import org.apache.james.utils.InitilizationOperationBuilder;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
-import com.google.inject.Scopes;
import com.google.inject.Singleton;
-import com.google.inject.multibindings.Multibinder;
import com.google.inject.multibindings.ProvidesIntoSet;
public class MemoryUsersRepositoryModule extends AbstractModule {
@Override
public void configure() {
- bind(MemoryDelegationStore.class).in(Scopes.SINGLETON);
bind(UsersRepository.class).to(MemoryUsersRepository.class);
- bind(DelegationStore.class).to(MemoryDelegationStore.class);
-
-
- Multibinder.newSetBinder(binder(), UsernameChangeTaskStep.class)
- .addBinding().to(DelegationUsernameChangeTaskStep.class);
}
@Provides
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org
[james-project] 03/03: JAMES-3885 Document DelegationUsernameChangeTaskStep
Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 5df66714a892994486a58e26924fd8a393d6c446
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Feb 20 16:47:33 2023 +0700
JAMES-3885 Document DelegationUsernameChangeTaskStep
---
.../apps/distributed-app/docs/modules/ROOT/pages/operate/webadmin.adoc | 1 +
src/site/markdown/server/manage-webadmin.md | 1 +
2 files changed, 2 insertions(+)
diff --git a/server/apps/distributed-app/docs/modules/ROOT/pages/operate/webadmin.adoc b/server/apps/distributed-app/docs/modules/ROOT/pages/operate/webadmin.adoc
index 563dd85346..616489147c 100644
--- a/server/apps/distributed-app/docs/modules/ROOT/pages/operate/webadmin.adoc
+++ b/server/apps/distributed-app/docs/modules/ROOT/pages/operate/webadmin.adoc
@@ -633,6 +633,7 @@ a task].
Implemented migration steps are:
- `ForwardUsernameChangeTaskStep`: creates forward from old user to new user and migrates existing forwards
+ - `DelegationUsernameChangeTaskStep`: migrates delegations where the impacted user is either delegatee or delegator
Response codes:
diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md
index b4dea9c545..07f89767d3 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -485,6 +485,7 @@ Would migrate account data from `oldUser` to `newUser`.
Implemented migration steps are:
- `ForwardUsernameChangeTaskStep`: creates forward from old user to new user and migrates existing forwards
+ - `DelegationUsernameChangeTaskStep`: migrates delegations where the impacted user is either delegatee or delegator
Response codes:
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org