Skip to content

Commit

Permalink
Made the useAzureSqlIntegratedSecurity option only available on the…
Browse files Browse the repository at this point in the history
… platforms that support it
  • Loading branch information
droyad committed Nov 26, 2019
1 parent 85f6fca commit 1f9455a
Show file tree
Hide file tree
Showing 6 changed files with 116 additions and 15 deletions.
20 changes: 13 additions & 7 deletions src/dbup-sqlserver/SqlConnectionManager.cs
Expand Up @@ -19,26 +19,31 @@ public class SqlConnectionManager : DatabaseConnectionManager
/// </summary>
/// <param name="connectionString"></param>
public SqlConnectionManager(string connectionString)
: this(connectionString, false)
: base(new DelegateConnectionFactory((log, dbManager) =>
{
var conn = new SqlConnection(connectionString);
if (dbManager.IsScriptOutputLogged)
conn.InfoMessage += (sender, e) => log.WriteInformation($"{{0}}{Environment.NewLine}", e.Message);
return conn;
}))
{
}

#if SUPPORTS_AZURE_AD
/// <summary>
/// Manages Sql Database Connections
/// </summary>
/// <param name="connectionString"></param>
/// <param name="useAzureSqlIntegratedSecurity">Whether to use Azure SQL Integrated Sercurity</param>
public SqlConnectionManager(string connectionString, bool useAzureSqlIntegratedSecurity)
: base(new DelegateConnectionFactory((log, dbManager) =>
{
var conn = new SqlConnection(connectionString);
#if SUPPORTS_AZURE_AD
if(useAzureSqlIntegratedSecurity)
conn.AccessToken = (new AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").GetAwaiter().GetResult();
#else
if(useAzureSqlIntegratedSecurity)
throw new Exception("You are targeting a framework that does not support Azure AppAuthentication. The minimum target frameworks are .NET Framework 4.6 and .NET Standard 2.0.");
#endif
conn.AccessToken = new AzureServiceTokenProvider().GetAccessTokenAsync("https://database.windows.net/").ConfigureAwait(false).GetAwaiter().GetResult();
if (dbManager.IsScriptOutputLogged)
conn.InfoMessage += (sender, e) => log.WriteInformation($"{{0}}{Environment.NewLine}", e.Message);
Expand All @@ -47,6 +52,7 @@ public SqlConnectionManager(string connectionString, bool useAzureSqlIntegratedS
}))
{
}
#endif

public override IEnumerable<string> SplitScriptIntoCommands(string scriptContents)
{
Expand Down
25 changes: 21 additions & 4 deletions src/dbup-sqlserver/SqlServerExtensions.cs
@@ -1,4 +1,4 @@
using System;
using System;
using System.Data;
using System.Data.SqlClient;
using DbUp;
Expand All @@ -24,9 +24,9 @@ public static class SqlServerExtensions
/// <returns>
/// A builder for a database upgrader designed for SQL Server databases.
/// </returns>
public static UpgradeEngineBuilder SqlDatabase(this SupportedDatabases supported, string connectionString, bool useAzureSqlIntegratedSecurity = false)
public static UpgradeEngineBuilder SqlDatabase(this SupportedDatabases supported, string connectionString)
{
return SqlDatabase(supported, connectionString, null, useAzureSqlIntegratedSecurity);
return SqlDatabase(supported, connectionString, null);
}

/// <summary>
Expand All @@ -38,10 +38,27 @@ public static UpgradeEngineBuilder SqlDatabase(this SupportedDatabases supported
/// <returns>
/// A builder for a database upgrader designed for SQL Server databases.
/// </returns>
public static UpgradeEngineBuilder SqlDatabase(this SupportedDatabases supported, string connectionString, string schema, bool useAzureSqlIntegratedSecurity = false)
public static UpgradeEngineBuilder SqlDatabase(this SupportedDatabases supported, string connectionString, string schema)
{
return SqlDatabase(new SqlConnectionManager(connectionString), schema);
}

#if SUPPORTS_AZURE_AD
/// <summary>
/// Creates an upgrader for SQL Server databases.
/// </summary>
/// <param name="supported">Fluent helper type.</param>
/// <param name="connectionString">The connection string.</param>
/// <param name="schema">The SQL schema name to use. Defaults to 'dbo' if null.</param>
/// <param name="useAzureSqlIntegratedSecurity">Whether to use Azure SQL Integrated Security</param>
/// <returns>
/// A builder for a database upgrader designed for SQL Server databases.
/// </returns>
public static UpgradeEngineBuilder SqlDatabase(this SupportedDatabases supported, string connectionString, string schema, bool useAzureSqlIntegratedSecurity)
{
return SqlDatabase(new SqlConnectionManager(connectionString, useAzureSqlIntegratedSecurity), schema);
}
#endif

/// <summary>
/// Creates an upgrader for SQL Server databases.
Expand Down
10 changes: 7 additions & 3 deletions src/dbup-tests/ApiTests.cs
Expand Up @@ -4,6 +4,7 @@
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using Assent;
Expand All @@ -18,7 +19,7 @@ public class ApiTests
{
[Theory]
[InlineData(typeof(UpgradeEngine))]
[InlineData(typeof(SqlServerExtensions))]
[InlineData(typeof(SqlServerExtensions), true)]
[InlineData(typeof(SQLiteExtensions))]
[InlineData(typeof(MySqlExtensions))]
[InlineData(typeof(OracleExtensions))]
Expand All @@ -29,14 +30,17 @@ public class ApiTests
[InlineData(typeof(SqlCeExtensions))]
[InlineData(typeof(SqlAnywhereExtensions))]
#endif
public void NoPublicApiChanges(Type type)
public void NoPublicApiChanges(Type type, bool differByFramework = false)
{
var assembly = type.Assembly;
var result = GetPublicApi(assembly);

var framework = RuntimeInformation.FrameworkDescription.Contains(".NET Core") ? "netcore" : "netfx";
var approvalPostfix = differByFramework ? $".{framework}" : "";

var config = new Configuration()
.UsingExtension("cs")
.UsingNamer(m => Path.Combine(Path.GetDirectoryName(m.FilePath), "ApprovalFiles", assembly.GetName().Name));
.UsingNamer(m => Path.Combine(Path.GetDirectoryName(m.FilePath), "ApprovalFiles", assembly.GetName().Name + approvalPostfix));

this.Assent(result, config);
}
Expand Down
71 changes: 71 additions & 0 deletions src/dbup-tests/ApprovalFiles/dbup-sqlserver.netcore.approved.cs
@@ -0,0 +1,71 @@
[assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)]
[assembly: System.Runtime.InteropServices.GuidAttribute("8190b40b-ac5b-414f-8a00-9b6a2c12b010")]

public static class SqlServerExtensions
{
public static DbUp.Builder.UpgradeEngineBuilder JournalToSqlTable(this DbUp.Builder.UpgradeEngineBuilder builder, string schema, string table) { }
public static DbUp.Builder.UpgradeEngineBuilder SqlDatabase(this DbUp.Builder.SupportedDatabases supported, string connectionString) { }
public static DbUp.Builder.UpgradeEngineBuilder SqlDatabase(this DbUp.Builder.SupportedDatabases supported, string connectionString, string schema) { }
public static DbUp.Builder.UpgradeEngineBuilder SqlDatabase(this DbUp.Builder.SupportedDatabases supported, string connectionString, string schema, bool useAzureSqlIntegratedSecurity) { }
public static DbUp.Builder.UpgradeEngineBuilder SqlDatabase(this DbUp.Builder.SupportedDatabases supported, DbUp.Engine.Transactions.IConnectionManager connectionManager, string schema = null) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString, DbUp.SqlServer.AzureDatabaseEdition azureDatabaseEdition) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString, int commandTimeout) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString, string collation) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString, int commandTimeout, DbUp.SqlServer.AzureDatabaseEdition azureDatabaseEdition) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString, int commandTimeout, string collation) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString, DbUp.SqlServer.AzureDatabaseEdition azureDatabaseEdition, string collation) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString, int commandTimeout, DbUp.SqlServer.AzureDatabaseEdition azureDatabaseEdition, string collation) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString, DbUp.Engine.Output.IUpgradeLog logger, int timeout = -1, DbUp.SqlServer.AzureDatabaseEdition azureDatabaseEdition = 0, string collation = null) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForDropDatabase supported, string connectionString) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForDropDatabase supported, string connectionString, int commandTimeout) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForDropDatabase supported, string connectionString, DbUp.Engine.Output.IUpgradeLog logger, int timeout = -1) { }
}
namespace DbUp.SqlServer
{
public enum AzureDatabaseEdition : int
{
None = 0
Basic = 1
Standard = 2
Premium = 3
}
public class SqlConnectionManager : DbUp.Engine.Transactions.DatabaseConnectionManager, DbUp.Engine.Transactions.IConnectionManager
{
public SqlConnectionManager(string connectionString) { }
public SqlConnectionManager(string connectionString, bool useAzureSqlIntegratedSecurity) { }
public override System.Collections.Generic.IEnumerable<string> SplitScriptIntoCommands(string scriptContents) { }
}
public class SqlScriptExecutor : DbUp.Support.ScriptExecutor, DbUp.Engine.IScriptExecutor
{
public SqlScriptExecutor(System.Func<DbUp.Engine.Transactions.IConnectionManager> connectionManagerFactory, System.Func<DbUp.Engine.Output.IUpgradeLog> log, string schema, System.Func<bool> variablesEnabled, System.Collections.Generic.IEnumerable<DbUp.Engine.IScriptPreprocessor> scriptPreprocessors, System.Func<DbUp.Engine.IJournal> journalFactory) { }
protected override void ExecuteCommandsWithinExceptionHandler(int index, DbUp.Engine.SqlScript script, System.Action executeCommand) { }
protected override string GetVerifySchemaSql(string schema) { }
}
public class SqlServerObjectParser : DbUp.Support.SqlObjectParser, DbUp.Engine.ISqlObjectParser
{
public SqlServerObjectParser() { }
public override string QuoteIdentifier(string objectName, DbUp.Support.ObjectNameOptions objectNameOptions) { }
}
public class SqlTableJournal : DbUp.Support.TableJournal, DbUp.Engine.IJournal
{
public SqlTableJournal(System.Func<DbUp.Engine.Transactions.IConnectionManager> connectionManager, System.Func<DbUp.Engine.Output.IUpgradeLog> logger, string schema, string table) { }
protected override string CreateSchemaTableSql(string quotedPrimaryKeyName) { }
protected override string GetInsertJournalEntrySql(string scriptName, string applied) { }
protected override string GetJournalEntriesSql() { }
}
}
namespace DbUp.SqlServer.Helpers
{
public class TemporarySqlDatabase : System.IDisposable
{
public TemporarySqlDatabase(string name) { }
public TemporarySqlDatabase(string name, string instanceName) { }
public TemporarySqlDatabase(System.Data.SqlClient.SqlConnectionStringBuilder connectionStringBuilder) { }
public DbUp.Helpers.AdHocSqlRunner AdHoc { get; }
public string ConnectionString { get; }
public void Create() { }
public void Dispose() { }
public static DbUp.SqlServer.Helpers.TemporarySqlDatabase FromConnectionString(string connectionString) { }
}
}
Expand Up @@ -7,6 +7,7 @@ public static class SqlServerExtensions
public static DbUp.Builder.UpgradeEngineBuilder LogToSqlContext(this DbUp.Builder.UpgradeEngineBuilder builder) { }
public static DbUp.Builder.UpgradeEngineBuilder SqlDatabase(this DbUp.Builder.SupportedDatabases supported, string connectionString) { }
public static DbUp.Builder.UpgradeEngineBuilder SqlDatabase(this DbUp.Builder.SupportedDatabases supported, string connectionString, string schema) { }
public static DbUp.Builder.UpgradeEngineBuilder SqlDatabase(this DbUp.Builder.SupportedDatabases supported, string connectionString, string schema, bool useAzureSqlIntegratedSecurity) { }
public static DbUp.Builder.UpgradeEngineBuilder SqlDatabase(this DbUp.Builder.SupportedDatabases supported, DbUp.Engine.Transactions.IConnectionManager connectionManager, string schema = null) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString) { }
public static void SqlDatabase(this DbUp.SupportedDatabasesForEnsureDatabase supported, string connectionString, DbUp.SqlServer.AzureDatabaseEdition azureDatabaseEdition) { }
Expand All @@ -33,12 +34,13 @@ public enum AzureDatabaseEdition : int
public class SqlConnectionManager : DbUp.Engine.Transactions.DatabaseConnectionManager, DbUp.Engine.Transactions.IConnectionManager
{
public SqlConnectionManager(string connectionString) { }
public SqlConnectionManager(string connectionString, bool useAzureSqlIntegratedSecurity) { }
public override System.Collections.Generic.IEnumerable<string> SplitScriptIntoCommands(string scriptContents) { }
}
public class SqlScriptExecutor : DbUp.Support.ScriptExecutor, DbUp.Engine.IScriptExecutor
{
public SqlScriptExecutor(System.Func<DbUp.Engine.Transactions.IConnectionManager> connectionManagerFactory, System.Func<DbUp.Engine.Output.IUpgradeLog> log, string schema, System.Func<bool> variablesEnabled, System.Collections.Generic.IEnumerable<DbUp.Engine.IScriptPreprocessor> scriptPreprocessors, System.Func<DbUp.Engine.IJournal> journalFactory) { }
protected override void ExecuteCommandsWithinExceptionHandler(int index, DbUp.Engine.SqlScript script, System.Action excuteCommand) { }
protected override void ExecuteCommandsWithinExceptionHandler(int index, DbUp.Engine.SqlScript script, System.Action executeCommand) { }
protected override string GetVerifySchemaSql(string schema) { }
}
public class SqlServerObjectParser : DbUp.Support.SqlObjectParser, DbUp.Engine.ISqlObjectParser
Expand Down
1 change: 1 addition & 0 deletions src/dbup-tests/dbup-tests.csproj
Expand Up @@ -35,6 +35,7 @@
<ProjectReference Include="..\dbup-firebird\dbup-firebird.csproj" />
<ProjectReference Include="..\dbup-sqlanywhere\dbup-sqlanywhere.csproj" />
<PackageReference Include="Microsoft.SqlServer.Compact" Version="4.0.8876.1" />
<PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" />
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
Expand Down

0 comments on commit 1f9455a

Please sign in to comment.