Add feature flag check for futures trading in StartBotCommandHandler; refactor FlagsmithService to use username directly for flag retrieval and remove unused hashing logic.
This commit is contained in:
@@ -15,18 +15,28 @@ namespace Managing.Application.ManageBot
|
|||||||
private readonly IGrainFactory _grainFactory;
|
private readonly IGrainFactory _grainFactory;
|
||||||
private readonly IBotService _botService;
|
private readonly IBotService _botService;
|
||||||
private readonly ITradingService _tradingService;
|
private readonly ITradingService _tradingService;
|
||||||
|
private readonly IFlagsmithService _flagsmithService;
|
||||||
|
|
||||||
public StartBotCommandHandler(
|
public StartBotCommandHandler(
|
||||||
IAccountService accountService, IGrainFactory grainFactory, IBotService botService, ITradingService tradingService)
|
IAccountService accountService, IGrainFactory grainFactory, IBotService botService, ITradingService tradingService, IFlagsmithService flagsmithService)
|
||||||
{
|
{
|
||||||
_accountService = accountService;
|
_accountService = accountService;
|
||||||
_grainFactory = grainFactory;
|
_grainFactory = grainFactory;
|
||||||
_botService = botService;
|
_botService = botService;
|
||||||
_tradingService = tradingService;
|
_tradingService = tradingService;
|
||||||
|
_flagsmithService = flagsmithService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<BotStatus> Handle(StartBotCommand request, CancellationToken cancellationToken)
|
public async Task<BotStatus> Handle(StartBotCommand request, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
// Check if trading_future feature flag is enabled
|
||||||
|
var isTradingFutureEnabled = await _flagsmithService.IsFeatureEnabledAsync(request.User.Name, "trading_future");
|
||||||
|
if (!isTradingFutureEnabled)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(
|
||||||
|
"Futures trading is not enabled for your account. Please contact support to enable this feature.");
|
||||||
|
}
|
||||||
|
|
||||||
// Validate the configuration
|
// Validate the configuration
|
||||||
if (request.Config == null)
|
if (request.Config == null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using Flagsmith;
|
using Flagsmith;
|
||||||
using Managing.Application.Abstractions.Services;
|
using Managing.Application.Abstractions.Services;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
@@ -39,16 +37,14 @@ public class FlagsmithService : IFlagsmithService
|
|||||||
throw new ArgumentException("Username cannot be null or empty", nameof(username));
|
throw new ArgumentException("Username cannot be null or empty", nameof(username));
|
||||||
}
|
}
|
||||||
|
|
||||||
var hashedIdentity = HashUsername(username);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var flags = await _flagsmithClient.GetIdentityFlags(hashedIdentity);
|
var flags = await _flagsmithClient.GetIdentityFlags(username);
|
||||||
return new FlagsmithFlagsWrapper(flags);
|
return new FlagsmithFlagsWrapper(flags);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "Error getting flags for username {Username} (hashed: {HashedIdentity})", username, hashedIdentity);
|
_logger.LogError(ex, "Error getting flags for username {Username}", username);
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,23 +96,6 @@ public class FlagsmithService : IFlagsmithService
|
|||||||
return null; // Default to null on error
|
return null; // Default to null on error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Hashes the username using SHA256 to create a privacy-preserving identity for Flagsmith
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="username">The username to hash</param>
|
|
||||||
/// <returns>SHA256 hash of the username as a hexadecimal string</returns>
|
|
||||||
private static string HashUsername(string username)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrWhiteSpace(username))
|
|
||||||
{
|
|
||||||
throw new ArgumentException("Username cannot be null or empty", nameof(username));
|
|
||||||
}
|
|
||||||
|
|
||||||
using var sha256 = SHA256.Create();
|
|
||||||
var hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(username));
|
|
||||||
return Convert.ToHexString(hashBytes).ToLowerInvariant();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user