mirror of
https://github.com/bitwarden/server.git
synced 2026-02-05 00:23:24 +08:00
* Refactor: Rename some methods and models for consistency This commit contains no logic changes at all. It's entirely comprised of renames of existing models and methods to bring our codebase more in line with our app's functionality and terminology. * Add feature flag: AC-2476-deprecate-stripe-sources-api * Standardize error responses from applicable billing controllers During my work on CB, I found that just using the built-in TypedResults errors results in the client choking on the response because it's looking for the ErrroResponseModel. The new BaseBillingController provides Error utilities to return TypedResults wrapping that model so the client can process it. * Add feature flagged payment method endoints to OrganizationBillingController * Run dotnet format
81 lines
2.6 KiB
C#
81 lines
2.6 KiB
C#
using Bit.Core;
|
|
using Bit.Core.AdminConsole.Entities.Provider;
|
|
using Bit.Core.AdminConsole.Repositories;
|
|
using Bit.Core.Billing.Extensions;
|
|
using Bit.Core.Context;
|
|
using Bit.Core.Services;
|
|
|
|
namespace Bit.Api.Billing.Controllers;
|
|
|
|
public abstract class BaseProviderController(
|
|
ICurrentContext currentContext,
|
|
IFeatureService featureService,
|
|
ILogger<BaseProviderController> logger,
|
|
IProviderRepository providerRepository,
|
|
IUserService userService) : BaseBillingController
|
|
{
|
|
protected readonly IUserService UserService = userService;
|
|
|
|
protected Task<(Provider, IResult)> TryGetBillableProviderForAdminOperation(
|
|
Guid providerId) => TryGetBillableProviderAsync(providerId, currentContext.ProviderProviderAdmin);
|
|
|
|
protected Task<(Provider, IResult)> TryGetBillableProviderForServiceUserOperation(
|
|
Guid providerId) => TryGetBillableProviderAsync(providerId, currentContext.ProviderUser);
|
|
|
|
private async Task<(Provider, IResult)> TryGetBillableProviderAsync(
|
|
Guid providerId,
|
|
Func<Guid, bool> checkAuthorization)
|
|
{
|
|
if (!featureService.IsEnabled(FeatureFlagKeys.EnableConsolidatedBilling))
|
|
{
|
|
logger.LogError(
|
|
"Cannot run Consolidated Billing operation for provider ({ProviderID}) while feature flag is disabled",
|
|
providerId);
|
|
|
|
return (null, Error.NotFound());
|
|
}
|
|
|
|
var provider = await providerRepository.GetByIdAsync(providerId);
|
|
|
|
if (provider == null)
|
|
{
|
|
logger.LogError(
|
|
"Cannot find provider ({ProviderID}) for Consolidated Billing operation",
|
|
providerId);
|
|
|
|
return (null, Error.NotFound());
|
|
}
|
|
|
|
if (!checkAuthorization(providerId))
|
|
{
|
|
var user = await UserService.GetUserByPrincipalAsync(User);
|
|
|
|
logger.LogError(
|
|
"User ({UserID}) is not authorized to perform Consolidated Billing operation for provider ({ProviderID})",
|
|
user?.Id, providerId);
|
|
|
|
return (null, Error.Unauthorized());
|
|
}
|
|
|
|
if (!provider.IsBillable())
|
|
{
|
|
logger.LogError(
|
|
"Cannot run Consolidated Billing operation for provider ({ProviderID}) that is not billable",
|
|
providerId);
|
|
|
|
return (null, Error.Unauthorized());
|
|
}
|
|
|
|
if (provider.IsStripeEnabled())
|
|
{
|
|
return (provider, null);
|
|
}
|
|
|
|
logger.LogError(
|
|
"Cannot run Consolidated Billing operation for provider ({ProviderID}) that is missing Stripe configuration",
|
|
providerId);
|
|
|
|
return (null, Error.ServerError());
|
|
}
|
|
}
|