diff --git a/src/Umbraco.Configuration/ConfigsFactory.cs b/src/Umbraco.Configuration/ConfigsFactory.cs index c09dc7b9f6..3979720f9b 100644 --- a/src/Umbraco.Configuration/ConfigsFactory.cs +++ b/src/Umbraco.Configuration/ConfigsFactory.cs @@ -1,4 +1,5 @@ using System.Configuration; +using Umbraco.Configuration; using Umbraco.Core.Configuration.HealthChecks; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.IO; @@ -10,6 +11,7 @@ namespace Umbraco.Core.Configuration public IHostingSettings HostingSettings { get; } = new HostingSettings(); public ICoreDebug CoreDebug { get; } = new CoreDebug(); + public IMachineKeyConfig MachineKeyConfig { get; } = new MachineKeyConfig(); public IUmbracoSettingsSection UmbracoSettings { get; } @@ -27,6 +29,7 @@ namespace Umbraco.Core.Configuration configs.AddPasswordConfigurations(); configs.Add(() => CoreDebug); + configs.Add(() => MachineKeyConfig); configs.Add(() => new ConnectionStrings(ioHelper)); configs.AddCoreConfigs(ioHelper); return configs; diff --git a/src/Umbraco.Configuration/MachineKeyConfig.cs b/src/Umbraco.Configuration/MachineKeyConfig.cs new file mode 100644 index 0000000000..4e3401e015 --- /dev/null +++ b/src/Umbraco.Configuration/MachineKeyConfig.cs @@ -0,0 +1,20 @@ +using System.Configuration; +using Umbraco.Core.Configuration; + +namespace Umbraco.Configuration +{ + public class MachineKeyConfig : IMachineKeyConfig + { + //TODO all the machineKey stuff should be replaced: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/compatibility/replacing-machinekey?view=aspnetcore-3.1 + + public bool HasMachineKey + { + get + { + var machineKeySection = + ConfigurationManager.GetSection("system.web/machineKey") as ConfigurationSection; + return !(machineKeySection?.ElementInformation?.Source is null); + } + } + } +} diff --git a/src/Umbraco.Core/Configuration/IMachineKeyConfig.cs b/src/Umbraco.Core/Configuration/IMachineKeyConfig.cs new file mode 100644 index 0000000000..35969e668a --- /dev/null +++ b/src/Umbraco.Core/Configuration/IMachineKeyConfig.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Core.Configuration +{ + public interface IMachineKeyConfig + { + bool HasMachineKey { get;} + } +} diff --git a/src/Umbraco.Core/Net/IUmbracoApplicationLifetime.cs b/src/Umbraco.Core/Net/IUmbracoApplicationLifetime.cs new file mode 100644 index 0000000000..4e9f655414 --- /dev/null +++ b/src/Umbraco.Core/Net/IUmbracoApplicationLifetime.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Net +{ + public interface IUmbracoApplicationLifetime + { + void Restart(); + } +} diff --git a/src/Umbraco.Core/Net/IUserAgentProvider.cs b/src/Umbraco.Core/Net/IUserAgentProvider.cs new file mode 100644 index 0000000000..14246ea99e --- /dev/null +++ b/src/Umbraco.Core/Net/IUserAgentProvider.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Net +{ + public interface IUserAgentProvider + { + string GetUserAgent(); + } +} diff --git a/src/Umbraco.Core/Packaging/PackageDefinition.cs b/src/Umbraco.Core/Packaging/PackageDefinition.cs index 11bf26c579..29a1919a2b 100644 --- a/src/Umbraco.Core/Packaging/PackageDefinition.cs +++ b/src/Umbraco.Core/Packaging/PackageDefinition.cs @@ -19,7 +19,7 @@ namespace Umbraco.Core.Models.Packaging /// /// This is used only for conversions and will not 'get' a PackageDefinition from the repository with a valid ID /// - internal static PackageDefinition FromCompiledPackage(CompiledPackage compiled) + public static PackageDefinition FromCompiledPackage(CompiledPackage compiled) { return new PackageDefinition { diff --git a/src/Umbraco.Web/Install/InstallHelper.cs b/src/Umbraco.Infrastructure/Intall/InstallHelper.cs similarity index 82% rename from src/Umbraco.Web/Install/InstallHelper.cs rename to src/Umbraco.Infrastructure/Intall/InstallHelper.cs index f7344d0b0b..704459429e 100644 --- a/src/Umbraco.Web/Install/InstallHelper.cs +++ b/src/Umbraco.Infrastructure/Intall/InstallHelper.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; -using System.Web; using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.Cookie; @@ -12,8 +11,9 @@ using Umbraco.Core.Migrations.Install; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Core.Serialization; using Umbraco.Core.Services; -using Umbraco.Web.Composing; +using Umbraco.Net; using Umbraco.Web.Install.Models; namespace Umbraco.Web.Install @@ -22,25 +22,28 @@ namespace Umbraco.Web.Install { private static HttpClient _httpClient; private readonly DatabaseBuilder _databaseBuilder; - private readonly IHttpContextAccessor _httpContextAccessor; private readonly ILogger _logger; private readonly IGlobalSettings _globalSettings; private readonly IUmbracoVersion _umbracoVersion; private readonly IConnectionStrings _connectionStrings; private readonly IInstallationService _installationService; private readonly ICookieManager _cookieManager; + private readonly IUserAgentProvider _userAgentProvider; + private readonly Lazy _sqlContext; + private readonly IJsonSerializer _jsonSerializer; private InstallationType? _installationType; - public InstallHelper(IHttpContextAccessor httpContextAccessor, - DatabaseBuilder databaseBuilder, + public InstallHelper(DatabaseBuilder databaseBuilder, ILogger logger, IGlobalSettings globalSettings, IUmbracoVersion umbracoVersion, IConnectionStrings connectionStrings, IInstallationService installationService, - ICookieManager cookieManager) + ICookieManager cookieManager, + IUserAgentProvider userAgentProvider, + Lazy sqlContext, + IJsonSerializer jsonSerializer) { - _httpContextAccessor = httpContextAccessor; _logger = logger; _globalSettings = globalSettings; _umbracoVersion = umbracoVersion; @@ -48,6 +51,9 @@ namespace Umbraco.Web.Install _connectionStrings = connectionStrings ?? throw new ArgumentNullException(nameof(connectionStrings)); _installationService = installationService; _cookieManager = cookieManager; + _userAgentProvider = userAgentProvider; + _sqlContext = sqlContext; + _jsonSerializer = jsonSerializer; } public InstallationType GetInstallationType() @@ -57,11 +63,9 @@ namespace Umbraco.Web.Install public async Task InstallStatus(bool isCompleted, string errorMsg) { - - var httpContext = _httpContextAccessor.GetRequiredHttpContext(); try { - var userAgent = httpContext.Request.UserAgent; + var userAgent = _userAgentProvider.GetUserAgent(); // Check for current install Id var installId = Guid.NewGuid(); @@ -88,7 +92,7 @@ namespace Umbraco.Web.Install { // we don't have DatabaseProvider anymore... doing it differently //dbProvider = ApplicationContext.Current.DatabaseContext.DatabaseProvider.ToString(); - dbProvider = GetDbProviderString(Current.SqlContext); + dbProvider = GetDbProviderString(_sqlContext.Value); } var installLog = new InstallLog(installId: installId, isUpgrade: IsBrandNewInstall == false, @@ -107,19 +111,7 @@ namespace Umbraco.Web.Install internal static string GetDbProviderString(ISqlContext sqlContext) { - var dbProvider = string.Empty; - - // we don't have DatabaseProvider anymore... - //dbProvider = ApplicationContext.Current.DatabaseContext.DatabaseProvider.ToString(); - // - // doing it differently - var syntax = sqlContext.SqlSyntax; - if (syntax is SqlCeSyntaxProvider) - dbProvider = "SqlServerCE"; - else if (syntax is SqlServerSyntaxProvider) - dbProvider = (syntax as SqlServerSyntaxProvider).ServerVersion.IsAzure ? "SqlAzure" : "SqlServer"; - - return dbProvider; + return sqlContext.SqlSyntax.DbProvider; } /// @@ -162,7 +154,10 @@ namespace Umbraco.Web.Install using (var request = new HttpRequestMessage(HttpMethod.Get, requestUri)) { var response = _httpClient.SendAsync(request).Result; - packages = response.Content.ReadAsAsync>().Result.ToList(); + + + var json = response.Content.ReadAsStringAsync().Result; + packages = _jsonSerializer.Deserialize>(json).ToList(); } } catch (AggregateException ex) diff --git a/src/Umbraco.Web/Install/InstallSteps/ConfigureMachineKey.cs b/src/Umbraco.Infrastructure/Intall/InstallSteps/ConfigureMachineKey.cs similarity index 79% rename from src/Umbraco.Web/Install/InstallSteps/ConfigureMachineKey.cs rename to src/Umbraco.Infrastructure/Intall/InstallSteps/ConfigureMachineKey.cs index 164c142e0c..b64f66edc6 100644 --- a/src/Umbraco.Web/Install/InstallSteps/ConfigureMachineKey.cs +++ b/src/Umbraco.Infrastructure/Intall/InstallSteps/ConfigureMachineKey.cs @@ -1,7 +1,7 @@ using System.Linq; using System.Threading.Tasks; -using System.Web.Configuration; using System.Xml.Linq; +using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Security; using Umbraco.Web.Install.Models; @@ -12,13 +12,15 @@ namespace Umbraco.Web.Install.InstallSteps "ConfigureMachineKey", "machinekey", 2, "Updating some security settings...", PerformsAppRestart = true)] - internal class ConfigureMachineKey : InstallSetupStep + public class ConfigureMachineKey : InstallSetupStep { private readonly IIOHelper _ioHelper; + private readonly IMachineKeyConfig _machineKeyConfig; - public ConfigureMachineKey(IIOHelper ioHelper) + public ConfigureMachineKey(IIOHelper ioHelper, IMachineKeyConfig machineKeyConfig) { _ioHelper = ioHelper; + _machineKeyConfig = machineKeyConfig; } public override string View => HasMachineKey() == false ? base.View : ""; @@ -27,10 +29,11 @@ namespace Umbraco.Web.Install.InstallSteps /// Don't display the view or execute if a machine key already exists /// /// - private static bool HasMachineKey() + private bool HasMachineKey() { - var section = (MachineKeySection) WebConfigurationManager.GetSection("system.web/machineKey"); - return section.ElementInformation.Source != null; + return _machineKeyConfig.HasMachineKey; + // var section = (MachineKeySection) WebConfigurationManager.GetSection("system.web/machineKey"); + // return section.ElementInformation.Source != null; } /// diff --git a/src/Umbraco.Web/Install/InstallSteps/SetUmbracoVersionStep.cs b/src/Umbraco.Infrastructure/Intall/InstallSteps/SetUmbracoVersionStep.cs similarity index 73% rename from src/Umbraco.Web/Install/InstallSteps/SetUmbracoVersionStep.cs rename to src/Umbraco.Infrastructure/Intall/InstallSteps/SetUmbracoVersionStep.cs index dcf115082f..949435449f 100644 --- a/src/Umbraco.Web/Install/InstallSteps/SetUmbracoVersionStep.cs +++ b/src/Umbraco.Infrastructure/Intall/InstallSteps/SetUmbracoVersionStep.cs @@ -1,44 +1,31 @@ using System.Threading.Tasks; -using System.Web; using Umbraco.Core; using Umbraco.Core.Configuration; -using Umbraco.Core.IO; -using Umbraco.Core.Logging; -using Umbraco.Core.Services; -using Umbraco.Web.Cache; -using Umbraco.Web.Composing; using Umbraco.Web.Install.Models; -using Umbraco.Web.Security; - namespace Umbraco.Web.Install.InstallSteps { [InstallSetupStep(InstallationType.NewInstall | InstallationType.Upgrade, "UmbracoVersion", 50, "Installation is complete!, get ready to be redirected to your new CMS.", PerformsAppRestart = true)] - internal class SetUmbracoVersionStep : InstallSetupStep + public class SetUmbracoVersionStep : InstallSetupStep { - private readonly IHttpContextAccessor _httpContextAccessor; + private readonly IUmbracoContextAccessor _umbracoContextAccessor; private readonly InstallHelper _installHelper; private readonly IGlobalSettings _globalSettings; - private readonly IUserService _userService; private readonly IUmbracoVersion _umbracoVersion; - private readonly IIOHelper _ioHelper; - public SetUmbracoVersionStep(IHttpContextAccessor httpContextAccessor, InstallHelper installHelper, IGlobalSettings globalSettings, IUserService userService, IUmbracoVersion umbracoVersion, IIOHelper ioHelper) + public SetUmbracoVersionStep(IUmbracoContextAccessor umbracoContextAccessor, InstallHelper installHelper, IGlobalSettings globalSettings, IUmbracoVersion umbracoVersion) { - _httpContextAccessor = httpContextAccessor; + _umbracoContextAccessor = umbracoContextAccessor; _installHelper = installHelper; _globalSettings = globalSettings; - _userService = userService; _umbracoVersion = umbracoVersion; - _ioHelper = ioHelper; } public override Task ExecuteAsync(object model) { - var security = new WebSecurity(_httpContextAccessor, _userService, _globalSettings, _ioHelper); - + var security = _umbracoContextAccessor.UmbracoContext.Security; if (security.IsAuthenticated() == false && _globalSettings.ConfigurationStatus.IsNullOrWhiteSpace()) { security.PerformLogin(-1); diff --git a/src/Umbraco.Web/Install/InstallSteps/StarterKitDownloadStep.cs b/src/Umbraco.Infrastructure/Intall/InstallSteps/StarterKitDownloadStep.cs similarity index 93% rename from src/Umbraco.Web/Install/InstallSteps/StarterKitDownloadStep.cs rename to src/Umbraco.Infrastructure/Intall/InstallSteps/StarterKitDownloadStep.cs index 624f5897c7..d8986cacb7 100644 --- a/src/Umbraco.Web/Install/InstallSteps/StarterKitDownloadStep.cs +++ b/src/Umbraco.Infrastructure/Intall/InstallSteps/StarterKitDownloadStep.cs @@ -1,13 +1,11 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; using System.Threading.Tasks; -using System.Web; using Umbraco.Core.Services; using Umbraco.Core.Configuration; using Umbraco.Core.Models.Packaging; -using Umbraco.Web.Composing; +using Umbraco.Net; using Umbraco.Web.Install.Models; namespace Umbraco.Web.Install.InstallSteps @@ -20,14 +18,16 @@ namespace Umbraco.Web.Install.InstallSteps private readonly InstallHelper _installHelper; private readonly IUmbracoContextAccessor _umbracoContextAccessor; private readonly IUmbracoVersion _umbracoVersion; + private readonly IUmbracoApplicationLifetime _umbracoApplicationLifetime; private readonly IContentService _contentService; private readonly IPackagingService _packageService; - public StarterKitDownloadStep(IContentService contentService, IPackagingService packageService, InstallHelper installHelper, IUmbracoContextAccessor umbracoContextAccessor, IUmbracoVersion umbracoVersion) + public StarterKitDownloadStep(IContentService contentService, IPackagingService packageService, InstallHelper installHelper, IUmbracoContextAccessor umbracoContextAccessor, IUmbracoVersion umbracoVersion, IUmbracoApplicationLifetime umbracoApplicationLifetime) { _installHelper = installHelper; _umbracoContextAccessor = umbracoContextAccessor; _umbracoVersion = umbracoVersion; + _umbracoApplicationLifetime = umbracoApplicationLifetime; _contentService = contentService; _packageService = packageService; } @@ -54,7 +54,7 @@ namespace Umbraco.Web.Install.InstallSteps var (packageFile, packageId) = await DownloadPackageFilesAsync(starterKitId.Value); - UmbracoApplication.Restart(); + _umbracoApplicationLifetime.Restart(); return new InstallSetupResult(new Dictionary { diff --git a/src/Umbraco.Web/Install/InstallSteps/StarterKitInstallStep.cs b/src/Umbraco.Infrastructure/Intall/InstallSteps/StarterKitInstallStep.cs similarity index 83% rename from src/Umbraco.Web/Install/InstallSteps/StarterKitInstallStep.cs rename to src/Umbraco.Infrastructure/Intall/InstallSteps/StarterKitInstallStep.cs index c9688fed4c..cc269408f4 100644 --- a/src/Umbraco.Web/Install/InstallSteps/StarterKitInstallStep.cs +++ b/src/Umbraco.Infrastructure/Intall/InstallSteps/StarterKitInstallStep.cs @@ -2,9 +2,8 @@ using System.IO; using System.Linq; using System.Threading.Tasks; -using System.Web; using Umbraco.Core.Services; -using Umbraco.Web.Composing; +using Umbraco.Net; using Umbraco.Web.Install.Models; namespace Umbraco.Web.Install.InstallSteps @@ -14,13 +13,13 @@ namespace Umbraco.Web.Install.InstallSteps PerformsAppRestart = true)] internal class StarterKitInstallStep : InstallSetupStep { - private readonly IHttpContextAccessor _httContextAccessor; + private readonly IUmbracoApplicationLifetime _umbracoApplicationLifetime; private readonly IUmbracoContextAccessor _umbracoContextAccessor; private readonly IPackagingService _packagingService; - public StarterKitInstallStep(IHttpContextAccessor httContextAccessor, IUmbracoContextAccessor umbracoContextAccessor, IPackagingService packagingService) + public StarterKitInstallStep(IUmbracoApplicationLifetime umbracoApplicationLifetime, IUmbracoContextAccessor umbracoContextAccessor, IPackagingService packagingService) { - _httContextAccessor = httContextAccessor; + _umbracoApplicationLifetime = umbracoApplicationLifetime; _umbracoContextAccessor = umbracoContextAccessor; _packagingService = packagingService; } @@ -34,7 +33,9 @@ namespace Umbraco.Web.Install.InstallSteps InstallBusinessLogic(packageId); - UmbracoApplication.Restart(_httContextAccessor.GetRequiredHttpContext()); + _umbracoApplicationLifetime.Restart(); + + return Task.FromResult(null); } diff --git a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/ISqlSyntaxProvider.cs b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/ISqlSyntaxProvider.cs index 7ae001bf24..58f9a4b68a 100644 --- a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/ISqlSyntaxProvider.cs +++ b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/ISqlSyntaxProvider.cs @@ -77,12 +77,13 @@ namespace Umbraco.Core.Persistence.SqlSyntax string ConvertIntegerToOrderableString { get; } string ConvertDateToOrderableString { get; } string ConvertDecimalToOrderableString { get; } - + /// /// Returns the default isolation level for the database /// IsolationLevel DefaultIsolationLevel { get; } + string DbProvider { get; } IEnumerable GetTablesInSchema(IDatabase db); IEnumerable GetColumnsInSchema(IDatabase db); diff --git a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs index a478c88412..8d3a41e5bf 100644 --- a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs +++ b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs @@ -175,6 +175,8 @@ namespace Umbraco.Core.Persistence.SqlSyntax return items.Select(x => new Tuple(x.TableName, x.ColumnName, x.Name, x.Definition)); } + public override string DbProvider => ServerVersion.IsAzure ? "SqlAzure" : "SqlServer"; + public override IEnumerable GetTablesInSchema(IDatabase db) { var items = db.Fetch("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = (SELECT SCHEMA_NAME())"); diff --git a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs index b2e03df96e..3df97c0b4f 100644 --- a/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs +++ b/src/Umbraco.Infrastructure/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs @@ -202,6 +202,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax } public abstract IsolationLevel DefaultIsolationLevel { get; } + public abstract string DbProvider { get; } public virtual IEnumerable GetTablesInSchema(IDatabase db) { diff --git a/src/Umbraco.Persistance.SqlCe/SqlCeSyntaxProvider.cs b/src/Umbraco.Persistance.SqlCe/SqlCeSyntaxProvider.cs index 2ed0fb878c..7abcc60c86 100644 --- a/src/Umbraco.Persistance.SqlCe/SqlCeSyntaxProvider.cs +++ b/src/Umbraco.Persistance.SqlCe/SqlCeSyntaxProvider.cs @@ -55,6 +55,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax } public override System.Data.IsolationLevel DefaultIsolationLevel => System.Data.IsolationLevel.RepeatableRead; + public override string DbProvider => "SqlServerCE"; public override string FormatColumnRename(string tableName, string oldName, string newName) { diff --git a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs index 7552d4c0e7..ee9808c005 100644 --- a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs +++ b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs @@ -156,14 +156,12 @@ namespace Umbraco.Tests.Routing var handler = new RenderRouteHandler(umbracoContext, new TestControllerFactory(umbracoContextAccessor, Mock.Of(), context => { - var membershipHelper = new MembershipHelper( - httpContextAccessor, Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), AppCaches.Disabled, Mock.Of(), ShortStringHelper, Mock.Of()); - return new CustomDocumentController(Factory.GetInstance(), + return new CustomDocumentController(Factory.GetInstance(), umbracoContextAccessor, Factory.GetInstance(), Factory.GetInstance(), Factory.GetInstance(), - new UmbracoHelper(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), membershipHelper)); + new UmbracoHelper(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); }), ShortStringHelper); handler.GetHandlerForRoute(httpContext.Request.RequestContext, frequest); diff --git a/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs b/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs index 2b0186f634..611ba086f5 100644 --- a/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs +++ b/src/Umbraco.Tests/TestHelpers/ControllerTesting/TestControllerActivatorBase.cs @@ -154,14 +154,11 @@ namespace Umbraco.Tests.TestHelpers.ControllerTesting urlHelper.Setup(provider => provider.GetUrl(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Returns(UrlInfo.Url("/hello/world/1234")); - var membershipHelper = new MembershipHelper(httpContextAccessor, Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), AppCaches.Disabled, Mock.Of(), new MockShortStringHelper(), Mock.Of()); - var umbHelper = new UmbracoHelper(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), - Mock.Of(), - membershipHelper); + Mock.Of()); return CreateController(controllerType, request, umbracoContextAccessor, umbHelper); } diff --git a/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs b/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs index bd7c2f2ab1..c604e1a5d6 100644 --- a/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs +++ b/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs @@ -69,8 +69,7 @@ namespace Umbraco.Tests.Testing.TestingTests Mock.Of(), Mock.Of(), Mock.Of(), - Mock.Of(), - new MembershipHelper(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), AppCaches.Disabled, Mock.Of(), ShortStringHelper, Mock.Of())); + Mock.Of()); Assert.Pass(); } @@ -107,7 +106,8 @@ namespace Umbraco.Tests.Testing.TestingTests var memberTypeService = Mock.Of(); var membershipProvider = new MembersMembershipProvider(memberService, memberTypeService, Mock.Of(), TestHelper.GetHostingEnvironment(), TestHelper.GetIpResolver()); var membershipHelper = new MembershipHelper(Mock.Of(), Mock.Of(), membershipProvider, Mock.Of(), memberService, memberTypeService, Mock.Of(), AppCaches.Disabled, logger, ShortStringHelper, Mock.Of()); - var umbracoHelper = new UmbracoHelper(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), membershipHelper); + var umbracoHelper = new UmbracoHelper(Mock.Of(), Mock.Of(), Mock.Of(), + Mock.Of(), Mock.Of()); var umbracoMapper = new UmbracoMapper(new MapDefinitionCollection(new[] { Mock.Of() })); var umbracoApiController = new FakeUmbracoApiController(Mock.Of(), Mock.Of(), Mock.Of(), ServiceContext.CreatePartial(), AppCaches.NoCache, logger, Mock.Of(), umbracoHelper, umbracoMapper, Mock.Of()); diff --git a/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs b/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs index 2a5ca083ba..fd222086aa 100644 --- a/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs +++ b/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs @@ -123,8 +123,7 @@ namespace Umbraco.Tests.Web.Mvc Mock.Of(), Mock.Of(), Mock.Of(), - Mock.Of(query => query.Content(2) == content.Object), - new MembershipHelper(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), AppCaches.Disabled, Mock.Of(), ShortStringHelper, Mock.Of())); + Mock.Of(query => query.Content(2) == content.Object)); var ctrl = new TestSurfaceController(umbracoContextAccessor, helper); var result = ctrl.GetContent(2) as PublishedContentResult; diff --git a/src/Umbraco.Web/AspNet/AspNetUmbracoApplicationLifetime.cs b/src/Umbraco.Web/AspNet/AspNetUmbracoApplicationLifetime.cs new file mode 100644 index 0000000000..7651365c74 --- /dev/null +++ b/src/Umbraco.Web/AspNet/AspNetUmbracoApplicationLifetime.cs @@ -0,0 +1,19 @@ +using Umbraco.Net; + +namespace Umbraco.Web.AspNet +{ + public class AspNetUmbracoApplicationLifetime : IUmbracoApplicationLifetime + { + private readonly IHttpContextAccessor _httpContextAccessor; + + public AspNetUmbracoApplicationLifetime(IHttpContextAccessor httpContextAccessor) + { + _httpContextAccessor = httpContextAccessor; + } + + public void Restart() + { + UmbracoApplication.Restart(_httpContextAccessor.HttpContext); + } + } +} diff --git a/src/Umbraco.Web/AspNet/AspNetUserAgentProvider.cs b/src/Umbraco.Web/AspNet/AspNetUserAgentProvider.cs new file mode 100644 index 0000000000..bd37b62531 --- /dev/null +++ b/src/Umbraco.Web/AspNet/AspNetUserAgentProvider.cs @@ -0,0 +1,19 @@ +using Umbraco.Net; + +namespace Umbraco.Web.AspNet +{ + public class AspNetUserAgentProvider : IUserAgentProvider + { + private readonly IHttpContextAccessor _httpContextAccessor; + + public AspNetUserAgentProvider(IHttpContextAccessor httpContextAccessor) + { + _httpContextAccessor = httpContextAccessor; + } + + public string GetUserAgent() + { + return _httpContextAccessor.GetRequiredHttpContext().Request.UserAgent; + } + } +} diff --git a/src/Umbraco.Web/Controllers/UmbLoginController.cs b/src/Umbraco.Web/Controllers/UmbLoginController.cs index 88bc17abff..dc77d3485b 100644 --- a/src/Umbraco.Web/Controllers/UmbLoginController.cs +++ b/src/Umbraco.Web/Controllers/UmbLoginController.cs @@ -6,18 +6,24 @@ using Umbraco.Core.Cache; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; using Umbraco.Core.Services; +using Umbraco.Web.Security; namespace Umbraco.Web.Controllers { public class UmbLoginController : SurfaceController { + private readonly MembershipHelper _membershipHelper; + public UmbLoginController() { } - public UmbLoginController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper) + public UmbLoginController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, + ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, + MembershipHelper membershipHelper) : base(umbracoContextAccessor, databaseFactory, services, appCaches, logger, profilingLogger, umbracoHelper) { + _membershipHelper = membershipHelper; } [HttpPost] @@ -30,7 +36,7 @@ namespace Umbraco.Web.Controllers return CurrentUmbracoPage(); } - if (Members.Login(model.Username, model.Password) == false) + if (_membershipHelper.Login(model.Username, model.Password) == false) { //don't add a field level error, just model level ModelState.AddModelError("loginModel", "Invalid username or password"); diff --git a/src/Umbraco.Web/Controllers/UmbLoginStatusController.cs b/src/Umbraco.Web/Controllers/UmbLoginStatusController.cs index 8f572404fc..aed60af168 100644 --- a/src/Umbraco.Web/Controllers/UmbLoginStatusController.cs +++ b/src/Umbraco.Web/Controllers/UmbLoginStatusController.cs @@ -7,19 +7,25 @@ using Umbraco.Core.Cache; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; using Umbraco.Core.Services; +using Umbraco.Web.Security; namespace Umbraco.Web.Controllers { [MemberAuthorize] public class UmbLoginStatusController : SurfaceController { + private readonly MembershipHelper _membershipHelper; + public UmbLoginStatusController() { } - public UmbLoginStatusController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper) + public UmbLoginStatusController(IUmbracoContextAccessor umbracoContextAccessor, + IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, + IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, MembershipHelper membershipHelper) : base(umbracoContextAccessor, databaseFactory, services, appCaches, logger, profilingLogger, umbracoHelper) { + _membershipHelper = membershipHelper; } [HttpPost] @@ -32,7 +38,7 @@ namespace Umbraco.Web.Controllers return CurrentUmbracoPage(); } - if (Members.IsLoggedIn()) + if (_membershipHelper.IsLoggedIn()) { FormsAuthentication.SignOut(); } diff --git a/src/Umbraco.Web/Controllers/UmbProfileController.cs b/src/Umbraco.Web/Controllers/UmbProfileController.cs index c922b4142f..b736a3fcc7 100644 --- a/src/Umbraco.Web/Controllers/UmbProfileController.cs +++ b/src/Umbraco.Web/Controllers/UmbProfileController.cs @@ -15,12 +15,18 @@ namespace Umbraco.Web.Controllers [MemberAuthorize] public class UmbProfileController : SurfaceController { + private readonly MembershipHelper _membershipHelper; + public UmbProfileController() { } - public UmbProfileController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper) + public UmbProfileController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, + ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, + UmbracoHelper umbracoHelper, MembershipHelper membershipHelper) : base(umbracoContextAccessor, databaseFactory, services, appCaches, logger, profilingLogger, umbracoHelper) - { } + { + _membershipHelper = membershipHelper; + } [HttpPost] [ValidateAntiForgeryToken] @@ -32,7 +38,7 @@ namespace Umbraco.Web.Controllers return CurrentUmbracoPage(); } - var updateAttempt = Members.UpdateMemberProfile(model); + var updateAttempt = _membershipHelper.UpdateMemberProfile(model); if (updateAttempt.Success == false) { //don't add a field level error, just model level diff --git a/src/Umbraco.Web/Controllers/UmbRegisterController.cs b/src/Umbraco.Web/Controllers/UmbRegisterController.cs index 4f4173a67d..ad5fd0c900 100644 --- a/src/Umbraco.Web/Controllers/UmbRegisterController.cs +++ b/src/Umbraco.Web/Controllers/UmbRegisterController.cs @@ -8,18 +8,24 @@ using Umbraco.Core.Persistence; using Umbraco.Core.Services; using Umbraco.Web.Models; using Umbraco.Web.Mvc; +using Umbraco.Web.Security; namespace Umbraco.Web.Controllers { public class UmbRegisterController : SurfaceController { + private readonly MembershipHelper _membershipHelper; + public UmbRegisterController() { } - public UmbRegisterController(IUmbracoContextAccessor umbracoContextAccessor, IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper) + public UmbRegisterController(IUmbracoContextAccessor umbracoContextAccessor, + IUmbracoDatabaseFactory databaseFactory, ServiceContext services, AppCaches appCaches, ILogger logger, + IProfilingLogger profilingLogger, UmbracoHelper umbracoHelper, MembershipHelper membershipHelper) : base(umbracoContextAccessor, databaseFactory, services, appCaches, logger, profilingLogger, umbracoHelper) { + _membershipHelper = membershipHelper; } [HttpPost] @@ -40,7 +46,7 @@ namespace Umbraco.Web.Controllers } MembershipCreateStatus status; - var member = Members.RegisterMember(model, out status, model.LoginOnSuccess); + var member = _membershipHelper.RegisterMember(model, out status, model.LoginOnSuccess); switch (status) { diff --git a/src/Umbraco.Web/Macros/MacroRenderer.cs b/src/Umbraco.Web/Macros/MacroRenderer.cs index 85861a1496..9990644db8 100755 --- a/src/Umbraco.Web/Macros/MacroRenderer.cs +++ b/src/Umbraco.Web/Macros/MacroRenderer.cs @@ -331,7 +331,7 @@ namespace Umbraco.Web.Macros /// The text output of the macro execution. private MacroContent ExecutePartialView(MacroModel macro, IPublishedContent content) { - var engine = new PartialViewMacroEngine(); + var engine = new PartialViewMacroEngine(_umbracoContextAccessor, _httpContextAccessor, _ioHelper); return engine.Execute(macro, content); } diff --git a/src/Umbraco.Web/Macros/PartialViewMacroEngine.cs b/src/Umbraco.Web/Macros/PartialViewMacroEngine.cs index ecfda80399..0099ff220a 100644 --- a/src/Umbraco.Web/Macros/PartialViewMacroEngine.cs +++ b/src/Umbraco.Web/Macros/PartialViewMacroEngine.cs @@ -5,6 +5,7 @@ using System.Web.Routing; using System.Web.WebPages; using Umbraco.Web.Mvc; using Umbraco.Core; +using Umbraco.Core.IO; using Umbraco.Core.Models.PublishedContent; using Umbraco.Web.Composing; @@ -15,37 +16,24 @@ namespace Umbraco.Web.Macros /// public class PartialViewMacroEngine { - private readonly Func _getHttpContext; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly IIOHelper _ioHelper; private readonly Func _getUmbracoContext; - public PartialViewMacroEngine() + public PartialViewMacroEngine(IUmbracoContextAccessor umbracoContextAccessor, IHttpContextAccessor httpContextAccessor, IIOHelper ioHelper) { - _getHttpContext = () => - { - if (HttpContext.Current == null) - throw new InvalidOperationException($"The {GetType()} cannot execute with a null HttpContext.Current reference."); - return new HttpContextWrapper(HttpContext.Current); - }; + _httpContextAccessor = httpContextAccessor; + _ioHelper = ioHelper; _getUmbracoContext = () => { - if (Current.UmbracoContext == null) + var context = umbracoContextAccessor.UmbracoContext; + if (context == null) throw new InvalidOperationException($"The {GetType()} cannot execute with a null UmbracoContext.Current reference."); - return Current.UmbracoContext; + return context; }; } - /// - /// Constructor generally used for unit testing - /// - /// - /// - internal PartialViewMacroEngine(HttpContextBase httpContext, IUmbracoContext umbracoContext) - { - _getHttpContext = () => httpContext; - _getUmbracoContext = () => umbracoContext; - } - public bool Validate(string code, string tempFileName, IPublishedContent currentPage, out string errorMessage) { var temp = GetVirtualPathFromPhysicalPath(tempFileName); @@ -68,7 +56,7 @@ namespace Umbraco.Web.Macros if (content == null) throw new ArgumentNullException(nameof(content)); if (macro.MacroSource.IsNullOrWhiteSpace()) throw new ArgumentException("The MacroSource property of the macro object cannot be null or empty"); - var http = _getHttpContext(); + var httpContext = _httpContextAccessor.GetRequiredHttpContext(); var umbCtx = _getUmbracoContext(); var routeVals = new RouteData(); routeVals.Values.Add("controller", "PartialViewMacro"); @@ -79,13 +67,14 @@ namespace Umbraco.Web.Macros var viewContext = new ViewContext { ViewData = new ViewDataDictionary() }; //try and extract the current view context from the route values, this would be set in the UmbracoViewPage or in // the UmbracoPageResult if POSTing to an MVC controller but rendering in Webforms - if (http.Request.RequestContext.RouteData.DataTokens.ContainsKey(Mvc.Constants.DataTokenCurrentViewContext)) + if (httpContext.Request.RequestContext.RouteData.DataTokens.ContainsKey(Mvc.Constants.DataTokenCurrentViewContext)) { - viewContext = (ViewContext)http.Request.RequestContext.RouteData.DataTokens[Mvc.Constants.DataTokenCurrentViewContext]; + viewContext = (ViewContext)httpContext.Request.RequestContext.RouteData.DataTokens[Mvc.Constants.DataTokenCurrentViewContext]; } routeVals.DataTokens.Add("ParentActionViewContext", viewContext); - var request = new RequestContext(http, routeVals); + var request = new RequestContext(httpContext, routeVals); + string output; using (var controller = new PartialViewMacroController(macro, content)) { @@ -103,7 +92,7 @@ namespace Umbraco.Web.Macros private string GetVirtualPathFromPhysicalPath(string physicalPath) { - var rootpath = _getHttpContext().Server.MapPath("~/"); + var rootpath = _ioHelper.MapPath("~/"); physicalPath = physicalPath.Replace(rootpath, ""); physicalPath = physicalPath.Replace("\\", "/"); return "~/" + physicalPath; diff --git a/src/Umbraco.Web/Mvc/PluginController.cs b/src/Umbraco.Web/Mvc/PluginController.cs index a87f495c9b..bd5d01995d 100644 --- a/src/Umbraco.Web/Mvc/PluginController.cs +++ b/src/Umbraco.Web/Mvc/PluginController.cs @@ -59,11 +59,6 @@ namespace Umbraco.Web.Mvc /// public IProfilingLogger ProfilingLogger { get; } - /// - /// Gets the membership helper. - /// - public MembershipHelper Members => Umbraco.MembershipHelper; - /// /// Gets the Umbraco helper. /// diff --git a/src/Umbraco.Web/Mvc/UmbracoController.cs b/src/Umbraco.Web/Mvc/UmbracoController.cs index fd5ce6073e..4455ef18c8 100644 --- a/src/Umbraco.Web/Mvc/UmbracoController.cs +++ b/src/Umbraco.Web/Mvc/UmbracoController.cs @@ -57,11 +57,6 @@ namespace Umbraco.Web.Mvc protected IOwinContext OwinContext => Request.GetOwinContext(); - /// - /// Gets the membership helper. - /// - public MembershipHelper Members => Umbraco.MembershipHelper; - /// /// Gets the Umbraco helper. /// diff --git a/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs b/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs index 9526452757..e7e353be30 100644 --- a/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs +++ b/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs @@ -101,11 +101,6 @@ namespace Umbraco.Web.Mvc } } - /// - /// Gets the membership helper. - /// - public MembershipHelper Members => Umbraco.MembershipHelper; - protected UmbracoViewPage() : this( Current.Factory.GetInstance(), diff --git a/src/Umbraco.Web/Runtime/WebInitialComposer.cs b/src/Umbraco.Web/Runtime/WebInitialComposer.cs index df5d6756ae..34fb6413be 100644 --- a/src/Umbraco.Web/Runtime/WebInitialComposer.cs +++ b/src/Umbraco.Web/Runtime/WebInitialComposer.cs @@ -49,6 +49,7 @@ using Current = Umbraco.Web.Composing.Current; using Umbraco.Web.PropertyEditors; using Umbraco.Examine; using Umbraco.Core.Models; +using Umbraco.Web.AspNet; using Umbraco.Web.Models; namespace Umbraco.Web.Runtime @@ -64,9 +65,11 @@ namespace Umbraco.Web.Runtime composition.Register(); composition.Register(); + composition.Register(); composition.Register(); composition.Register(); composition.Register(); + composition.Register(); composition.Register(); composition.Register(Lifetime.Singleton); @@ -131,8 +134,7 @@ namespace Umbraco.Web.Runtime var umbCtx = factory.GetInstance(); return new UmbracoHelper(umbCtx.IsFrontEndUmbracoRequest ? umbCtx.PublishedRequest?.PublishedContent : null, factory.GetInstance(), factory.GetInstance(), - factory.GetInstance(), factory.GetInstance(), - factory.GetInstance()); + factory.GetInstance(), factory.GetInstance()); }); else composition.Register(_ => new UmbracoHelper()); diff --git a/src/Umbraco.Web/Security/MembershipHelper.cs b/src/Umbraco.Web/Security/MembershipHelper.cs index 8ed85b21a5..6c4d406c6a 100644 --- a/src/Umbraco.Web/Security/MembershipHelper.cs +++ b/src/Umbraco.Web/Security/MembershipHelper.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using System.Web; using System.Web.Security; using Umbraco.Core; using Umbraco.Core.Logging; diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 27f372753a..fb96847eb4 100755 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -134,7 +134,9 @@ + + @@ -158,8 +160,6 @@ - - @@ -270,7 +270,6 @@ - @@ -359,7 +358,6 @@ - @@ -455,7 +453,6 @@ - diff --git a/src/Umbraco.Web/UmbracoContextFactory.cs b/src/Umbraco.Web/UmbracoContextFactory.cs index 466bf68576..4090da5a6d 100644 --- a/src/Umbraco.Web/UmbracoContextFactory.cs +++ b/src/Umbraco.Web/UmbracoContextFactory.cs @@ -70,7 +70,6 @@ namespace Umbraco.Web _variationContextAccessor.VariationContext = new VariationContext(_defaultCultureAccessor.DefaultCulture); } - var webSecurity = new WebSecurity(_httpContextAccessor, _userService, _globalSettings, _ioHelper); return new UmbracoContext(_httpContextAccessor, _publishedSnapshotService, webSecurity, _globalSettings, _variationContextAccessor, _ioHelper, _uriUtility, _cookieManager); diff --git a/src/Umbraco.Web/UmbracoHelper.cs b/src/Umbraco.Web/UmbracoHelper.cs index 241c079ab4..679fbb789c 100644 --- a/src/Umbraco.Web/UmbracoHelper.cs +++ b/src/Umbraco.Web/UmbracoHelper.cs @@ -3,15 +3,12 @@ using System.Collections.Generic; using System.Linq; using System.Web; using System.Xml.XPath; +using Umbraco.Composing; using Umbraco.Core; using Umbraco.Core.Dictionary; -using Umbraco.Core.Logging; -using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Xml; -using Umbraco.Web.Composing; using Umbraco.Web.Mvc; -using Umbraco.Web.Security; namespace Umbraco.Web { @@ -25,7 +22,6 @@ namespace Umbraco.Web { private readonly IPublishedContentQuery _publishedContentQuery; private readonly ITagQuery _tagQuery; - private readonly MembershipHelper _membershipHelper; private readonly IUmbracoComponentRenderer _componentRenderer; private readonly ICultureDictionaryFactory _cultureDictionaryFactory; @@ -48,13 +44,11 @@ namespace Umbraco.Web ITagQuery tagQuery, ICultureDictionaryFactory cultureDictionary, IUmbracoComponentRenderer componentRenderer, - IPublishedContentQuery publishedContentQuery, - MembershipHelper membershipHelper) + IPublishedContentQuery publishedContentQuery) { _tagQuery = tagQuery ?? throw new ArgumentNullException(nameof(tagQuery)); _cultureDictionaryFactory = cultureDictionary ?? throw new ArgumentNullException(nameof(cultureDictionary)); _componentRenderer = componentRenderer ?? throw new ArgumentNullException(nameof(componentRenderer)); - _membershipHelper = membershipHelper ?? throw new ArgumentNullException(nameof(membershipHelper)); _publishedContentQuery = publishedContentQuery ?? throw new ArgumentNullException(nameof(publishedContentQuery)); _currentPage = currentPage; } @@ -84,11 +78,6 @@ namespace Umbraco.Web /// public IPublishedContentQuery ContentQuery => Ensure(_publishedContentQuery); - /// - /// Gets the membership helper. - /// - public MembershipHelper MembershipHelper => Ensure(_membershipHelper); - /// /// Gets (or sets) the current item assigned to the UmbracoHelper. /// @@ -208,141 +197,7 @@ namespace Umbraco.Web #endregion - #region Membership - /// - /// Check if the current user has access to a document - /// - /// The full path of the document object to check - /// True if the current user has access or if the current document isn't protected - public bool MemberHasAccess(string path) - { - return MembershipHelper.MemberHasAccess(path); - } - - /// - /// Whether or not the current member is logged in (based on the membership provider) - /// - /// True is the current user is logged in - public bool MemberIsLoggedOn() - { - return MembershipHelper.IsLoggedIn(); - } - - #endregion - - - - #region Member/Content/Media from Udi - - public IPublishedContent PublishedContent(Udi udi) - { - var guidUdi = udi as GuidUdi; - if (guidUdi == null) return null; - - var umbracoType = UdiEntityTypeHelper.ToUmbracoObjectType(udi.EntityType); - - switch (umbracoType) - { - case UmbracoObjectTypes.Document: - return Content(guidUdi.Guid); - case UmbracoObjectTypes.Media: - return Media(guidUdi.Guid); - case UmbracoObjectTypes.Member: - return Member(guidUdi.Guid); - } - - return null; - } - - #endregion - - #region Members - - public IPublishedContent Member(Udi id) - { - var guidUdi = id as GuidUdi; - return guidUdi == null ? null : Member(guidUdi.Guid); - } - - public IPublishedContent Member(Guid id) - { - return MembershipHelper.GetById(id); - } - - public IPublishedContent Member(object id) - { - if (ConvertIdObjectToInt(id, out var intId)) - return Member(intId); - if (ConvertIdObjectToGuid(id, out var guidId)) - return Member(guidId); - if (ConvertIdObjectToUdi(id, out var udiId)) - return Member(udiId); - return null; - } - - public IPublishedContent Member(int id) - { - return MembershipHelper.GetById(id); - } - - public IPublishedContent Member(string id) - { - var asInt = id.TryConvertTo(); - return asInt ? MembershipHelper.GetById(asInt.Result) : MembershipHelper.GetByProviderKey(id); - } - - public IEnumerable Members(IEnumerable ids) - { - return MembershipHelper.GetByIds(ids); - } - - public IEnumerable Members(IEnumerable ids) - { - return ids.Select(Member).WhereNotNull(); - } - - public IEnumerable Members(IEnumerable ids) - { - return MembershipHelper.GetByIds(ids); - } - - public IEnumerable Members(IEnumerable ids) - { - return ids.Select(Member).WhereNotNull(); - } - - public IEnumerable Members(IEnumerable ids) - { - return ids.Select(Member).WhereNotNull(); - } - - public IEnumerable Members(params int[] ids) - { - return ids.Select(Member).WhereNotNull(); - } - - public IEnumerable Members(params string[] ids) - { - return ids.Select(Member).WhereNotNull(); - } - - public IEnumerable Members(params Guid[] ids) - { - return MembershipHelper.GetByIds(ids); - } - - public IEnumerable Members(params Udi[] ids) - { - return ids.Select(Member).WhereNotNull(); - } - - public IEnumerable Members(params object[] ids) - { - return ids.Select(Member).WhereNotNull(); - } - - #endregion #region Content diff --git a/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs b/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs index b20ebe7e09..0d0b64b085 100644 --- a/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs +++ b/src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs @@ -120,11 +120,6 @@ namespace Umbraco.Web.WebApi /// protected Uri ApplicationUrl => RuntimeState.ApplicationUrl; - /// - /// Gets the membership helper. - /// - public MembershipHelper Members => Umbraco.MembershipHelper; - /// /// Gets the Umbraco helper. ///