Skip to content

Commit b97bcb1

Browse files
committed
CSHARP-2090: Deprecate using multiple credentials.
1 parent 1c20602 commit b97bcb1

File tree

11 files changed

+142
-71
lines changed

11 files changed

+142
-71
lines changed

src/MongoDB.Driver.Legacy/MongoServerSettings.cs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright 2010-2016 MongoDB Inc.
1+
/* Copyright 2010-2017 MongoDB Inc.
22
*
33
* Licensed under the Apache License, Version 2.0 (the "License");
44
* you may not use this file except in compliance with the License.
@@ -165,9 +165,30 @@ public TimeSpan ConnectTimeout
165165
}
166166
}
167167

168+
/// <summary>
169+
/// Gets or sets the credential.
170+
/// </summary>
171+
public MongoCredential Credential
172+
{
173+
get { return _credentials.SingleOrDefault(); }
174+
set
175+
{
176+
if (_isFrozen) { throw new InvalidOperationException("MongoServerSettings is frozen."); }
177+
if (value == null)
178+
{
179+
_credentials = new MongoCredentialStore(Enumerable.Empty<MongoCredential>());
180+
}
181+
else
182+
{
183+
_credentials = new MongoCredentialStore(new[] { value });
184+
}
185+
}
186+
}
187+
168188
/// <summary>
169189
/// Gets or sets the credentials.
170190
/// </summary>
191+
[Obsolete("Use Credential instead. Using multiple credentials is deprecated.")]
171192
public IEnumerable<MongoCredential> Credentials
172193
{
173194
get { return _credentials; }
@@ -572,7 +593,9 @@ public static MongoServerSettings FromClientSettings(MongoClientSettings clientS
572593
serverSettings.ClusterConfigurator = clientSettings.ClusterConfigurator;
573594
serverSettings.ConnectionMode = clientSettings.ConnectionMode;
574595
serverSettings.ConnectTimeout = clientSettings.ConnectTimeout;
596+
#pragma warning disable 618
575597
serverSettings.Credentials = clientSettings.Credentials;
598+
#pragma warning restore
576599
serverSettings.GuidRepresentation = clientSettings.GuidRepresentation;
577600
serverSettings.HeartbeatInterval = clientSettings.HeartbeatInterval;
578601
serverSettings.HeartbeatTimeout = clientSettings.HeartbeatTimeout;
@@ -625,7 +648,7 @@ public static MongoServerSettings FromUrl(MongoUrl url)
625648
credential = credential.WithMechanismProperty(property.Key, property.Value);
626649
}
627650
}
628-
serverSettings.Credentials = new[] { credential };
651+
serverSettings.Credential = credential;
629652
}
630653
serverSettings.GuidRepresentation = url.GuidRepresentation;
631654
serverSettings.HeartbeatInterval = url.HeartbeatInterval;

src/MongoDB.Driver/MongoClient.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,9 @@ private IClientSessionHandle StartImplicitSession(bool areSessionsSupported)
338338
var options = new ClientSessionOptions();
339339

340340
IServerSession serverSession;
341+
#pragma warning disable 618
341342
var areMultipleUsersAuthenticated = _settings.Credentials.Count() > 1;
343+
#pragma warning restore
342344
if (areSessionsSupported && !areMultipleUsersAuthenticated)
343345
{
344346
serverSession = AcquireServerSession();

src/MongoDB.Driver/MongoClientSettings.cs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright 2010-2016 MongoDB Inc.
1+
/* Copyright 2010-2017 MongoDB Inc.
22
*
33
* Licensed under the Apache License, Version 2.0 (the "License");
44
* you may not use this file except in compliance with the License.
@@ -154,9 +154,32 @@ public TimeSpan ConnectTimeout
154154
}
155155
}
156156

157+
/// <summary>
158+
/// Gets or sets the credential.
159+
/// </summary>
160+
public MongoCredential Credential
161+
{
162+
get
163+
{
164+
return _credentials.SingleOrDefault(); ;
165+
}
166+
set
167+
{
168+
if (_isFrozen) { throw new InvalidOperationException("MongoClientSettings is frozen."); }
169+
if (value == null)
170+
{
171+
_credentials = new MongoCredentialStore(Enumerable.Empty<MongoCredential>());
172+
}
173+
else
174+
{
175+
_credentials = new MongoCredentialStore(new[] { value });
176+
}
177+
}
178+
}
157179
/// <summary>
158180
/// Gets or sets the credentials.
159181
/// </summary>
182+
[Obsolete("Use Credential instead. Using multiple credentials is deprecated.")]
160183
public IEnumerable<MongoCredential> Credentials
161184
{
162185
get { return _credentials; }
@@ -561,7 +584,7 @@ public static MongoClientSettings FromUrl(MongoUrl url)
561584
credential = credential.WithMechanismProperty(property.Key, property.Value);
562585
}
563586
}
564-
clientSettings.Credentials = new[] { credential };
587+
clientSettings.Credential = credential;
565588
}
566589
clientSettings.GuidRepresentation = url.GuidRepresentation;
567590
clientSettings.HeartbeatInterval = url.HeartbeatInterval;

tests/MongoDB.Driver.Legacy.Tests/Jira/CSharp216Tests.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright 2010-2016 MongoDB Inc.
1+
/* Copyright 2010-2017 MongoDB Inc.
22
*
33
* Licensed under the Apache License, Version 2.0 (the "License");
44
* you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@ public CSharp216Tests()
3232
[Fact]
3333
public void TestAmbiguousEvalArguments()
3434
{
35+
#pragma warning disable 618
3536
if (!DriverTestConfiguration.Client.Settings.Credentials.Any())
3637
{
3738
var code = "function (x, y) { return y; }";
@@ -43,22 +44,23 @@ public void TestAmbiguousEvalArguments()
4344
Assert.Equal(BsonType.Boolean, result.BsonType);
4445
Assert.Equal(true, result.AsBoolean);
4546
}
47+
#pragma warning restore
4648
}
4749

4850
[Fact]
4951
public void TestNoLock()
5052
{
53+
#pragma warning disable 618
5154
if (!DriverTestConfiguration.Client.Settings.Credentials.Any())
5255
{
5356
var code = "function (x, y) { return y; }";
5457
var objectArrayArg = new object[] { 1, 2, 3 };
5558
var boolArg = true;
56-
#pragma warning disable 618
5759
var result = _adminDatabase.Eval(EvalFlags.NoLock, code, objectArrayArg, boolArg); // before change boolArg was being misinterpreted as nolock argument
58-
#pragma warning restore
5960
Assert.Equal(BsonType.Boolean, result.BsonType);
6061
Assert.Equal(true, result.AsBoolean);
6162
}
63+
#pragma warning restore
6264
}
6365
}
6466
}

tests/MongoDB.Driver.Legacy.Tests/MongoDatabaseTests.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright 2010-2016 MongoDB Inc.
1+
/* Copyright 2010-2017 MongoDB Inc.
22
*
33
* Licensed under the Apache License, Version 2.0 (the "License");
44
* you may not use this file except in compliance with the License.
@@ -192,32 +192,33 @@ public void TestDropCollectionWriteConcern()
192192
[Fact]
193193
public void TestEvalNoArgs()
194194
{
195+
#pragma warning disable 618
195196
if (!DriverTestConfiguration.Client.Settings.Credentials.Any())
196197
{
197198
var code = "function() { return 1; }";
198-
#pragma warning disable 618
199199
var result = _database.Eval(code);
200-
#pragma warning restore
201200
Assert.Equal(1, result.ToInt32());
202201
}
202+
#pragma warning restore
203203
}
204204

205205
[Fact]
206206
public void TestEvalNoArgsNoLock()
207207
{
208+
#pragma warning disable 618
208209
if (!DriverTestConfiguration.Client.Settings.Credentials.Any())
209210
{
210211
var code = "function() { return 1; }";
211-
#pragma warning disable 618
212212
var result = _adminDatabase.Eval(EvalFlags.NoLock, code);
213-
#pragma warning restore
214213
Assert.Equal(1, result.ToInt32());
215214
}
215+
#pragma warning restore
216216
}
217217

218218
[Fact]
219219
public void TestEvalWithMaxTime()
220220
{
221+
#pragma warning disable 618
221222
if (!DriverTestConfiguration.Client.Settings.Credentials.Any())
222223
{
223224
if (_primary.Supports(FeatureId.MaxTime))
@@ -237,58 +238,59 @@ public void TestEvalWithMaxTime()
237238
}
238239
}
239240
}
241+
#pragma warning restore
240242
}
241243

242244
[Fact]
243245
public void TestEvalWithOneArg()
244246
{
247+
#pragma warning disable 618
245248
if (!DriverTestConfiguration.Client.Settings.Credentials.Any())
246249
{
247250
var code = "function(x) { return x + 1; }";
248-
#pragma warning disable 618
249251
var result = _adminDatabase.Eval(code, 1);
250-
#pragma warning restore
251252
Assert.Equal(2, result.ToInt32());
252253
}
254+
#pragma warning restore
253255
}
254256

255257
[Fact]
256258
public void TestEvalWithOneArgNoLock()
257259
{
260+
#pragma warning disable 618
258261
if (!DriverTestConfiguration.Client.Settings.Credentials.Any())
259262
{
260263
var code = "function(x) { return x + 1; }";
261-
#pragma warning disable 618
262264
var result = _adminDatabase.Eval(EvalFlags.NoLock, code, 1);
263-
#pragma warning restore
264265
Assert.Equal(2, result.ToInt32());
265266
}
267+
#pragma warning restore
266268
}
267269

268270
[Fact]
269271
public void TestEvalWithTwoArgs()
270272
{
273+
#pragma warning disable 618
271274
if (!DriverTestConfiguration.Client.Settings.Credentials.Any())
272275
{
273276
var code = "function(x, y) { return x / y; }";
274-
#pragma warning disable 618
275277
var result = _adminDatabase.Eval(code, 6, 2);
276-
#pragma warning restore
277278
Assert.Equal(3, result.ToInt32());
278279
}
280+
#pragma warning restore
279281
}
280282

281283
[Fact]
282284
public void TestEvalWithTwoArgsNoLock()
283285
{
286+
#pragma warning disable 618
284287
if (!DriverTestConfiguration.Client.Settings.Credentials.Any())
285288
{
286289
var code = "function(x, y) { return x / y; }";
287-
#pragma warning disable 618
288290
var result = _adminDatabase.Eval(EvalFlags.NoLock, code, 6, 2);
289-
#pragma warning restore
290291
Assert.Equal(3, result.ToInt32());
291292
}
293+
#pragma warning restore
292294
}
293295

294296
[Fact]

tests/MongoDB.Driver.Legacy.Tests/MongoServerSettingsTests.cs

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright 2010-2016 MongoDB Inc.
1+
/* Copyright 2010-2017 MongoDB Inc.
22
*
33
* Licensed under the Apache License, Version 2.0 (the "License");
44
* you may not use this file except in compliance with the License.
@@ -83,7 +83,7 @@ public void TestClone()
8383
var settings = MongoServerSettings.FromUrl(url);
8484

8585
// a few settings can only be made in code
86-
settings.Credentials = new[] { MongoCredential.CreateMongoCRCredential("database", "username", "password").WithMechanismProperty("SERVICE_NAME", "other") };
86+
settings.Credential = MongoCredential.CreateMongoCRCredential("database", "username", "password").WithMechanismProperty("SERVICE_NAME", "other");
8787
settings.SslSettings = new SslSettings { CheckCertificateRevocation = false };
8888

8989
var clone = settings.Clone();
@@ -120,11 +120,20 @@ public void TestConnectTimeout()
120120
Assert.Throws<InvalidOperationException>(() => { settings.ConnectTimeout = connectTimeout; });
121121
}
122122

123+
[Fact]
124+
public void TestCredential()
125+
{
126+
var settings = new MongoServerSettings();
127+
Assert.Equal(null, settings.Credential);
128+
}
129+
123130
[Fact]
124131
public void TestCredentials()
125132
{
126133
var settings = new MongoServerSettings();
134+
#pragma warning disable 618
127135
Assert.Equal(0, settings.Credentials.Count());
136+
#pragma warning restore
128137
}
129138

130139
[Fact]
@@ -134,7 +143,9 @@ public void TestDefaults()
134143
Assert.Equal(null, settings.ApplicationName);
135144
Assert.Equal(ConnectionMode.Automatic, settings.ConnectionMode);
136145
Assert.Equal(MongoDefaults.ConnectTimeout, settings.ConnectTimeout);
146+
#pragma warning disable 618
137147
Assert.Equal(0, settings.Credentials.Count());
148+
#pragma warning restore
138149
Assert.Equal(MongoDefaults.GuidRepresentation, settings.GuidRepresentation);
139150
Assert.Equal(ServerSettings.DefaultHeartbeatInterval, settings.HeartbeatInterval);
140151
Assert.Equal(ServerSettings.DefaultHeartbeatTimeout, settings.HeartbeatTimeout);
@@ -179,11 +190,11 @@ public void TestEquals()
179190
Assert.False(clone.Equals(settings));
180191

181192
clone = settings.Clone();
182-
clone.Credentials = new[] { MongoCredential.CreateMongoCRCredential("db2", "user2", "password2") };
193+
clone.Credential = MongoCredential.CreateMongoCRCredential("db2", "user2", "password2");
183194
Assert.False(clone.Equals(settings));
184195

185196
clone = settings.Clone();
186-
clone.Credentials = new[] { MongoCredential.CreateMongoCRCredential("db1", "user2", "password2") };
197+
clone.Credential = MongoCredential.CreateMongoCRCredential("db1", "user2", "password2");
187198
Assert.False(clone.Equals(settings));
188199

189200
clone = settings.Clone();
@@ -305,13 +316,15 @@ public void TestFromClientSettings()
305316
Assert.Equal(url.ApplicationName, settings.ApplicationName);
306317
Assert.Equal(url.ConnectionMode, settings.ConnectionMode);
307318
Assert.Equal(url.ConnectTimeout, settings.ConnectTimeout);
319+
#pragma warning disable 618
308320
Assert.Equal(1, settings.Credentials.Count());
309-
Assert.Equal(url.Username, settings.Credentials.Single().Username);
310-
Assert.Equal(url.AuthenticationMechanism, settings.Credentials.Single().Mechanism);
311-
Assert.Equal("other", settings.Credentials.Single().GetMechanismProperty<string>("SERVICE_NAME", "mongodb"));
312-
Assert.Equal(true, settings.Credentials.Single().GetMechanismProperty<bool>("CANONICALIZE_HOST_NAME", false));
313-
Assert.Equal(url.AuthenticationSource, settings.Credentials.Single().Source);
314-
Assert.Equal(new PasswordEvidence(builder.Password), settings.Credentials.Single().Evidence);
321+
#pragma warning restore
322+
Assert.Equal(url.Username, settings.Credential.Username);
323+
Assert.Equal(url.AuthenticationMechanism, settings.Credential.Mechanism);
324+
Assert.Equal("other", settings.Credential.GetMechanismProperty<string>("SERVICE_NAME", "mongodb"));
325+
Assert.Equal(true, settings.Credential.GetMechanismProperty<bool>("CANONICALIZE_HOST_NAME", false));
326+
Assert.Equal(url.AuthenticationSource, settings.Credential.Source);
327+
Assert.Equal(new PasswordEvidence(builder.Password), settings.Credential.Evidence);
315328
Assert.Equal(url.GuidRepresentation, settings.GuidRepresentation);
316329
Assert.Equal(url.HeartbeatInterval, settings.HeartbeatInterval);
317330
Assert.Equal(url.HeartbeatTimeout, settings.HeartbeatTimeout);
@@ -352,11 +365,13 @@ public void TestFromUrl()
352365
Assert.Equal(url.ApplicationName, settings.ApplicationName);
353366
Assert.Equal(url.ConnectionMode, settings.ConnectionMode);
354367
Assert.Equal(url.ConnectTimeout, settings.ConnectTimeout);
368+
#pragma warning disable 618
355369
Assert.Equal(1, settings.Credentials.Count());
356-
Assert.Equal(url.Username, settings.Credentials.Single().Username);
357-
Assert.Equal(url.AuthenticationMechanism, settings.Credentials.Single().Mechanism);
358-
Assert.Equal(url.AuthenticationSource, settings.Credentials.Single().Source);
359-
Assert.Equal(new PasswordEvidence(url.Password), settings.Credentials.Single().Evidence);
370+
#pragma warning restore
371+
Assert.Equal(url.Username, settings.Credential.Username);
372+
Assert.Equal(url.AuthenticationMechanism, settings.Credential.Mechanism);
373+
Assert.Equal(url.AuthenticationSource, settings.Credential.Source);
374+
Assert.Equal(new PasswordEvidence(url.Password), settings.Credential.Evidence);
360375
Assert.Equal(url.GuidRepresentation, settings.GuidRepresentation);
361376
Assert.Equal(url.HeartbeatInterval, settings.HeartbeatInterval);
362377
Assert.Equal(url.HeartbeatTimeout, settings.HeartbeatTimeout);
@@ -757,7 +772,7 @@ public void TestWriteConcern()
757772
[Fact]
758773
public void ToClusterKey_should_copy_relevant_values()
759774
{
760-
var credentials = new[] { MongoCredential.CreateMongoCRCredential("source", "username", "password") };
775+
var credential = MongoCredential.CreateMongoCRCredential("source", "username", "password");
761776
var servers = new[] { new MongoServerAddress("localhost") };
762777
var sslSettings = new SslSettings
763778
{
@@ -770,7 +785,7 @@ public void ToClusterKey_should_copy_relevant_values()
770785
ApplicationName = "app",
771786
ConnectionMode = ConnectionMode.Direct,
772787
ConnectTimeout = TimeSpan.FromSeconds(1),
773-
Credentials = credentials,
788+
Credential = credential,
774789
GuidRepresentation = GuidRepresentation.Standard,
775790
HeartbeatInterval = TimeSpan.FromMinutes(1),
776791
HeartbeatTimeout = TimeSpan.FromMinutes(2),
@@ -796,7 +811,9 @@ public void ToClusterKey_should_copy_relevant_values()
796811
result.ApplicationName.Should().Be(subject.ApplicationName);
797812
result.ConnectionMode.Should().Be(subject.ConnectionMode);
798813
result.ConnectTimeout.Should().Be(subject.ConnectTimeout);
814+
#pragma warning disable 618
799815
result.Credentials.Should().Equal(subject.Credentials);
816+
#pragma warning restore
800817
result.HeartbeatInterval.Should().Be(subject.HeartbeatInterval);
801818
result.HeartbeatTimeout.Should().Be(subject.HeartbeatTimeout);
802819
result.IPv6.Should().Be(subject.IPv6);

0 commit comments

Comments
 (0)