+ * See also {@code credentials-provider}
+ */
+ Optional
+ * See also {@code credentials-provider}
+ */
+ Optional
+ * A credential provider offers a way to retrieve the key store password as well as alias password.
+ * Note that the credential provider is only used if the passwords are not set in the configuration.
+ */
+ Optional
+ * The name is used to select the credential provider to use.
+ * The credential provider must be exposed as a CDI bean and with the {@code @Named} annotation set to the
+ * configured name to be selected.
+ *
+ * If not set, the default credential provider is used.
+ */
+ Optional
+ * If username, password or both cannot be retrieved from the credential provider, then a RuntimeException is thrown.
+ */
+ @WithDefault(CredentialsProvider.USER_PROPERTY_NAME)
+ String usernameKey();
+
+ /**
+ * The key used to retrieve the password from the "credential" bucket.
+ *
+ * If username, password or both cannot be retrieved from the credential provider, then a RuntimeException is thrown.
+ */
+ @WithDefault(CredentialsProvider.PASSWORD_PROPERTY_NAME)
+ String passwordKey();
+
+ }
+}
diff --git a/extensions/proxy-registry/runtime/src/main/java/io/quarkus/proxy/config/ProxyConfigurationRegistry.java b/extensions/proxy-registry/runtime/src/main/java/io/quarkus/proxy/config/ProxyConfigurationRegistry.java
new file mode 100644
index 0000000000000..502f10bb40f1b
--- /dev/null
+++ b/extensions/proxy-registry/runtime/src/main/java/io/quarkus/proxy/config/ProxyConfigurationRegistry.java
@@ -0,0 +1,251 @@
+package io.quarkus.proxy.config;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.OptionalInt;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.inject.literal.NamedLiteral;
+
+import io.quarkus.arc.Arc;
+import io.quarkus.arc.ArcContainer;
+import io.quarkus.arc.InstanceHandle;
+import io.quarkus.credentials.CredentialsProvider;
+import io.quarkus.proxy.config.ProxyConfig.NamedProxyConfig;
+import io.quarkus.proxy.config.ProxyConfig.ProxyCredentialProviderConfig;
+import io.quarkus.runtime.annotations.Recorder;
+
+@Recorder
+public class ProxyConfigurationRegistry {
+
+ private Map> nonProxyHosts();
+
+ /**
+ * Proxy connection timeout.
+ */
+ @ConfigDocDefault("10s")
+ Optional
> nonProxyHosts() {
+ return Optional.empty();
+ }
+
+ @Override
+ public Optional
+ * If not set and the default proxy configuration is configured ({@code quarkus.proxy.*}) then that will be used.
+ * If the proxy configuration name is set, the configuration from {@code quarkus.proxy.
+ * Can be overwritten by client-specific settings.
+ *
+ * Use the value {@code none} to disable using the default configuration defined via {@code quarkus.proxy.*}.
+ *
+ * Quarkus RESTEasy client (provided by the quarkus-resteasy-client dependency) does not support this property.
+ */
+ Optional
* Can be overwritten by client-specific settings.
+ *
+ * @deprecated use {@code quarkus.rest-client.proxy-configuration-name} instead
*/
Optional<@WithConverter(TrimmedStringConverter.class) String> proxyAddress();
/**
* Proxy username, equivalent to the http.proxy or https.proxy JVM settings.
+ * Honored only if {@code quarkus.rest-client.proxy-address} is set.
*
* Can be overwritten by client-specific settings.
*
* This property is not applicable to the RESTEasy Client.
+ *
+ * @deprecated use {@code quarkus.rest-client.proxy-configuration-name} instead
*/
Optional
* Can be overwritten by client-specific settings.
*
* This property is not applicable to the RESTEasy Client.
+ *
+ * @deprecated use {@code quarkus.rest-client.proxy-configuration-name} instead
*/
Optional
* Can be overwritten by client-specific settings.
*
* This property is not applicable to the RESTEasy Client.
+ *
+ * @deprecated use {@code quarkus.rest-client.proxy-configuration-name} instead
*/
Optional
* Can be overwritten by client-specific settings.
*
* This property is not applicable to the RESTEasy Client.
+ *
+ * @deprecated use {@code quarkus.rest-client.proxy-configuration-name} instead
*/
@ConfigDocDefault("10s")
Optional
+ * If not set and {@code quarkus.rest-client.proxy-configuration-name} or the default proxy configuration
+ * ({@code quarkus.proxy.*}) is set, then the first valid of them will get effective.
+ * If the proxy configuration name is set, the configuration from {@code quarkus.proxy.
+ * Use the value {@code none} to disable using the default configuration defined via
+ * {@code quarkus.rest-client.proxy-configuration-name} or {@code quarkus.proxy.*}.
+ *
+ * Quarkus RESTEasy client (provided by the quarkus-resteasy-client dependency) does not support this property.
+ */
+ Optional
* Use `none` to disable proxy
+ *
+ * @deprecated use {@code quarkus.rest-client."client".proxy-configuration-name} instead
*/
Optional<@WithConverter(TrimmedStringConverter.class) String> proxyAddress();
/**
* Proxy username.
+ * Honored only if {@code quarkus.rest-client."client".proxy-address} is set.
*
* This property is not applicable to the RESTEasy Client.
+ *
+ * @deprecated use {@code quarkus.rest-client."client".proxy-configuration-name} instead
*/
Optional
* This property is not applicable to the RESTEasy Client.
+ *
+ * @deprecated use {@code quarkus.rest-client."client".proxy-configuration-name} instead
*/
Optional
* This property is not applicable to the RESTEasy Client.
+ *
+ * @deprecated use {@code quarkus.rest-client."client".proxy-configuration-name} instead
*/
Optional
* This property is not applicable to the RESTEasy Client.
+ *
+ * @deprecated use {@code quarkus.rest-client."client".proxy-configuration-name} instead
*/
@ConfigDocDefault("10s")
Optional