Files
tiku-backend.net/Tiku.Infrastructure/Commerce/TenantSecretService.cs
xiong c497a3ca8d
Some checks failed
ci / release-gate (push) Has been cancelled
清理代码
2026-08-03 12:31:39 +08:00

51 lines
1.8 KiB
C#

using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Tiku.Application.Commerce;
using Tiku.Domain.Tenancy;
using Tiku.Infrastructure.Persistence;
namespace Tiku.Infrastructure.Commerce;
internal sealed class TenantSecretService(
TikuDbContext dbContext,
ITenantSecretProtector tenantSecretProtector) : ITenantSecretService
{
public async Task<JsonElement> GetActiveSecretPayloadAsync(
Guid tenantId,
string secretRef,
CancellationToken cancellationToken = default)
{
if (string.IsNullOrWhiteSpace(secretRef))
throw new PaymentProviderException(
"Payment provider secret is not configured.",
"payment_secret_not_configured");
var now = DateTimeOffset.UtcNow;
var secret = await dbContext.TenantSecrets
.AsNoTracking()
.Where(item =>
item.TenantId == tenantId &&
item.SecretRef == secretRef &&
item.Status == TenantSecretStatus.Active &&
(item.ExpiresAt == null || item.ExpiresAt > now))
.SingleOrDefaultAsync(cancellationToken);
if (secret is null)
throw new PaymentProviderException(
"Payment provider secret is not configured.",
"payment_secret_not_configured");
if (secret.EncryptedPayload.Length > 0)
return tenantSecretProtector.Unprotect(
tenantId,
secretRef,
secret.EncryptionKeyId,
secret.EncryptedPayload,
secret.EncryptionNonce,
secret.EncryptionTag);
throw new PaymentProviderException(
"Payment provider secret is not configured.",
"payment_secret_not_configured");
}
}