1
0
mirror of https://github.com/bitwarden/server synced 2025-12-23 03:33:35 +00:00

Add PlanSponsorshipType to db model

This commit is contained in:
Matt Gibson
2021-11-04 12:51:22 -04:00
committed by Justin Baur
parent 199b8ed887
commit 77bea5755e
20 changed files with 75 additions and 18 deletions

View File

@@ -0,0 +1,10 @@
using System.ComponentModel.DataAnnotations;
namespace Bit.Core.Enums
{
public enum PlanSponsorshipType : byte
{
[Display(Name = "Families For Enterprise")]
FamiliesForEnterprise = 0,
}
}

View File

@@ -1,13 +1,18 @@
using System;
using System.ComponentModel.DataAnnotations;
using Bit.Core.Enums;
using Bit.Core.Utilities;
namespace Bit.Core.Models.Api.Request
{
public class OrganizationSponsorshipRequestModel
{
[Required]
public PlanSponsorshipType PlanSponsorshipType { get; set; }
[Required]
public Guid OrganizationUserId { get; set; }
[Required]
[StringLength(256)]
[StrictEmailAddress]

View File

@@ -1,5 +1,6 @@
using System;
using System.ComponentModel.DataAnnotations;
using Bit.Core.Enums;
using Bit.Core.Utilities;
namespace Bit.Core.Models.Table
@@ -15,6 +16,7 @@ namespace Bit.Core.Models.Table
public Guid? SponsoredOrganizationId { get; set; }
[MaxLength(256)]
public string OfferedToEmail { get; set; }
public PlanSponsorshipType? PlanSponsorshipType { get; set; }
[Required]
public bool CloudSponsor { get; set; }
public DateTime? LastSyncDate { get; set; }

View File

@@ -1,4 +1,5 @@
using System.Threading.Tasks;
using Bit.Core.Enums;
using Bit.Core.Models.Table;
namespace Bit.Core.Services
@@ -6,7 +7,7 @@ namespace Bit.Core.Services
public interface IOrganizationSponsorshipService
{
Task<bool> ValidateRedemptionTokenAsync(string encryptedToken);
Task OfferSponsorshipAsync(Organization sponsoringOrg, OrganizationUser sponsoringOrgUser, string sponsoredEmail);
Task OfferSponsorshipAsync(Organization sponsoringOrg, OrganizationUser sponsoringOrgUser, PlanSponsorshipType sponsorshipType, string sponsoredEmail);
Task SetUpSponsorshipAsync(OrganizationSponsorship sponsorship, Organization sponsoredOrganization);
Task RemoveSponsorshipAsync(OrganizationSponsorship sponsorship);
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Threading.Tasks;
using Bit.Core.Enums;
using Bit.Core.Models.Table;
using Bit.Core.Repositories;
using Microsoft.AspNetCore.DataProtection;
@@ -38,25 +39,31 @@ namespace Bit.Core.Services
if (dataParts[0].Equals(FamiliesForEnterpriseTokenName))
{
if (!Guid.TryParse(dataParts[1], out Guid sponsorshipId))
if (!Guid.TryParse(dataParts[1], out Guid sponsorshipId) ||
!Enum.TryParse<PlanSponsorshipType>(dataParts[2], true, out var sponsorshipType))
{
return false;
}
var sponsorship = await _organizationSponsorshipRepository.GetByIdAsync(sponsorshipId);
return sponsorship != null;
if (sponsorship == null || sponsorship.PlanSponsorshipType != sponsorshipType)
{
return false;
}
return true;
}
return false;
}
private string RedemptionToken(Guid sponsorshipId) =>
private string RedemptionToken(Guid sponsorshipId, PlanSponsorshipType sponsorshipType) =>
string.Concat(
TokenClearTextPrefix,
_dataProtector.Protect($"{FamiliesForEnterpriseTokenName} {sponsorshipId}")
_dataProtector.Protect($"{FamiliesForEnterpriseTokenName} {sponsorshipId} {sponsorshipType}")
);
public async Task OfferSponsorshipAsync(Organization sponsoringOrg, OrganizationUser sponsoringOrgUser, string sponsoredEmail)
public async Task OfferSponsorshipAsync(Organization sponsoringOrg, OrganizationUser sponsoringOrgUser, PlanSponsorshipType sponsorshipType, string sponsoredEmail)
{
var sponsorship = new OrganizationSponsorship
{