namespace AAIntegration.SimmonsBank.API.Services; using AutoMapper; using BCrypt.Net; using AAIntegration.SimmonsBank.API.Config; using System; using System.Security.Cryptography; public interface IApiKeyService { string GenerateApiKey(); } public class ApiKeyService : IApiKeyService { private DataContext _context; private readonly IMapper _mapper; public ApiKeyService( DataContext context, IMapper mapper) { _context = context; _mapper = mapper; } private const string _prefix = "CT-"; private const int _numberOfSecureBytesToGenerate = 32; private const int _lengthOfKey = 32; public string GenerateApiKey() { var bytes = RandomNumberGenerator.GetBytes(_numberOfSecureBytesToGenerate); string base64String = Convert.ToBase64String(bytes) .Replace("+", "-") .Replace("/", "_"); var keyLength = _lengthOfKey - _prefix.Length; return _prefix + base64String[..keyLength]; } }