|
18 | 18 | import io.quarkus.runtime.LaunchMode;
|
19 | 19 | import io.quarkus.runtime.RuntimeValue;
|
20 | 20 | import io.quarkus.runtime.annotations.Recorder;
|
| 21 | +import io.quarkus.runtime.configuration.ConfigurationException; |
21 | 22 | import io.quarkus.tls.TlsConfiguration;
|
22 | 23 | import io.quarkus.tls.TlsConfigurationRegistry;
|
23 | 24 | import io.smallrye.graphql.client.impl.GraphQLClientConfiguration;
|
@@ -127,23 +128,35 @@ private GraphQLClientConfiguration toSmallRyeNativeConfiguration(GraphQLClientCo
|
127 | 128 | .map(m -> new HashMap<String, Object>(m)).orElse(null));
|
128 | 129 | quarkusConfig.url().ifPresent(transformed::setUrl);
|
129 | 130 | transformed.setWebsocketSubprotocols(quarkusConfig.subprotocols().orElse(new ArrayList<>()));
|
130 |
| - resolveTlsConfigurationForRegistry(quarkusConfig) |
131 |
| - .ifPresentOrElse(tlsConfiguration -> { |
132 |
| - transformed.setTlsKeyStoreOptions(tlsConfiguration.getKeyStoreOptions()); |
133 |
| - transformed.setTlsTrustStoreOptions(tlsConfiguration.getTrustStoreOptions()); |
134 |
| - transformed.setSslOptions(tlsConfiguration.getSSLOptions()); |
135 |
| - tlsConfiguration.getHostnameVerificationAlgorithm() |
136 |
| - .ifPresent(transformed::setHostnameVerificationAlgorithm); |
137 |
| - transformed.setUsesSni(Boolean.valueOf(tlsConfiguration.usesSni())); |
138 |
| - }, () -> { |
139 |
| - // DEPRECATED |
140 |
| - quarkusConfig.keyStore().ifPresent(transformed::setKeyStore); |
141 |
| - quarkusConfig.keyStoreType().ifPresent(transformed::setKeyStoreType); |
142 |
| - quarkusConfig.keyStorePassword().ifPresent(transformed::setKeyStorePassword); |
143 |
| - quarkusConfig.trustStore().ifPresent(transformed::setTrustStore); |
144 |
| - quarkusConfig.trustStoreType().ifPresent(transformed::setTrustStoreType); |
145 |
| - quarkusConfig.trustStorePassword().ifPresent(transformed::setTrustStorePassword); |
146 |
| - }); |
| 131 | + |
| 132 | + // these properties are deprecated, but if they're present, they should override the TLS registry config |
| 133 | + // (smallrye-graphql gives them precedence) |
| 134 | + quarkusConfig.keyStore().ifPresent(transformed::setKeyStore); |
| 135 | + quarkusConfig.keyStoreType().ifPresent(transformed::setKeyStoreType); |
| 136 | + quarkusConfig.keyStorePassword().ifPresent(transformed::setKeyStorePassword); |
| 137 | + quarkusConfig.trustStore().ifPresent(transformed::setTrustStore); |
| 138 | + quarkusConfig.trustStoreType().ifPresent(transformed::setTrustStoreType); |
| 139 | + quarkusConfig.trustStorePassword().ifPresent(transformed::setTrustStorePassword); |
| 140 | + |
| 141 | + // only apply TLS registry settings if quarkus.smallrye-graphql-client.CLIENT.key-store|trust-store were not specified |
| 142 | + if (quarkusConfig.keyStore().isEmpty() && quarkusConfig.trustStore().isEmpty()) { |
| 143 | + resolveTlsConfigurationForRegistry(quarkusConfig) |
| 144 | + .ifPresent(tlsConfiguration -> { |
| 145 | + transformed.setTlsKeyStoreOptions(tlsConfiguration.getKeyStoreOptions()); |
| 146 | + transformed.setTlsTrustStoreOptions(tlsConfiguration.getTrustStoreOptions()); |
| 147 | + transformed.setSslOptions(tlsConfiguration.getSSLOptions()); |
| 148 | + tlsConfiguration.getHostnameVerificationAlgorithm() |
| 149 | + .ifPresent(transformed::setHostnameVerificationAlgorithm); |
| 150 | + transformed.setUsesSni(Boolean.valueOf(tlsConfiguration.usesSni())); |
| 151 | + }); |
| 152 | + } else { |
| 153 | + quarkusConfig.tlsConfigurationName().ifPresent(name -> { |
| 154 | + logger.warn("TLS configuration " + name |
| 155 | + + " was requested but specific keystore/truststore settings were applied too, " + |
| 156 | + " ignoring the TLS configuration"); |
| 157 | + }); |
| 158 | + } |
| 159 | + |
147 | 160 | quarkusConfig.proxyHost().ifPresent(transformed::setProxyHost);
|
148 | 161 | quarkusConfig.proxyPort().ifPresent(transformed::setProxyPort);
|
149 | 162 | quarkusConfig.proxyUsername().ifPresent(transformed::setProxyUsername);
|
@@ -172,12 +185,24 @@ private Optional<TlsConfiguration> resolveTlsConfigurationForRegistry(GraphQLCli
|
172 | 185 | if (Arc.container() != null) {
|
173 | 186 | TlsConfigurationRegistry tlsConfigurationRegistry = Arc.container().select(TlsConfigurationRegistry.class).orNull();
|
174 | 187 | if (tlsConfigurationRegistry != null) {
|
175 |
| - if (tlsConfigurationRegistry.getDefault().isPresent() |
176 |
| - && (tlsConfigurationRegistry.getDefault().get().getTrustStoreOptions() != null |
177 |
| - || tlsConfigurationRegistry.getDefault().get().isTrustAll())) { |
| 188 | + if (quarkusConfig.tlsConfigurationName().isPresent()) { |
| 189 | + // explicit TLS config |
| 190 | + Optional<TlsConfiguration> namedConfig = TlsConfiguration.from(tlsConfigurationRegistry, |
| 191 | + quarkusConfig.tlsConfigurationName()); |
| 192 | + if (namedConfig.isEmpty()) { |
| 193 | + throw new ConfigurationException("TLS configuration '" + quarkusConfig.tlsConfigurationName().get() |
| 194 | + + "' was specified, but it does not exist."); |
| 195 | + } |
| 196 | + return namedConfig; |
| 197 | + } else { |
| 198 | + // no explicit TLS config |
178 | 199 | return tlsConfigurationRegistry.getDefault();
|
179 | 200 | }
|
180 |
| - return TlsConfiguration.from(tlsConfigurationRegistry, quarkusConfig.tlsConfigurationName()); |
| 201 | + } else { |
| 202 | + if (quarkusConfig.tlsConfigurationName().isPresent()) { |
| 203 | + throw new ConfigurationException("TLS configuration '" + quarkusConfig.tlsConfigurationName().get() |
| 204 | + + "' was specified, but no TLS configuration registry could be found."); |
| 205 | + } |
181 | 206 | }
|
182 | 207 | }
|
183 | 208 | return Optional.empty();
|
|
0 commit comments