1
0
mirror of https://github.com/bitwarden/server.git synced 2025-07-05 18:12:48 -05:00

apis for subscription vs billing

This commit is contained in:
Kyle Spearrin
2019-02-18 15:40:47 -05:00
parent 5945c39b32
commit b036657d78
14 changed files with 353 additions and 340 deletions

View File

@ -17,7 +17,7 @@ namespace Bit.Core.Services
Task ReinstateSubscriptionAsync(ISubscriber subscriber);
Task<bool> UpdatePaymentMethodAsync(ISubscriber subscriber, PaymentMethodType paymentMethodType,
string paymentToken);
Task<BillingInfo.BillingInvoiceInfo> GetUpcomingInvoiceAsync(ISubscriber subscriber);
Task<BillingInfo> GetBillingAsync(ISubscriber subscriber);
Task<SubscriptionInfo> GetSubscriptionAsync(ISubscriber subscriber);
}
}

View File

@ -52,7 +52,7 @@ namespace Bit.Core.Services
Task DisablePremiumAsync(Guid userId, DateTime? expirationDate);
Task DisablePremiumAsync(User user, DateTime? expirationDate);
Task UpdatePremiumExpirationAsync(Guid userId, DateTime? expirationDate);
Task<UserLicense> GenerateLicenseAsync(User user, BillingInfo billingInfo = null);
Task<UserLicense> GenerateLicenseAsync(User user, SubscriptionInfo subscriptionInfo = null);
Task<bool> CheckPasswordAsync(User user, string password);
Task<bool> CanAccessPremium(ITwoFactorProvidersUser user);
Task<bool> TwoFactorIsEnabledAsync(ITwoFactorProvidersUser user);

View File

@ -1207,8 +1207,8 @@ namespace Bit.Core.Services
throw new BadRequestException("Invalid installation id");
}
var billingInfo = await _paymentService.GetBillingAsync(organization);
return new OrganizationLicense(organization, billingInfo, installationId, _licensingService);
var subInfo = await _paymentService.GetSubscriptionAsync(organization);
return new OrganizationLicense(organization, subInfo, installationId, _licensingService);
}
public async Task ImportAsync(Guid organizationId,

View File

@ -885,35 +885,6 @@ namespace Bit.Core.Services
return createdCustomer;
}
public async Task<BillingInfo.BillingInvoiceInfo> GetUpcomingInvoiceAsync(ISubscriber subscriber)
{
if(!string.IsNullOrWhiteSpace(subscriber.GatewaySubscriptionId))
{
var subscriptionService = new SubscriptionService();
var invoiceService = new InvoiceService();
var sub = await subscriptionService.GetAsync(subscriber.GatewaySubscriptionId);
if(sub != null)
{
if(!sub.CanceledAt.HasValue && !string.IsNullOrWhiteSpace(subscriber.GatewayCustomerId))
{
try
{
var upcomingInvoice = await invoiceService.UpcomingAsync(new UpcomingInvoiceOptions
{
CustomerId = subscriber.GatewayCustomerId
});
if(upcomingInvoice != null)
{
return new BillingInfo.BillingInvoiceInfo(upcomingInvoice);
}
}
catch(StripeException) { }
}
}
}
return null;
}
public async Task<BillingInfo> GetBillingAsync(ISubscriber subscriber)
{
var billingInfo = new BillingInfo();
@ -990,12 +961,21 @@ namespace Bit.Core.Services
}
}
return billingInfo;
}
public async Task<SubscriptionInfo> GetSubscriptionAsync(ISubscriber subscriber)
{
var subscriptionInfo = new SubscriptionInfo();
var subscriptionService = new SubscriptionService();
var invoiceService = new InvoiceService();
if(!string.IsNullOrWhiteSpace(subscriber.GatewaySubscriptionId))
{
var sub = await subscriptionService.GetAsync(subscriber.GatewaySubscriptionId);
if(sub != null)
{
billingInfo.Subscription = new BillingInfo.BillingSubscription(sub);
subscriptionInfo.Subscription = new SubscriptionInfo.BillingSubscription(sub);
}
if(!sub.CanceledAt.HasValue && !string.IsNullOrWhiteSpace(subscriber.GatewayCustomerId))
@ -1006,14 +986,15 @@ namespace Bit.Core.Services
new UpcomingInvoiceOptions { CustomerId = subscriber.GatewayCustomerId });
if(upcomingInvoice != null)
{
billingInfo.UpcomingInvoice = new BillingInfo.BillingInvoiceInfo(upcomingInvoice);
subscriptionInfo.UpcomingInvoice =
new SubscriptionInfo.BillingUpcomingInvoice(upcomingInvoice);
}
}
catch(StripeException) { }
}
}
return billingInfo;
return subscriptionInfo;
}
}
}

View File

@ -868,20 +868,20 @@ namespace Bit.Core.Services
}
}
public async Task<UserLicense> GenerateLicenseAsync(User user, BillingInfo billingInfo = null)
public async Task<UserLicense> GenerateLicenseAsync(User user, SubscriptionInfo subscriptionInfo = null)
{
if(user == null)
{
throw new NotFoundException();
}
if(billingInfo == null && user.Gateway != null)
if(subscriptionInfo == null && user.Gateway != null)
{
billingInfo = await _paymentService.GetBillingAsync(user);
subscriptionInfo = await _paymentService.GetSubscriptionAsync(user);
}
return billingInfo == null ? new UserLicense(user, _licenseService) :
new UserLicense(user, billingInfo, _licenseService);
return subscriptionInfo == null ? new UserLicense(user, _licenseService) :
new UserLicense(user, subscriptionInfo, _licenseService);
}
public override async Task<bool> CheckPasswordAsync(User user, string password)