32
32
import java .util .List ;
33
33
import java .util .Random ;
34
34
import java .util .concurrent .CopyOnWriteArrayList ;
35
+ import java .util .stream .Collectors ;
35
36
import javax .net .ssl .SSLContext ;
36
37
import javax .net .ssl .TrustManager ;
37
38
import org .apache .qpid .protonj2 .client .ConnectionOptions ;
41
42
abstract class DefaultConnectionSettings <T > implements ConnectionSettings <T > {
42
43
43
44
private static final Logger LOGGER = LoggerFactory .getLogger (DefaultConnectionSettings .class );
45
+ private static final List <String > SASL_MECHANISMS =
46
+ List .of (
47
+ ConnectionSettings .SASL_MECHANISM_PLAIN ,
48
+ SASL_MECHANISM_ANONYMOUS ,
49
+ SASL_MECHANISM_EXTERNAL );
44
50
45
51
static final String DEFAULT_USERNAME = "guest" ;
46
52
static final String DEFAULT_PASSWORD = DEFAULT_USERNAME ;
@@ -68,7 +74,7 @@ abstract class DefaultConnectionSettings<T> implements ConnectionSettings<T> {
68
74
}
69
75
};
70
76
private final List <Address > addresses = new CopyOnWriteArrayList <>();
71
- private String saslMechanism = ConnectionSettings .SASL_MECHANISM_PLAIN ;
77
+ private String saslMechanism = ConnectionSettings .SASL_MECHANISM_ANONYMOUS ;
72
78
private final DefaultTlsSettings <T > tlsSettings = new DefaultTlsSettings <>(this );
73
79
private final DefaultAffinity <T > affinity = new DefaultAffinity <>(this );
74
80
@@ -100,6 +106,7 @@ public T username(String username) {
100
106
} else {
101
107
this .credentialsProvider = new DefaultUsernamePasswordCredentialsProvider (username , null );
102
108
}
109
+ this .saslMechanism = SASL_MECHANISM_PLAIN ;
103
110
return toReturn ();
104
111
}
105
112
@@ -113,6 +120,7 @@ public T password(String password) {
113
120
} else {
114
121
this .credentialsProvider = new DefaultUsernamePasswordCredentialsProvider (null , password );
115
122
}
123
+ this .saslMechanism = SASL_MECHANISM_PLAIN ;
116
124
return toReturn ();
117
125
}
118
126
@@ -157,13 +165,22 @@ public T addressSelector(AddressSelector selector) {
157
165
158
166
@ Override
159
167
public T saslMechanism (String mechanism ) {
160
- if (!SASL_MECHANISM_PLAIN . equals ( mechanism ) && ! SASL_MECHANISM_EXTERNAL . equals (mechanism )) {
168
+ if (!SASL_MECHANISMS . contains (mechanism )) {
161
169
throw new IllegalArgumentException (
162
170
String .format (
163
- "Unsupported SASL mechanism: '%s'. " + "Supported mechanisms are '%s' and '%s'." ,
164
- mechanism , SASL_MECHANISM_PLAIN , SASL_MECHANISM_EXTERNAL ));
171
+ "Unsupported SASL mechanism: '%s'. " + "Supported mechanisms are: %s." ,
172
+ mechanism ,
173
+ SASL_MECHANISMS .stream ().map (n -> "'" + n + "'" ).collect (Collectors .joining (", " ))));
165
174
}
166
175
this .saslMechanism = mechanism ;
176
+ if (SASL_MECHANISM_ANONYMOUS .equals (mechanism )) {
177
+ this .credentialsProvider = null ;
178
+ } else if (SASL_MECHANISM_PLAIN .equals (mechanism )) {
179
+ this .credentialsProvider =
180
+ new DefaultUsernamePasswordCredentialsProvider (DEFAULT_USERNAME , DEFAULT_PASSWORD );
181
+ } else if (SASL_MECHANISM_EXTERNAL .equals (mechanism )) {
182
+ this .credentialsProvider = null ;
183
+ }
167
184
return this .toReturn ();
168
185
}
169
186
@@ -204,12 +221,12 @@ DefaultTlsSettings<?> tlsSettings() {
204
221
void copyTo (DefaultConnectionSettings <?> copy ) {
205
222
copy .host (this .host );
206
223
copy .port (this .port );
224
+ copy .saslMechanism (this .saslMechanism );
207
225
copy .credentialsProvider (this .credentialsProvider );
208
226
copy .virtualHost (this .virtualHost );
209
227
copy .uris (this .uris .stream ().map (URI ::toString ).toArray (String []::new ));
210
228
copy .addressSelector (this .addressSelector );
211
229
copy .idleTimeout (this .idleTimeout );
212
- copy .saslMechanism (this .saslMechanism );
213
230
214
231
if (this .tlsSettings .enabled ()) {
215
232
this .tlsSettings .copyTo ((DefaultTlsSettings <?>) copy .tls ());
0 commit comments