2014-02-26 16:01:31 +01:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
2014-02-26 16:30:25 +01:00
|
|
|
|
using System.Configuration;
|
|
|
|
|
|
using System.IO;
|
2014-02-26 16:01:31 +01:00
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Net;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using Umbraco.Core;
|
2014-02-26 16:30:25 +01:00
|
|
|
|
using Umbraco.Core.Configuration;
|
2014-02-26 16:01:31 +01:00
|
|
|
|
using Umbraco.Core.Persistence;
|
|
|
|
|
|
using Umbraco.Web.Install.Models;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Umbraco.Web.Install.InstallSteps
|
|
|
|
|
|
{
|
2014-03-04 19:20:36 +11:00
|
|
|
|
[InstallSetupStep(InstallationType.NewInstall,
|
2014-03-05 11:34:42 +11:00
|
|
|
|
"DatabaseConfigure", "database", 10, "Configuring your database connection",
|
|
|
|
|
|
PerformsAppRestart = true)]
|
2014-02-26 16:01:31 +01:00
|
|
|
|
internal class DatabaseConfigureStep : InstallSetupStep<DatabaseModel>
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly ApplicationContext _applicationContext;
|
|
|
|
|
|
|
|
|
|
|
|
public DatabaseConfigureStep(ApplicationContext applicationContext)
|
|
|
|
|
|
{
|
|
|
|
|
|
_applicationContext = applicationContext;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-03-04 11:16:42 +11:00
|
|
|
|
public override InstallSetupResult Execute(DatabaseModel database)
|
2014-02-26 16:01:31 +01:00
|
|
|
|
{
|
2014-03-05 12:08:35 +11:00
|
|
|
|
//if the database model is null then we will apply the defaults
|
|
|
|
|
|
if (database == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
database = new DatabaseModel();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-02-26 16:01:31 +01:00
|
|
|
|
if (CheckConnection(database) == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new InvalidOperationException("Could not connect to the database");
|
|
|
|
|
|
}
|
|
|
|
|
|
ConfigureConnection(database);
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private bool CheckConnection(DatabaseModel database)
|
|
|
|
|
|
{
|
|
|
|
|
|
string connectionString;
|
|
|
|
|
|
var dbContext = _applicationContext.DatabaseContext;
|
|
|
|
|
|
if (database.ConnectionString.IsNullOrWhiteSpace() == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
connectionString = database.ConnectionString;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (database.DatabaseType == DatabaseType.SqlCe)
|
|
|
|
|
|
{
|
|
|
|
|
|
//we do not test this connection
|
|
|
|
|
|
return true;
|
|
|
|
|
|
//connectionString = dbContext.GetEmbeddedDatabaseConnectionString();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (database.IntegratedAuth)
|
|
|
|
|
|
{
|
|
|
|
|
|
connectionString = dbContext.GetIntegratedSecurityDatabaseConnectionString(
|
|
|
|
|
|
database.Server, database.DatabaseName);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
string providerName;
|
|
|
|
|
|
connectionString = dbContext.GetDatabaseConnectionString(
|
|
|
|
|
|
database.Server, database.DatabaseName, database.Login, database.Password,
|
|
|
|
|
|
database.DatabaseType.ToString(),
|
|
|
|
|
|
out providerName);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return SqlExtensions.IsConnectionAvailable(connectionString);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void ConfigureConnection(DatabaseModel database)
|
|
|
|
|
|
{
|
|
|
|
|
|
var dbContext = _applicationContext.DatabaseContext;
|
|
|
|
|
|
if (database.ConnectionString.IsNullOrWhiteSpace() == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
dbContext.ConfigureDatabaseConnection(database.ConnectionString);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (database.DatabaseType == DatabaseType.SqlCe)
|
|
|
|
|
|
{
|
|
|
|
|
|
dbContext.ConfigureEmbeddedDatabaseConnection();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (database.IntegratedAuth)
|
|
|
|
|
|
{
|
|
|
|
|
|
dbContext.ConfigureIntegratedSecurityDatabaseConnection(
|
|
|
|
|
|
database.Server, database.DatabaseName);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
dbContext.ConfigureDatabaseConnection(
|
|
|
|
|
|
database.Server, database.DatabaseName, database.Login, database.Password,
|
|
|
|
|
|
database.DatabaseType.ToString());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override string View
|
|
|
|
|
|
{
|
2014-02-26 16:30:25 +01:00
|
|
|
|
get { return ShouldDisplayView() ? base.View : ""; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2014-03-05 14:30:17 +11:00
|
|
|
|
public override bool RequiresExecution(DatabaseModel model)
|
2014-03-04 11:16:42 +11:00
|
|
|
|
{
|
2014-03-04 19:20:36 +11:00
|
|
|
|
return ShouldDisplayView();
|
2014-03-04 11:16:42 +11:00
|
|
|
|
}
|
|
|
|
|
|
|
2014-02-26 16:30:25 +01:00
|
|
|
|
private bool ShouldDisplayView()
|
|
|
|
|
|
{
|
|
|
|
|
|
//If the connection string is already present in web.config we don't need to show the settings page and we jump to installing/upgrading.
|
|
|
|
|
|
var databaseSettings = ConfigurationManager.ConnectionStrings[GlobalSettings.UmbracoConnectionName];
|
|
|
|
|
|
|
2014-03-04 19:20:36 +11:00
|
|
|
|
if (_applicationContext.DatabaseContext.IsConnectionStringConfigured(databaseSettings))
|
2014-02-26 16:30:25 +01:00
|
|
|
|
{
|
2014-03-04 19:20:36 +11:00
|
|
|
|
try
|
2014-02-26 16:30:25 +01:00
|
|
|
|
{
|
2014-03-04 19:20:36 +11:00
|
|
|
|
//Since a connection string was present we verify the db can connect and query
|
|
|
|
|
|
var result = _applicationContext.DatabaseContext.ValidateDatabaseSchema();
|
|
|
|
|
|
result.DetermineInstalledVersion();
|
2014-02-26 16:30:25 +01:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2014-03-04 19:20:36 +11:00
|
|
|
|
catch (Exception)
|
2014-02-26 16:30:25 +01:00
|
|
|
|
{
|
2014-03-04 19:20:36 +11:00
|
|
|
|
//something went wrong, could not connect so probably need to reconfigure
|
|
|
|
|
|
return true;
|
2014-02-26 16:30:25 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2014-03-04 19:20:36 +11:00
|
|
|
|
|
|
|
|
|
|
return true;
|
2014-02-26 16:01:31 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|