You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by hq...@apache.org on 2026/07/06 02:18:02 UTC
(james-project) 08/11: JAMES-4195 Relocate JMAP OIDC cache modules
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 <hq...@linagora.com>
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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org