Files
Umbraco-CMS/src/Umbraco.Core/Services/MetricsConsentService.cs
Nikolaj Geisle d5809da665 V14: Move towards get guid (#15889)
* 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>
2024-04-11 13:53:34 +02:00

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());
}
}