using System; using System.Web.Mvc; using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Migrations.Install; using Umbraco.Web.Security; namespace Umbraco.Web.Install.Controllers { /// /// The MVC Installation controller /// /// /// NOTE: All views must have their full paths as we do not have a custom view engine for the installation views! /// [InstallAuthorize] public class InstallController : Controller { private readonly DatabaseBuilder _databaseBuilder; private readonly UmbracoContext _umbracoContext; private readonly IRuntimeState _runtime; private readonly ILogger _logger; public InstallController(UmbracoContext umbracoContext, DatabaseBuilder databaseBuilder, IRuntimeState runtime, ILogger logger) { _umbracoContext = umbracoContext; _databaseBuilder = databaseBuilder; _runtime = runtime; _logger = logger; } [HttpGet] public ActionResult Index() { if (_runtime.Level == RuntimeLevel.Run) return Redirect(SystemDirectories.Umbraco.EnsureEndsWith('/')); if (_runtime.Level == RuntimeLevel.Upgrade) { // Update ClientDependency version var clientDependencyConfig = new ClientDependencyConfiguration(_logger); var clientDependencyUpdated = clientDependencyConfig.UpdateVersionNumber( UmbracoVersion.SemanticVersion, DateTime.UtcNow, "yyyyMMdd"); // Delete ClientDependency temp directories to make sure we get fresh caches var clientDependencyTempFilesDeleted = clientDependencyConfig.ClearTempFiles(HttpContext); var result = _umbracoContext.Security.ValidateCurrentUser(false); switch (result) { case ValidateRequestAttempt.FailedNoPrivileges: case ValidateRequestAttempt.FailedNoContextId: return Redirect(SystemDirectories.Umbraco + "/AuthorizeUpgrade?redir=" + Server.UrlEncode(Request.RawUrl)); } } // gen the install base url ViewBag.InstallApiBaseUrl = Url.GetUmbracoApiService("GetSetup", "InstallApi", "UmbracoInstall").TrimEnd("GetSetup"); // get the base umbraco folder ViewBag.UmbracoBaseFolder = IOHelper.ResolveUrl(SystemDirectories.Umbraco); var ih = new InstallHelper(_umbracoContext, _databaseBuilder, _logger); ih.InstallStatus(false, ""); // always ensure full path (see NOTE in the class remarks) return View(GlobalSettings.Path.EnsureEndsWith('/') + "install/views/index.cshtml"); } } }