mirror of
https://github.com/bitwarden/server.git
synced 2025-05-22 12:04:27 -05:00
Add organization policy requirement query and two-factor policy requirement classes, and update PolicyServiceCollectionExtensions to include new services
This commit is contained in:
parent
2fef097d2c
commit
8a3757654f
@ -0,0 +1,26 @@
|
||||
#nullable enable
|
||||
|
||||
using Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyRequirements;
|
||||
using Bit.Core.AdminConsole.Repositories;
|
||||
|
||||
namespace Bit.Core.AdminConsole.OrganizationFeatures.Policies.Implementations;
|
||||
|
||||
public class OrganizationPolicyRequirementQuery(
|
||||
IPolicyRepository policyRepository,
|
||||
IEnumerable<IOrganizationPolicyRequirementFactory<IPolicyRequirement>> factories)
|
||||
: IOrganizationPolicyRequirementQuery
|
||||
{
|
||||
public async Task<T> GetAsync<T>(Guid organizationId) where T : IPolicyRequirement
|
||||
{
|
||||
var factory = factories.OfType<IOrganizationPolicyRequirementFactory<T>>().SingleOrDefault();
|
||||
if (factory is null)
|
||||
{
|
||||
throw new NotImplementedException("No Organization Requirement Factory found for " + typeof(T));
|
||||
}
|
||||
|
||||
var policy = await policyRepository.GetByOrganizationIdTypeAsync(organizationId, factory.PolicyType);
|
||||
|
||||
var requirement = factory.Create(policy);
|
||||
return requirement;
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
#nullable enable
|
||||
|
||||
using Bit.Core.AdminConsole.Entities;
|
||||
using Bit.Core.AdminConsole.Enums;
|
||||
|
||||
namespace Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyRequirements;
|
||||
|
||||
/// <summary>
|
||||
/// Policy requirements for the Two-Factor Authentication policy at the organization level.
|
||||
/// </summary>
|
||||
public class OrganizationTwoFactorPolicyRequirement : IPolicyRequirement
|
||||
{
|
||||
private readonly Policy? _policy;
|
||||
|
||||
public OrganizationTwoFactorPolicyRequirement(Policy? policy)
|
||||
{
|
||||
_policy = policy;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if the organization requires two-factor authentication.
|
||||
/// </summary>
|
||||
public bool IsRequired => _policy != null && _policy.Enabled;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Organization policy requirement factory for the Require Two-Factor Authentication policy.
|
||||
/// </summary>
|
||||
public class OrganizationTwoFactorPolicyRequirementFactory
|
||||
: IOrganizationPolicyRequirementFactory<OrganizationTwoFactorPolicyRequirement>
|
||||
{
|
||||
public PolicyType PolicyType => PolicyType.TwoFactorAuthentication;
|
||||
|
||||
public OrganizationTwoFactorPolicyRequirement Create(Policy? policy)
|
||||
{
|
||||
return new OrganizationTwoFactorPolicyRequirement(policy);
|
||||
}
|
||||
}
|
@ -14,9 +14,11 @@ public static class PolicyServiceCollectionExtensions
|
||||
services.AddScoped<IPolicyService, PolicyService>();
|
||||
services.AddScoped<ISavePolicyCommand, SavePolicyCommand>();
|
||||
services.AddScoped<IPolicyRequirementQuery, PolicyRequirementQuery>();
|
||||
services.AddScoped<IOrganizationPolicyRequirementQuery, OrganizationPolicyRequirementQuery>();
|
||||
|
||||
services.AddPolicyValidators();
|
||||
services.AddPolicyRequirements();
|
||||
services.AddOrganizationPolicyRequirements();
|
||||
}
|
||||
|
||||
private static void AddPolicyValidators(this IServiceCollection services)
|
||||
@ -38,4 +40,9 @@ public static class PolicyServiceCollectionExtensions
|
||||
services.AddScoped<IPolicyRequirementFactory<IPolicyRequirement>, RequireSsoPolicyRequirementFactory>();
|
||||
services.AddScoped<IPolicyRequirementFactory<IPolicyRequirement>, RequireTwoFactorPolicyRequirementFactory>();
|
||||
}
|
||||
|
||||
private static void AddOrganizationPolicyRequirements(this IServiceCollection services)
|
||||
{
|
||||
services.AddScoped<IOrganizationPolicyRequirementFactory<IPolicyRequirement>, OrganizationRequireTwoFactorPolicyRequirementFactory>();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user