Files
Umbraco-CMS/src/Umbraco.Web.Common/Install/InstallController.cs

128 lines
4.8 KiB
C#
Raw Normal View History

using System.IO;
using Microsoft.AspNetCore.Http.Extensions;
2020-04-20 12:20:47 +02:00
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Hosting;
using Umbraco.Core.Security;
using Umbraco.Core.WebAssets;
using Umbraco.Extensions;
2020-04-27 10:09:10 +02:00
using Umbraco.Web.Common.Filters;
2020-04-20 12:20:47 +02:00
using Umbraco.Web.Install;
using Umbraco.Web.Security;
using Umbraco.Core.Configuration.Models;
using Microsoft.Extensions.Options;
2020-04-20 12:20:47 +02:00
namespace Umbraco.Web.Common.Install
{
/// <summary>
/// The Installation controller
/// </summary>
[InstallAuthorize]
[Area(Umbraco.Core.Constants.Web.Mvc.InstallArea)]
public class InstallController : Controller
{
private readonly IBackOfficeSecurityAccessor _backofficeSecurityAccessor;
private readonly InstallHelper _installHelper;
private readonly IRuntimeState _runtime;
private readonly GlobalSettings _globalSettings;
private readonly IHostingEnvironment _hostingEnvironment;
2020-05-05 14:28:01 +02:00
private readonly IUmbracoVersion _umbracoVersion;
private readonly ILogger<InstallController> _logger;
private readonly LinkGenerator _linkGenerator;
private readonly IRuntimeMinifier _runtimeMinifier;
public InstallController(
IBackOfficeSecurityAccessor backofficeSecurityAccessor,
InstallHelper installHelper,
IRuntimeState runtime,
IOptions<GlobalSettings> globalSettings,
IRuntimeMinifier runtimeMinifier,
2020-05-05 14:28:01 +02:00
IHostingEnvironment hostingEnvironment,
IUmbracoVersion umbracoVersion,
ILogger<InstallController> logger,
LinkGenerator linkGenerator)
2017-07-20 11:21:28 +02:00
{
_backofficeSecurityAccessor = backofficeSecurityAccessor;
_installHelper = installHelper;
_runtime = runtime;
_globalSettings = globalSettings.Value;
_runtimeMinifier = runtimeMinifier;
_hostingEnvironment = hostingEnvironment;
2020-05-05 14:28:01 +02:00
_umbracoVersion = umbracoVersion;
_logger = logger;
_linkGenerator = linkGenerator;
2017-07-20 11:21:28 +02:00
}
[HttpGet]
2020-04-27 10:09:10 +02:00
[StatusCodeResult(System.Net.HttpStatusCode.ServiceUnavailable)]
[TypeFilter(typeof(StatusCodeResultAttribute), Arguments = new object []{System.Net.HttpStatusCode.ServiceUnavailable})]
public async Task<ActionResult> Index()
{
var umbracoPath = Url.GetBackOfficeUrl();
if (_runtime.Level == RuntimeLevel.Run)
return Redirect(umbracoPath);
2014-02-27 10:16:30 +01:00
if (_runtime.Level == RuntimeLevel.Upgrade)
{
// Update ClientDependency version and delete its temp directories to make sure we get fresh caches
_runtimeMinifier.Reset();
var result = _backofficeSecurityAccessor.BackOfficeSecurity.ValidateCurrentUser(false);
switch (result)
{
case ValidateRequestAttempt.FailedNoPrivileges:
case ValidateRequestAttempt.FailedNoContextId:
2020-04-20 12:20:47 +02:00
return Redirect(_globalSettings.UmbracoPath + "/AuthorizeUpgrade?redir=" + Request.GetEncodedUrl());
}
}
Merge remote-tracking branch 'origin/netcore/dev' into netcore/netcore # Conflicts: # src/Umbraco.Configuration/Legacy/GlobalSettings.cs # src/Umbraco.Core/Configuration/IGlobalSettings.cs # src/Umbraco.Core/Models/ContentBaseExtensions.cs # src/Umbraco.Core/Routing/ContentFinderByRedirectUrl.cs # src/Umbraco.Core/Routing/DefaultUrlProvider.cs # src/Umbraco.Core/Runtime/MainDom.cs # src/Umbraco.Core/Services/IRuntimeState.cs # src/Umbraco.Infrastructure/Compose/NotificationsComponent.cs # src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/ImageCropperValueConverter.cs # src/Umbraco.Infrastructure/RuntimeState.cs # src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs # src/Umbraco.Tests/Runtimes/StandaloneTests.cs # src/Umbraco.Tests/TestHelpers/TestObjects.cs # src/Umbraco.Web.BackOffice/Controllers/LogViewerController.cs # src/Umbraco.Web.BackOffice/Controllers/UsersController.cs # src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs # src/Umbraco.Web.BackOffice/PropertyEditors/RteEmbedController.cs # src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs # src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/Default.cshtml # src/Umbraco.Web.UI.NetCore/umbraco/config/lang/da.xml # src/Umbraco.Web.UI.NetCore/umbraco/config/lang/en.xml # src/Umbraco.Web.UI.NetCore/umbraco/config/lang/en_us.xml # src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml # src/Umbraco.Web.UI/Views/Partials/Grid/Editors/Rte.cshtml # src/Umbraco.Web/Controllers/UmbLoginController.cs # src/Umbraco.Web/Install/Controllers/InstallController.cs # src/Umbraco.Web/PublishedElementExtensions.cs # src/Umbraco.Web/Runtime/WebInitialComposer.cs # src/Umbraco.Web/UmbracoHelper.cs # src/Umbraco.Web/UmbracoInjectedModule.cs # src/Umbraco.Web/UrlHelperExtensions.cs # src/Umbraco.Web/UrlHelperRenderExtensions.cs # src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs
2020-12-01 11:34:13 +01:00
// gen the install base URL
2020-08-21 13:53:27 +02:00
ViewData.SetInstallApiBaseUrl(_linkGenerator.GetInstallerApiUrl());
// get the base umbraco folder
var baseFolder = _hostingEnvironment.ToAbsolute(_globalSettings.UmbracoPath);
ViewData.SetUmbracoBaseFolder(baseFolder);
2020-05-05 14:28:01 +02:00
ViewData.SetUmbracoVersion(_umbracoVersion.SemanticVersion);
await _installHelper.SetInstallStatusAsync(false, "");
return View(Path.Combine(baseFolder , Umbraco.Core.Constants.Web.Mvc.InstallArea, nameof(Index) + ".cshtml"));
}
/// <summary>
/// Used to perform the redirect to the installer when the runtime level is <see cref="RuntimeLevel.Install"/> or <see cref="RuntimeLevel.Upgrade"/>
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult Redirect()
{
var uri = HttpContext.Request.GetEncodedUrl();
// redirect to install
ReportRuntime(_logger, _runtime.Level, "Umbraco must install or upgrade.");
var installUrl = $"{_linkGenerator.GetInstallerUrl()}?redir=true&url={uri}";
return Redirect(installUrl);
}
private static bool _reported;
private static RuntimeLevel _reportedLevel;
private static void ReportRuntime(ILogger<InstallController> logger, RuntimeLevel level, string message)
{
if (_reported && _reportedLevel == level) return;
_reported = true;
_reportedLevel = level;
logger.LogWarning(message);
}
}
}