package security; import static auth.AuthUtils.*; import static auth.sso.oidc.OidcConfigs.*; import static org.junit.jupiter.api.Assertions.assertEquals; import auth.sso.oidc.OidcConfigs; import auth.sso.oidc.OidcProvider; import com.typesafe.config.Config; import com.typesafe.config.ConfigList; import com.typesafe.config.ConfigMemorySize; import com.typesafe.config.ConfigMergeable; import com.typesafe.config.ConfigObject; import com.typesafe.config.ConfigOrigin; import com.typesafe.config.ConfigResolveOptions; import com.typesafe.config.ConfigValue; import com.typesafe.config.ConfigValueFactory; import java.time.Duration; import java.time.Period; import java.time.temporal.TemporalAmount; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.pac4j.oidc.client.OidcClient; public class OidcConfigurationTest { private static final com.typesafe.config.Config CONFIG = new Config() { private final Map _map = new HashMap<>(); @Override public ConfigObject root() { return null; } @Override public ConfigOrigin origin() { return null; } @Override public Config withFallback(ConfigMergeable other) { return null; } @Override public Config resolve() { return null; } @Override public Config resolve(ConfigResolveOptions options) { return null; } @Override public boolean isResolved() { return false; } @Override public Config resolveWith(Config source) { return null; } @Override public Config resolveWith(Config source, ConfigResolveOptions options) { return null; } @Override public void checkValid(Config reference, String... restrictToPaths) {} @Override public boolean hasPath(String path) { return true; } @Override public boolean hasPathOrNull(String path) { return false; } @Override public boolean isEmpty() { return false; } @Override public Set> entrySet() { return null; } @Override public boolean getIsNull(String path) { return false; } @Override public boolean getBoolean(String path) { return false; } @Override public Number getNumber(String path) { return null; } @Override public int getInt(String path) { return 0; } @Override public long getLong(String path) { return 0; } @Override public double getDouble(String path) { return 0; } @Override public String getString(String path) { return (String) _map.getOrDefault(path, "1"); } @Override public > T getEnum(Class enumClass, String path) { return null; } @Override public ConfigObject getObject(String path) { return null; } @Override public Config getConfig(String path) { return null; } @Override public Object getAnyRef(String path) { return null; } @Override public ConfigValue getValue(String path) { return null; } @Override public Long getBytes(String path) { return null; } @Override public ConfigMemorySize getMemorySize(String path) { return null; } @Override public Long getMilliseconds(String path) { return null; } @Override public Long getNanoseconds(String path) { return null; } @Override public long getDuration(String path, TimeUnit unit) { return 0; } @Override public Duration getDuration(String path) { return null; } @Override public Period getPeriod(String path) { return null; } @Override public TemporalAmount getTemporal(String path) { return null; } @Override public ConfigList getList(String path) { return null; } @Override public List getBooleanList(String path) { return null; } @Override public List getNumberList(String path) { return null; } @Override public List getIntList(String path) { return null; } @Override public List getLongList(String path) { return null; } @Override public List getDoubleList(String path) { return null; } @Override public List getStringList(String path) { return null; } @Override public > List getEnumList(Class enumClass, String path) { return null; } @Override public List getObjectList(String path) { return null; } @Override public List getConfigList(String path) { return null; } @Override public List getAnyRefList(String path) { return null; } @Override public List getBytesList(String path) { return null; } @Override public List getMemorySizeList(String path) { return null; } @Override public List getMillisecondsList(String path) { return null; } @Override public List getNanosecondsList(String path) { return null; } @Override public List getDurationList(String path, TimeUnit unit) { return null; } @Override public List getDurationList(String path) { return null; } @Override public Config withOnlyPath(String path) { return null; } @Override public Config withoutPath(String path) { return null; } @Override public Config atPath(String path) { return null; } @Override public Config atKey(String key) { return null; } @Override public Config withValue(String path, ConfigValue value) { _map.put(path, value.unwrapped()); return this; } }; @Test public void readTimeoutPropagation() { CONFIG.withValue(OIDC_READ_TIMEOUT, ConfigValueFactory.fromAnyRef("10000")); OidcConfigs.Builder oidcConfigsBuilder = new OidcConfigs.Builder(); oidcConfigsBuilder.from(CONFIG); OidcConfigs oidcConfigs = oidcConfigsBuilder.build(); OidcProvider oidcProvider = new OidcProvider(oidcConfigs); assertEquals(10000, ((OidcClient) oidcProvider.client()).getConfiguration().getReadTimeout()); } @Test public void readPreferredJwsAlgorithmPropagationFromConfig() { final String SSO_SETTINGS_JSON_STR = new JSONObject().toString(); CONFIG.withValue(OIDC_PREFERRED_JWS_ALGORITHM, ConfigValueFactory.fromAnyRef("RS256")); OidcConfigs.Builder oidcConfigsBuilder = new OidcConfigs.Builder(); oidcConfigsBuilder.from(CONFIG, SSO_SETTINGS_JSON_STR); OidcConfigs oidcConfigs = new OidcConfigs(oidcConfigsBuilder); OidcProvider oidcProvider = new OidcProvider(oidcConfigs); assertEquals( "RS256", ((OidcClient) oidcProvider.client()) .getConfiguration() .getPreferredJwsAlgorithm() .toString()); } @Test public void readPreferredJwsAlgorithmPropagationFromJSON() { final String SSO_SETTINGS_JSON_STR = new JSONObject().put(PREFERRED_JWS_ALGORITHM, "HS256").toString(); CONFIG.withValue(OIDC_PREFERRED_JWS_ALGORITHM, ConfigValueFactory.fromAnyRef("RS256")); OidcConfigs.Builder oidcConfigsBuilder = new OidcConfigs.Builder(); oidcConfigsBuilder.from(CONFIG, SSO_SETTINGS_JSON_STR); OidcConfigs oidcConfigs = new OidcConfigs(oidcConfigsBuilder); OidcProvider oidcProvider = new OidcProvider(oidcConfigs); assertEquals( "HS256", ((OidcClient) oidcProvider.client()) .getConfiguration() .getPreferredJwsAlgorithm() .toString()); } }