This is an automated email from the ASF dual-hosted git repository. quantranhong1999 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 9ac7b9f25862f1acc09d9a0d4e32b175523ecdf9 Author: Quan Tran <[email protected]> AuthorDate: Fri Jul 3 15:07:00 2026 +0700 JAMES-4195 Relocate JMAP OIDC cache modules Shared OIDC token cache contracts and model now live in `data-api`, the Caffeine implementation lives in `data-memory`, and the Redis implementation lives in `data-redis`. Keep `server/protocols/jmap` focused on JMAP authentication/configuration and move endpoint-backed token resolution to `server/protocols/jwt`. --- pom.xml | 10 +++++----- server/container/guice/pom.xml | 10 +++++----- .../container/guice/protocols/jmap-redis/pom.xml | 8 ++++---- .../redis/RedisOidcTokenCacheKeyPrefixModule.java | 2 ++ .../jmap/oidc/redis/RedisOidcTokenCacheModule.java | 10 +++++++--- .../jmap/oidc/CaffeineOidcTokenCacheModule.java | 3 +++ .../org/apache/james/jmap/oidc/JMAPOidcModule.java | 10 ++++++++++ .../src/main/java/org/apache/james}/oidc/Aud.java | 2 +- .../org/apache/james}/oidc/OidcTokenCache.java | 2 +- .../james}/oidc/OidcTokenCacheConfiguration.java | 2 +- .../src/main/java/org/apache/james}/oidc/Sid.java | 2 +- .../main/java/org/apache/james}/oidc/Token.java | 2 +- .../java/org/apache/james}/oidc/TokenInfo.java | 2 +- .../org/apache/james}/oidc/TokenInfoResolver.java | 2 +- .../apache/james}/oidc/OidcTokenCacheContract.java | 2 +- server/data/data-memory/pom.xml | 8 ++++++++ .../james/oidc/memory}/CaffeineOidcTokenCache.java | 8 +++++++- .../oidc/memory}/CaffeineOidcTokenCacheTest.java | 5 ++++- .../jmap-redis => data/data-redis}/pom.xml | 20 ++++++++++++-------- .../james}/oidc/redis/RedisOidcTokenCache.java | 16 ++++++++-------- .../redis/RedisOidcTokenCacheConfiguration.java | 2 +- .../oidc/redis/RedisOidcTokenCacheKeyPrefix.java | 2 +- .../james}/oidc/redis/RedisTokenCacheCommands.java | 2 +- .../oidc/redis/RedisClusterOidcTokenCacheTest.java | 2 +- .../RedisOidcTokenCacheConfigurationTest.java | 2 +- .../oidc/redis/RedisOidcTokenCacheContract.java | 12 ++++++------ .../redis/RedisSentinelOidcTokenCacheTest.java | 2 +- .../redis/RedisStandaloneOidcTokenCacheTest.java | 2 +- server/pom.xml | 2 +- .../jmap-rfc-8621-integration-tests-common/pom.xml | 4 ++++ .../contract/OidcAuthenticationContract.java | 2 +- server/protocols/jmap/pom.xml | 8 -------- .../jmap/http/OidcAuthenticationStrategy.java | 8 ++++---- .../james/jmap/oidc/JMAPOidcConfiguration.java | 1 + .../jmap/http/OidcAuthenticationStrategyTest.java | 2 +- server/protocols/jwt/pom.xml | 12 ++++++++++++ .../james/jwt}/oidc/OidcEndpointsInfoResolver.java | 22 ++++++++++++++-------- .../webadmin/oidc/OidcBackchannelLogoutRoutes.java | 4 ++-- .../oidc/OidcBackchannelLogoutRoutesTest.java | 4 ++-- 39 files changed, 138 insertions(+), 83 deletions(-) diff --git a/pom.xml b/pom.xml index 310f3af42e..fd8c390a37 100644 --- a/pom.xml +++ b/pom.xml @@ -1470,6 +1470,11 @@ <version>${project.version}</version> <type>test-jar</type> </dependency> + <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>james-server-data-redis</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>${james.groupId}</groupId> <artifactId>james-server-deleted-messages-vault</artifactId> @@ -1640,11 +1645,6 @@ <artifactId>james-server-jmap</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>${james.groupId}</groupId> - <artifactId>james-server-jmap-redis</artifactId> - <version>${project.version}</version> - </dependency> <dependency> <groupId>${james.groupId}</groupId> <artifactId>james-server-jmap-rfc-8621</artifactId> diff --git a/server/container/guice/pom.xml b/server/container/guice/pom.xml index aa1bed9826..ca176f2a53 100644 --- a/server/container/guice/pom.xml +++ b/server/container/guice/pom.xml @@ -99,6 +99,11 @@ <artifactId>data-cassandra</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>james-server-data-redis</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>${james.groupId}</groupId> <artifactId>james-server-guice-cassandra</artifactId> @@ -262,11 +267,6 @@ <artifactId>james-server-guice-webadmin-rabbitmq-mailqueue</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>${james.groupId}</groupId> - <artifactId>james-server-jmap-redis</artifactId> - <version>${project.version}</version> - </dependency> <dependency> <groupId>${james.groupId}</groupId> <artifactId>james-server-jmap-rfc-8621</artifactId> diff --git a/server/container/guice/protocols/jmap-redis/pom.xml b/server/container/guice/protocols/jmap-redis/pom.xml index 600ee45f0a..98eba576fe 100644 --- a/server/container/guice/protocols/jmap-redis/pom.xml +++ b/server/container/guice/protocols/jmap-redis/pom.xml @@ -38,19 +38,19 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>james-server-guice-configuration</artifactId> + <artifactId>james-server-data-redis</artifactId> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>james-server-guice-jmap</artifactId> + <artifactId>james-server-guice-configuration</artifactId> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>james-server-jmap</artifactId> + <artifactId>james-server-guice-jmap</artifactId> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>james-server-jmap-redis</artifactId> + <artifactId>james-server-jmap</artifactId> </dependency> <dependency> <groupId>com.google.inject</groupId> diff --git a/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefixModule.java b/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefixModule.java index 933341bedb..b020ff146e 100644 --- a/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefixModule.java +++ b/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefixModule.java @@ -19,6 +19,8 @@ package org.apache.james.jmap.oidc.redis; +import org.apache.james.oidc.redis.RedisOidcTokenCacheKeyPrefix; + import com.google.inject.AbstractModule; public class RedisOidcTokenCacheKeyPrefixModule extends AbstractModule { diff --git a/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheModule.java b/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheModule.java index 35ddfd7473..1c5ebaa8af 100644 --- a/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheModule.java +++ b/server/container/guice/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheModule.java @@ -25,9 +25,13 @@ import java.time.Duration; import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.james.backends.redis.RedisConfiguration; import org.apache.james.backends.redis.RedisReactiveCommandsFactory; -import org.apache.james.jmap.oidc.OidcTokenCache; -import org.apache.james.jmap.oidc.OidcTokenCacheConfiguration; -import org.apache.james.jmap.oidc.TokenInfoResolver; +import org.apache.james.oidc.OidcTokenCache; +import org.apache.james.oidc.OidcTokenCacheConfiguration; +import org.apache.james.oidc.TokenInfoResolver; +import org.apache.james.oidc.redis.RedisOidcTokenCache; +import org.apache.james.oidc.redis.RedisOidcTokenCacheConfiguration; +import org.apache.james.oidc.redis.RedisOidcTokenCacheKeyPrefix; +import org.apache.james.oidc.redis.RedisTokenCacheCommands; import org.apache.james.utils.PropertiesProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheModule.java index 8db97ee87e..6c9006a95c 100644 --- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheModule.java +++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheModule.java @@ -19,6 +19,9 @@ package org.apache.james.jmap.oidc; +import org.apache.james.oidc.OidcTokenCache; +import org.apache.james.oidc.memory.CaffeineOidcTokenCache; + import com.google.inject.AbstractModule; import com.google.inject.Scopes; diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcModule.java index ddf89c8ce8..70bf033027 100644 --- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcModule.java +++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcModule.java @@ -25,6 +25,10 @@ import java.util.List; import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.james.jwt.introspection.IntrospectionEndpoint; +import org.apache.james.jwt.oidc.OidcEndpointsInfoResolver; +import org.apache.james.oidc.Aud; +import org.apache.james.oidc.OidcTokenCacheConfiguration; +import org.apache.james.oidc.TokenInfoResolver; import org.apache.james.utils.PropertiesProvider; import com.google.inject.AbstractModule; @@ -54,6 +58,12 @@ public class JMAPOidcModule extends AbstractModule { return configuration.getAud(); } + @Provides + @Named("oidcClaim") + String provideOidcClaim(JMAPOidcConfiguration configuration) { + return configuration.getOidcClaim(); + } + @Provides @Singleton OidcTokenCacheConfiguration oidcTokenCacheConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException { diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Aud.java b/server/data/data-api/src/main/java/org/apache/james/oidc/Aud.java similarity index 97% rename from server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Aud.java rename to server/data/data-api/src/main/java/org/apache/james/oidc/Aud.java index 5037dbb143..f99e985379 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Aud.java +++ b/server/data/data-api/src/main/java/org/apache/james/oidc/Aud.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc; public record Aud(String value) { } diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCache.java b/server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCache.java similarity index 97% rename from server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCache.java rename to server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCache.java index 84eb7a7150..3fc5501fa9 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCache.java +++ b/server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCache.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc; import reactor.core.publisher.Mono; diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCacheConfiguration.java b/server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCacheConfiguration.java similarity index 98% rename from server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCacheConfiguration.java rename to server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCacheConfiguration.java index cd69435139..89a2199f34 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcTokenCacheConfiguration.java +++ b/server/data/data-api/src/main/java/org/apache/james/oidc/OidcTokenCacheConfiguration.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc; import java.time.Duration; import java.util.Optional; diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Sid.java b/server/data/data-api/src/main/java/org/apache/james/oidc/Sid.java similarity index 97% rename from server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Sid.java rename to server/data/data-api/src/main/java/org/apache/james/oidc/Sid.java index 06749a746c..f84387337f 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Sid.java +++ b/server/data/data-api/src/main/java/org/apache/james/oidc/Sid.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc; public record Sid(String value) { } diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Token.java b/server/data/data-api/src/main/java/org/apache/james/oidc/Token.java similarity index 97% rename from server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Token.java rename to server/data/data-api/src/main/java/org/apache/james/oidc/Token.java index 548214d0d7..5246ec60df 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/Token.java +++ b/server/data/data-api/src/main/java/org/apache/james/oidc/Token.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc; public record Token(String value) { } diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfo.java b/server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfo.java similarity index 98% rename from server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfo.java rename to server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfo.java index ad2cb8d855..ebf16c8a31 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfo.java +++ b/server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfo.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc; import java.time.Instant; import java.util.List; diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfoResolver.java b/server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfoResolver.java similarity index 97% rename from server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfoResolver.java rename to server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfoResolver.java index ebb885a5b0..bc5c443ec5 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/TokenInfoResolver.java +++ b/server/data/data-api/src/main/java/org/apache/james/oidc/TokenInfoResolver.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc; import java.util.function.Function; diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/OidcTokenCacheContract.java b/server/data/data-api/src/test/java/org/apache/james/oidc/OidcTokenCacheContract.java similarity index 99% rename from server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/OidcTokenCacheContract.java rename to server/data/data-api/src/test/java/org/apache/james/oidc/OidcTokenCacheContract.java index 644592371d..b4ae626411 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/OidcTokenCacheContract.java +++ b/server/data/data-api/src/test/java/org/apache/james/oidc/OidcTokenCacheContract.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; diff --git a/server/data/data-memory/pom.xml b/server/data/data-memory/pom.xml index 8cfeab029e..62106ba94f 100644 --- a/server/data/data-memory/pom.xml +++ b/server/data/data-memory/pom.xml @@ -78,6 +78,14 @@ <artifactId>testing-base</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>com.github.ben-manes.caffeine</groupId> + <artifactId>caffeine</artifactId> + </dependency> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCache.java b/server/data/data-memory/src/main/java/org/apache/james/oidc/memory/CaffeineOidcTokenCache.java similarity index 93% rename from server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCache.java rename to server/data/data-memory/src/main/java/org/apache/james/oidc/memory/CaffeineOidcTokenCache.java index eea435fc69..0e0fcb333f 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCache.java +++ b/server/data/data-memory/src/main/java/org/apache/james/oidc/memory/CaffeineOidcTokenCache.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc.memory; import java.util.List; import java.util.Optional; @@ -25,6 +25,12 @@ import java.util.Optional; import jakarta.inject.Inject; import org.apache.james.core.Username; +import org.apache.james.oidc.OidcTokenCache; +import org.apache.james.oidc.OidcTokenCacheConfiguration; +import org.apache.james.oidc.Sid; +import org.apache.james.oidc.Token; +import org.apache.james.oidc.TokenInfo; +import org.apache.james.oidc.TokenInfoResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheTest.java b/server/data/data-memory/src/test/java/org/apache/james/oidc/memory/CaffeineOidcTokenCacheTest.java similarity index 90% rename from server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheTest.java rename to server/data/data-memory/src/test/java/org/apache/james/oidc/memory/CaffeineOidcTokenCacheTest.java index 12d23c6956..80ce83f16a 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/oidc/CaffeineOidcTokenCacheTest.java +++ b/server/data/data-memory/src/test/java/org/apache/james/oidc/memory/CaffeineOidcTokenCacheTest.java @@ -17,11 +17,14 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.oidc.memory; import java.util.Optional; import org.apache.james.core.Username; +import org.apache.james.oidc.OidcTokenCacheConfiguration; +import org.apache.james.oidc.OidcTokenCacheContract; +import org.apache.james.oidc.Token; import org.junit.jupiter.api.BeforeEach; public class CaffeineOidcTokenCacheTest extends OidcTokenCacheContract { diff --git a/server/protocols/jmap-redis/pom.xml b/server/data/data-redis/pom.xml similarity index 88% rename from server/protocols/jmap-redis/pom.xml rename to server/data/data-redis/pom.xml index 002ecae5d2..7f0577dca5 100644 --- a/server/protocols/jmap-redis/pom.xml +++ b/server/data/data-redis/pom.xml @@ -26,10 +26,10 @@ <relativePath>../../pom.xml</relativePath> </parent> - <artifactId>james-server-jmap-redis</artifactId> + <artifactId>james-server-data-redis</artifactId> - <name>Apache James :: Server :: JMAP Redis</name> - <description>Redis OIDC cache implementation for JMAP RFC8621</description> + <name>Apache James :: Server :: Data :: Redis</name> + <description>Redis data implementations for James server</description> <dependencies> <dependency> @@ -44,18 +44,22 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>james-server-guice-common</artifactId> - <type>test-jar</type> + <artifactId>james-server-core</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>james-server-jmap</artifactId> + <artifactId>james-server-data-api</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>james-server-data-api</artifactId> + <type>test-jar</type> + <scope>test</scope> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>james-server-jmap</artifactId> - <version>${project.version}</version> + <artifactId>james-server-guice-common</artifactId> <type>test-jar</type> <scope>test</scope> </dependency> diff --git a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCache.java b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCache.java similarity index 95% rename from server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCache.java rename to server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCache.java index ee740ced0b..a3954ad056 100644 --- a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCache.java +++ b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCache.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc.redis; +package org.apache.james.oidc.redis; import java.nio.charset.StandardCharsets; import java.time.Instant; @@ -26,13 +26,13 @@ import java.util.Map; import java.util.Optional; import org.apache.commons.lang3.StringUtils; -import org.apache.james.jmap.oidc.Aud; -import org.apache.james.jmap.oidc.OidcTokenCache; -import org.apache.james.jmap.oidc.OidcTokenCacheConfiguration; -import org.apache.james.jmap.oidc.Sid; -import org.apache.james.jmap.oidc.Token; -import org.apache.james.jmap.oidc.TokenInfo; -import org.apache.james.jmap.oidc.TokenInfoResolver; +import org.apache.james.oidc.Aud; +import org.apache.james.oidc.OidcTokenCache; +import org.apache.james.oidc.OidcTokenCacheConfiguration; +import org.apache.james.oidc.Sid; +import org.apache.james.oidc.Token; +import org.apache.james.oidc.TokenInfo; +import org.apache.james.oidc.TokenInfoResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfiguration.java b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfiguration.java similarity index 98% rename from server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfiguration.java rename to server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfiguration.java index f8c91fe30d..6023a6f6fd 100644 --- a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfiguration.java +++ b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfiguration.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc.redis; +package org.apache.james.oidc.redis; import java.time.Duration; import java.util.Optional; diff --git a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefix.java b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheKeyPrefix.java similarity index 97% rename from server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefix.java rename to server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheKeyPrefix.java index 70508d0fd3..bd1a6f28fd 100644 --- a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheKeyPrefix.java +++ b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisOidcTokenCacheKeyPrefix.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc.redis; +package org.apache.james.oidc.redis; public record RedisOidcTokenCacheKeyPrefix(String tokenPrefix, String sidPrefix) { public static final RedisOidcTokenCacheKeyPrefix JAMES_DEFAULT = diff --git a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisTokenCacheCommands.java b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisTokenCacheCommands.java similarity index 98% rename from server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisTokenCacheCommands.java rename to server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisTokenCacheCommands.java index c81c07dcec..427a6d1b54 100644 --- a/server/protocols/jmap-redis/src/main/java/org/apache/james/jmap/oidc/redis/RedisTokenCacheCommands.java +++ b/server/data/data-redis/src/main/java/org/apache/james/oidc/redis/RedisTokenCacheCommands.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc.redis; +package org.apache.james.oidc.redis; import java.time.Duration; import java.util.Map; diff --git a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisClusterOidcTokenCacheTest.java b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisClusterOidcTokenCacheTest.java similarity index 98% rename from server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisClusterOidcTokenCacheTest.java rename to server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisClusterOidcTokenCacheTest.java index 12ddf6c329..1d71ffa3b2 100644 --- a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisClusterOidcTokenCacheTest.java +++ b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisClusterOidcTokenCacheTest.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc.redis; +package org.apache.james.oidc.redis; import org.apache.james.backends.redis.RedisClusterExtension; import org.apache.james.backends.redis.RedisConfiguration; diff --git a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfigurationTest.java b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfigurationTest.java similarity index 98% rename from server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfigurationTest.java rename to server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfigurationTest.java index 8b26c89c67..df1bf3e78f 100644 --- a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheConfigurationTest.java +++ b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheConfigurationTest.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc.redis; +package org.apache.james.oidc.redis; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheContract.java b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheContract.java similarity index 93% rename from server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheContract.java rename to server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheContract.java index e9d08ea6b8..a1b473a668 100644 --- a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisOidcTokenCacheContract.java +++ b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisOidcTokenCacheContract.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc.redis; +package org.apache.james.oidc.redis; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; @@ -30,11 +30,11 @@ import org.apache.james.backends.redis.RedisClientFactory; import org.apache.james.backends.redis.RedisConfiguration; import org.apache.james.backends.redis.RedisReactiveCommandsFactory; import org.apache.james.core.Username; -import org.apache.james.jmap.oidc.OidcTokenCache; -import org.apache.james.jmap.oidc.OidcTokenCacheConfiguration; -import org.apache.james.jmap.oidc.OidcTokenCacheContract; -import org.apache.james.jmap.oidc.Token; -import org.apache.james.jmap.oidc.TokenInfo; +import org.apache.james.oidc.OidcTokenCache; +import org.apache.james.oidc.OidcTokenCacheConfiguration; +import org.apache.james.oidc.OidcTokenCacheContract; +import org.apache.james.oidc.Token; +import org.apache.james.oidc.TokenInfo; import org.apache.james.server.core.filesystem.FileSystemImpl; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisSentinelOidcTokenCacheTest.java b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisSentinelOidcTokenCacheTest.java similarity index 98% rename from server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisSentinelOidcTokenCacheTest.java rename to server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisSentinelOidcTokenCacheTest.java index 5a63710ef0..235b5586ed 100644 --- a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisSentinelOidcTokenCacheTest.java +++ b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisSentinelOidcTokenCacheTest.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc.redis; +package org.apache.james.oidc.redis; import org.apache.james.backends.redis.RedisConfiguration; import org.apache.james.backends.redis.RedisSentinelExtension; diff --git a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisStandaloneOidcTokenCacheTest.java b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisStandaloneOidcTokenCacheTest.java similarity index 98% rename from server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisStandaloneOidcTokenCacheTest.java rename to server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisStandaloneOidcTokenCacheTest.java index f1e53d214a..97833add66 100644 --- a/server/protocols/jmap-redis/src/test/java/org/apache/james/jmap/oidc/redis/RedisStandaloneOidcTokenCacheTest.java +++ b/server/data/data-redis/src/test/java/org/apache/james/oidc/redis/RedisStandaloneOidcTokenCacheTest.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc.redis; +package org.apache.james.oidc.redis; import org.apache.james.backends.redis.RedisConfiguration; import org.apache.james.backends.redis.RedisExtension; diff --git a/server/pom.xml b/server/pom.xml index b7226421a7..2058c9e3fe 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -74,6 +74,7 @@ <module>data/data-library</module> <module>data/data-memory</module> <module>data/data-postgres</module> + <module>data/data-redis</module> <module>dns-service/dnsservice-api</module> <module>dns-service/dnsservice-dnsjava</module> @@ -98,7 +99,6 @@ <module>protocols/fetchmail</module> <module>protocols/jmap</module> - <module>protocols/jmap-redis</module> <module>protocols/jmap-rfc-8621</module> <module>protocols/jmap-rfc-8621-integration-tests</module> <module>protocols/jwt</module> diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml index c0c29faac6..065e513de0 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml +++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml @@ -38,6 +38,10 @@ <groupId>${james.groupId}</groupId> <artifactId>blob-api</artifactId> </dependency> + <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>james-server-data-api</artifactId> + </dependency> <dependency> <groupId>${james.groupId}</groupId> <artifactId>james-server-dnsservice-test</artifactId> diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/OidcAuthenticationContract.java b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/OidcAuthenticationContract.java index 61fe32883f..9d94666729 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/OidcAuthenticationContract.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/OidcAuthenticationContract.java @@ -43,10 +43,10 @@ import java.util.UUID; import org.apache.james.GuiceJamesServer; import org.apache.james.jmap.http.OidcAuthenticationStrategy; -import org.apache.james.jmap.oidc.Aud; import org.apache.james.jmap.oidc.JMAPOidcConfiguration; import org.apache.james.jmap.rfc8621.contract.tags.CategoryTags; import org.apache.james.jwt.introspection.IntrospectionEndpoint; +import org.apache.james.oidc.Aud; import org.apache.james.user.api.AlreadyExistInUsersRepositoryException; import org.apache.james.utils.DataProbeImpl; import org.junit.jupiter.api.AfterEach; diff --git a/server/protocols/jmap/pom.xml b/server/protocols/jmap/pom.xml index c650ecd765..db1359e3d6 100644 --- a/server/protocols/jmap/pom.xml +++ b/server/protocols/jmap/pom.xml @@ -68,14 +68,6 @@ <artifactId>testing-base</artifactId> <scope>test</scope> </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - </dependency> - <dependency> - <groupId>com.github.ben-manes.caffeine</groupId> - <artifactId>caffeine</artifactId> - </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/http/OidcAuthenticationStrategy.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/http/OidcAuthenticationStrategy.java index cfb88a8747..85315aaf4d 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/http/OidcAuthenticationStrategy.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/http/OidcAuthenticationStrategy.java @@ -29,14 +29,14 @@ import jakarta.inject.Inject; import org.apache.james.core.Username; import org.apache.james.jmap.exceptions.UnauthorizedException; -import org.apache.james.jmap.oidc.Aud; -import org.apache.james.jmap.oidc.OidcTokenCache; -import org.apache.james.jmap.oidc.Token; -import org.apache.james.jmap.oidc.TokenInfo; import org.apache.james.jwt.introspection.TokenIntrospectionException; import org.apache.james.jwt.userinfo.UserInfoCheckException; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.SessionProvider; +import org.apache.james.oidc.Aud; +import org.apache.james.oidc.OidcTokenCache; +import org.apache.james.oidc.Token; +import org.apache.james.oidc.TokenInfo; import com.google.common.collect.ImmutableMap; diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcConfiguration.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcConfiguration.java index 5e9ff5d039..4d95e0416c 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcConfiguration.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/JMAPOidcConfiguration.java @@ -29,6 +29,7 @@ import org.apache.commons.configuration2.Configuration; import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.james.jmap.http.OidcAuthenticationStrategy; import org.apache.james.jwt.introspection.IntrospectionEndpoint; +import org.apache.james.oidc.Aud; import org.apache.james.utils.PropertiesProvider; import com.google.common.collect.ImmutableList; diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/http/OidcAuthenticationStrategyTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/http/OidcAuthenticationStrategyTest.java index 847842bb1b..e5836da34b 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/http/OidcAuthenticationStrategyTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/http/OidcAuthenticationStrategyTest.java @@ -25,8 +25,8 @@ import static org.mockito.Mockito.mock; import java.time.Clock; import java.util.List; -import org.apache.james.jmap.oidc.OidcTokenCache; import org.apache.james.mailbox.SessionProvider; +import org.apache.james.oidc.OidcTokenCache; import org.junit.jupiter.api.Test; import com.google.common.collect.ImmutableMap; diff --git a/server/protocols/jwt/pom.xml b/server/protocols/jwt/pom.xml index e014a01d60..bf9a8eb452 100644 --- a/server/protocols/jwt/pom.xml +++ b/server/protocols/jwt/pom.xml @@ -36,6 +36,18 @@ <groupId>${james.groupId}</groupId> <artifactId>james-core</artifactId> </dependency> + <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>james-server-data-api</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>james-server-util</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>metrics-api</artifactId> + </dependency> <dependency> <groupId>${james.groupId}</groupId> <artifactId>testing-base</artifactId> diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcEndpointsInfoResolver.java b/server/protocols/jwt/src/main/java/org/apache/james/jwt/oidc/OidcEndpointsInfoResolver.java similarity index 85% rename from server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcEndpointsInfoResolver.java rename to server/protocols/jwt/src/main/java/org/apache/james/jwt/oidc/OidcEndpointsInfoResolver.java index 0ac50e101a..fe539686a0 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/oidc/OidcEndpointsInfoResolver.java +++ b/server/protocols/jwt/src/main/java/org/apache/james/jwt/oidc/OidcEndpointsInfoResolver.java @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.jmap.oidc; +package org.apache.james.jwt.oidc; import java.net.URL; import java.time.Instant; @@ -28,12 +28,18 @@ import jakarta.inject.Inject; import jakarta.inject.Named; import org.apache.james.core.Username; -import org.apache.james.jmap.exceptions.UnauthorizedException; import org.apache.james.jwt.DefaultCheckTokenClient; import org.apache.james.jwt.introspection.IntrospectionEndpoint; +import org.apache.james.jwt.introspection.TokenIntrospectionException; import org.apache.james.jwt.introspection.TokenIntrospectionResponse; +import org.apache.james.jwt.userinfo.UserInfoCheckException; import org.apache.james.jwt.userinfo.UserinfoResponse; import org.apache.james.metrics.api.MetricFactory; +import org.apache.james.oidc.Aud; +import org.apache.james.oidc.Sid; +import org.apache.james.oidc.Token; +import org.apache.james.oidc.TokenInfo; +import org.apache.james.oidc.TokenInfoResolver; import org.apache.james.util.streams.Iterators; import com.fasterxml.jackson.databind.JsonNode; @@ -48,19 +54,19 @@ public class OidcEndpointsInfoResolver implements TokenInfoResolver { private final MetricFactory metricFactory; private final URL userInfoURL; private final IntrospectionEndpoint introspectionEndpoint; - private final JMAPOidcConfiguration configuration; + private final String oidcClaim; @Inject public OidcEndpointsInfoResolver(DefaultCheckTokenClient checkTokenClient, MetricFactory metricFactory, @Named("userInfo") URL userInfoURL, IntrospectionEndpoint introspectionEndpoint, - JMAPOidcConfiguration configuration) { + @Named("oidcClaim") String oidcClaim) { this.checkTokenClient = checkTokenClient; this.metricFactory = metricFactory; this.userInfoURL = userInfoURL; this.introspectionEndpoint = introspectionEndpoint; - this.configuration = configuration; + this.oidcClaim = oidcClaim; } @Override @@ -72,8 +78,8 @@ public class OidcEndpointsInfoResolver implements TokenInfoResolver { UserinfoResponse userInfo = tokenInfos.getT1(); TokenIntrospectionResponse introspectInfo = tokenInfos.getT2(); - Username sub = Username.of(userInfo.claimByPropertyName(configuration.getOidcClaim()) - .orElseThrow(() -> new UnauthorizedException("Invalid OIDC token: userinfo needs to include " + configuration.getOidcClaim() + " claim"))); + Username sub = Username.of(userInfo.claimByPropertyName(oidcClaim) + .orElseThrow(() -> new UserInfoCheckException("Invalid OIDC token: userinfo needs to include " + oidcClaim + " claim"))); return Mono.just(toTokenInfo(sub, userInfo, introspectInfo)); }); @@ -84,7 +90,7 @@ public class OidcEndpointsInfoResolver implements TokenInfoResolver { username.asString(), userinfoResponse.claimByPropertyName(SID_PROPERTY).map(Sid::new) .or(() -> introspectionResponse.claimByPropertyName(SID_PROPERTY).map(Sid::new)), - Instant.ofEpochSecond(introspectionResponse.exp().orElseThrow(() -> new UnauthorizedException("Expiration claim ('exp') is required in the token"))), + Instant.ofEpochSecond(introspectionResponse.exp().orElseThrow(() -> new TokenIntrospectionException("Expiration claim ('exp') is required in the token"))), extractAudience(introspectionResponse)); } diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutes.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutes.java index 31af7d771a..ecf973c055 100644 --- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutes.java +++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutes.java @@ -27,8 +27,8 @@ import java.util.Optional; import jakarta.inject.Inject; import org.apache.commons.lang3.StringUtils; -import org.apache.james.jmap.oidc.OidcTokenCache; -import org.apache.james.jmap.oidc.Sid; +import org.apache.james.oidc.OidcTokenCache; +import org.apache.james.oidc.Sid; import org.apache.james.webadmin.Constants; import org.apache.james.webadmin.PublicRoutes; import org.apache.james.webadmin.utils.JsonTransformer; diff --git a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutesTest.java b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutesTest.java index e689d70707..000abcb8e3 100644 --- a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutesTest.java +++ b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/oidc/OidcBackchannelLogoutRoutesTest.java @@ -28,8 +28,8 @@ import static org.mockito.Mockito.verify; import java.nio.charset.StandardCharsets; import java.util.Base64; -import org.apache.james.jmap.oidc.OidcTokenCache; -import org.apache.james.jmap.oidc.Sid; +import org.apache.james.oidc.OidcTokenCache; +import org.apache.james.oidc.Sid; import org.apache.james.webadmin.WebAdminServer; import org.apache.james.webadmin.WebAdminUtils; import org.apache.james.webadmin.utils.JsonTransformer; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
