Files
server/src/Core/Services/Implementations/PolicyService.cs

62 lines
2.2 KiB
C#
Raw Normal View History

2020-01-15 09:19:28 -05:00
using System;
using System.Threading.Tasks;
using Bit.Core.Exceptions;
using Bit.Core.Models.Table;
using Bit.Core.Repositories;
namespace Bit.Core.Services
{
public class PolicyService : IPolicyService
{
private readonly IEventService _eventService;
private readonly IOrganizationRepository _organizationRepository;
private readonly IOrganizationUserRepository _organizationUserRepository;
private readonly IPolicyRepository _policyRepository;
public PolicyService(
IEventService eventService,
IOrganizationRepository organizationRepository,
IOrganizationUserRepository organizationUserRepository,
IPolicyRepository policyRepository)
{
_eventService = eventService;
_organizationRepository = organizationRepository;
_organizationUserRepository = organizationUserRepository;
_policyRepository = policyRepository;
}
public async Task SaveAsync(Policy policy)
{
var org = await _organizationRepository.GetByIdAsync(policy.OrganizationId);
if(org == null)
{
throw new BadRequestException("Organization not found");
}
2020-01-15 15:01:31 -05:00
if(!org.UsePolicies)
2020-01-15 09:19:28 -05:00
{
throw new BadRequestException("This organization cannot use policies.");
}
if(policy.Id == default(Guid))
{
policy.CreationDate = policy.RevisionDate = DateTime.UtcNow;
await _policyRepository.CreateAsync(policy);
2020-01-15 09:43:49 -05:00
await _eventService.LogPolicyEventAsync(policy, Enums.EventType.Policy_Created);
2020-01-15 09:19:28 -05:00
}
else
{
policy.RevisionDate = DateTime.UtcNow;
await _policyRepository.ReplaceAsync(policy);
2020-01-15 09:43:49 -05:00
await _eventService.LogPolicyEventAsync(policy, Enums.EventType.Policy_Updated);
2020-01-15 09:19:28 -05:00
}
}
public async Task DeleteAsync(Policy policy)
{
await _policyRepository.DeleteAsync(policy);
2020-01-15 09:43:49 -05:00
await _eventService.LogPolicyEventAsync(policy, Enums.EventType.Policy_Deleted);
2020-01-15 09:19:28 -05:00
}
}
}