mirror of
https://github.com/bitwarden/server.git
synced 2025-05-22 20:11:04 -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<IPolicyService, PolicyService>();
|
||||||
services.AddScoped<ISavePolicyCommand, SavePolicyCommand>();
|
services.AddScoped<ISavePolicyCommand, SavePolicyCommand>();
|
||||||
services.AddScoped<IPolicyRequirementQuery, PolicyRequirementQuery>();
|
services.AddScoped<IPolicyRequirementQuery, PolicyRequirementQuery>();
|
||||||
|
services.AddScoped<IOrganizationPolicyRequirementQuery, OrganizationPolicyRequirementQuery>();
|
||||||
|
|
||||||
services.AddPolicyValidators();
|
services.AddPolicyValidators();
|
||||||
services.AddPolicyRequirements();
|
services.AddPolicyRequirements();
|
||||||
|
services.AddOrganizationPolicyRequirements();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddPolicyValidators(this IServiceCollection services)
|
private static void AddPolicyValidators(this IServiceCollection services)
|
||||||
@ -38,4 +40,9 @@ public static class PolicyServiceCollectionExtensions
|
|||||||
services.AddScoped<IPolicyRequirementFactory<IPolicyRequirement>, RequireSsoPolicyRequirementFactory>();
|
services.AddScoped<IPolicyRequirementFactory<IPolicyRequirement>, RequireSsoPolicyRequirementFactory>();
|
||||||
services.AddScoped<IPolicyRequirementFactory<IPolicyRequirement>, RequireTwoFactorPolicyRequirementFactory>();
|
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