From 3b15592fc34c43ad39cd31136635ac556b06f2f1 Mon Sep 17 00:00:00 2001 From: virtualmarc Date: Wed, 20 Jul 2022 13:46:05 +0200 Subject: [PATCH] Configurable context root for keycloak API --- .../github/scribejava/apis/KeycloakApi.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/scribejava-apis/src/main/java/com/github/scribejava/apis/KeycloakApi.java b/scribejava-apis/src/main/java/com/github/scribejava/apis/KeycloakApi.java index ed713b4d0..7d023059d 100644 --- a/scribejava-apis/src/main/java/com/github/scribejava/apis/KeycloakApi.java +++ b/scribejava-apis/src/main/java/com/github/scribejava/apis/KeycloakApi.java @@ -1,21 +1,27 @@ package com.github.scribejava.apis; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + import com.github.scribejava.apis.openid.OpenIdJsonTokenExtractor; import com.github.scribejava.core.builder.api.DefaultApi20; import com.github.scribejava.core.extractors.TokenExtractor; import com.github.scribejava.core.model.OAuth2AccessToken; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - public class KeycloakApi extends DefaultApi20 { private static final ConcurrentMap INSTANCES = new ConcurrentHashMap<>(); private final String baseUrlWithRealm; + private final String contextRoot; protected KeycloakApi(String baseUrlWithRealm) { + this(baseUrlWithRealm, "auth"); + } + + protected KeycloakApi(String baseUrlWithRealm, String contextRoot) { this.baseUrlWithRealm = baseUrlWithRealm; + this.contextRoot = contextRoot; } public static KeycloakApi instance() { @@ -23,7 +29,11 @@ public static KeycloakApi instance() { } public static KeycloakApi instance(String baseUrl, String realm) { - final String defaultBaseUrlWithRealm = composeBaseUrlWithRealm(baseUrl, realm); + return instance(baseUrl, realm, "auth"); + } + + public static KeycloakApi instance(String baseUrl, String realm, String contextRoot) { + final String defaultBaseUrlWithRealm = composeBaseUrlWithRealm(baseUrl, realm, contextRoot); //java8: switch to ConcurrentMap::computeIfAbsent KeycloakApi api = INSTANCES.get(defaultBaseUrlWithRealm); @@ -37,8 +47,10 @@ public static KeycloakApi instance(String baseUrl, String realm) { return api; } - protected static String composeBaseUrlWithRealm(String baseUrl, String realm) { - return baseUrl + (baseUrl.endsWith("/") ? "" : "/") + "auth/realms/" + realm; + protected static String composeBaseUrlWithRealm(String baseUrl, String realm, String contextRoot) { + return baseUrl + (baseUrl.endsWith("/") ? "" : "/") + + (contextRoot != null && !contextRoot.isEmpty() ? contextRoot + (contextRoot.endsWith("/") ? "" : "/") : "") + + "realms/" + realm; } @Override