mirror of
https://github.com/bitwarden/server.git
synced 2025-04-14 17:48:12 -05:00
better error handling around license updates.
This commit is contained in:
parent
d9cd7880a6
commit
9f6c2a9cc7
@ -543,11 +543,17 @@ namespace Bit.Core.Services
|
|||||||
public async Task<Tuple<Organization, OrganizationUser>> SignUpAsync(
|
public async Task<Tuple<Organization, OrganizationUser>> SignUpAsync(
|
||||||
OrganizationLicense license, User owner, string ownerKey)
|
OrganizationLicense license, User owner, string ownerKey)
|
||||||
{
|
{
|
||||||
if(license == null || !_licensingService.VerifyLicense(license) || !license.CanUse(_globalSettings.Installation.Id))
|
if(license == null || !_licensingService.VerifyLicense(license))
|
||||||
{
|
{
|
||||||
throw new BadRequestException("Invalid license.");
|
throw new BadRequestException("Invalid license.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!license.CanUse(_globalSettings.Installation.Id))
|
||||||
|
{
|
||||||
|
throw new BadRequestException("Invalid license. Make sure your license allows for on-premise " +
|
||||||
|
"hosting of organizations and that the installation id matches.");
|
||||||
|
}
|
||||||
|
|
||||||
var plan = StaticStore.Plans.FirstOrDefault(p => p.Type == license.PlanType && !p.Disabled);
|
var plan = StaticStore.Plans.FirstOrDefault(p => p.Type == license.PlanType && !p.Disabled);
|
||||||
if(plan == null)
|
if(plan == null)
|
||||||
{
|
{
|
||||||
@ -578,7 +584,13 @@ namespace Bit.Core.Services
|
|||||||
RevisionDate = DateTime.UtcNow
|
RevisionDate = DateTime.UtcNow
|
||||||
};
|
};
|
||||||
|
|
||||||
return await SignUpAsync(organization, owner.Id, ownerKey, false);
|
var result = await SignUpAsync(organization, owner.Id, ownerKey, false);
|
||||||
|
|
||||||
|
var dir = $"{_globalSettings.LicenseDirectory}/organization";
|
||||||
|
Directory.CreateDirectory(dir);
|
||||||
|
File.WriteAllText($"{dir}/{organization.Id}.json", JsonConvert.SerializeObject(license, Formatting.Indented));
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Tuple<Organization, OrganizationUser>> SignUpAsync(Organization organization,
|
private async Task<Tuple<Organization, OrganizationUser>> SignUpAsync(Organization organization,
|
||||||
@ -638,14 +650,15 @@ namespace Bit.Core.Services
|
|||||||
throw new InvalidOperationException("Licenses require self hosting.");
|
throw new InvalidOperationException("Licenses require self hosting.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(license == null || !_licensingService.VerifyLicense(license) || !license.CanUse(_globalSettings.Installation.Id))
|
if(license == null || !_licensingService.VerifyLicense(license))
|
||||||
{
|
{
|
||||||
throw new BadRequestException("Invalid license.");
|
throw new BadRequestException("Invalid license.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!license.SelfHost)
|
if(!license.CanUse(_globalSettings.Installation.Id))
|
||||||
{
|
{
|
||||||
throw new BadRequestException("This license does not allow on-premise hosting.");
|
throw new BadRequestException("Invalid license. Make sure your license allows for on-premise " +
|
||||||
|
"hosting of organizations and that the installation id matches.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(license.Seats.HasValue && (!organization.Seats.HasValue || organization.Seats.Value > license.Seats.Value))
|
if(license.Seats.HasValue && (!organization.Seats.HasValue || organization.Seats.Value > license.Seats.Value))
|
||||||
@ -670,7 +683,15 @@ namespace Bit.Core.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: groups
|
if(!license.UseGroups && organization.UseGroups)
|
||||||
|
{
|
||||||
|
var groups = await _groupRepository.GetManyByOrganizationIdAsync(organization.Id);
|
||||||
|
if(groups.Count > 0)
|
||||||
|
{
|
||||||
|
throw new BadRequestException($"Your organization currently has {groups.Count} groups. " +
|
||||||
|
$"Your new license does not allow for the use of groups. Remove all groups.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var dir = $"{_globalSettings.LicenseDirectory}/organization";
|
var dir = $"{_globalSettings.LicenseDirectory}/organization";
|
||||||
Directory.CreateDirectory(dir);
|
Directory.CreateDirectory(dir);
|
||||||
|
@ -543,11 +543,16 @@ namespace Bit.Core.Services
|
|||||||
IPaymentService paymentService = null;
|
IPaymentService paymentService = null;
|
||||||
if(_globalSettings.SelfHosted)
|
if(_globalSettings.SelfHosted)
|
||||||
{
|
{
|
||||||
if(license == null || !_licenseService.VerifyLicense(license) || !license.CanUse(user))
|
if(license == null || !_licenseService.VerifyLicense(license))
|
||||||
{
|
{
|
||||||
throw new BadRequestException("Invalid license.");
|
throw new BadRequestException("Invalid license.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!license.CanUse(user))
|
||||||
|
{
|
||||||
|
throw new BadRequestException("This license is not valid for this user.");
|
||||||
|
}
|
||||||
|
|
||||||
var dir = $"{_globalSettings.LicenseDirectory}/user";
|
var dir = $"{_globalSettings.LicenseDirectory}/user";
|
||||||
Directory.CreateDirectory(dir);
|
Directory.CreateDirectory(dir);
|
||||||
File.WriteAllText($"{dir}/{user.Id}.json", JsonConvert.SerializeObject(license, Formatting.Indented));
|
File.WriteAllText($"{dir}/{user.Id}.json", JsonConvert.SerializeObject(license, Formatting.Indented));
|
||||||
@ -608,18 +613,23 @@ namespace Bit.Core.Services
|
|||||||
throw new InvalidOperationException("Licenses require self hosting.");
|
throw new InvalidOperationException("Licenses require self hosting.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(license == null || !_licenseService.VerifyLicense(license) || !license.CanUse(user))
|
if(license == null || !_licenseService.VerifyLicense(license))
|
||||||
{
|
{
|
||||||
throw new BadRequestException("Invalid license.");
|
throw new BadRequestException("Invalid license.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!license.CanUse(user))
|
||||||
|
{
|
||||||
|
throw new BadRequestException("This license is not valid for this user.");
|
||||||
|
}
|
||||||
|
|
||||||
var dir = $"{_globalSettings.LicenseDirectory}/user";
|
var dir = $"{_globalSettings.LicenseDirectory}/user";
|
||||||
Directory.CreateDirectory(dir);
|
Directory.CreateDirectory(dir);
|
||||||
File.WriteAllText($"{dir}/{user.Id}.json", JsonConvert.SerializeObject(license, Formatting.Indented));
|
File.WriteAllText($"{dir}/{user.Id}.json", JsonConvert.SerializeObject(license, Formatting.Indented));
|
||||||
|
|
||||||
user.Premium = true;
|
user.Premium = license.Premium;
|
||||||
user.RevisionDate = DateTime.UtcNow;
|
user.RevisionDate = DateTime.UtcNow;
|
||||||
user.MaxStorageGb = 10240; // 10 TB
|
user.MaxStorageGb = _globalSettings.SelfHosted ? 10240 : license.MaxStorageGb; // 10 TB
|
||||||
user.LicenseKey = license.LicenseKey;
|
user.LicenseKey = license.LicenseKey;
|
||||||
user.PremiumExpirationDate = license.Expires;
|
user.PremiumExpirationDate = license.Expires;
|
||||||
await SaveUserAsync(user);
|
await SaveUserAsync(user);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user