10000 ssl connection string options · mysql-net/MySqlConnector@2cf84fe · GitHub
[go: up one dir, main page]

Skip to content

Commit 2cf84fe

Browse files
committed
ssl connection string options
1 parent aa5c148 commit 2cf84fe

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

src/MySqlConnector/MySqlClient/MySqlConnectionStringBuilder.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@
55

66
namespace MySql.Data.MySqlClient
77
{
8+
public enum SslMode
9+
{
10+
None,
11+
Required,
12+
VerifyCa,
13+
VerifyFull,
14+
}
15+
816
public sealed class MySqlConnectionStringBuilder : DbConnectionStringBuilder
917
{
1018
public MySqlConnectionStringBuilder()
@@ -82,6 +90,24 @@ public bool UseCompression
8290
set { MySqlConnectionStringOption.UseCompression.SetValue(this, value); }
8391
}
8492

93+
public SslMode SslMode
94+
{
95+
get { return MySqlConnectionStringOption.SslMode.GetValue(this); }
96+
set { MySqlConnectionStringOption.SslMode.SetValue(this, value); }
97+
}
98+
99+
public string CertificateFile
100+
{
101+
get { return MySqlConnectionStringOption.CertificateFile.GetValue(this); }
102+
set { MySqlConnectionStringOption.CertificateFile.SetValue(this, value); }
103+
}
104+
105+
public string CertificatePassword
106+
{
107+
get { return MySqlConnectionStringOption.CertificatePassword.GetValue(this); }
108+
set { MySqlConnectionStringOption.CertificatePassword.SetValue(this, value); }
109+
}
110+
85111
public bool Pooling
86112
{
87113
get { return MySqlConnectionStringOption.Pooling.GetValue(this); }
@@ -179,6 +205,9 @@ internal abstract class MySqlConnectionStringOption
179205
public static readonly MySqlConnectionStringOption<bool> OldGuids;
180206
public static readonly MySqlConnectionStringOption<bool> PersistSecurityInfo;
181207
public static readonly MySqlConnectionStringOption<bool> UseCompression;
208+
public static readonly MySqlConnectionStringOption<SslMode> SslMode;
209+
public static readonly MySqlConnectionStringOption<string> CertificateFile;
210+
public static readonly MySqlConnectionStringOption<string> CertificatePassword;
182211
public static readonly MySqlConnectionStringOption<bool> Pooling;
183212
public static readonly MySqlConnectionStringOption<bool> ConnectionReset;
184213
public static readonly MySqlConnectionStringOption<uint> ConnectionTimeout;
@@ -265,6 +294,18 @@ static MySqlConnectionStringOption()
265294
keys: new[] { "Compress", "Use Compression", "UseCompression" },
266295
defaultValue: false));
267296

297+
AddOption(CertificateFile = new MySqlConnectionStringOption<string>(
298+
keys: new[] { "CertificateFile", "Certificate File" },
299+
defaultValue: ""));
300+
301+
AddOption(CertificatePassword = new MySqlConnectionStringOption<string>(
302+
keys: new[] { "CertificatePassword", "Certificate Password" },
303+
defaultValue: ""));
304+
305+
AddOption(SslMode = new MySqlConnectionStringOption<SslMode>(
306+
keys: new[] { "SSL Mode", "SslMode" },
307+
defaultValue: MySqlClient.SslMode.None));
308+
268309
AddOption(Pooling = new MySqlConnectionStringOption<bool>(
269310
keys: new[] { "Pooling" },
270311
defaultValue: true));
@@ -334,6 +375,16 @@ private static T ChangeType(object objectValue)
334375
return (T) (object) false;
335376
}
336377

378+
if (typeof(T) == typeof(SslMode) && objectValue is string)
379+
{
380+
foreach (var val in Enum.GetValues(typeof(T)))
381+
{
382+
if (string.Equals((string) objectValue, val.ToString(), StringComparison.OrdinalIgnoreCase))
383+
return (T) val;
384+
}
385+
throw new InvalidOperationException("Value '{0}' not supported for option '{1}'.".FormatInvariant(objectValue, typeof(T).Name));
386+
}
387+
337388
return (T) Convert.ChangeType(objectValue, typeof(T), CultureInfo.InvariantCulture);
338389
}
339390

6DB6

tests/MySqlConnector.Tests/MySqlConnectionStringBuilderTests.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public void Defaults()
3535
Assert.Equal("", csb.Server);
3636
Assert.Equal(false, csb.UseCompression);
3737
Assert.Equal("", csb.UserID);
38+
Assert.Equal(SslMode.None, csb.SslMode);
39+
Assert.Equal("", csb.CertificateFile);
40+
Assert.Equal("", csb.CertificatePassword);
3841
#if !BASELINE
3942
Assert.Equal(false, csb.ForceSynchronous);
4043
#endif
@@ -45,7 +48,7 @@ public void ParseConnectionString()
4548
{
4649
var csb = new MySqlConnectionStringBuilder
4750
{
48-
ConnectionString = "Data Source=db-server;Port=1234;Uid=username;pwd=Pass1234;Initial Catalog=schema_name;Allow User Variables=true;Character Set=latin1;Convert Zero Datetime=true;Pooling=no;OldGuids=true;Compress=true;ConnectionReset=false;minpoolsize=5;maxpoolsize=15;persistsecurityinfo=yes;useaffectedrows=false;connect timeout=30"
51+
ConnectionString = "Data Source=db-server;Port=1234;Uid=username;pwd=Pass1234;Initial Catalog=schema_name;Allow User Variables=true;Character Set=latin1;Convert Zero Datetime=true;Pooling=no;OldGuids=true;Compress=true;ConnectionReset=false;minpoolsize=5;maxpoolsize=15;persistsecurityinfo=yes;useaffectedrows=false;connect timeout=30;ssl mode=verifyca;certificate file=file.pfx;certificate password=Pass1234"
4952
#if !BASELINE
5053
+ ";forcesynchronous=true"
5154
#endif
@@ -67,6 +70,9 @@ public void ParseConnectionString()
6770
Assert.Equal(false, csb.UseAffectedRows);
6871
Assert.Equal(true, csb.UseCompression);
6972
Assert.Equal("username", csb.UserID);
73+
Assert.Equal(SslMode.VerifyCa, csb.SslMode);
74+
Assert.Equal("file.pfx", csb.CertificateFile);
75+
Assert.Equal("Pass1234", csb.CertificatePassword);
7076
#if !BASELINE
7177
Assert.Equal(true, csb.ForceSynchronous);
7278
#endif
@@ -92,6 +98,13 @@ public void UseAffectedRowsNotSupported()
9298
};
9399
Assert.Throws<NotSupportedException>(() => new MySqlConnection(csb.ConnectionString));
94100
}
101+
102+
[Fact]
103+
public void SslModePreferredInvalidOperation()
104+
{
105+
var csb = new MySqlConnectionStringBuilder("ssl mode=preferred;");
106+
Assert.Throws<InvalidOperationException>(() => csb.SslMode);
107+
}
95108
#endif
96109
}
97110
}

0 commit comments

Comments
 (0)
0