using Thalos.Bff.Application.Adapters;
using Thalos.Bff.Application.Security;
using Thalos.Bff.Contracts.Api;
namespace Thalos.Bff.Application.Handlers;
///
/// Default edge handler for token issuance.
///
public sealed class IssueTokenHandler(
IThalosServiceClient serviceClient,
IIdentityEdgeContractAdapter contractAdapter,
IPermissionGuard permissionGuard)
: IIssueTokenHandler
{
///
public async Task HandleAsync(IssueTokenApiRequest request)
{
var policyRequest = contractAdapter.ToPolicyRequest(request, "identity.token.issue");
var policyResponse = await serviceClient.EvaluatePolicyAsync(policyRequest);
if (!permissionGuard.CanAccess(policyResponse))
{
throw new UnauthorizedAccessException("Permission denied.");
}
var issueRequest = contractAdapter.ToIssueTokenRequest(request);
var issueResponse = await serviceClient.IssueTokenAsync(issueRequest);
return contractAdapter.ToIssueTokenApiResponse(issueResponse);
}
}