From dda8d67140cd4086c1fbf3e1846d59bc0a62fae7 Mon Sep 17 00:00:00 2001 From: Cem Nura Date: Sun, 3 Oct 2021 03:13:36 +0300 Subject: [PATCH] Added oidc cache extension template Signed-off-by: Cem Nura --- bom/application/pom.xml | 5 ++ extensions/oidc-cache/deployment/pom.xml | 43 +++++++++++++++++ .../cache/deployment/OidcCacheProcessor.java | 27 +++++++++++ extensions/oidc-cache/pom.xml | 19 ++++++++ extensions/oidc-cache/runtime/pom.xml | 46 +++++++++++++++++++ .../oidc/runtime/CacheTokenStateManager.java | 33 +++++++++++++ .../resources/META-INF/quarkus-extension.yaml | 9 ++++ extensions/pom.xml | 1 + 8 files changed, 183 insertions(+) create mode 100644 extensions/oidc-cache/deployment/pom.xml create mode 100644 extensions/oidc-cache/deployment/src/main/java/io/quarkus/oidc/cache/deployment/OidcCacheProcessor.java create mode 100644 extensions/oidc-cache/pom.xml create mode 100644 extensions/oidc-cache/runtime/pom.xml create mode 100644 extensions/oidc-cache/runtime/src/main/java/io/quarkus/oidc/runtime/CacheTokenStateManager.java create mode 100644 extensions/oidc-cache/runtime/src/main/resources/META-INF/quarkus-extension.yaml diff --git a/bom/application/pom.xml b/bom/application/pom.xml index a3a2b7a8ce871..6257aa17a8294 100644 --- a/bom/application/pom.xml +++ b/bom/application/pom.xml @@ -723,6 +723,11 @@ quarkus-oidc ${project.version} + + io.quarkus + quarkus-oidc-cache + ${project.version} + io.quarkus quarkus-test-oidc-server diff --git a/extensions/oidc-cache/deployment/pom.xml b/extensions/oidc-cache/deployment/pom.xml new file mode 100644 index 0000000000000..26041ec6dd4b3 --- /dev/null +++ b/extensions/oidc-cache/deployment/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + io.quarkus + quarkus-oidc-cache-parent + 999-SNAPSHOT + + quarkus-oidc-cache-deployment + Quarkus - OpenID Cache - Deployment + + + io.quarkus + quarkus-arc-deployment + + + io.quarkus + quarkus-oidc-cache + + + io.quarkus + quarkus-junit5-internal + test + + + + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${project.version} + + + + + + + diff --git a/extensions/oidc-cache/deployment/src/main/java/io/quarkus/oidc/cache/deployment/OidcCacheProcessor.java b/extensions/oidc-cache/deployment/src/main/java/io/quarkus/oidc/cache/deployment/OidcCacheProcessor.java new file mode 100644 index 0000000000000..c5547738e74c8 --- /dev/null +++ b/extensions/oidc-cache/deployment/src/main/java/io/quarkus/oidc/cache/deployment/OidcCacheProcessor.java @@ -0,0 +1,27 @@ +package io.quarkus.oidc.cache.deployment; + +import io.quarkus.arc.deployment.AdditionalBeanBuildItem; +import io.quarkus.deployment.Capabilities; +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.oidc.runtime.CacheTokenStateManager; + +class OidcCacheProcessor { + + private static final String FEATURE = "oidc-cache"; + + @BuildStep + FeatureBuildItem feature() { + return new FeatureBuildItem(FEATURE); + } + + AdditionalBeanBuildItem cacheTokenStateManager(Capabilities capabilities) { + + AdditionalBeanBuildItem.Builder builder = AdditionalBeanBuildItem.builder().setUnremovable(); + + builder.addBeanClass(CacheTokenStateManager.class); + + return builder.build(); + } + +} diff --git a/extensions/oidc-cache/pom.xml b/extensions/oidc-cache/pom.xml new file mode 100644 index 0000000000000..338a1fbd3bb09 --- /dev/null +++ b/extensions/oidc-cache/pom.xml @@ -0,0 +1,19 @@ + + + + io.quarkus + quarkus-extensions-parent + 999-SNAPSHOT + + 4.0.0 + + quarkus-oidc-cache-parent + pom + Quarkus - OpenID Cache - Parent + + deployment + runtime + + \ No newline at end of file diff --git a/extensions/oidc-cache/runtime/pom.xml b/extensions/oidc-cache/runtime/pom.xml new file mode 100644 index 0000000000000..317b89daec4d8 --- /dev/null +++ b/extensions/oidc-cache/runtime/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + io.quarkus + quarkus-oidc-cache-parent + 999-SNAPSHOT + + quarkus-oidc-cache + Quarkus - OpenID Cache - Runtime + + + io.quarkus + quarkus-arc + + + io.quarkus + quarkus-oidc + + + io.quarkus + quarkus-cache + + + + + + io.quarkus + quarkus-bootstrap-maven-plugin + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${project.version} + + + + + + + diff --git a/extensions/oidc-cache/runtime/src/main/java/io/quarkus/oidc/runtime/CacheTokenStateManager.java b/extensions/oidc-cache/runtime/src/main/java/io/quarkus/oidc/runtime/CacheTokenStateManager.java new file mode 100644 index 0000000000000..58af0ef6ab97f --- /dev/null +++ b/extensions/oidc-cache/runtime/src/main/java/io/quarkus/oidc/runtime/CacheTokenStateManager.java @@ -0,0 +1,33 @@ +package io.quarkus.oidc.runtime; + +import io.quarkus.cache.CacheInvalidate; +import io.quarkus.cache.CacheKey; +import io.quarkus.cache.CacheResult; +import io.quarkus.oidc.AuthorizationCodeTokens; +import io.quarkus.oidc.OidcRequestContext; +import io.quarkus.oidc.OidcTenantConfig; +import io.quarkus.oidc.TokenStateManager; +import io.smallrye.mutiny.Uni; +import io.vertx.ext.web.RoutingContext; + +import javax.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class CacheTokenStateManager implements TokenStateManager { + @Override + public Uni createTokenState(RoutingContext routingContext, OidcTenantConfig oidcConfig, AuthorizationCodeTokens tokens, OidcRequestContext requestContext) { + return TokenStateManager.super.createTokenState(routingContext, oidcConfig, tokens, requestContext); + } + + @Override + @CacheResult(cacheName = "tokenState") + public Uni getTokens(RoutingContext routingContext, OidcTenantConfig oidcConfig, @CacheKey String tokenState, OidcRequestContext requestContext) { + return TokenStateManager.super.getTokens(routingContext, oidcConfig, tokenState, requestContext); + } + + @Override + @CacheInvalidate(cacheName = "tokenState") + public Uni deleteTokens(RoutingContext routingContext, OidcTenantConfig oidcConfig, @CacheKey String tokenState, OidcRequestContext requestContext) { + return TokenStateManager.super.deleteTokens(routingContext, oidcConfig, tokenState, requestContext); + } +} diff --git a/extensions/oidc-cache/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/extensions/oidc-cache/runtime/src/main/resources/META-INF/quarkus-extension.yaml new file mode 100644 index 0000000000000..6b42bc364d270 --- /dev/null +++ b/extensions/oidc-cache/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -0,0 +1,9 @@ +name: Oidc Cache +#description: OpenID Cache ... +metadata: +# keywords: +# - oidc-cache +# guide: ... +# categories: +# - "miscellaneous" +# status: "preview" \ No newline at end of file diff --git a/extensions/pom.xml b/extensions/pom.xml index a979a9d04fa3e..731e96f21532f 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -129,6 +129,7 @@ smallrye-jwt oidc-common oidc + oidc-cache oidc-token-propagation oidc-client oidc-client-filter