* Implement using keymap for member * Remove current usages of GetUserById * User userId resolver to resolve user key * Refactor user repository to use GUID not int * Add happy path test * Remove user in cache when user gets updated * Use await in async method * Fix up according to review * Update IMetricsConsentService.cs to have async method * Fix according to review * Fix more according to comments * Revert "Fix up according to review" This reverts commit a75acaaa * Get current backoffice user from method * Update user repository delete functionality * Fix up more test * Try to get user by id if key fails * Add user key as required claim * Fix tests * Don't set claim in BackofficeController * Create constant for the Sub claim --------- Co-authored-by: kjac <kja@umbraco.dk>
53 lines
1.9 KiB
C#
53 lines
1.9 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using Umbraco.Cms.Core.Models;
|
|
using Umbraco.Cms.Core.Models.Membership;
|
|
using Umbraco.Cms.Core.Security;
|
|
|
|
namespace Umbraco.Cms.Core.Services;
|
|
|
|
public class MetricsConsentService : IMetricsConsentService
|
|
{
|
|
internal const string Key = "UmbracoAnalyticsLevel";
|
|
|
|
private readonly IKeyValueService _keyValueService;
|
|
private readonly ILogger<MetricsConsentService> _logger;
|
|
private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor;
|
|
private readonly IUserService _userService;
|
|
|
|
public MetricsConsentService(
|
|
IKeyValueService keyValueService,
|
|
ILogger<MetricsConsentService> logger,
|
|
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
|
IUserService userService)
|
|
{
|
|
_keyValueService = keyValueService;
|
|
_logger = logger;
|
|
_backOfficeSecurityAccessor = backOfficeSecurityAccessor;
|
|
_userService = userService;
|
|
}
|
|
|
|
public TelemetryLevel GetConsentLevel()
|
|
{
|
|
var analyticsLevelString = _keyValueService.GetValue(Key);
|
|
|
|
if (analyticsLevelString is null ||
|
|
Enum.TryParse(analyticsLevelString, out TelemetryLevel analyticsLevel) is false)
|
|
{
|
|
return TelemetryLevel.Detailed;
|
|
}
|
|
|
|
return analyticsLevel;
|
|
}
|
|
|
|
[Obsolete("Please use SetConsentLevelAsync instead, scheduled for removal in V15")]
|
|
public void SetConsentLevel(TelemetryLevel telemetryLevel) => SetConsentLevelAsync(telemetryLevel).GetAwaiter().GetResult();
|
|
|
|
public async Task SetConsentLevelAsync(TelemetryLevel telemetryLevel)
|
|
{
|
|
IUser? currentUser = _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser ?? await _userService.GetAsync(Constants.Security.SuperUserKey);
|
|
|
|
_logger.LogInformation("Telemetry level set to {telemetryLevel} by {username}", telemetryLevel, currentUser?.Username);
|
|
_keyValueService.SetValue(Key, telemetryLevel.ToString());
|
|
}
|
|
}
|